2009-11-02 22 views
1

G'day,Solaris cc是否嵌入可執行不同信息的不同編譯?

這已經問過VC++,但我對Solaris的答案感興趣。使用命令

#include <stdio.h> 

int main() { 
    printf("Hello world!\n"); 
    return 0; 
} 

我編譯和鏈接下面的瑣碎的C代碼

cc -o hello1 hello.c 

這做幾次獲得可執行文件hello2和hello3。這是在同一臺機器上使用相同的編譯器,並在不同的時間在同一個目錄中完成的。

可執行文件的大小相同,但diff會將二進制文件報告爲不同的文件,並且cmp -l會對一長串不同的位置發瘋。

任何人都知道在可執行文件中嵌入了什麼cc以使它們不同?時間戳?

編輯:剝離可執行文件,如下面的Chris所示,使diff將兩個可執行文件報告爲相同。

歡呼聲,

+0

看ELF也許吧。 – LB40 2009-11-02 18:03:13

+1

相當晚的評論,但請參閱http://stackoverflow.com/a/36591217/211665更準確的解釋和方法來找出實際的差異。 – jlliagre 2016-04-13 10:20:40

+0

感謝指針@ jlliagre – 2016-04-14 09:04:25

回答

2

如果使用「OD -c」上的兩個二進制文件,然後使用並排側diff程序,你可以得到一個想法是什麼的差異。在過去,當我調查了Sun編譯器時,它通常是一個日期字符串。您也可以嘗試剝離可執行文件,以查看是否刪除了與其不同的ELF部分。

+0

@Chris,歡呼聲。我會嘗試剝離可執行文件。 – 2009-11-02 23:03:50

+0

@克里斯,謝謝。我已經更新了這個問題,說剝離可執行文件有所不同。 – 2009-11-10 14:29:42

1

如果您採用完全相同的源代碼並使用Sun的編譯器編譯兩次,您將得到兩個精確二進制重複文件而不是。會有細微的差異。據我所知,它主要是歸結爲日期/時間問題。

相關問題