2

これで、ARM マシンのメモリからコンテンツがダンプされました。実際にはARM命令ですが、これらの16進数をARM命令に変換する方法がわかりません。私が今持っているのは、「arm-elf-objdump」が.binファイルを読み取り、.binファイルの内容を逆アセンブルできることです。しかし、バイナリファイルとは異なる16進数のテキストしかありません。このデコードを行うにはどうすればよいですか?

例えば

  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」を意味します。これを行うためのツールがあるはずです。誰でも私にいくつかの提案をすることができますか?

4

3 に答える 3

1

お探しのツールは「逆アセンブラ」と呼ばれるものです。あなたが見つけたように、一般的なものはGNU objdumpです。テキスト入力を処理できるかどうかはわかりませんが、必要に応じてバイナリに変換する簡単なプログラムを作成できます。

于 2013-01-25T00:37:21.897 に答える
1

テキスト ファイルをバイナリ ファイルに変換します。スクリプトやアプリケーションを自分で作成し、objdump を使用して逆アセンブルする必要があります。

objdump -D -b binary -marm <binary_file>

ただし、命令のエンコーディングにも注意してください。エンコーディングを選択すると、大きく異なる結果が得られarmますthumbについては、 objdump のマニュアル部分を参照してください--disassembler-options=force-thumb

于 2013-01-25T08:16:59.953 に答える
0

OK、このタスクを完了したので、誰かが私の答えから助けを得ることができるように、私は自分の質問に答えます。

私の問題は2つの部分で構成されています。1つ目は、「arm-elf-objdump」がどのように機能するかがはっきりとわからないことです。私の場合、

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

これは、binaryfile.datが正しい場合にARMコードを逆アセンブルするのに役立ちます。

2番目の問題は、binaryfile.datを正しくする方法です。例えば、

800104:       e3a00000        mov     r0, #0  ; 0x0

RAMから16進数e3a00000をダンプしたとき、実際にはほとんど命令を受け取りました。それから私は使用します

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

これにより、バイナリファイル(Linuxの場合)であるbinaryfile.datに「e3a00000」が書き込まれます。それから私は使用しました

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

それがすべてです、私はこの分野の初心者であり、私を助けてくれたすべての人々に感謝します。何か問題を見つけたら、私に知らせてください:)

于 2013-01-29T00:14:02.390 に答える