【发布时间】:2019-09-18 23:24:36
【问题描述】:
我正在用 Nasm 编写一个程序,我发现虽然像 CreateProcessA 或 GetModuleFileNameA 这样的 winapi 函数在完成后会从堆栈中弹出它们的参数,但 printf 并没有这样做。
这是有原因的吗?更重要的是:还有其他不会从堆栈中弹出元素的 winapi 函数吗?因为我的程序行为不端,我想确保它不是由未弹出的值引起的。
【问题讨论】:
-
假设 32 位代码 - 因为
printf不是 WinApi 的一部分(它使用 STDCALL 调用约定,该函数会清除堆栈上的参数)。printf它是 MSVC 运行时库的一部分,默认调用约定是 CDECL @ .附加信息在这里:en.wikipedia.org/wiki/X86_calling_conventions#cdecl
标签: winapi assembly x86 calling-convention msvcrt