2017-03-21 12 views
0

ここでは私のdisasコードです:メモリにアクセスすることはできません - gdbの

Dump of assembler code for function main: 
0x00000000000006b0 <+0>: push %rbp 
0x00000000000006b1 <+1>: mov %rsp,%rbp 
0x00000000000006b4 <+4>: sub $0x10,%rsp 
0x00000000000006b8 <+8>: movl $0xa,-0xc(%rbp) 
0x00000000000006bf <+15>: lea -0xc(%rbp),%rax 
0x00000000000006c3 <+19>: mov %rax,-0x8(%rbp) 
0x00000000000006c7 <+23>: lea 0x96(%rip),%rdi  # 0x764 
0x00000000000006ce <+30>: mov $0x0,%eax 
0x00000000000006d3 <+35>: callq 0x560 <[email protected]> 
0x00000000000006d8 <+40>: mov $0x0,%eax 
0x00000000000006dd <+45>: leaveq 
0x00000000000006de <+46>: retq 

私はb *表0x00000000000006b4によって0x06b4にブレークポイントを設定し、それがエラーに Starting program: /root/print.out Warning: Cannot insert breakpoint 4. Cannot access memory at address 0x6b4 を与えているコードを実行したときに、私はでそれを行うときb 4コードを実行すると、正常に動作しています。最初のケースで何が間違っているのですか?

+2

ブレークポイントが動作しているときにアドレスをチェックしましたか?それらは分解と一致しますか? –

+0

はい、同じです –

+2

これらのアドレスは非常に低いです。質問を編集して、オペレーティングシステム、コンパイル設定、gdbコマンドラインオプションなどの説明を追加できますか? –

答えて

1

Dump of assembler code for function main: 0x00000000000006b0 <+0>: push %rbp 0x00000000000006b1 <+1>: mov %rsp,%rbp

あなたはposition-independent executable(共有ライブラリの特別な種類)を見ています。 mainのコードは、に再配置し、実行可能ファイルが実行を開始したときに別のアドレスに移動します。

実行ファイルが一旦再配置されると0x6b4にコードがないので、GDBはそこでブレークポイントを設定できないと告げる。

しかし、私はb4でコードを実行すると正常に動作しています。この場合

、GDBを使用すると、4行目にブレークポイントを設定することを理解し、実行ファイルが再配置された後に適切なブレークポイントを挿入します。

info breakを使用して、再配置されたアドレスを確認してください。

関連する問題