1

これで、EIPレジスタから機械命令のアドレスを取得しました。このマシン命令は、メモリの特定の領域の値を変更する可能性があります。必要ですが、このメモリのアドレスを取得できません。

もちろん、マシン命令のアドレスからデータを読み取ることはできますが、内容は0x8b0c4d8b ......のようなマシン命令であり、読み取れません(gdbのようなデバッグツールは使用できません)。

1つのマシン命令が書き込むアドレスを取得するにはどうすればよいですか?

4

1 に答える 1

1

EIPが指すマシンコードを知っていて、それを逆アセンブルしたい場合は、次のようにします(例を挙げます0x8b0c4d8b)。

#バイナリファイルを作成
$ echo -en "\ x8b \ x0c \ x4d \ x8b"> foo.bin

#分解する
$ objdump -D -b binary -m i386 foo.bin

foo.bin:ファイル形式のバイナリ


セクション.dataの逆アセンブル:

00000000:
   0:8b .byte 0x8b
   1:0c4dまたは$0x4d、%al
   3:8b .byte 0x8b

したがって、この場合、メモリの場所は変更されませんが、変更された場合は、アセンブリコードから簡単に確認できます。

編集:コメントから、これをプログラムで実行したいようです。udis86を見てください。命令のオペランドを調べることができます。ARMについては、武装解除を参照してください。

于 2012-04-27T08:22:01.480 に答える