¿Cómo imprimo el valor de %eaxy %ebp?
(gdb) p $eax
$1 = void
                    
                        gdb
                                cpu-registers
                                
                    
                    
                        ensamblar
fuente
                
                fuente

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.Respuestas:
info registersmuestra todos los registros;info registers eaxmuestra solo el registroeax. El comando se puede abreviar comoi rfuente
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,ecxy otros registros estándar ocultos porinfo registers. Probablemente esta debería ser la respuesta aceptada.info registersmuestre los registros.display $espcontinúe mostrando registros esp en la línea de comando gdb.layout regscontinúe mostrando registros, con el modo TUI.fuente
Comandos Gdb :
i r <register_name>: imprime un único registro, por ejemploi r rax,i r eaxi 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-7y 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 $eaxfunciona 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.