如何打印%eax和%ebp的值?
(gdb) p $eax
$1 = void
如何打印%eax和%ebp的值?
(gdb) p $eax
$1 = void
当前回答
对我来说最简单的是:
(gdb) x/x $eax
第一个x代表检查,第二个x是十六进制。你可以看到其他格式使用:
(gdb) help x
您可以使用x/s $eax或x/a $ebp+4轻松打印字符串。
其他回答
Gdb命令:
I r <register_name>:打印单个寄存器,例如I r rax, I r eax I r <register_name_1> <register_name_2>…:打印多个寄存器,例如I r rdi rsi, I r:打印所有寄存器,除了浮点和向量寄存器(xmm, ymm, zmm)。 I r a:打印所有寄存器,包括浮点和向量寄存器(xmm, ymm, zmm)。 i r f:打印所有FPU浮动寄存器(st0-7和其他一些f*)
除了a (all)和f (float)之外的其他寄存器组可以通过以下方式找到:
maint print reggroups
详见:https://sourceware.org/gdb/current/onlinedocs/gdb/Registers.html#Registers
小贴士:
Xmm0 ~ xmm15,是128位的,几乎所有的现代机器都有,它们在1999年发布。 Ymm0 ~ ymm15,是256位的,新机器通常都有,2011年发布。 Zmm0 ~ zmm31,是512位,普通PC可能没有(2016年),他们在2013年发布,到目前为止主要用于服务器。 只会显示xmm / ymm / zmm的一个序列,因为它们是不同模式下的相同寄存器。在我的机器上显示ymm。
Info registers显示所有寄存器;信息寄存器eax只显示寄存器eax。该命令可以缩写为i r
对我来说最简单的是:
(gdb) x/x $eax
第一个x代表检查,第二个x是十六进制。你可以看到其他格式使用:
(gdb) help x
您可以使用x/s $eax或x/a $ebp+4轻松打印字符串。
如果试图在GDB中打印特定寄存器,则必须省略%符号。例如,
info registers eip
如果你的可执行文件是64位的,寄存器以r开始。以e开始是无效的。
info registers rip
这些可以缩写为:
i r rip
还有:
info all-registers
然后你可以得到你感兴趣的寄存器名——这对于找到特定于平台的寄存器非常有用(比如NEON Q…手臂)。