2012-10-23 60 views
11

是否有可能獲得可執行文件的完整反彙編(可用作彙編程序的輸入)?獲取可執行二進制文件的完整反彙編

當我使用otool -tV a.out時,我只能看到文本部分。其他部分如數據不可見。

當我使用gdb時,反彙編命令需要開始和結束地址。但是我不知道如何找出二進制文件的開始和結束地址(比如a.out)。

我試圖反彙編一個可執行文件,修補程序與彙編代碼,然後重新組裝它。 這可能嗎?

如果能找出二進制文件中所有部分的名字,它也會有所幫助。

回答

0

可以使用Hopper Disassembler

報價:

Hopper是爲Mac逆向工程工具,可以讓你反彙編,反編譯和調試32/64位Intel Mac上的可執行文件。

它花費59美元,但你可以下載一個演示來檢查它是否首先完成工作。

編輯

看來你可以用otool實現這一目標還有,根據the manual

.B -d 顯示(_ \^_ DATA,_ \^_ data)部分的內容。

也看看this short blog post描述提到使用otool,以及如何使用objdump由@Sjlver提及。

+0

'otool -d'肯定顯示的數據部分。但那不是全部。如果可執行文件調用類似於:'printf(「ABCD」)'的方法,則無法在任何位置找到程序集中字符串「ABCD」的聲明。 – mynk

+0

你嘗試過Hopper嗎? – jurgemaister

+1

我正在尋找一個免費的解決方案。所以沒有給它一個鏡頭。 – mynk

-2

在Linux上,你可以嘗試使用objdump -D myprog

請注意,這隻會工作,如果程序不包含不規則的控制流。特別是惡意軟件通常被混淆,例如通過插入隨後跳過的虛假字節。

如果你的目標是這樣的程序,我聽說最好的產品之一是IDA pro

+2

這應該是一個評論,因爲它不會試圖回答這個問題。 – jww

2

在Mac上,您可以安裝(可能通過自制軟件)binutils,其中包括gobjdump。您可以在安裝後反彙編任何二進制程序。它是開放的和免費的。

+0

brew安裝binutils爲我工作 – brthornbury

+0

這應該是一個評論,因爲它沒有試圖回答這個問題。 – jww

17

嘗試使用此命令,我記得使用它是回:

otool -tvV a.out 
+1

這個命令在過去幫助過我以及'otool -IvV a.out'(顯示間接符號表)。此外還有用於_data_部分信息的_-d_開關。更多信息:'man otool' – andwagon