gdb cpu-registers

Cómo imprimir valores de registro en GDB?



cpu-registers (6)

¿Cómo %ebp el valor de %eax y %ebp ?

(gdb) p $eax $1 = void


A partir de GDB 7.7.1, el comando que has probado funciona:

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

De los documentos :

Cualquier nombre precedido por ''$'' se puede usar para una variable de conveniencia, a menos que sea uno de los nombres de registro específicos de la máquina predefinidos.

and :

Puede referirse a los contenidos 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; usa registros de información para ver los nombres usados ​​en tu 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 función 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


Si intenta imprimir un registro específico en GDB, debe omitir el signo%. Por ejemplo,

info registers eip

Si su ejecutable es de 64 bits, los registros comienzan con r. Comenzarlos con e no es válido.

info registers rip

Esos pueden ser abreviados a:

i r rip


También hay:

info all-registers

Luego puede obtener el nombre del registro que le interesa, muy útil para encontrar registros específicos de la plataforma (como NEON Q ... en ARM).


info registers muestran todos los registros; info registers eax muestra solo el registro eax . El comando se puede abreviar como ir


Comandos de Gdb :

  • ir <register_name> ir rax ir <register_name> : imprime un solo registro, por ejemplo, ir rax , ir eax
  • ir <register_name_1> <register_name_2> ... ir rdi rsi ir <register_name_1> <register_name_2> ... : imprime varios registros, por ejemplo, ir rdi rsi ,
  • ir : imprime todo el registro excepto el punto flotante y el registro vectorial (xmm, ymm, zmm).

  • ira : imprime todo el registro, incluye el registro de coma flotante y vectorial (xmm, ymm, zmm).

Consejos :

  • xmm0 ~ xmm15 , son 128 bits, casi todas las máquinas modernas lo tienen, se lanzan en 1999.
  • ymm0 ~ ymm15 , son 256 bits, la nueva máquina generalmente lo tiene, se lanzan en 2011.
  • zmm0 ~ zmm31 , son 512 bits, la PC normal probablemente no la tenga ( como el año 2016 ), se lanzan en 2013 y se usan principalmente en servidores hasta el momento.
  • Solo se mostrará una serie de xmm / ymm / zmm, porque son los mismos registros en modo diferente. En mi máquina se muestra ymm.

  • Si solo quieres comprobarlo una vez, los info registers muestran los registros.
  • Si solo desea ver un registro, por ejemplo, display $esp continúe mostrando los registros especiales en la línea de comando de gdb.
  • Si quiere ver todos los registros, las layout regs continúan mostrando registros, con el modo TUI.