Как печатать значения регистров в GDB?


как мне напечатать значение %eax и %ebp?

(gdb) p $eax
 = void
6 141

6 ответов:

info registers показывает все регистры; info registers eax показывает только регистр eax. Команда может быть сокращена как i r

Если вы пытаетесь напечатать определенный регистр в GDB, вы должны опустить знак%. Например,

info registers eip

Если исполняемый файл 64 бит, регистры начинаются с r. запуск их с e недопустим.

info registers rip

Они могут быть сокращены до:

i r rip

также:

info all-registers

затем вы можете получить имя регистра, которое вас интересует - очень полезно для поиска регистров, специфичных для платформы (например, NEON Q... на ARM.)

  • если только хотите проверить его один раз,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: напечатать все регистрации, относятся с плавающей точкой & векторных регистра (данные, компании емм, змм).

советы:

  • xmm0~ xmm15, 128 бит, почти каждая современная машина имеет его, они выпущены в 1999 году.
  • ymm0~ ymm15, 256 бит, новая машина обычно имеет его, они выпущены в 2011.
  • zmm0~ zmm31, это 512 бит, обычный ПК, вероятно, не имеет его (в 2016 году), они выпущены в 2013, и главным образом использованы в серверах так далеко.
  • будет показан только один сериал xmm / ymm / zmm, потому что это одни и те же регистры в разных режимах. На моей машине показан ymm.

начиная с GDB 7.7.1, команда, которую вы пробовали, работает:

set $eax = 0
p $eax
#  = 0
set $eax = 1
p $eax
#  = 1

С документы:

любое имя, предшествующее'$', может использоваться для переменной удобства, если это не одно из предопределенных машинных имен регистров.

и:

вы можете ссылаться на содержимое машинного регистра в выражениях как на переменные с именами, начинающимися с"$". Названия регистров разные для каждой машины; используйте информационные регистры, чтобы увидеть имена, используемые на вашем компьютере.

но мне не очень повезло с контрольными регистрами до сих пор: OSDev 2012 http://f.osdev.org/viewtopic.php?f=1&t=25968 / / 2005 feature request https://www.sourceware.org/ml/gdb/2005-03/msg00158.html / / alt.ленг.asm 2013 https://groups.google.com/forum/#! topic/alt. lang. asm/JC7YS3Wu31I