vc2017編譯清淨的函數體,不讓編譯器在函數頭尾亂加東西 原

默認生成的project會將編譯出的函數結尾加上類似於以下的東西:

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++ - 代碼生成:

基本運行時檢查 : 默認值

安全檢查: 禁用安全檢查(/GS-)

 

再編譯出來就是乾淨的函數體了!

另外,爲了兼容GCC,可以設置:屬性-常規-字符集:未設置(默認:unicode)

 

// 作用: 去掉函數的棧幀代碼,純屬吹毛求疵:-)

// 即函數開頭的push ebp / mov ebp, esp和結尾的pop ebp / retn

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

{
...

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章