Відповіді:
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 eaxi 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 .