在MS x64调用约定中,是否为WinAPI调用创建了影子空间必需品?

时间:2014-12-07 16:36:04

标签: c++ assembly 64-bit win64

在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;
   }

1 个答案:

答案 0 :(得分:1)

实际上它确实会生成阴影空间。但是在通话的最开始。(未显示在堆栈上方)我认为它会在呼叫之前创建阴影空间,显然情况并非如此。 所以我将关闭这个问题,并打开一个更合适的问题。