Respuestas:
info registersmuestra todos los registros; info registers eaxmuestra solo el registro eax. El comando se puede abreviar comoi r
info registers eax. Sin embargo, no estoy seguro de si esto es diferente para diferentes versiones de gdb.
register read [eax]
display. Por ej display $eax.
También hay:
info all-registers
Luego puede obtener el nombre de registro que le interesa, muy útil para encontrar registros específicos de la plataforma (como NEON Q ... en ARM).
eax, ecxy otros registros estándar ocultos por info registers. Probablemente esta debería ser la respuesta aceptada.
info registers muestre los registros.display $esp continúe mostrando registros esp en la línea de comando gdb.layout regscontinúe mostrando registros, con el modo TUI.Comandos Gdb :
i r <register_name>: imprime un único registro, por ejemplo i r rax,i r eaxi r <register_name_1> <register_name_2> ...: imprimir múltiples registros, por ejemplo i r rdi rsi,i r: imprime todo el registro, excepto el punto flotante y el registro de vectores (xmm, ymm, zmm).i r a: imprime todos los registros, incluye coma flotante y registro de vectores (xmm, ymm, zmm).i r f: imprime todos los registros flotantes de FPU ( st0-7y algunos otros f*)Otros grupos de registro además de a( all) y f( float) se pueden encontrar con:
maint print reggroups
como se documenta en: https://sourceware.org/gdb/current/onlinedocs/gdb/Registers.html#Registers
Consejos :
xmm0~ xmm15, son 128 bits, casi todas las máquinas modernas lo tienen, se lanzaron en 1999.ymm0~ ymm15, son 256 bits, la nueva máquina generalmente lo tiene, se lanzaron en 2011.zmm0~ zmm31, son 512 bits, la PC normal probablemente no lo tenga ( como el año 2016 ), se lanzaron en 2013 y hasta ahora se utilizan principalmente en servidores.p $eax funciona a partir de GDB 7.7.1
A partir de GDB 7.7.1, el comando que ha probado funciona:
set $eax = 0
p $eax
# $1 = 0
set $eax = 1
p $eax
# $2 = 1
Esta sintaxis también se puede usar para seleccionar entre diferentes miembros de unión, por ejemplo, para registros de punto flotante ARM que pueden ser punto flotante o enteros:
p $s0.f
p $s0.u
De los documentos :
Cualquier nombre precedido por '$' puede usarse para una variable de conveniencia, a menos que sea uno de los nombres de registro específicos de la máquina predefinidos.
y :
Puede referirse al contenido del registro de la máquina, en expresiones, como variables con nombres que comienzan con '$'. Los nombres de los registros son diferentes para cada máquina; use registros de información para ver los nombres utilizados en su máquina.
Pero hasta ahora no he tenido mucha suerte con los registros de control: OSDev 2012 http://f.osdev.org/viewtopic.php?f=1&t=25968 || Solicitud de funciones 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 registros de coma flotante
Ver: /reverseengineering/8992/floating-point-registers-on-arm/20623#20623
$sintaxis.
layout regpara que gdb muestre una tabla de todos los registros de enteros y marcadores, resaltando los que cambió la instrucción anterior. Ver stackoverflow.com/tags/x86/info por ejemplo.