2012-12-20 12 views
14

Kompiluję prosty kod poniżej i uruchamiam go w gdb. Ustawić punkt przerwania na strcpy linii, tak szybko, jak go uruchomić na wejście na przykład ABC, a następnie naciśnij s, pojawia się następujący błąd:strcpy-sse2-unaligned.S nie znaleziono

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. 

używam Ubuntu 12.04 amd64 oraz gcc 2.15 . Dowolny pomysł?


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

    char buffer[80]; 

    strcpy(buffer, argv[1]); 

    return 0; 
} 
+3

To nie jest błąd - gdb nie może znaleźć pliku źródłowego dla implementacji 'strcpy', ale nadal będzie wyświetlał zdemontowany kod. –

+0

tak, zauważyłem to, ale dlaczego? i jakikolwiek pomysł, jak go rozwiązać? – Afshin

+1

Nie wiem, dlaczego został wycofany ... – Mehrdad

Odpowiedz

13

Jest całkowicie nieszkodliwy ignorować te "błędy" podczas debugowania.

Błąd polega na tym, że GDB szuka źródła funkcji strcpy. Każda funkcja w libc, że nie mają źródło dla dasz podobny błąd, np:

int *p = malloc(sizeof *p); 

Potem ...

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

Zawsze można pobrać źródła LIBC i połączyć go z GDB:

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

potem ...

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

... która pozwoli ci przejść przez kod źródłowy malloc. Nie jest to szczególnie użyteczne, ale czasami może się przydać.

+0

dzięki dużo, że rozwiązany mój problem;) – Afshin

+1

Po prostu upewnij się, że kopiujesz SAMĄ WERSJĘ, tak jak używasz w systemie. Ostatnim, co dostajesz z git clone, być może nie jest to, co jest zainstalowane w Twoim systemie (i może nie jest to najlepszy pomysł!). –

+1

Podobnie jak szybkie przypomnienie, jeśli używasz gdb możesz użyć n (dla następny), aby pominąć linie z tymi wywołaniami funkcji. – Sum