Добавить исходный код в файл elf

Я хочу добавить свой исходный код C++ в соответствующий двоичный файл elf, и я ищу лучший способ сделать это. (Я использую несколько версий своего кода, и не каждая версия должна быть зафиксирована в svn).

Могу ли я просто добавить исходный код, не уничтожая файл elf, используя оператор bash >>? Или это objcopy --add-section способ сделать это?

Кстати, есть ли идея получше, чтобы просто grep рекурсивно выделить все #include строк из файлов исходного кода, чтобы определить ВСЕ используемые файлы исходного кода?


person Manuel    schedule 30.11.2009    source источник
comment
Я не совсем уверен, что именно вы здесь спрашиваете. (a) Почему вы пытаетесь добавить исходный код к бинарному файлу elf? (b) Какое отношение это имеет к сохранению версий в Subversion? (c) Даже если бы вы могли вставить исходный код с помощью objcopy, что вы собираетесь делать с ним, когда он там? (d) Вы пытаетесь определить, какие исходные файлы компилируются в конкретный двоичный файл elf?   -  person Greg Hewgill    schedule 30.11.2009
comment
(а) потому что это научная программа, и уравнения очень часто слегка модифицируются. Поэтому нужно уметь понимать, какое уравнение использовалось. б) на самом деле ничего. Я просто хотел упомянуть, что использование svn здесь не работает для отслеживания версий. (c) Затем вы можете посмотреть, какой тип уравнений был использован (d) из-за (c)   -  person Manuel    schedule 30.11.2009
comment
Вы нашли подходящий ответ. Не похоже, что указанный ответ работает очень хорошо.   -  person Lime    schedule 01.03.2015


Ответы (2)


Если вы используете gcc, вы можете использовать флаг -M, чтобы получить файл со списком всех включенных файлов. Он записывается в файл, указанный с помощью -o, вот так:

gcc -M -c my_file.c -o list_of_included_files.txt
person Puppe    schedule 30.11.2009

Вы можете получить вывод препроцессора из большинства компиляторов C/C++, используя параметр "-E" в командной строке, например,

g++ -E my_file.c -o my_file_preproc.c

objcopy — легкая ставка, но я наткнулся на компилятор ресурсов ELF сегодня, и это может быть вам полезно. Он позволяет вам вставлять в файл ELF все, что вы хотите, и даже генерирует код C/C++, чтобы вы могли его добавить. Таким образом, вы даже можете создать библиотеку, с которой может быть связан ваш код, которая будет распечатывать исходный код исполняемого файла прямо из исполняемого файла.

Что вызывает еще одну идею... вместо того, чтобы просто включать весь предварительно обработанный исходный код, вы могли бы иметь исполняемый файл, предлагающий возможность распечатать используемые уравнения.

person Chris Cleeland    schedule 18.01.2010