如何比较delphi exe

时间:2012-08-06 15:42:03

标签: delphi exe

我有两个delphi生成的同一个项目的exe。一个exe很久以前生成,第二个exe是使用当前源代码生成的。现在这两个exe之间的大小存在差异。有没有办法找出大小不同的原因,并找出错误地添加到新exe的任何新功能的方法。因为exe是二进制的。我们可以转换成任何可读格式吗?还是其他任何提示/评论?谢谢你的帮助。

注意:我没有生成第一个exe的源代码。所以无法比较源代码。 :(

2 个答案:

答案 0 :(得分:2)

有些工具可以反汇编本机Intel x86或x64可执行文件并吐出文本汇编程序指令,但由于在编译为本机代码时保留了原始源代码中的非常少的文本,因此这个反汇编程序生成的文本很可能是机器生成的字母汤。机械上正确但人性化的胡言乱语。

您可以尝试将新旧exe解压缩到asm文本,然后使用文本差异工具来比较asm文本之间的差异。这将有助于减少一个小变化的差异工具噪声,从而产生巨大的差异记录,因为小变化会导致所有全局偏移在其后发生变化。反汇编的asm文本应该具有更少的全局偏移依赖性。

事实上,如果你没有一个人理解英特尔asm指令和Delphi编译器代码生成模式,那么即使这个反汇编步骤也不太可能产生很多有用的信息来帮助你理解为什么这两个exes是不同的尺寸。在exe文件大小为500k的非平凡应用程序中,使用不同的编译器选项进行编译可能会产生10k的差异,例如堆栈帧与删除堆栈帧,或者在调试模式和非调试模式下编译。

即使在新的exe中添加一个引用到Writeln()也可以占到10k的大部分 - RTL中的文本IO例程是从你的exe中智能链接的,除非有东西使用它,并且触摸Writeln触及整个森林RTL中的支持例程。如果旧的exe不使用Writeln但是新的exe没有,那么新的exe将带有Writeln支持程序,我依旧记得它在“超过几K”时称重。

答案 1 :(得分:1)

您可以使用http://corelabs.coresecurity.com/index.php?module=Wiki&action=view&type=tool&name=turbodiff中的 turbodiff 来查看两个可执行文件之间的差异。当然,您还需要 IDA 5.0 的免费软件版本,您可以从http://www.hex-rays.com/products/ida/support/download_freeware.shtml下载