Odpowiedzi:
info registerspokazuje wszystkie rejestry; info registers eaxpokazuje 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, ecxoraz inne standardowe rejestry ukryte info registers. To prawdopodobnie powinna być zaakceptowana odpowiedź.
info registerspokaż rejestry.display $espkontynuuj wyświetlanie rejestrów esp w wierszu poleceń gdb.layout regskontynuuj pokazywanie rejestrów w trybie TUI.Komendy Gdb :
i r <register_name>: Wydrukować jeden rejestr, na przykład i r rax,i r eaxi 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-7i 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 regaby 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 .