¿Cómo imprimir valores de registro en GDB?


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

(gdb) p $eax
$1 = void
Author: Peter Mortensen, 2011-03-25

6 answers

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

 167
Author: geekosaur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-30 19:59:52

Si está intentando 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. Iniciarlos con e no es válido.

info registers rip

Se pueden abreviar como:

i r rip
 43
Author: Bridgette,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-10 07:25:30

También Hay:

info all-registers

Entonces puede obtener el nombre de registro que le interesa very muy útil para encontrar registros específicos de la plataforma (como NEON Q... en el BRAZO).

 31
Author: yano,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-14 23:31:17
  • Si solo quiere comprobarlo una vez, info registers mostrar registros.
  • Si solo desea ver un registro, por ejemplo, display $esp continúe mostrando registros esp en la línea de comandos gdb.
  • Si desea ver todos los registros, layout regs continúe mostrando registros, con el modo TUI.
 7
Author: liuyang1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-11 15:49:58

Órdenes Gdb :

  • i r <register_name>: imprime un solo registro, por ejemplo i r rax, i r eax
  • i r <register_name_1> <register_name_2> ...: imprimir registros múltiples, por ejemplo i r rdi rsi,
  • i r: imprima todos los registros excepto el registro de punto flotante y vector (xmm, ymm, zmm).

  • i r a: imprima todo el registro, incluya el registro de punto flotante y vector (xmm, ymm, zmm).

Consejos:

  • xmm0 ~ xmm15, son 128 bits, casi todas las máquinas modernas tienen it, 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, pc normal probablemente no lo tienen ( como el año 2016), se lanzan en 2013, y se utilizan 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.
 6
Author: Eric Wang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-05 04:20:08

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 predefinidos específicos de la máquina.

Y:

Puede referirse al contenido del registro de máquina, en expresiones, como variables con nombres que comienzan por '$'. Los nombres de los registros son diferentes para cada máquina; use registros info para ver los nombres utilizado en su máquina.

Pero no he tenido mucha suerte con los registros de control hasta ahora: OSDev 2012 http://f.osdev.org/viewtopic.php?f=1&t=25968 / / solicitud de características de 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

 1
Author: Ciro Santilli 新疆改造中心 六四事件 法轮功,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-19 19:33:47