236 votes

Comment imprimer les valeurs de registre dans GDB ?

Comment puis-je imprimer la valeur de %eax y %ebp ?

(gdb) p $eax
$1 = void

13 votes

Utilisez layout reg pour que gdb affiche une table de tous les registres entiers et drapeaux, en mettant en évidence celui ou ceux qui ont été modifiés par l'instruction précédente. Voir stackoverflow.com/tags/x86/info par exemple.

300voto

geekosaur Points 26170

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

0 votes

J'obtiens : Invalid register `%eax' Et si je fais juste "info registers" eax n'apparaît pas. Pourtant, je regarde mon assemblage de code dans l'IDE où un signal EXC_BAD_ACCESS a été généré avec l'instruction : test %eax, %eax Ceci dans XCode en utilisant gdb. Pourquoi gdb ne signale-t-il pas le registre eax ?

1 votes

Même problème : %eax est dans le code, mais print $eax montre void.

5 votes

La réponse de Bridgette fonctionne pour moi. La réponse de geekosaur est en grande partie correcte, mais vous devez omettre le signe %, donc la commande pour un registre spécifique est la suivante info registers eax . Je ne suis pas sûr que cela soit différent pour les différentes versions de gdb, cependant.

68voto

Bridgette Points 221

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 en 64 bits, les registres commencent par r. Les faire commencer par e n'est pas valide.

info registers rip

Ceux-ci peuvent être abrégés en :

i r rip

45voto

yano Points 863

Il y a aussi :

info all-registers

Vous pouvez alors obtenir le nom du registre qui vous intéresse -- très utile pour trouver des registres spécifiques à une plateforme (comme NEON Q... sur ARM).

4 votes

Il s'agit de registres dont j'ignorais l'existence :-)

2 votes

Sur ma machine, cela imprime eax , ecx et d'autres registres standard cachés par info registers . Cela devrait probablement être la réponse acceptée.

18voto

fly bird Points 818

Commandes Gdb :

  • i r <register_name> : imprimer un seul registre, par exemple i r rax , i r eax
  • i r <register_name_1> <register_name_2> ... : imprimer plusieurs registres, par exemple i r rdi rsi ,
  • i r Impression de tous les registres sauf les registres à virgule flottante et vectoriels (xmm, ymm, zmm).
  • i r a Impression de tous les registres, y compris les registres à virgule flottante et vectoriels (xmm, ymm, zmm).
  • i r f : imprimer tous les registres flottants de la FPU ( st0-7 et quelques autres f* )

D'autres groupes de registres que a ( all ) y f ( float ) peuvent être trouvés avec :

maint print reggroups

comme documenté à : https://sourceware.org/gdb/current/onlinedocs/gdb/Registers.html#Registers

Conseils :

  • xmm0 ~ xmm15 sont de 128 bits, presque toutes les machines modernes en sont équipées, elles ont été publiées en 1999.
  • ymm0 ~ ymm15 sont de 256 bits, les nouvelles machines en sont généralement équipées, elles sont sorties en 2011.
  • zmm0 ~ zmm31 sont de 512 bits, un ordinateur normal n'en dispose probablement pas ( comme l'année 2016 ), ils sont sortis en 2013, et principalement utilisés dans les serveurs jusqu'à présent.
  • Une seule série de xmm / ymm / zmm sera affichée, car il s'agit des mêmes registres dans un mode différent. Sur ma machine, c'est ymm qui est affiché.

17voto

Procras Points 182
  • Si vous voulez seulement le vérifier une fois, info registers montrer les registres.
  • Si vous ne voulez regarder qu'un seul registre, par exemple, display $esp continuer à afficher les registres esp dans la ligne de commande gdb.
  • Si vous voulez regarder tous les registres, layout regs continuer à montrer les registres, avec le mode TUI.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X