web-dev-qa-db-ja.com

「選択したフレームのプログラムカウンタを含む関数がありません」と表示されたときにGDBにコードを逆アセンブルさせるにはどうすればよいですか?

「選択したフレームのプログラムカウンタを含む関数がありません」と表示されたときにGDBにコードを逆アセンブルさせるにはどうすればよいですか?

絶対アドレス0x00402200から始まるプログラムをデバッグすると、このアドレスでコードを逆アセンブルしようとすると、次の出力が得られます。

[New Thread 65212.0x10378]

Breakpoint 1, 0x00402200 in ?? ()
(gdb) stepi
0x00402202 in ?? ()
(gdb) stepi
0x00402207 in ?? ()
(gdb) stepi
0x0040220a in ?? ()
(gdb) stepi
0x0040220f in ?? ()
(gdb) disassemble
No function contains program counter for selected frame.
(gdb) stepi
0x00401000 in start ()

デバッグされるファイルは、教育目的(リバースエンジニアリング)用のWin32PEです。

GDBにアドレスで逆アセンブルを開始するように指示する方法はありますか?それ以外の場合、私の代替手段(つまり他のツール)は何ですか?

11
Shuzheng

disassembleのドキュメント:(gdb) help disassembleは言う:

Disassemble a specified section of memory.
Default is the function surrounding the pc of the selected frame.
...
With a single argument, the function surrounding that address is dumped.
Two arguments (separated by a comma) are taken as a range of memory to dump,
  in the form of "start,end", or "start,+length".

したがって、あなたの場合、それらはプログラムカウンタ(PE)を取り巻く関数ではないため、次のような2つの引数形式を使用する必要があります。

disassemble 0x00402200, +16またはdisassemble 0x00402200, 0x00402210

お役に立てれば!

13

私はこれがあなたの質問に直接答えないことを知っています、しかしそれはすでに答えられているので...

set disassemble-next-line onを使用して次の命令を表示するようにGDBに指示できます。

6
monkeyman79