如何在GDB中打印寄存器值?
如何打印%eax和%ebp的值? 
 (gdb) p $eax $1 = void 
	
  info registers显示所有的寄存器;  info registers eax只显示寄存器eax 。 该命令可以缩写为ir 
如果您要在GDB中打印特定的寄存器,则必须省略%符号。 例如,
 info registers eip 
如果您的可执行文件是64位,则寄存器以r开头。 用e启动它是无效的。
 info registers rip 
这些可以缩写为:
 ir rip 
还有:
 info all-registers 
然后你可以得到你感兴趣的寄存器名称 – 非常有用的寻找平台特定的寄存器(如ARM上的NEON Q …)。
-  如果只想检查一次, info registers显示寄存器。
-  如果只想看一个寄存器,例如, display $espcontinue在gdb命令行中显示esp寄存器。
-  如果要观看所有寄存器, layout regs继续显示寄存器,用TUI模式。
Gdb命令 :
-   ir <register_name>:打印单个注册,例如ir rax,ir eax
-   ir <register_name_1> <register_name_2> ...:打印多个寄存器,例如ir rdi rsi,
- 
ir:打印除浮点和向量寄存器(xmm,ymm,zmm)以外的所有寄存器。
- 
ira:打印所有的寄存器,包括浮点和vector寄存器(xmm,ymm,zmm)。
提示 :
-   xmm0位,几乎每台现代机都有它,它们在1999年发布。
-   ymm0,都是256位,新机通常都有,2011年发布。
-   zmm0,是512位,普通pc可能没有( 截至2016年 ),它们在2013年发布,主要用于服务器到目前为止。
- 只会显示一个xmm / ymm / zmm序列,因为它们是不同模式下的相同寄存器。 在我的机器上显示ymm。
从GDB 7.7.1开始,你尝试的命令就是这样工作的:
 set $eax = 0 p $eax # $1 = 0 set $eax = 1 p $eax # $2 = 1 
从文档 :
除非是预定义的机器特定寄存器名称之一,否则以“$”开头的任何名称都可以用作便利variables。
和 :
您可以在expression式中引用机器寄存器内容作为名称以“$”开头的variables。 每台机器的寄存器名称不同; 使用信息寄存器来查看您的机器上使用的名称。
但是到目前为止,我还没有很好的控制寄存器:OSDev 2012 http://f.osdev.org/viewtopic.php?f=1&t=25968 2005function请求https://www.sourceware.org/ml/gdb/2005-03/msg00158.html || alt.lang.asm 2013 https://groups.google.com/forum/#!topic/alt.lang.asm/JC7YS3Wu31I