2 votes

Lecture correcte des valeurs gdb après mov

Voici deux lignes d'un binaire que je débogue dans gdb. Il s'agit de code C compilé par gcc pour un IA32 :

8049345:    8b 45 08                mov    0x8(%ebp),%eax
8049348:    89 04 24                mov    %eax,(%esp)

J'ai un display $eax configuré de façon à ce qu'il affiche la valeur après chaque étape. Après la première ligne, le display dit : 6: $eax = 134527652 .

Je peux x 134527652 o x $eax et je vois 0x804baa4 <input_strings+100>: "1 1 1 1 1 1" Pourquoi l'affichage et le x me donnent-ils des résultats différents ?

La ligne suivante dit, je crois, de déplacer eax à l'adresse stockée par esp ? J'ai eu un display $esp et il est dit : 2: $esp = (void *) 0xffffd540 .

Avant le deuxième mov, je x 0xffffd540 et voir : 0xffffd540: "" après le mov je répète et je vois :

0xffffd540:  "\244\272\004\bY\233\004\b\210\325\377\377\214\325\377\377\220\325\377\377\224\325\377\377\230\325\377\377\234\325\377\377\001"

Je pensais que cette ligne allait déplacer eax dans cette adresse, mais je ne comprends manifestement pas quelque chose ici ? Faites-moi savoir si vous souhaitez voir d'autres lignes du binaire.

2voto

R.. Points 93718

Je pense que votre confusion peut être causée par le fait que la x imprime les données à l'adresse 0xffffd540 sous forme de chaîne. Vraisemblablement, avant le stockage à cette adresse, le premier octet à 0xffffd540 est un octet 0, traité comme terminant une chaîne de caractères, et donc vous voyez "" la chaîne vide. Après avoir écrit la valeur 0x804baa4 à cette adresse, vous voyez sa représentation en octets :

\244\272\004\b

donde \244 (échappement octal) est 0xa4, \272 est 0xba, \004 est 0x04, et \b (l'échappement pour le caractère de retour arrière, U+0008) est 0x08.

Vous voyez plus de déchets après lui dans la chaîne imprimée parce qu'il n'y a plus de terminateur nul.

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