繁体   English   中英

如何比较delphi exe

[英]how to compare delphi exe

我正在使用同一项目的两个delphi生成的exe。 一个exe是很久以前生成的,第二个exe是最近使用当前的源代码生成的。 现在,这两个exe的大小有所不同。 有没有办法找出大小不同的原因,以及是否有误将新功能添加到新exe的方法。 由于exe是二进制文件。 我们可以转换成任何可读的格式吗? 或其他任何提示/评论? 感谢帮助。

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

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

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

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

即使在新exe中添加对Writeln()的引用也可以解决这10k的大部分问题-RTL中的文本IO例程是从exe智能链接的,除非有人使用它,并且触摸Writeln会涉及整个支持例程森林在RTL中。 如果旧的exe不使用Writeln,而新的exe则使用,则新的exe将带有Writeln支持例程。

您可以使用来自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下载该版本

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM