如何告诉 GDB 在给定地址反汇编 N 条指令,同时显示原始字节?

How to tell GDB to disassemble N instructions at given address, also showing the raw bytes?

我知道两种GDB反汇编模式:

  1. 第一个命令用于显示指令和原始字节,但它似乎不接受要反汇编的指令数——仅内存范围:

    disas/r $pc,+30

  2. 第二个命令可以恰好反汇编 N 条指令,如下所示,但没有原始字节:

    x/10i $pc

我想要混合使用这两种模式:使原始字节可见,如 disas/r 中那样,并且能够指定要反汇编的确切指令数,如 x/10i 中那样。我可以用 GDB 做吗?

没有内置方法可以执行此操作。 (顺便说一句,在我看来这有点疏忽,也许一个错误报告要求 x/i 能够显示字节会很好。)]

如果你真的需要这个,有一种方法可以自己实现。基本思路是在Python中写一条新命令。此命令可以包装 disassemble 命令(使用 gdb.executeto_string 参数),然后将其输出限制为 N 指令。