2009-02-04 54 views

回答

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 
0

您可以用一個簡單的sed去除標籤,並用「標籤」或空格替換它們(並使用「diff -w」)。

這將不會說明使用了不同寄存器但操作相同的地方。這可能非常常見,向函數添加變量可能會導致在與代碼無關的位置重新分配寄存器。

處理這個問題的唯一方法是編寫一個程序來專門查找和處理這些情況。我認爲你不會找到任何可以在所有條件下工作的「簡單」解決方案。