首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >vc2017编译清净的函数体,不让编译器在函数头尾乱加东西

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

作者头像
战神伽罗
发布2019-07-24 16:20:58
发布2019-07-24 16:20:58
5380
举报

默认生成的project会将编译出的函数结尾加上类似于以下的东西:

代码语言:javascript
复制
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)

代码语言:javascript
复制
// 作用: 去掉函数的栈帧代码,纯属吹毛求疵:-)

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

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

{
...
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档