0

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

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

4

2 回答 2

2

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

您可以尝试将新旧 exe 都分解为 asm 文本,然后使用文本差异工具比较 asm 文本之间的差异。这将有助于减少创建巨大差异日志的小更改的差异工具噪音,因为小的更改会导致所有全局偏移量在其之后发生变化。反汇编的 asm 文本应该具有较少的全局偏移依赖关系。

硬道理是,如果您没有了解 Intel asm 指令和 Delphi 编译器代码生成模式的人,那么即使这个反汇编步骤也不太可能产生很多有用的信息来帮助您理解为什么这两个 exe 的大小不同。在一个 exe 大小为 500k 的重要应用程序中,使用不同的编译器选项进行编译可能会导致 10k 的差异,例如使用堆栈帧与删除堆栈帧,或者在调试模式与非调试模式下编译。

即使在新的 exe 中添加对 Writeln() 的引用也可能占到 10k 的大部分 - RTL 中的文本 IO 例程是智能链接到您的 exe 的,除非有人使用它,并且触摸 Writeln 会触及整个支持例程森林在 RTL 内。如果旧的 exe 不使用 Writeln 而新的 exe 使用,那么新的 exe 将携带 Writeln 支持例程,我隐约记得重量为“超过几 K”。

于 2012-08-07T00:03:02.917 回答
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下载

于 2012-08-07T10:28:46.130 回答