【发布时间】:2011-06-14 15:35:25
【问题描述】:
如何区分两个二进制文件?
我有一个程序的两个版本,版本 1 和版本 2。我在两个版本之间进行了少量更改,但遗憾的是没有定期备份,所以虽然我有源对于第 2 版,我只有第 1 版的二进制文件。我需要找出我在两个版本之间进行了哪些更改。我尝试创建两个版本的 objdump,然后使用 diff 查找更改,但这不起作用,因为偏移量不同,因此 diff 认为几乎每一行都已更改。
例如,版本 1 中的一行可能是 bgez v0,4074d0<daemonize+0xd4>,版本 2 中可能是 bgez v0,4073d4<daemonize+0xd4>。这些是直接从转储文件中复制的 - 您可以看到这两行执行相同的操作,但 diff 不能区分它们。文件太大,我无法手动检查每一行;如何在忽略偏移差异的情况下检测功能更改?
【问题讨论】:
-
这听起来像是一个现实世界的 NP 完全问题。 ;-)
-
不是 NP 完全的,因为它可以通过 DFA 解决。
-
NP和DFA是什么意思?
标签: assembly binary diff decompiling objdump