Odpowiedzi:
info registers
pokazuje wszystkie rejestry; info registers eax
pokazuje tylko rejestr eax
. Polecenie może być skrócone jakoi r
info registers eax
. Nie jestem jednak pewien, czy jest inaczej w różnych wersjach gdb.
register read [eax]
display
. Dla np display $eax
.
Jest również:
info all-registers
Następnie możesz uzyskać nazwę rejestru, który Cię interesuje - bardzo przydatny do znajdowania rejestrów specyficznych dla platformy (np. NEON Q ... na ARM).
eax
, ecx
oraz inne standardowe rejestry ukryte info registers
. To prawdopodobnie powinna być zaakceptowana odpowiedź.
info registers
pokaż rejestry.display $esp
kontynuuj wyświetlanie rejestrów esp w wierszu poleceń gdb.layout regs
kontynuuj pokazywanie rejestrów w trybie TUI.Komendy Gdb :
i r <register_name>
: Wydrukować jeden rejestr, na przykład i r rax
,i r eax
i r <register_name_1> <register_name_2> ...
: Wydrukować wiele rejestrów, np i r rdi rsi
,i r
: wydrukuj cały rejestr oprócz rejestru zmiennoprzecinkowego i wektorowego (xmm, ymm, zmm).i r a
: wydrukuj cały rejestr, w tym rejestr zmiennoprzecinkowy i wektorowy (xmm, ymm, zmm).i r f
: wydrukuj wszystkie rejestry zmiennoprzecinkowe FPU ( st0-7
i kilka innych f*
)Inne grupy rejestrów oprócz a
( all
) i f
( float
) można znaleźć za pomocą:
maint print reggroups
zgodnie z dokumentacją na stronie : https://sourceware.org/gdb/current/onlinedocs/gdb/Registers.html#Registers
Wskazówki :
xmm0
~ xmm15
, mają 128 bitów, prawie każda nowoczesna maszyna ma to, są wydane w 1999 roku.ymm0
~ ymm15
, mają 256 bitów, zwykle mają to nowe maszyny, zostały wydane w 2011 roku.zmm0
~ zmm31
, mają 512 bitów, normalny komputer prawdopodobnie ich nie ma ( jak w 2016 roku ), są wydane w 2013 roku i do tej pory były używane głównie na serwerach.p $eax
działa od GDB 7.7.1
Począwszy od GDB 7.7.1, wypróbowane polecenie działa:
set $eax = 0
p $eax
# $1 = 0
set $eax = 1
p $eax
# $2 = 1
Tej składni można również użyć do wyboru między różnymi elementami unii, np. Dla rejestrów zmiennoprzecinkowych ARM, które mogą być zmiennoprzecinkowe lub liczb całkowitych:
p $s0.f
p $s0.u
Z dokumentów :
Dowolna nazwa poprzedzona „$” może być użyta jako zmienna wygody, chyba że jest to jedna z predefiniowanych nazw rejestrów specyficznych dla maszyny.
i :
Do wyrażeń można odwoływać się do zawartości rejestru maszynowego jako zmiennych o nazwach rozpoczynających się od „$”. Nazwy rejestrów są różne dla każdej maszyny; użyj rejestrów informacyjnych, aby zobaczyć nazwy używane na twoim komputerze.
Ale dotychczas nie miałem dużo szczęścia z rejestrami kontrolnymi: OSDev 2012 http://f.osdev.org/viewtopic.php?f=1&t=25968 || Żądanie funkcji w 2005 r. Https://www.sourceware.org/ml/gdb/2005-03/msg00158.html || alt.lang.asm 2013 https://groups.google.com/forum/#!topic/alt.lang.asm/JC7YS3Wu31I
Rejestry zmiennoprzecinkowe ARM
Zobacz: /reverseengineering/8992/floating-point-registers-on-arm/20623#20623
$
składnią.
layout reg
aby gdb wyświetlał tabelę wszystkich rejestrów liczb całkowitych i flag, podświetlając te zmienione przez poprzednią instrukcję. Zobacz na przykład stackoverflow.com/tags/x86/info .