在VS2017下编译此函数,查看汇编:
可以看到,在默认的编译参数下,VS2017引入了ebp并入栈,因此输入参数的偏移量由4变成了8。
关闭VS2017编译器中创建帧指针的功能:
这里/Oy参数默认是不启用的,在此将之改为是。
再次编译并查看汇编:
比较原汇编:
; void __stdcall SetInternalErrorHandler(fnCallback113)
0x30001020 mov eax, dword [esp + 4]
0x30001024 mov dword [0x30004150], eax
0x30001029 ret 4
基本一致。