【问题标题】:How to break on assembly instruction at a given address in gdb?如何在gdb中的给定地址中断汇编指令?
【发布时间】:2011-07-24 11:51:11
【问题描述】:
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有这样的功能吗?

【问题讨论】:

  • 为什么是breaki?是错字吗?
  • @Blauhirn 可能类似于stepi 和nexti,它们用于指令级的单步执行。

标签: assembly gdb


【解决方案1】:

试试break *0x0000000000400448

【讨论】:

  • 可能是因为需要 * 来指定地址。见sourceware.org/gdb/current/onlinedocs/gdb/…
  • 当然你可以去掉前导零并缩写break,给b *0x400448。
  • 消除与名为0x0000000000400448 的函数或数据的歧义(这很不寻常!)
  • @compile-fan break *address 在地址地址设置断点。您可以使用它在程序中没有调试信息或源文件的部分设置断点。 ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_28.html我正在调试一个汇编代码并到达这里以解决您提出的相同问题。
【解决方案2】:

另一种方式:

break *main+4

这将在0x000000000040044c添加一个断点
我认为这比写整个地址更容易!

【讨论】:

    猜你喜欢
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    相关资源
    最近更新 更多