2012-04-11 12 views
1

Zum Beispiel definiere ich einen Makro:Wie überprüft man, ob ein Makro in einer Objektdatei in C existiert?

#ifdef VERSION 
//.... do something 
#endif 

Wie kann ich überprüfen, ob VERSION in meiner Objektdatei vorhanden ist oder nicht? Ich habe versucht, es mit objdump zu zerlegen, aber fand keinen tatsächlichen Wert meines Makros VERSION. VERSION ist in Makefile definiert.

Antwort

6

Versuchen Sie, mit -g3 Option in gcc zu kompilieren. Es speichert auch Makroinformationen in der generierten ELF-Datei.

Danach, wenn Sie ein Makro MACRO_NAME nur grep dafür in der ausführbaren Ausgabedatei oder Ihre Objektdatei definiert haben. Zum Beispiel

$ grep MACRO_NAME a.out # any object file will do instead of a.out 
Binary file a.out matches 

Oder Sie können auch versuchen,

$ strings -a -n 1 a.out | grep MACRO_NAME 

-a Do not scan only the initialized and loaded sections of object files; 
    scan the whole files. 

-n min-len Print sequences of characters that are at least min-len characters long, 
    instead of the default 4. 
+0

+1 für '-g3' ... - um dann das Makro in den binären finden würde ich' Saiten bevorzugt | grep '. – alk

+0

@alk. Ich habe versucht, die Strings-Version, aber die 'MACRO_NAME' ist so in die Objektdatei eingebettet, dass' Strings' es nicht als String behandelt und Grep fehlschlägt. –

+0

Mea culpa, ich habe das gerade getestet und es scheint, dass Sie Recht haben. Brauchen Sie eine Untersuchung zu diesem ... * Ausgraben * – alk

Verwandte Themen