Comment imprimer des valeurs de Registre dans GDB?

comment imprimer la valeur de %eax et %ebp ?

(gdb) p $eax
 = void
141
demandé sur Peter Mortensen 2011-03-25 09:07:58

6 réponses

info registers montre tous les registres; info registers eax montre seulement le registre eax . La commande peut être abrégée comme i r

167
répondu geekosaur 2014-03-30 19:59:52

Si vous essayez d'imprimer un registre spécifique dans GDB, vous devez omettre le signe%. Par exemple,

info registers eip

si votre exécutable est 64 bits, les registres commencent par R. Les Démarrer par e n'est pas valide.

info registers rip

ceux qui peuvent être abrégés en:

i r rip
43
répondu Bridgette 2015-07-10 07:25:30

il y a aussi:

info all-registers

alors vous pouvez obtenir le nom de Registre qui vous intéresse -- très utile pour trouver des registres spécifiques à une plate-forme (comme le Neon Q... sur les BRAS).

31
répondu yano 2017-06-14 23:31:17
  • Si seulement voulez vérifier une fois, info registers afficher les registres.
  • si vous voulez seulement regarder un registre, par exemple, display $esp continuer à afficher les registres esp en ligne de commande gdb.
  • Si vous voulez regarder tous les registres, layout regs continuer à montrer les registres, avec TUI mode.
7
répondu liuyang1 2015-11-11 15:49:58

Gdb commandes :

  • i r <register_name> : imprimer un registre unique, E. g i r rax , i r eax
  • i r <register_name_1> <register_name_2> ... : Print multiple registers, E. g i r rdi rsi ,
  • "
  • i r : l'impression de tous vous inscrire à l'exception de virgule flottante et vecteur de registre (xmm, ymm, zmm).

  • i r a : imprimer tous les registres, inclure virgule flottante et vecteur de registre (xmm, ymm, zmm).

Conseils :

  • xmm0 ~ xmm15 , sont 128 bits, presque toutes les machines modernes l'ont, ils sont publiés en 1999.
  • ymm0 ~ ymm15 , sont 256 bits, nouvelle machine l'ont généralement, ils sont publiés en 2011.
  • zmm0 ~ zmm31 , sont 512 bits, pc normal ne l'ont probablement pas ( comme l'année 2016 ), ils sont libérés en 2013, et principalement utilisés dans les serveurs jusqu'à présent.
  • une seule série de XMM / ymm / zmm sera affichée, car ce sont les mêmes registres dans un mode différent. Sur ma machine ymm est montré.
6
répondu Eric Wang 2017-02-05 04:20:08

à partir de GDB 7.7.1, la commande que vous avez essayée fonctionne:

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

à Partir de les docs :

tout nom précédé de ’ $ ' peut être utilisé pour une variable de commodité, à moins qu'il ne s'agisse d'un des noms de registre prédéfinis propres à la machine.

et :

vous pouvez vous référer au contenu du expressions, comme variables avec des noms commençant par’$'. Les noms de registres sont différents pour chaque machine; utiliser info registres de voir les noms utilisés sur votre machine.

mais je n'ai pas eu beaucoup de chance avec les registres de contrôle jusqu'à présent: OSDev 2012 http://f.osdev.org/viewtopic.php?f=1&t=25968 / / 2005 requête principale https://www.sourceware.org/ml/gdb/2005-03/msg00158.html / / alt.lang.asm 2013 https://groups.google.com/forum/#!topic / alt.lang.asm / JC7YS3Wu31I

1