Risposte:
info registers
mostra tutti i registri; info registers eax
mostra solo il registro eax
. Il comando può essere abbreviato comei r
info registers eax
. Non sono sicuro se questo sia diverso per le diverse versioni di gdb, però.
register read [eax]
display
. Per es display $eax
.
C'è anche:
info all-registers
Quindi puoi ottenere il nome del registro che ti interessa - molto utile per trovare registri specifici della piattaforma (come NEON Q ... su ARM).
eax
, ecx
e altri registri standard, nascosti da info registers
. Questa dovrebbe probabilmente essere la risposta accettata.
info registers
mostra i registri.display $esp
continua a visualizzare i registri esp nella riga di comando gdb.layout regs
continua a mostrare i registri, con la modalità TUI.Comandi Gdb :
i r <register_name>
: stampa un unico registro, ad es i r rax
.i r eax
i r <register_name_1> <register_name_2> ...
: stampa più registri, ad es i r rdi rsi
.i r
: stampa tutti i registri tranne il virgola mobile e il registro vettoriale (xmm, ymm, zmm).i r a
: stampa tutto il registro, include il virgola mobile e il registro vettoriale (xmm, ymm, zmm).i r f
: stampa tutti i registri mobili FPU ( st0-7
e pochi altri f*
)Altri gruppi di registri oltre a a
( all
) e f
( float
) sono disponibili con:
maint print reggroups
come documentato su: https://sourceware.org/gdb/current/onlinedocs/gdb/Registers.html#Registers
Suggerimenti :
xmm0
~ xmm15
, sono 128 bit, quasi tutte le macchine moderne ce l'hanno, sono state rilasciate nel 1999.ymm0
~ ymm15
, sono 256 bit, di solito la nuova macchina ce l'ha, vengono rilasciati nel 2011.zmm0
~ zmm31
, sono 512 bit, i pc normali probabilmente non ce l'hanno ( come l'anno 2016 ), sono stati rilasciati nel 2013 e finora utilizzati principalmente nei server.p $eax
funziona a partire da GDB 7.7.1
A partire da GDB 7.7.1, il comando che hai provato funziona:
set $eax = 0
p $eax
# $1 = 0
set $eax = 1
p $eax
# $2 = 1
Questa sintassi può anche essere utilizzata per selezionare tra diversi membri del sindacato, ad esempio per i registri a virgola mobile ARM che possono essere in virgola mobile o interi:
p $s0.f
p $s0.u
Dai documenti :
Qualsiasi nome preceduto da '$' può essere utilizzato per una variabile di convenienza, a meno che non sia uno dei nomi di registro specifici della macchina predefiniti.
e :
È possibile fare riferimento al contenuto del registro macchina, nelle espressioni, come variabili con nomi che iniziano con '$'. I nomi dei registri sono diversi per ogni macchina; utilizzare i registri delle informazioni per visualizzare i nomi utilizzati sulla macchina.
Finora non ho avuto molta fortuna con i registri di controllo: OSDev 2012 http://f.osdev.org/viewtopic.php?f=1&t=25968 || Richiesta di funzionalità 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
Registri a virgola mobile ARM
Vedi: /reverseengineering/8992/floating-point-registers-on-arm/20623#20623
$
sintassi.
layout reg
per fare in modo che gdb mostri una tabella di tutti i registri di numeri interi e flag, evidenziando quelli modificati dall'istruzione precedente. Vedi stackoverflow.com/tags/x86/info per esempio.