2013-01-25 55 views
2

現在我從ARM機器的內存中獲取了一些內容。事實上,他們是ARM指令,但我不知道如何將這些十六進制數轉換爲ARM指令。我現在所擁有的是「arm-elf-objdump」可以讀取.bin文件並反彙編.bin文件中的內容。但我只是有不同於二進制文件的十六進制數字的文本。我怎樣才能做到這一解碼?關於解碼從ARM內存轉儲的數據的問題

E.g.

800104:  e3a00000  mov  r0, #0 ; 0x0 
    800108:  e59f104c  ldr  r1, [pc, #76] ; 80015c <_jump_main+0x4> 
    80010c:  e59f204c  ldr  r2, [pc, #76] ; 800160 <_jump_main+0x8> 

其實「e3a00000」的意思是「mov r0,#0」。應該有一個工具來做到這一點。 任何人都可以給我一些建議?

+1

你有說明,因爲接下來的兩個是加載註冊。你錯過了什麼? –

+0

這是現有.bin文件的分析結果。我現在擁有的是一個可以從內存中轉儲內容的程序,有時我猜我得到的內容是代碼,所以我需要一個程序來幫助我分析內存中的十六進制數。 – qiuhan1989

回答

1

將您的文本文件轉換爲二進制文件,即使您必須自己編寫腳本/應用程序,然後使用objdump進行反彙編,這應該是微不足道的。

objdump -D -b binary -marm <binary_file> 

但是也小心指令編碼,如果爲thumb編碼選擇arm你會得到完全不同的結果。請參閱objdump manual關於--disassembler-options=force-thumb的部分內容。

+0

現在將文本文件轉換爲二進制文件是問題。我知道命令「objdump」,實際上我使用了arm-elf-objdump。問題是,例如,「e3a00000」的意思是「mov r0,#0」,但是當我使用fwrite將e3a00000放入二進制文件中時,我無法得到正確的指令 – qiuhan1989

+0

抱歉,您給我的鏈接不是我想要的。 ..這種翻譯不像使用ASCII或其他東西直接編碼單詞。 ARM是RISC,每8個十六進制數就意味着一條指令。我已經知道翻譯二進制文件的命令,我現在需要的是將十六進制正確翻譯爲二進制文件 – qiuhan1989

1

您正在查找的工具稱爲「反彙編程序」。正如你發現的,一個常見的就是GNU objdump。我不確定它是否可以處理文本輸入,但如果需要,您可以編寫一個簡單的程序將其轉換回二進制文件。

+0

其實我的問題是我不知道如何正確地將文本轉換爲二進制文件。我嘗試了幾種方法,但不能得到正確的結果...例如,我有一個內容爲「e3a00000」的文本,在ARM中,它表示「mov r0,#0」,當我試圖轉換包含「e3a00000」到二進制文件,然後使用arm-elf-objdump來分析二進制文件,我得到了錯誤的輸出... – qiuhan1989

+0

你使用'objdump -D'嗎? –

+0

當然我用... – qiuhan1989

0

好的,當我完成這個任務時,我會回答我自己的問題,所以也許有人可以從我的答案中獲得幫助。

我的問題由兩部分組成: 第一個問題是我不清楚「arm-elf-objdump」是如何工作的。在我的情況下,我使用

arm-elf-objdump -D -b binary -marm binaryfile.dat 

如果binaryfile.dat是正確的,這將有助於反彙編ARM代碼。

第二個問題是如何使binaryfile.dat正確。 例如,

800104:  e3a00000  mov  r0, #0 ; 0x0 

當我甩了十六進制數e3a00000從RAM,其實我幾乎得到了指令。然後我使用

const uint8_t num=0xe3a00000; 
fp = fopen("binaryfile.dat", "wb+"); 
fwrite(&num, sizeof(const uint8_t), 1, fp); 

這將在binaryfile.dat中寫入「e3a00000」,它是一個二進制文件(在Linux中)。然後我用

hexer binaryfile.dat 

檢查,發現它是正確的,那麼使用

arm-elf-objdump -D -b binary -marm binaryfile.dat 

我得到了什麼是

> arm-elf-objdump -D -b binary -marm binaryfile.dat 
binaryfile.dat:  file format binary 

Disassembly of section .data: 

0000000000000000 <.data>: 
0: e3a00000 mov r0, #0 ; 0x0 

這一切,我在這方面並感謝初學者爲所有幫助過我的人。如果你發現一些問題,請讓我知道:)