2012-12-20 16 views
14

Sto compilando il semplice codice sottostante ed eseguo in gdb. Ho impostato un punto di interruzione alla linea strcpy, non appena ho eseguito per l'ingresso, per esempio abc, quindi premere s, ottengo il seguente errore:strcpy-sse2-unaligned.S non trovato

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. 

Sto usando Ubuntu 12.04 AMD64 e gcc 2.15 . Qualche idea?


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

    char buffer[80]; 

    strcpy(buffer, argv[1]); 

    return 0; 
} 
+3

Questo non è un errore - gdb non riesce a trovare il file sorgente per l'implementazione 'strcpy' ma continuerà a visualizzare il codice smontato. –

+0

sì, l'ho notato, ma perché? e qualche idea su come risolverlo? – Afshin

+1

Non si sa perché sia ​​stato downvoted ... – Mehrdad

risposta

13

è del tutto innocuo per ignorare questi "errori" durante il debug.

L'errore è semplicemente perché GDB sta cercando la sorgente della funzione strcpy. Qualsiasi funzione in libc che non si ha la fonte per gli daremo un errore simile, ad esempio:

int *p = malloc(sizeof *p); 

Poi ...

(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. 

È sempre possibile scaricare sorgente di GNU libc e collegarlo con GDB:

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

Poi ...

(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)) 

... che ti consentirà di scorrere il codice sorgente di malloc. Non è particolarmente utile, ma a volte può tornare utile.

+0

grazie mille, che ha risolto il mio problema;) – Afshin

+1

Assicurati di copiare la SAME VERSION mentre stai usando il sistema. L'ultimo, che è quello che ottieni da git clone, forse non è quello che è installato sul tuo sistema (e potrebbe non essere la migliore idea!) –

+1

Proprio come un promemoria rapido, se stai usando gdb puoi usare n (per avanti) per saltare le linee con quelle chiamate di funzione. – Sum