gee*_*aur 215

info registers显示所有寄存器; info registers eax只显示寄存器eax.该命令可以缩写为i r

  • Bridgette的回答对我有用.geekosaur的答案大多是正确的,但你需要省略%符号,所以特定寄存器的命令是`info registers eax`.不过,我不确定这对于不同版本的gdb是否有所不同. (5认同)

小智 49

如果您尝试在GDB中打印特定寄存器,则必须省略%符号.例如,

info registers eip
Run Code Online (Sandbox Code Playgroud)

如果您的可执行文件是64位,则寄存器以r开头.用e开头是无效的.

info registers rip
Run Code Online (Sandbox Code Playgroud)

这些可以缩写为:

i r rip
Run Code Online (Sandbox Code Playgroud)


yan*_*ano 37

还有:

info all-registers
Run Code Online (Sandbox Code Playgroud)

然后,您可以获得您感兴趣的寄存器名称 - 对于查找特定于平台的寄存器(如ARM上的NEON Q ...)非常有用.

  • 这教的是关于我不知道存在的寄存器:-) (3认同)
  • 在我的机器上,这会打印“eax”、“ecx”和其他被“info registers”隐藏的标准寄存器。这可能应该是公认的答案。 (2认同)

liu*_*ng1 12

  • 如果只想检查一次,则info registers显示寄存器.
  • 例如,如果只想看一个寄存器,请display $esp继续在gdb命令行中显示esp寄存器.
  • 如果要监视所有寄存器layout regs,请使用TUI模式继续显示寄存器.


Eri*_*ang 9

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
Run Code Online (Sandbox Code Playgroud)

如下所述:https://sourceware.org/gdb/current/onlinedocs/gdb/Registers.html#Registers

小贴士:

  • xmm0xmm15,是128位,几乎每台现代机器都有它,它们于1999年发布.
  • ymm0ymm15,是256位,新机通常有它,它们在2011年发布.
  • zmm0zmm31,是512位,普通PC可能没有它(如2016年),它们在2013年发布,主要用于服务器到目前为止.
  • 将仅显示一个xmm/ymm/zmm的序列,因为它们在不同模式下是相同的寄存器.在我的机器上显示ymm.


Cir*_*四事件 8

p $eax 从 GDB 7.7.1 开始工作

从 GDB 7.7.1 开始,您尝试过的命令有效:

set $eax = 0
p $eax
# $1 = 0
set $eax = 1
p $eax
# $2 = 1
Run Code Online (Sandbox Code Playgroud)

此语法还可用于在不同的联合成员之间进行选择,例如,对于可以是浮点数或整数的 ARM 浮点寄存器:

p $s0.f
p $s0.u
Run Code Online (Sandbox Code Playgroud)

文档

任何以“$”开头的名称都可以用作便利变量,除非它是预定义的特定于机器的寄存器名称之一。

您可以在表达式中将机器寄存器内容称为名称以“$”开头的变量。每台机器的寄存器名称不同;使用信息寄存器查看您机器上使用的名称。

但到目前为止,我对控制寄存器的运气并不好:OSDev 2012 http://f.osdev.org/viewtopic.php?f=1&t=25968 || 2005 功能请求https://www.sourceware.org/ml/gdb/2005-03/msg00158.html || alt.lang.asm 2013 https://groups.google.com/forum/#!topic/alt.lang.asm/JC7YS3Wu31I

ARM 浮点寄存器

参见:https : //reverseengineering.stackexchange.com/questions/8992/floating-point-registers-on-arm/20623#20623

  • 能够在具有这种“$”语法的表达式中使用寄存器真是太棒了。 (2认同)