在 MS x64 调用约定中,正在为 WinAPI 调用创建影子空间必要性
In MS x64 Calling convention, is creating a shadow space necessity for WinAPI calls?
在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 availablenDo you want to try again?",
(LPCWSTR) L"Account Details",
MB_ICONWARNING | MB_CANCELTRYCONTINUE | MB_DEFBUTTON2
);
return 0;
}
实际上它确实会产生阴影空间。但在通话一开始。(未在堆栈上方显示)我以为它会在调用之前创建阴影空间,显然情况并非如此。所以我将关闭这个问题并打开一个更合适的问题。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在c++类上调用void函数
- 为什么 std::unique 不调用 std::sort?
- 调用专用模板时出错"no matching function for call to [...]"
- 选择要调用的构造函数
- C++为什么尽管我调用了void函数,它却不起作用
- 构造函数正在调用一个使用当前类类型的函数
- 变量没有改变?通过向量的函数调用
- 没有为自己的结构调用列表推回方法
- 调用'begin(int [n])'没有匹配函数
- 什么时候调用析构函数
- 如何用参数值调用函数(仅在运行时已知)
- 琐碎的破坏性和调用破坏者的必要性
- 在 MS x64 调用约定中,正在为 WinAPI 调用创建影子空间必要性