如何中断gdb中给定地址的汇编指令?


94
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

2
@Blauhirn也许与stepi和相似nexti,它们在指令级别用于单步执行。
Per Lundberg

Answers:


145

尝试 break *0x0000000000400448


15
可能是因为*需要指定一个地址。参见sourceware.org/gdb/current/onlinedocs/gdb/…–
Laurent G

4
当然,您可以删除前导零并缩写break,给b *0x400448
user202729

要消除命名为函数或数据的歧义0x0000000000400448(那将是不寻常的!)
Dan Anderson

1
@ compile-fan break * address在地址address处设置一个断点。您可以使用它在程序的没有调试信息或源文件的部分中设置断点。ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_28.html我正在调试汇编代码,并在此处到达了您所问的相同问题。
P4cK3tHuNt3R

62

其他方式:

break *main+4

0x000000000040044c
我认为这比编写整个地址要容易得多,这会增加一个断点!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.