2010-02-27 95 views
12

有沒有什麼辦法通過使用C中的目標文件來獲取源代碼?從目標文件獲取源文件

例如我有一個源代碼simple.c

立方厘米simple.c

現在我的a.out(目標文件)。通過這個a.out我是否可以獲得源代碼? simple.c的

代碼

+0

的可能重複::-) – 2015-10-02 08:57:02

回答

8

有許多有用的工具從您的可執行文件中檢索信息。他們都沒有能夠給你回原始源代碼(正如其他一些用戶指出的那樣,C是不可能的),但是你可以嘗試一些逆向工程工具。我的首選之一是:

  • objdump的(以下簡稱 「binutils的」 軟件包的一部分)
  • HTE(Debian軟件包爲 「HT」)

與第一個其實你可以得到一切導出符號及其相關的可執行代碼(顯然這僅適用於.text部分)。第二個目標是與intel架構一起工作,但是您將能夠分析每個可執行文件並獲取有關ELF部分和符號的信息。

2

隨着逆向工程(讀取拆卸)一個可重構邏輯的,但變量名,註釋等通常會丟失。

35

不能。將一頭奶牛變成漢堡包相當容易。把漢堡變成活牛,比較困難。

+6

http://reverseengineering.stackexchange.com/大聲笑,把漢堡包變成一頭活牛。 – 2013-05-05 13:51:46

+0

也許因爲在查找之前我有直覺,這個答案實際上是有幫助的! – chet 2013-07-01 22:32:26

+2

GCC hambrger編譯器發佈了... – TheDoctor 2014-05-22 13:26:06

1

您正在尋找的程序的單詞是「disassembler」(將a.out中的機器語言轉換爲彙編語言)和「decompiler」(將彙編語言轉換爲C,如Dacav所解釋的那樣,困難和結果永遠不會令人滿意)。

但是使用帶有這些詞的網絡搜索引擎可能會產生結果。

0

如果你使用的是Linux,使用GDB

$ gdb a.out

(GDB)list