在反汇编中release与debug版本的区别

笔者的测试环境是vs2017,我们先来看一下ReleaseDebug的这两种配置方案有啥区别
在反汇编中release与debug版本的区别
很明显区别都是优化和调试方面的区别。

顾名思义,Debug主要是为我们在编写程序的时候便于调试程序而配置的方案,而Release主要是为程序发布使用的方案,发布版主要是为用户体验,所以着重于代码的质量以及运行效率等等

在反汇编中release与debug版本的区别
因为该IDE集成的是MSVC,MSVC是微软Windows平台Visual Studio自带的C/C++编译器,上面一连串的参数即是cl命令的参数选项.
在反汇编中release与debug版本的区别
我们再来看一下两个方案下编译出的可执行文件的PE结构,

在反汇编中release与debug版本的区别
很明显,右边Debug版本的多了很多调试信息的节区,而Release版本只保留了.text,.data等这样程序基本运行所必须的关键节区信息。
在反汇编中release与debug版本的区别
在反汇编中release与debug版本的区别
所以必然debug版本的程序比release的程序大很多
我们用最直观的方式,足足大了4倍多。
在反汇编中release与debug版本的区别
下面我们用vs2017调试一下
在反汇编中release与debug版本的区别
用ida打开看一下
在反汇编中release与debug版本的区别
可以看到在Debug模式下有完成的调试信息,以及完整的堆栈框架便于我们分析
在反汇编中release与debug版本的区别
但是Debug版本在ida分析就很混乱,猜想一下或许是因为通常我们分析都是Release版本吧,因为没有一款产品是发布Debug版本的.
在反汇编中release与debug版本的区别