Как проверить, существует ли макрос в объектном файле в C?

Например, я определяю макрос:

<code>#ifdef VERSION
 //.... do something
#endif
</code>

Как я могу проверить, еслиVERSION существует в моем объектном файле или нет? Я пытался разобрать его сobjdump, но не нашел фактического значения моего макросаVERSION. VERSION определяется в Makefile.

Ответы на вопрос(2)

Решение Вопроса

Попробуйте скомпилировать с-g3 вариант вgcc, Он также хранит информацию о макросах в сгенерированном файле ELF.

После этого, если вы определили макросMACRO_NAME простоgrep для этого в выходной исполняемый файл или ваш объектный файл. Например,

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

Или вы можете даже попробовать,

$ 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.
 11 апр. 2012 г., 11:21
Mea culpa, я только что проверил это, и кажется, что вы правы. Нужно расследовать это ...out digging
 11 апр. 2012 г., 11:29
@alk :) обновил мой ответ!
 11 апр. 2012 г., 11:17
@alk. Я попробовал версию для строк, ноMACRO_NAME настолько встроен в объектный файл, чтоstrings не рассматривает это как строку, и grep терпит неудачу.
 11 апр. 2012 г., 11:25
Хорошо, понял ... - используйте:strings -a <binary> | grep <macro> и это работает. Увидетьman strings за то, что происходит.
 11 апр. 2012 г., 11:14
+1 за-g3 ... - чтобы затем найти макрос в двоичном файле, который я бы предпочелstrings <binary> | grep <macro>.

Следующая команда отображает содержимое.debug_macro Раздел DWARF:

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

или же

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

Вы также можете использоватьdwarfdump path/to/binary, но этонелегко оставить только.debug_macro раздел на выходе.

Ваш ответ на вопрос