Respostas:
info registersmostra todos os registros; info registers eaxmostra 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, ecxe outros registros padrão escondido por info registers. Provavelmente essa deve ser a resposta aceita.
info registersmostre os registros.display $espcontinue exibindo esp registradores na linha de comando gdb.layout regscontinue show registers, com o modo TUI.Comandos Gdb :
i r <register_name>: imprime um único registro, por exemplo i r rax,i r eaxi 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-7e 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 regpara 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.