-1
在MS x64調用約定中,如果我們調用Win64 API,那麼調用者應該創建一個陰影空間。在MS x64調用約定中,是否正在爲WinAPI調用創建陰影空間必要性?
不過,我創建了一個簡單的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;
}
某些APi調用會修改傳遞給它們的參數,特別是字符串緩衝區如果要保留這些值,則需要在調用這些值之前複製這些值。除非你有_explicitly_創建了一個副本,否則在反彙編中將不會看到它。你爲什麼認爲編譯器會爲你做到這一點? – 2014-12-07 17:04:19
也許顯示整個功能? – 2014-12-07 17:20:47
我不認爲問題是相同的。我只是指出文檔中是這樣說的,但編譯器生成的代碼在其他方面做不到。並試圖弄清楚這是否合法。 – 2014-12-07 17:26:53