web-dev-qa-db-fra.com

Afficher la valeur trouvée à l'adresse donnée gdb

Je débogue un fichier binaire dans gdb. C'était du code C compilé par gcc sur un Intel IA-32. J'ai récupéré cette sortie de objdump. Je suis le plus intéressé par la dernière ligne ici:

08048d9e <func_1>
8048d9e:    55                      Push   %ebp
8048d9f:    89 e5                   mov    %esp,%ebp
8048da1:    83 ec 18                sub    $0x18,%esp
8048da4:    c7 44 24 04 88 99 04    movl   $0x8049988,0x4(%esp)
8048dab:    08 
8048dac:    8b 45 08                mov    0x8(%ebp),%eax
8048daf:    89 04 24                mov    %eax,(%esp)
8048db2:    e8 54 01 00 00          call   8048f0b <strings_not_equal>

Je crois que cette dernière ligne comparera la valeur trouvée à l'adresse indiquée: 8048f0b. Je tente:

(gdb) x 0x8048f0b

et recevez:

0x8048f0b <strings_not_equal>:  0x57e58955

Suis-je en train d'interpréter l'Assemblée incorrectement? Est-ce la bonne façon de lire la valeur d'une adresse dans gdb? Je m'attendais à trouver une valeur hexadécimale plus ascii. Je souhaite trouver la valeur de chaîne stockée qui est comparée.

Avez-vous également un outil graphique préféré que vous aimez utiliser pour ce type de débogage? J'ai pensé à essayer ddd. Je veux trouver un moyen plus simple de déboguer.

18
Kyle Weller

Vous lisez correctement la valeur à l'adresse mémoire 0x8048f0b, Mais la ligne call 8048f0b <strings_not_equal> Indique que cette adresse est le début d'une fonction (appelée strings_not_equal()). Vous ne vous attendriez pas à ce que ce soit ASCII - vous vous attendriez à ce que ce soit plus de code machine.

Si vous recherchez les arguments de fonction à strings_not_equal(), ceux-ci sont poussés sur la pile. Le premier argument est copié à partir de 0x8(%ebp), qui est le premier argument de func1(). Le deuxième argument est $0x8049988, Qui est vraisemblablement l'adresse d'une chaîne.

Si vous souhaitez imprimer le contenu de l'adresse sous forme de chaîne, vous pouvez le faire avec x/s:

x/s 0x8049988
23
caf