如果使用调试编译器设置编译exe文件,是否更容易逆向工程或破坏De
如果我在发布程序之前意外忘记切换到发布配置,那么对我的代码进行反编译或反向工程更容易吗?
例如,如果我不小心使用以下调试编译器选项: 1. Compiling: - StackFrames = True 2. Debugging - Debug information = Debug information - Local Symbols = True - Symbol Reference info = Reference Info 3. Linking - Map File = Detailed 我已经阅读了帮助,除了地图文件也以某种方式与二进制文件一起发布之外,我可以告诉它没有多大区别,所以我想知道如果有人有地图文件会有多大差异? 解决方法
让我们逐一澄清你提到的选项:
> Compiling > Stack frames:仅需要调试堆栈帧(并且可能生成错误报告的堆栈跟踪,如@DavidHeffernan在评论中所述).即使您在发布版本中启用它,这对逆向工程也没有多大帮助. 还有生成远程调试符号的选项,如@dummzeuch所指出的: > Linker > Include remote debug symbols:此选项告诉链接器生成.rsm文件,它是Delphi等效于Microsoft的.pdb Program Database Files.如果分发此文件,您可能会遇到麻烦,因为可以轻松调试应用程序,可视化符号,功能和程序,单步代码等. 另外,我认为重要的是说.map文件不等同于.pdb文件.对于Delphi Win32,.rsm是等效的.我多年没有使用Delphi,但据我记忆,没有Delphi Win32版本可以生成.pdb文件.只有Delphi for .NET才能. 那就是说,让我们回到你的问题:
使用.map文件可以更容易地进行逆向工程.我见过一些工具,甚至可以将.map文件转换为.dbg文件,以便与调试器一起使用.
好吧,Debug构建的一个重要(也许是最引人注目的)特性是更大的exe大小.这主要是因为在Debug配置中,编译器禁用了许多代码优化,以便于代码调试.还有许多调试条件代码(例如:在{$IFDEF DEBUG}指令内)链接到exe. 作为副作用,Debug构建生成的代码更容易进行逆向工程,因为它更容易理解. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |