Comment imprimer la valeur de %eax
et %ebp
?
(gdb) p $eax
$1 = void
gdb
cpu-registers
assem
la source
la source
layout reg
pour que gdb affiche un tableau de tous les registres d'entiers et d'indicateurs, mettant en évidence le ou les registres modifiés par l'instruction précédente. Voir stackoverflow.com/tags/x86/info par exemple.Réponses:
info registers
montre tous les registres;info registers eax
montre juste le registreeax
. La commande peut être abrégée commei r
la source
info registers eax
. Je ne suis cependant pas sûr que ce soit différent pour les différentes versions de gdb.register read [eax]
display
. Pour par exempledisplay $eax
.Si vous essayez d'imprimer un registre spécifique dans GDB, vous devez omettre le signe%. Par exemple,
Si votre exécutable est 64 bits, les registres commencent par r. Les démarrer avec e n'est pas valide.
Ceux-ci peuvent être abrégés en:
la source
Il y a aussi:
Ensuite, vous pouvez obtenir le nom du registre qui vous intéresse - très utile pour trouver des registres spécifiques à la plate-forme (comme NEON Q ... sur ARM).
la source
eax
,ecx
et d' autres registres standards cachés parinfo registers
. Cela devrait probablement être la réponse acceptée.info registers
affichez les registres.display $esp
continuez à afficher les registres esp dans la ligne de commande gdb.layout regs
continuez à afficher les registres, avec le mode TUI.la source
Commandes gdb :
i r <register_name>
: imprimer un seul registre, par exemplei r rax
,i r eax
i r <register_name_1> <register_name_2> ...
: imprimer plusieurs registres, par exemplei r rdi rsi
,i r
: imprime tous les registres sauf le registre flottant et vectoriel (xmm, ymm, zmm).i r a
: imprimer tous les registres, inclure les registres à virgule flottante et vectoriel (xmm, ymm, zmm).i r f
: imprimer tous les registres flottants FPU (st0-7
et quelques autresf*
)D'autres groupes de registres en plus de
a
(all
) etf
(float
) peuvent être trouvés avec:comme documenté à l' adresse : https://sourceware.org/gdb/current/onlinedocs/gdb/Registers.html#Registers
Conseils :
xmm0
~xmm15
, sont 128 bits, presque toutes les machines modernes l'ont, ils sont sortis en 1999.ymm0
~ymm15
, sont de 256 bits, les nouvelles machines l'ont généralement, ils sont publiés en 2011.zmm0
~zmm31
, sont 512 bits, les PC normaux ne l'ont probablement pas ( comme l'année 2016 ), ils sont sortis en 2013, et principalement utilisés dans les serveurs jusqu'à présent.la source
p $eax
fonctionne à partir de GDB 7.7.1Depuis GDB 7.7.1, la commande que vous avez essayée fonctionne:
Cette syntaxe peut également être utilisée pour sélectionner entre différents membres de l'union, par exemple pour les registres à virgule flottante ARM qui peuvent être des nombres à virgule flottante ou des entiers:
À partir de la documentation :
et :
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 || Demande de fonctionnalité 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
Registres à virgule flottante ARM
Voir: /reverseengineering/8992/floating-point-registers-on-arm/20623#20623
la source
$
syntaxe.