Wie drucke ich den Wert von %eax
und %ebp
?
(gdb) p $eax
$1 = void
gdb
cpu-registers
montieren
quelle
quelle
layout reg
diese Option, damit gdb eine Tabelle aller Ganzzahl- und Flag-Register anzeigt und die durch die vorherige Anweisung geänderten Register hervorhebt. Siehe zum Beispiel stackoverflow.com/tags/x86/info .Antworten:
info registers
zeigt alle Register;info registers eax
zeigt nur das Registereax
. Der Befehl kann als abgekürzt werdeni r
quelle
info registers eax
. Ich bin mir jedoch nicht sicher, ob dies für verschiedene Versionen von gdb unterschiedlich ist.register read [eax]
display
. Zum Beispieldisplay $eax
.Wenn Sie versuchen, ein bestimmtes Register in GDB zu drucken, müssen Sie das% -Zeichen weglassen. Beispielsweise,
Wenn Ihre ausführbare Datei 64 Bit ist, beginnen die Register mit r. Das Starten mit e ist ungültig.
Diese können abgekürzt werden als:
quelle
Es gibt auch:
Dann können Sie den Registernamen erhalten, an dem Sie interessiert sind - sehr nützlich, um plattformspezifische Register zu finden (wie NEON Q ... auf ARM).
quelle
eax
,ecx
die von verborgen sindinfo registers
. Dies sollte wahrscheinlich die akzeptierte Antwort sein.info registers
zeigen Sie die Register an.display $esp
fahren Sie mit der Anzeige von Esp-Registern in der GDB-Befehlszeile fort.layout regs
fahren Sie mit der Anzeige der Register im TUI-Modus fort.quelle
Gdb-Befehle :
i r <register_name>
: Drucken Sie ein einzelnes Register, zi r rax
.i r eax
i r <register_name_1> <register_name_2> ...
: mehrere Register drucken, zi r rdi rsi
.i r
: Alle Register außer Gleitkomma- und Vektorregister (xmm, ymm, zmm) drucken.i r a
: Alle Register drucken, Gleitkomma- und Vektorregister (xmm, ymm, zmm) einschließen.i r f
: druckt alle schwebenden FPU-Register (st0-7
und einige anderef*
)Weitere Registergruppen neben
a
(all
) undf
(float
) finden Sie unter:wie dokumentiert unter: https://sourceware.org/gdb/current/onlinedocs/gdb/Registers.html#Registers
Tipps :
xmm0
~xmm15
, sind 128 Bit, fast jede moderne Maschine hat es, sie werden 1999 veröffentlicht.ymm0
~ymm15
, sind 256 Bit, neue Maschine haben es normalerweise, sie werden im Jahr 2011 veröffentlicht.zmm0
~zmm31
, sind 512 Bit, normale PCs haben es wahrscheinlich nicht ( wie im Jahr 2016 ), sie werden 2013 veröffentlicht und bisher hauptsächlich auf Servern verwendet.quelle
p $eax
funktioniert ab GDB 7.7.1Ab GDB 7.7.1 funktioniert der Befehl, den Sie ausprobiert haben:
Diese Syntax kann auch verwendet werden, um zwischen verschiedenen Gewerkschaftsmitgliedern zu wählen, z. B. für ARM-Gleitkommaregister, die entweder Gleitkomma- oder Ganzzahlen sein können:
Aus den Dokumenten :
und :
Aber ich hatte bisher nicht viel Glück mit Kontrollregistern: OSDev 2012 http://f.osdev.org/viewtopic.php?f=1&t=25968 || 2005 Funktionsanforderung https://www.sourceware.org/ml/gdb/2005-03/msg00158.html || alt.lang.asm 2013 https://groups.google.com/forum/#!topic/alt.lang.asm/JC7YS3Wu31I
ARM-Gleitkommaregister
Siehe: /reverseengineering/8992/floating-point-registers-on-arm/20623#20623
quelle
$
Syntax verwenden zu können.