Como imprimo o valor de %eax
e %ebp
?
(gdb) p $eax
$1 = void
gdb
cpu-registers
assem
fonte
fonte
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.Respostas:
info registers
mostra todos os registros;info registers eax
mostra apenas o registroeax
. O comando pode ser abreviado comoi r
fonte
info registers eax
. Não tenho certeza se isso é diferente para diferentes versões do gdb.register read [eax]
display
. Por exemplodisplay $eax
.Se você estiver tentando imprimir um registro específico no GDB, precisará omitir o sinal de%. Por exemplo,
Se o seu executável é de 64 bits, os registros começam com r. Iniciá-los com e não é válido.
Esses podem ser abreviados para:
fonte
Há também:
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).
fonte
eax
,ecx
e outros registros padrão escondido porinfo 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.fonte
Comandos Gdb :
i r <register_name>
: imprime um único registro, por exemploi r rax
,i r eax
i r <register_name_1> <register_name_2> ...
: imprime vários registros, por exemploi 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 outrosf*
)Outros grupos de registro além de
a
(all
) ef
(float
) podem ser encontrados com: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.fonte
p $eax
funciona a partir do GDB 7.7.1No GDB 7.7.1, o comando que você tentou funciona:
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:
Dos documentos :
e :
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
fonte
$
sintaxe.