2016-04-02 62 views
-4

我有一個使用簡單c程序的gcc編譯的二進制文件。 我正在編寫自己的拆卸器,能夠從ELF文件中讀取ELF頭和其他頭文件。如何從操作碼/機器碼獲取組裝指令或助記符?

我在閱讀ELF二進制文件中的「.text」部分。並試圖將opecode轉換成助記符/彙編指令。

如何將原始操作碼/機器代碼轉換成助記符/彙編指令? C源代碼是:

#include <stdio.h> 

int main() 
{ 
    int i = 10; 
    int j = 22 + i; 

    return 0; 
} 

以下是我讀ELF文件後,已接收的原始操作碼的例子:

55 ffffff89 ffffffe5 ffffff83 ffffffec 20 ffffffc7 45 ffffffec 3 ffffffc7 45 
fffffff0 41 ffffffc7 45 fffffff4 8 ffffffc7 45 fffffff8 21 ffffff8b 45 
ffffffec ffffff83 ffffffc0 16 ffffff89 45 fffffffc ffffffb8 ffffffc9 ffffffc3 
+0

您的反彙編程序可能需要包含所有操作碼的列表以及它們對應的指令,還需要解析所有前綴以及ModR/M和SIB字節。您可以在[Intel手冊](http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html)中找到所有這些信息。 – Michael

+3

您需要修復代碼,以便在打印它們之前不將8位值擴展爲32位。 –

+2

使用**'unsigned char' **來讀取操作碼值,並用'%02x'打印。 –

回答

2

如果你有GNU binutils的安裝(你可能有) ,你可以使用

objdump --disassemble elf-file 

如果問題是「爲什麼我會得到這些ffffff數字」,那麼你需要向我們展示代碼產生數字。很有可能你的簽名擴展問題從int到int。

+2

當然[他們有](http://stackoverflow.com/questions/36370689/what-numeric-values-defines-in-dissembled-of-c-code) –