如何比较两个相似的g ++ -S汇编输出?

时间:2009-02-04 01:12:35

标签: assembly diff g++

diff失败,因为汇编列表中填充了略微不同的标签。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

处理这个问题的唯一方法是编写一个程序来专门寻找和处理这些案例。我不认为你会找到任何在所有条件下都能运作的“简单”解决方案。