<分区>
在 MS x64 调用约定中,我读到如果我们调用 Win64 API,调用者应该创建一个影子空间。
但是我创建了一个简单的 C++ 程序并调用了 MessageBox,在反汇编之后我看到了:
00007FF614FC2AD9 mov r9d,136h
00007FF614FC2ADF lea r8,[__xt_z+150h (07FF614FD5BF0h)]
00007FF614FC2AE6 lea rdx,[__xt_z+170h (07FF614FD5C10h)]
00007FF614FC2AED xor ecx,ecx
00007FF614FC2AEF call qword ptr [__imp_MessageBoxW (07FF614FDF6C0h)]
00007FF614FC2AF5 mov dword ptr [msgboxID],eax
我没有看到任何影子空间预留。(甚至在此处未显示的前面的说明中也没有)我错过了什么?
编辑:这是上面的 C++ 代码:
#include <Windows.h>
int main()
{
int msgboxID = MessageBox(
NULL,
(LPCWSTR) L"Resource not available\nDo you want to try again?",
(LPCWSTR) L"Account Details",
MB_ICONWARNING | MB_CANCELTRYCONTINUE | MB_DEFBUTTON2
);
return 0;
}