¿Cómo imprimir valores de registro en GDB?
¿Cómo puedo imprimir el valor de %eax
y %ebp
?
(gdb) p $eax
$1 = void
6 answers
info registers
muestra todos los registros; info registers eax
muestra solo el registro eax
. El comando se puede abreviar como i r
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
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).
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.
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 ejemploi r rax
,i r eax
-
i r <register_name_1> <register_name_2> ...
: imprimir registros múltiples, por ejemploi 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.
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
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