Відповіді:
info registers
показує всі регістри; info registers eax
показує просто реєстр eax
. Команду можна скоротити якi r
info registers eax
. Я не впевнений, чи це по-різному для різних версій gdb.
register read [eax]
display
. Наприклад, наприклад display $eax
.
Є також:
info all-registers
Тоді ви можете отримати ім'я реєстру, яке вас цікавить - дуже корисно для пошуку конкретних платформних регістрів (як NEON Q ... на ARM).
eax
, ecx
і інші стандартні регістри приховані info registers
. Це, мабуть, має бути прийнятою відповіддю.
info registers
покажіть регістри.display $esp
продовжуйте відображати регістри esp у командному рядку gdb.layout regs
продовжуйте показувати регістри в режимі TUI.Команди Gdb :
i r <register_name>
: надрукувати єдиний реєстр, наприклад i r rax
,i r eax
i r <register_name_1> <register_name_2> ...
: друк декількох регістрів, наприклад i r rdi rsi
,i r
: надрукувати весь регістр, за винятком плаваючої точки та вектору (xmm, ymm, zmm).i r a
: надрукувати весь регістр, включити плаваючу крапку та векторний регістр (xmm, ymm, zmm).i r f
: надрукувати всі плаваючі регістри FPU ( st0-7
та кілька інших f*
)Інші регістрові групи крім a
( all
) та f
( float
) можна знайти за допомогою:
maint print reggroups
як це зафіксовано за адресою: https://sourceware.org/gdb/current/onlinedocs/gdb/Registers.html#Registers
Поради :
xmm0
~ xmm15
, мають 128 біт, майже кожна сучасна машина має її, вони випущені в 1999 році.ymm0
~ ymm15
, - це 256 біт, нові машини зазвичай мають його, вони випущені в 2011 році.zmm0
~ zmm31
, є 512 біт, нормальний ПК, мабуть, його не має ( як 2016 рік ), вони випущені в 2013 році і в основному використовуються на серверах до цих пір.p $eax
працює на GDB 7.7.1
Станом на GDB 7.7.1 команда, яку ви випробували, працює:
set $eax = 0
p $eax
# $1 = 0
set $eax = 1
p $eax
# $2 = 1
Цей синтаксис також може використовуватися для вибору між різними членами об'єднання, наприклад, для регістрів плаваючої точки ARM, які можуть бути або плаваючою точкою, або цілими числами:
p $s0.f
p $s0.u
З документів :
Будь-яке ім'я, яке передує '$', може використовуватися для змінної зручності, за винятком випадків, коли це одне із заздалегідь визначених імен регістрів, визначених для машини.
і :
Ви можете вказати вміст реєстру машин у виразах як змінні з іменами, що починаються з '$'. Назви регістрів різні для кожної машини; використовувати регістри інформації, щоб побачити імена, які використовуються на вашій машині.
Але мені до цього часу не пощастило з контрольними реєстрами: OSDev 2012 http://f.osdev.org/viewtopic.php?f=1&t=25968 || Запит на функцію 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
Реєстри з плаваючою точкою ARM
Дивіться: /reverseengineering/8992/floating-point-registers-on-arm/20623#20623
$
синтаксисом.
layout reg
щоб gdb показав таблицю всіх регістрів цілих чисел та прапорців, виділивши ті, що змінилися попередньою інструкцією. Дивіться, наприклад, stackoverflow.com/tags/x86/info .