vc2017编译清净的函数体,不让编译器在函数头尾乱加东西

默认生成的project会将编译出的函数结尾加上相似于如下的东西:c++

00412FE8  push        edx 
00412FE9  mov         ecx,ebp
00412FEB  push        eax 
00412FEC  lea         edx,[ (413000h)]
00412FF2  call        @ILT+135(@_RTC_CheckStackVars@8) (41108Ch)
00412FF7  pop         eax 
00412FF8  pop         edx 
00412FF9  pop         edi 
00412FFA  pop         esi 
00412FFB  pop         ebx 
00412FFC  mov         esp,ebp
00412FFE  pop         ebp 
00412FFF  ret

去掉的方法以下:安全

项目-属性-c/c++ - 代码生成:函数

基本运行时检查 : 默认值code

安全检查: 禁用安全检查(/GS-)unicode

 

再编译出来就是干净的函数体了!编译

另外,为了兼容GCC,能够设置:属性-常规-字符集:未设置(默认:unicode)class

 

// 做用: 去掉函数的栈帧代码,纯属吹毛求疵:-)

// 即函数开头的push ebp / mov ebp, esp和结尾的pop ebp / retn

__declspec(naked)   //vc2017 x64不支持,只支持x86
void main()

{
...
相关文章
相关标签/搜索