1

diff 失败,因为程序集列表中的标签略有不同。

4

2 回答 2

5

-S您可以编译为目标文件,反汇编目标文件,然后比较它们,而不是直接比较该选项生成的程序集列表。(或者,您可以直接对已编译目标代码的 hexdump 进行比较,但这会更痛苦)。这摆脱了大多数标签,因此它应该更容易与 diff 进行比较。例如:

g++ file1.cc -c -o file1.o
g++ file2.cc -c -o file2.o
objdump -d file1.o > file1.s
objdump -d file2.o > file2.s
diff file1.s file2.s
于 2009-02-04T01:43:53.990 回答
0

您可以使用简单的 sed 去除标签,并将它们全部替换为“标签”或空格(并使用“diff -w”)。

这不会考虑使用不同寄存器但操作相同的地方。这可能很常见,向函数添加变量会导致寄存器在整个代码中重新分配到不直接相关的位置。

处理这种情况的唯一方法是编写一个程序来专门寻找和处理这些情况。我认为您不会找到任何适用于所有条件的“简单”解决方案。

于 2009-02-04T01:28:34.037 回答