Risposte:
info registersmostra tutti i registri; info registers eaxmostra 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, ecxe 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 regscontinua 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 eaxi 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-7e 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 regper 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.