2014-12-07 58 views
-1

如果我在一個目錄中有3-4個或更多的.c文件,並且我編譯了其中一個文件來執行a.out。有沒有辦法通過命令找出這個可執行文件是從哪個c文件中獲得的?如何找到獲取它的可執行文件的.c文件?

+0

你怎麼知道它不是由它們所有*構建的?或者他們都不是? – 2014-12-07 10:12:47

+0

使用編譯器的所有不同選項編譯所有.c文件,然後將生成的可執行文件與第一個a.out文件進行比較。 – pmg 2014-12-07 10:12:54

+2

Wby不運行程序並觀察其行爲?那麼您可以確定原始C代碼 – 2014-12-07 10:12:59

回答

1

不,不是直接。該文件剩下的唯一元數據是其ELF headers,它不包含從其編譯的.c文件的名稱。如果他們這樣做會有問題:如果它來自多個.c文件會怎麼樣?它是否包含系統中與鏈接的二進制文件的路徑?如果重命名.c文件會發生什麼?重命名.c文件需要重新編譯嗎?除此之外,還有很多方法可以解決這個問題:運行可執行文件並將其與.c文件進行比較,或者嘗試編譯每個.c文件並比較兩個可執行文件(假設您知道什麼標誌着可執行文件被編譯)。

1

我認爲一般來說,沒有辦法從可執行文件的源文件中找出(確切地)。您可以查看可執行文件的行爲,並說「aha,它來自該文件」,但這不是絕對的,因爲可以有多個版本的源文件。其他參數已經被提供,例如編譯源文件和比較二進制文件,這要求所有編譯器選項設置相同(並且要求al庫也相同)。

最後,您可以查看二進制文件中的字符串,並將它們與源文件中的字符串進行比較。

相關問題