0

一部のアセンブラコマンドの16進表現を表示するにはどうすればよいですか?

これはgdbからのものです:

0x8048395 <simple+1>            mov    %esp,%ebp
0x8048397 <simple+3>            mov    $0x1,%eax
0x804839c <simple+8>            pop    %ebp                               
0x804839d <simple+9>            ret

「simple」はこのプログラムのc関数です。私は試した

dump ihex value dump.hex simple

その結果、

:020000040804EE
:0183940000E8
:00000001FF

dump ihex memory dump.hex 0x8048394 0x804839d

その結果、何かが異なります

:020000040804EE
:098394005589E5B8010000005D07
:00000001FF

なぜ違うの?それらの1つは正しいですか?

4

1 に答える 1

4

実際のバイトを表示するには、次のように簡単に使用できます。

disas /r simple

生のバイナリにファイルにダンプしたい場合の

dump binary memory file.bin 0x8048394 0x804839d

ihexフォーマットはIntel Hex フォーマットで、見た目ほど単純ではありません。

また、使用dump valueすると、関数自体のコードではなく、関数のアドレスの値がダンプされます。それが で行われることdump memoryです。

UPDATE : 実際には、 を実行するdump <format> value dump.hex simpleと の内容がダンプsimpleされますが、関数値をダンプする方法がわからないため、値であるかのようにダンプされcharます。つまり、関数の最初のバイトがダンプされます。関数のアドレスをダンプしたい場合は、次のようにしますdump <format> value dump.hex &simple

于 2012-06-24T18:13:43.487 に答える