2016-08-18 11 views
4

「選択したフレームのプログラムカウンタが関数に含まれていません」と表示された場合、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() 

デバッグされているファイルは、教育目的のためのWin32 PEです(リバースエンジニアリング)。

GDBにアドレスで逆アセンブルを開始するよう指示する方法はありますか?そうでなければ、私の選択肢(他のツール)は何ですか?

+1

'逆アセンブル0x402202、+ 20'? – EOF

+0

'layout asm' /' layout reg'がいいです。 –

答えて

4

disassembleのドキュメント:彼らは、プログラムカウンタ(PE)を囲む何も機能しないため

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". 

だから、あなたのケースでは、あなたのような、2つの引数の形式を使用する必要があります。(gdb) help disassembleは、と言っています:

disassemble 0x00402200, +16またはdisassemble 0x00402200, 0x00402210です。

希望すると便利です。

+0

ありがとう、これは私が必要としたものでした。 – Shuzheng

4

私は、これは直接あなたの質問に答えていませんが、あなたがset disassemble-next-line onと、次の命令を表示するには、GDBを伝えることができ、それがすでに...

に答えられていますので、知っています。

+0

ありがとう、非常に便利です! – Shuzheng

関連する問題