2012-12-20 3 views
14

Je compile le code simple ci-dessous, et l'exécute dans gdb. Je mets un point de rupture à la ligne strcpy, dès que je le lance pour l'entrée par exemple abc, puis appuyez sur s, je reçois l'erreur suivante:strcpy-sse2-unaligned.S pas trouvé

Breakpoint 1, main (argc=2, argv=0x7fffffffdd98) at ExploitMe.c:9 
9   strcpy(buffer, argv[1]); 
(gdb) s 
__strcpy_sse2_unaligned() at ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S:48 
48 ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S: No such file or directory. 

J'utilise ubuntu 12.04 AMD64 et gcc 2.15 . Une idée?


main(int argc, char *argv[]) { 

    char buffer[80]; 

    strcpy(buffer, argv[1]); 

    return 0; 
} 
+3

Ce n'est pas une erreur - gdb ne trouve pas le fichier source pour l'implémentation de 'strcpy' mais il affichera toujours le code désassemblé. –

+0

oui, je l'ai remarqué, mais pourquoi? et toute idée de comment le résoudre? – Afshin

+1

Je ne sais pas pourquoi cela a été downvoted ... – Mehrdad

Répondre

13

Il est totalement inoffensif pour ignorer ces "erreurs" lors du débogage.

L'erreur est simplement que GDB recherche la source de la fonction strcpy. Toute fonction libc que vous n'avez pas la source vous donnera une erreur semblable, par exemple:

int *p = malloc(sizeof *p); 

Alors ...

(gdb) s 
5  int *p = malloc(sizeof *p); 
(gdb) s 
__GI___libc_malloc (bytes=4) at malloc.c:2910 
2910 malloc.c: No such file or directory. 

Vous pouvez toujours télécharger la source de GNU libc et lier avec GDB:

git clone https://github.com/jeremie-koenig/glibc /opt/src/glibc 

Alors ...

(gdb) dir /opt/src/glibc/malloc 
(gdb) s 
5  int *p = malloc(sizeof *p); 
(gdb) s 
__GI___libc_malloc (bytes=4) at malloc.c:2910 
2910    } 
(gdb) s 
2915   } else if (!in_smallbin_range(size)) 

... qui vous permettra de parcourir le code source de malloc. Ce n'est pas particulièrement utile, mais cela peut parfois être utile.

+0

merci beaucoup, cela a résolu mon problème;) – Afshin

+1

Assurez-vous simplement que vous copiez la même version que vous utilisez sur le système. Le dernier, qui est ce que vous obtenez de git clone, n'est peut-être pas ce qui est installé sur votre système (et peut-être pas la meilleure idée non plus!) –

+1

Pour rappel, si vous utilisez gdb, vous pouvez utiliser n (pour ensuite) pour passer les lignes avec ces appels de fonction. – Sum