Bonjour,
Je suis sous Debian Wheezy et débutant.
Je lis un livre dans lequel l’auteur examine un programme en C très basique sous GDB. Voici le code du programme :
[code]#include <stdio.h>
#include <string.h>
int main() {
char str_a[20];
strcpy(str_a, "Hello, World!\n");
printf(str_a);
}[/code]
Le programme est compilé avec gcc.
Sous GDB, l’auteur place un point d’arrêt avant strcpy (break 6) puis sur strcpy. Je ne m’intéresse qu’au point d’arrêt sur strcpy :
Puis :
[code]Function “strcpy” not defined
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 2 (strcpy) pending
(gdb) run
Pending breakpoint “strcpy” resolved[/code]
Puis les infos sur le 1er breakpoint s’affichent, je passe, je ne m’intéresse qu’à strcpy
code continue
Continuing.
Breakpoint 4, 0xb7f076f4 in strcpy () from /lib/…/libc.so.6[/code]
En suivant point par point les indications de l’auteur, chez moi GDB ne retourne pas les mêmes informations au niveau du point d’arrêt sur strcpy
J’ai ensuite lu sur un forum qu’il fallait utiliser l’option -fno-builtin à la compilation car gcc utilisait automatiquement __builtin_strcpy dans certains cas.
Effectivement en utilisant cette option à la compilation puis en examinant le binaire avec GDBvcela s’apparente plus à ce que l’auteur écrit. Cependant :
- GDB ne m’avertit pas, pas de messages :
Function "strcpy" not defined
Make breakpoint pending on future shared library load? (y or [n])
Breakpoint 2 (strcpy) pending
- Et une fois arrivé au point d’arrêt sur strcpy, gdb affiche :
Savez-vous pour quelle raison GDB affiche deux points d’interrogation au lieu de strcpy alors qu’il a pourtant l’air de bien trouver le chemin du fichier contenant la fonction (libc.so.6)
Merci pour votre aide.