2013-08-31 7 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 

Ho scritto un semplice programma che stampa una stringa e restituisce. Sono stato in grado di eseguirlo direttamente, digitando "./a.out". Ma quando lo eseguo in gdb succede l'errore sopra menzionato. Ho provato a compilare il codice utilizzando il flag "-g" e senza usarlo. Entrambe le volte ha dato lo stesso risultato. Qualcuno può aiutarmi con questo problema ??Avviso GDB: sezione caricabile non trovata nel DSO del file di simboli aggiunto al sistema 0x7ffff7ffd000

+0

quali altri parametri hai passato 'gcc'? puoi pubblicare il comando completo che hai usato per compilarlo e collegarlo? –

+0

Ho provato questi comandi: gcc -g test.c gcc test.c –

+1

stai usando un vecchio kernel? https://bugzilla.redhat.com/show_bug.cgi?id=312011 – Alex

risposta

3

Quel messaggio,

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

SO 0x7ffff7ffd000

è un avvertimento che non impedisce l'esecuzione GCC a.out; almeno, non dovrebbe

Sta dicendo che c'è un oggetto caricato dinamicamente utilizzato da a.out che manca di simboli. Niente su a.out stesso.

Si può provare a creare a.out come eseguibile statico; In questo modo:

gcc -static a.c 

Ovviamente, aggiungere qualsiasi altro argomento del compilatore necessario.

In quanto eseguibile statico, non verrà visualizzato questo avviso da GCC. Questi simboli potrebbero ancora mancare, ma non dovrebbero influenzare l'esecuzione del programma.

+0

Questo probabilmente non funziona realmente; il "file" in questione viene iniettato nello spazio degli indirizzi del processo dal kernel al tempo exec(), indipendentemente da come il programma in questione è collegato. Inoltre, il debugger si chiama GDB. – SamB

+1

@SamB - yup, GDB sta tentando di eseguire l'eseguibile e porta all'avviso menzionato. Provaci. "Probabilmente non funziona" non fa molto per la risoluzione. – ash

+0

@SamB giusto. Atleast gcc [email protected] si comporta in modo identico con e senza '-static'. Il mio esempio di codice è troppo semplice per mostrarlo qui – dyomas

2

Sembra che questo sia un bug in glibc o gdb (a seconda di dove si vuole dare la colpa). È apparentemente innocuo: gdb funzionerà correttamente.

È causato da un po 'di magia che il kernel di Linux esegue sui binari che esegue. Per i dettagli, vedere Debian bug report 738702 e l'originale gdb bug report 13097.

C'è una patch per risolvere questo problema, che Debian ha applicato di recente, quindi il problema non si verifica più con GDB 7.7.1 su Debian.

Problemi correlati