Sto cercando di elaborare l'output di un nm o di read-s su un file eseguibile. Tuttavia, ho difficoltà a distinguere le funzioni statiche l'una dall'altra nell'output.Come differenziare le funzioni statiche con l'output nm o readelf in C
Ecco quello che sto lavorando con:
test.c
static int foo() {
int x = 6;
}
main() {}
other.c
static int foo() {
int x = 5;
}
compilo questi in questo modo:
gcc -o test test.c other.c
e quindi eseguire un comando nm per ottenere tutti i simboli:
nm test
Tra i quali i seguenti due simboli (per le mie funzioni statiche) compaiono:
00000000004004ed t foo
0000000000400500 t foo
Esiste un metodo per essere in grado per distinguere da quale file appariva la funzione foo specifica? O avrò bisogno di fare un po 'di magia prima di compilarlo per farlo funzionare?
Dovrei aggiungere che per il mio caso d'uso, ho accesso al file binario finale e ai file oggetto utilizzati da esso, ma non posso effettivamente realizzarlo da solo per assicurarmi che abbia una tabella dei simboli.
Grazie!
per quanto ne so, le informazioni sul file di origine sono memorizzate in informazioni di debug. Il binario completamente spogliato non avrà tali informazioni. Per leggere le informazioni di debug, consulta l'opzione 'readelf' --debug-dump. Simili - debug-syms per 'nm' –
Compila con' -g' e usa 'nm -l' – 4566976
Dovrei aggiungere che per il mio caso d'uso, ho accesso al binario finale e ai file oggetto usati da esso, ma Non riesco a creare o garantire le informazioni di debug nel binario. – Andrew