如何将 'disass <something>' 别名为当前位置的反汇编?

How to alias 'disass <something>' to a disassembly at the current location?

我无法在当前位置进行拆卸。 GDB 无法将 .(点)识别为 "here":

(gdb) disass .
A syntax error in expression, near `.'.

发出 disass $pc 从函数的开头反汇编而不是 "here":

(gdb) disass $pc
Dump of assembler code for function _ZN8CryptoPP6RDSEED13GenerateBlockEPhm:
   0x000000000056b962 <+0>:     push   %r13
   0x000000000056b964 <+2>:     push   %r12
   0x000000000056b966 <+4>:     push   %rbp
...

<skip 5 pages of output>

   0x000000000056ba88 <+294>:   mov    %rdi,0x8(%rsp)
=> 0x000000000056ba8d <+299>:   test   %edx,%edx
   0x000000000056ba8f <+301>:   je     0x56ba7f <_ZN8CryptoPP6RDSEED13GenerateBlockEPhm+285>
...

如何创建别名或规则以提供在当前位置的反汇编、当前位置之前的一些指令以及当前位置之前的一些指令?

这似乎应该是内置功能,但 GDB 似乎没有提供它。其他低级调试器,如 WinDbg,具有内置功能。

disas 反汇编整个函数(按照设计和记录)。

您正在查找 x/10i $pc(将 10 替换为所需的指令数)。

How can I alias disass . to the command above?

有 GDB alias 命令,但它拒绝了我使用它的尝试:

(gdb) alias ds = x/10i $pc
Invalid command to alias to: x/10i $pc

用户定义的命令有效:

(gdb) define disas
Type commands for definition of "disas".
End with a line saying just "end".
>x/10i $pc
>end