Как мне распечатать значение %eax
и %ebp
?
(gdb) p $eax
$1 = void
gdb
cpu-registers
Асем
источник
источник
layout reg
чтобы gdb показывал таблицу всех регистров целых чисел и флагов, выделяя те, которые были изменены предыдущей инструкцией. См. Например, stackoverflow.com/tags/x86/info .Ответы:
info registers
показывает все регистры;info registers eax
показывает только реестрeax
. Команда может быть сокращена доi r
источник
info registers eax
. Я не уверен, если это отличается для разных версий GDB, хотя.register read [eax]
display
. Для напримерdisplay $eax
.Если вы пытаетесь напечатать определенный регистр в GDB, вы должны опустить знак%. Например,
Если ваш исполняемый файл 64-битный, регистры начинаются с r. Начиная их с е, недопустимо.
Они могут быть сокращены до:
источник
А также есть:
Затем вы можете получить интересующее вас имя регистра - очень полезно для поиска регистров, специфичных для платформы (например, 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
) можно найти с помощью:как задокументировано по адресу: 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, команда, которую вы пробовали, работает:
Этот синтаксис также можно использовать для выбора между различными членами объединения, например, для регистров ARM с плавающей запятой, которые могут быть с плавающей запятой или целыми числами:
Из документов :
и :
Но мне пока не повезло с регистрами управления: 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.
источник
$
синтаксисом.