Respostas:
info registers
mostra todos os registros; info registers eax
mostra apenas o registro eax
. O comando pode ser abreviado comoi r
info registers eax
. Não tenho certeza se isso é diferente para diferentes versões do gdb.
register read [eax]
display
. Por exemplo display $eax
.
Há também:
info all-registers
Em seguida, você pode obter o nome do registro no qual está interessado - muito útil para encontrar registros específicos da plataforma (como NEON Q ... no ARM).
eax
, ecx
e outros registros padrão escondido por info registers
. Provavelmente essa deve ser a resposta aceita.
info registers
mostre os registros.display $esp
continue exibindo esp registradores na linha de comando gdb.layout regs
continue show registers, com o modo TUI.Comandos Gdb :
i r <register_name>
: imprime um único registro, por exemplo i r rax
,i r eax
i r <register_name_1> <register_name_2> ...
: imprime vários registros, por exemplo i r rdi rsi
,i r
: imprime todos os registros, exceto o ponto flutuante e o registro vetorial (xmm, ymm, zmm).i r a
: imprima todos os registros, inclua ponto flutuante e registro vetorial (xmm, ymm, zmm).i r f
: imprime todos os registros flutuantes da FPU ( st0-7
e alguns outros f*
)Outros grupos de registro além de a
( all
) e f
( float
) podem ser encontrados com:
maint print reggroups
conforme documentado em: https://sourceware.org/gdb/current/onlinedocs/gdb/Registers.html#Registers
Dicas :
xmm0
~ xmm15
, são 128 bits, quase todas as máquinas modernas possuem, são lançadas em 1999.ymm0
~ ymm15
, são 256 bits, as novas máquinas costumam ter, são lançadas em 2011.zmm0
~ zmm31
, são 512 bits, o PC normal provavelmente não o possui ( como no ano de 2016 ), eles são lançados em 2013 e usados principalmente em servidores até agora.p $eax
funciona a partir do GDB 7.7.1
No GDB 7.7.1, o comando que você tentou funciona:
set $eax = 0
p $eax
# $1 = 0
set $eax = 1
p $eax
# $2 = 1
Essa sintaxe também pode ser usada para selecionar entre diferentes membros da união, por exemplo, para registros de ponto flutuante do ARM que podem ser ponto flutuante ou números inteiros:
p $s0.f
p $s0.u
Dos documentos :
Qualquer nome precedido por '$' pode ser usado para uma variável de conveniência, a menos que seja um dos nomes de registro específicos da máquina predefinidos.
e :
Você pode consultar o conteúdo do registro da máquina, em expressões, como variáveis com nomes começando com '$'. Os nomes dos registradores são diferentes para cada máquina; use os registradores de informações para ver os nomes usados na sua máquina.
Mas ainda não tive muita sorte com os registros de controle: OSDev 2012 http://f.osdev.org/viewtopic.php?f=1&t=25968 || Solicitação de recurso 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
Registradores de ponto flutuante ARM
Consulte: /reverseengineering/8992/floating-point-registers-on-arm/20623#20623
$
sintaxe.
layout reg
para que o gdb mostre uma tabela de todos os registros de número inteiro e sinalizador, destacando aquele (s) alterado (s) pela instrução anterior. Veja stackoverflow.com/tags/x86/info, por exemplo.