文章目录
- vs2019 - release版中_DEBUG宏生效的问题
- 概述
- 笔记
- 总结
- END
vs2019 - release版中_DEBUG宏生效的问题
概述
在加固程序,需要去掉PE的字符串表中和逻辑相关的字符串。
编译成release版后,用IDA看,还是发现有debug版才有的字符串。
那明显工程是按照debug版来编译的。但是PE的体积确实比debug版小多了。为啥还是按照debug版编译的呢?
编译工程的release版,为啥还是走的debug版的配置呢?
看工程里面的提示,为啥_DEBUG宏是亮的呢?
开始以为是VS2019的bug, 就故意将_DEBUG宏包含的库名改错,结果真走的是_DEBUG宏的判断分支。
笔记
预处理器中已经定义了NDEBUG宏
查看c++的命令行,并没有发现有_DEBUG宏,只有NDEBUG宏
查看连接器的命令行,并没有_DEBUG或者NDEBUG的宏定义
最后看前辈同学的笔记,发现是运行时库选的是Mdd引起的问题…
只要运行时库选的是/Mdd, 就隐含声明了_DEBUG宏…
改为/Md就O了。
总结
- /Mdd会隐含的定义_DEBUG宏
- 不同编译配置,要确认2个地方(预处理器的宏_DEBUG/NDEBUG; 运行时库/Mdd, /Md), 并不是编译配置的名字叫release, 就可以走release的编译配置。
- 发现不对头的地方,要解决完问题(至少要先定位问题)后,再往下走,才靠谱。避免问题积累。