如何在GDB中打印寄存器值?


Answers:


231

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


我得到:无效的寄存器'%eax'如果我只是做“信息寄存器”,则eax不会显示。但是我正在看我在IDE中的代码汇编,其中已使用以下指令生成EXC_BAD_ACCESS信号:test%eax,%eax这是在运行gdb的XCode中。为什么gdb不报告eax寄存器?
NoahR 2011年

1
相同的问题:代码中包含%eax,但打印$ eax显示无效。
Ruslan Yushchenko

5
布里奇特的答案对我有用。geekosaur的答案基本上是正确的,但是您需要省略%符号,因此用于特定寄存器的命令是info registers eax。不过,我不确定这对于不同版本的gdb是否有所不同。
凯文(Kevin)

我正在为lldb搜索相同的内容,所以请注意:对于lldb,命令为register read [eax]
holgac 2015年

如果要在逐步执行代码时连续显示寄存器值,则可以使用display。例如display $eax
srgsanky 2015年

50

如果要在GDB中打印特定的寄存器,则必须省略%符号。例如,

info registers eip

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

info registers rip

这些可以缩写为:

i r rip

37

还有:

info all-registers

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


3
这教约寄存器我不知道存在:-)
西罗桑蒂利郝海东冠状病六四事件法轮功

1
在我的机器,这个打印eaxecx以及其它标准由寄存器隐藏info registers。这可能应该是公认的答案。
EntangledLoops

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

12

Gdb命令

  • i r <register_name>:打印一个寄存器,例如i r raxi 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*

aall)和ffloat)外的其他寄存器组还可以通过以下方式找到:

maint print reggroups

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。

6

p $eax 从GDB 7.7.1开始工作

从GDB 7.7.1开始,您尝试过的命令起作用:

set $eax = 0
p $eax
# $1 = 0
set $eax = 1
p $eax
# $2 = 1

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

p $s0.f
p $s0.u

文档

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

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

但是到目前为止,我对控制寄存器的运气还不高: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
能够以这种$语法在表达式中使用寄存器真是太好了。
回收
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.