2013-01-17 62 views
0

我有一個項目由多個*.cpp文件組成,我使用g ++進行編譯。 我更改了一個源文件來添加一些代碼。再次構建項目。只是爲了檢查我做如何檢查linux二進制文件是否有新添加的代碼

diff -s origbinaryfile changedbinaryfile 

這表明我的文件是相同的,因爲我已經添加了額外的代碼,並希望看到在生成的Linux程序的差異這是奇怪的。

我已經在現有的switch case代碼中添加了代碼,這是額外的案例陳述。 前,我才

switch(x) { 
case DEV1: 
... 
case DEV2: 
... 

更改一個是

switch(x) { 
    case DEV1: 
    ... 
    case DEV2: 
    ... 
    case DEV3: 

DEV1DEV2DEV3是一個enum聲明的枚舉。

如何使用nm命令或任何其他命令驗證該附加代碼是否確實存在於二進制文件中?

還有其他方法嗎?

[這聽起來很傻,但我沒有仔細,以確保我沒有做任何錯誤編譯]

回答

0

你不能。
當然,您可以反彙編您的文件並比較asm代碼,但編譯器對它進行了大量優化,您很難通過這種方法獲得任何有意義的結果。

或者,您可以使用cmp命令比較您的文件,該命令適用於二進制文件,並且可能比diff更合適。

但是,二進制差異不是100%保證任何代碼實際上已更改。編譯器通常會添加調試信息並編譯時間戳,因此在一行中編譯兩次的相同代碼將導致兩個具有不同字節的二進制文件。

+0

如果我添加一個僞代碼,如say int dummy = 0xDEADBEEF; dummy = dummy或一些這樣的sentinel數據或代碼,它們將以nm或字符串輸出顯示,而編譯器不會優化它 – goldenmean

+0

可能工作。特別是如果不考慮性能/大小,並且可以禁用編譯器優化。 –

相關問題