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()

{
...
相關文章
相關標籤/搜索