2012-07-13 60 views
-5

我想在二進制文件中顯示彙編指令,但我該怎麼辦?
我如何知道MOV(例如)的參數是指針還是數字?
這是用於教育目的,我知道有GDB和其他工具。在二進制文件中顯示彙編的C程序

在此先感謝!

+0

上我肯定會看一些反彙編程序的源代碼以獲得更好地瞭解這是如何完成的。 x86非常複雜,涉及很多,但仍然可以做,只是準備好處理大量邊緣案例。 – sean 2012-07-13 13:00:50

+0

處理器可以通過查看操作碼來判斷。在開始使用x86之前,我將從一些其他指令集開始。 (硬件與它無關) – 2012-07-13 13:47:18

回答

1

您的意思是一個disassembler?那麼你有很多的工具,挑選,如:

  • OllyDbg的
  • IDA
  • objdump的

如果要將此集成到現有的程序,那麼你就需要拆卸發動機如BeaEngine或diStorm。

+0

感謝您的回覆,我認爲beaengine是我正在尋找的東西,但我如何使用它? gcc -g -I include -L lib/Linux.gnu.Debug -l BeaEngine_s_d disass_test.c使用編譯的庫幷包含beaengine頭文件,但是我仍然有:未定義的對BeaEngineVersion的引用,我錯過了什麼?再次感謝 – 2012-07-14 11:56:44

1

您可以利用許多內部binutils圖書館像BFD操作碼

BFD二進制文件描述符庫,做低級別的操作。

操作碼庫用於組裝和拆卸機器說明。

0

您可能會發現從源到emulator有用的信息,它具有執行模擬指令之前執行相同的解碼任務。

我強烈建議先針對一小部分,最好是裸8086,然後添加擴展他們在歷史上發生過相同的序列。這將幫助您在查找更多信息時決定要忽略哪些內容。以免淹沒。

對於MOV操作,操作數被第二字節中,MOD-REG-REG/MEM字節指定(在最一般的形式)。操作數幾乎總是寄存器或內存位置(指針,可能使用「索引寄存器」即時構建)。只有少數的指令接受文字操作數(數字),僅作爲,他們都清楚地標明在該表中,1979 8086 Manual,第180頁。