gdbの特定のアドレスでアセンブリ命令を中断するにはどうすればよいですか?


96
0x0000000000400448 <main+0>:    push   %rbp
0x0000000000400449 <main+1>:    mov    %rsp,%rbp
0x000000000040044c <main+4>:    mov    $0x6,%eax
0x0000000000400451 <main+9>:    leaveq 
0x0000000000400452 <main+10>:   retq   

私は試した:

breaki 0x0000000000400448

しかし、そのようなコマンドはないようです。

gdbにはそのような機能がありますか?


3
なぜbreakiですか?それはタイプミスですか?
phil294 2017年

2
@Blauhirnおそらく、命令レベルでのシングルステップに使用されるstepiととの類推として考えnextiられます。
パーランドバーグ

回答:


147

試してみてください break *0x0000000000400448


15
おそらく、アドレスを指定するために*が必要なためです。sourceware.org/gdb/current/onlinedocs/gdb/…を
Laurent G

4
そしてもちろん、先行ゼロを削除して省略しbreak、を与えることができますb *0x400448
user202729 2018年

名前の関数やデータを明確にするために0x0000000000400448(珍しいことのようになりますよう!)
ダン・アンダーソン

1
@ compile-fan break * addressアドレスアドレスにブレークポイントを設定します。これを使用して、デバッグ情報やソースファイルがないプログラムの部分にブレークポイントを設定できます。ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_28.htmlアセンブリコードをデバッグしていて、あなたが尋ねたのと同じ質問のためにここに到達しました。
P4cK3tHuNt3R

62

別の方法:

break *main+4

これによりブレークポイントが追加され0x000000000040044c
ます。これは、アドレス全体を書き込むよりも簡単だと思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.