比较两个二进制文件

Ben*_*ird 5 binary diff assembly decompiling objdump

如何区分两个二进制文件?

我有一个程序的两个版本,版本 1 和版本 2。我在两个版本之间做了少量更改,但遗憾的是没有定期备份,所以虽然我已经获得了版本 2 的源代码,我只有版本 1 的二进制文件。我需要找出我在两个版本之间究竟更改了什么。我尝试创建两个版本的 objdump,然后使用 diff 来查找更改,但这不起作用,因为偏移量不同,因此 diff 认为几乎每一行都已更改。

例如,一行可能bgez v0,4074d0<daemonize+0xd4>在版本 1 中,bgez v0,4073d4<daemonize+0xd4>在版本 2 中。这些是直接从转储文件中复制的 - 您可以看到这两行执行相同的操作,但 diff 无法区分它们。文件太大了,我无法手动检查每一行;如何检测功能更改,同时忽略偏移差异?

Ben*_*ird 4

我最终通过删除原始指令和偏移标记解决了这个问题,所以我只有汇编,然后使用 sed 删除每个数字,并过滤 diff 以忽略仅由 1 行组成的更改。我有点惊讶它有效,但它确实有效。