2013-08-31 11 views
8
abijith bufferOverFlow $ gdb a.out 
GNU gdb (GDB) 7.6 
Copyright (C) 2013 Free Software Foundation, Inc. 
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> 
This is free software: you are free to change and redistribute it. 
There is NO WARRANTY, to the extent permitted by law. Type "show copying" 
and "show warranty" for details. 
This GDB was configured as "x86_64-unknown-linux-gnu". 
For bug reporting instructions, please see: 
<http://www.gnu.org/software/gdb/bugs/>... 
Reading symbols from /home/abijith/Project/Security/bufferOverFlow/a.out...done 
(gdb) r 
Starting program: /home/abijith/Projec2qt/Security/bufferOverFlow/a.out 
warning: no loadable sections found in added symbol-file system-supplied 
SO at 0x7ffff7ffd000 

Napisałem prosty program, który wypisuje ciąg i wraca. Udało mi się go wykonać bezpośrednio, wpisując "./a.out". Ale kiedy uruchomię go w gdb, pojawia się wspomniany wyżej błąd. Próbowałem skompilować kod przy użyciu flagi "-g" i bez jej używania. Za każdym razem dawał taki sam wynik. Czy ktoś może mi pomóc z tym problemem?Ostrzeżenie GDB: Sekcja ładowalna nie została znaleziona w dodanym przez system plików DSO przy 0x7ffff7ffd000

+0

jakie inne parametry przekazałeś 'gcc'? czy możesz opublikować pełne polecenie, które zostało użyte do skompilowania i połączenia? –

+0

Próbowałem następujących poleceń: gcc -g test.c gcc test.c –

+1

czy używasz starego jądra? https://bugzilla.redhat.com/show_bug.cgi?id=312011 – Alex

Odpowiedz

3

To wiadomość,

warning: no loadable sections found in added symbol-file system-supplied 

SO w 0x7ffff7ffd000

jest ostrzeżeniem, że nie przeszkadza GCC z systemem a.out; przynajmniej nie powinien.

Mówi się, że istnieje dynamicznie ładowany obiekt używany przez a.out, który nie ma symboli. Nic o sobie.

Możesz spróbować zbudować a.out jako statyczny plik wykonywalny; w ten sposób:

gcc -static a.c 

Oczywiście, dodaj wszelkie inne argumenty kompilatora potrzebne.

Jako plik wykonywalny statyczny, nie otrzymasz ostrzeżenia od GCC. Symbole te nadal mogą nie być dostępne, ale nie powinno to wpłynąć na wykonanie programu.

+0

To prawdopodobnie nie działa; dany "plik" jest wstrzykiwany do przestrzeni adresowej procesu przez jądro w czasie exec(), niezależnie od tego, jak dany program jest połączony. Ponadto debugger nazywa się GDB. – SamB

+1

@SamB - tak, GDB próbuje uruchomić plik wykonywalny i prowadzi do wspomnianego ostrzeżenia. Spróbuj. "Prawdopodobnie nie działa" nie ma większego wpływu na rozdzielczość. – ash

+0

@SamB w prawo. Atleast gcc [email protected] zachowuje się identycznie zi bez '-static'. Przykład mojego kodu jest zbyt prosty, aby go tutaj wyświetlić – dyomas

2

Wygląda na to, że jest to błąd w glibc lub gdb (w zależności od tego, gdzie chcesz zrzucić winę). Jest pozornie nieszkodliwy - gdb będzie działał dobrze.

Jest to spowodowane pewną magią, którą jądro Linuksa wykonuje na uruchamianych plikach binarnych. Aby uzyskać szczegółowe informacje, zobacz Debian bug report 738702 i oryginalny gdb bug report 13097.

Istnieje łata do rozwiązania tego problemu, którą Debian zastosował niedawno, więc problem nie występuje już w GDB 7.7.1 na Debianie.