Question

For example, I define a macro:

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

How can I check if VERSION exist in my object file or not? I tried to disassemble it with objdump, but found no actual value of my macro VERSION. VERSION is defined in Makefile.

Était-ce utile?

La solution

Try compiling with -g3 option in gcc. It stores macro information too in the generated ELF file.

After this, if you've defined a macro MACRO_NAME just grep for it in the output executable or your object file. For example,

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

Or you can even try,

$ 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.

Autres conseils

The following command displays contents of .debug_macro DWARF section:

$ readelf --debug-dump=macro path/to/binary

or

$ objdump --dwarf=macro path/to/binary

You can also use dwarfdump path/to/binary, but it's not easy to leave only .debug_macro section in the output.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top