¿Cómo imprimo el valor de %eax
y %ebp
?
(gdb) p $eax
$1 = void
gdb
cpu-registers
ensamblar
fuente
fuente
layout reg
para 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.Respuestas:
info registers
muestra todos los registros;info registers eax
muestra solo el registroeax
. El comando se puede abreviar comoi r
fuente
info registers eax
. Sin embargo, no estoy seguro de si esto es diferente para diferentes versiones de gdb.register read [eax]
display
. Por ejdisplay $eax
.Si está intentando imprimir un registro específico en GDB, debe omitir el signo%. Por ejemplo,
Si su ejecutable es de 64 bits, los registros comienzan con r. Comenzarlos con e no es válido.
Esos se pueden abreviar para:
fuente
También hay:
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).
fuente
eax
,ecx
y otros registros estándar ocultos porinfo 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 regs
continúe mostrando registros, con el modo TUI.fuente
Comandos Gdb :
i r <register_name>
: imprime un único registro, por ejemploi r rax
,i r eax
i r <register_name_1> <register_name_2> ...
: imprimir múltiples registros, por ejemploi 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-7
y algunos otrosf*
)Otros grupos de registro además de
a
(all
) yf
(float
) se pueden encontrar con: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.fuente
p $eax
funciona a partir de GDB 7.7.1A partir de GDB 7.7.1, el comando que ha probado funciona:
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:
De los documentos :
y :
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
fuente
$
sintaxis.