unterscheiden Ich versuche, die Ausgabe eines nm oder readelf -s auf einer ausführbaren Datei zu verarbeiten. Ich habe jedoch Probleme, statische Funktionen in der Ausgabe voneinander zu unterscheiden. HierWie kann ich statische Funktionen mit nm-oder Realelf-Ausgabe in C
ist das, was ich arbeite mit:
test.c
static int foo() {
int x = 6;
}
main() {}
other.c
static int foo() {
int x = 5;
}
ich kompilieren diese in etwa so:
gcc -o test test.c other.c
Und dann einen nm-Befehl ausführen, um die Symbole alle zu bekommen:
nm test
unter denen die folgenden zwei Symbole (für meine statischen Funktionen) erscheinen:
00000000004004ed t foo
0000000000400500 t foo
Gibt es eine Methode in der Lage sein, um zu unterscheiden, aus welcher Datei die spezifische Foo-Funktion stammt? Oder muss ich vor dem Kompilieren etwas Magie machen, um das zu erreichen?
Ich sollte hinzufügen, dass für meinen Anwendungsfall habe ich Zugriff auf die endgültige binäre und die Objektdateien, die von ihm verwendet, aber ich kann es nicht selbst erstellen, um sicherzustellen, dass es eine Symboltabelle hat.
Danke!
soweit ich weiß Quelldatei Info wird in Debug-Informationen gespeichert. Vollständig entferntes Binärprogramm wird keine solche Information haben. Um Debug-Informationen zu lesen, klicken Sie auf 'readelf' --debug-dump. Ähnliches --debug-syms für 'nm' –
Kompiliere mit' -g' und benutze 'nm -l' – 4566976
Ich sollte das für meinen Anwendungsfall hinzufügen, ich habe Zugriff auf die endgültige Binärdatei und die von ihr verwendeten Objektdateien, aber Ich kann Debug-Informationen in der Binärdatei nicht erstellen oder sicherstellen. – Andrew