Мне нужно выполнить objdump
на ELF, чтобы получить адрес и / или размеры конкретных функций и переменных, а также objcopy
преобразовать его в другой формат для операций, выполняемых позже. Особенно с первой частью, некоторые из операций, выполненных в результате objdump
немного сложнее, поэтому я пошел с созданием небольшого приложения C ++ для выполнения этого. Это работает, однако в настоящее время он вызывает GCC objdump
а также objdopy
непосредственно включая его параметры с system
вызов.
Есть несколько причин, по которым мне не нравится этот подход, главная из которых заключается в том, что мне нужно либо положиться на пользователя, имеющего их на ПК, либо распространять их со своим собственным исполняемым файлом и рассматривать его как динамическую библиотеку, но в форма исполняемых файлов, которая мне тоже не нравится.
Мой вопрос заключается в том, существует ли какая-либо форма библиотеки (gcc?), Которую я мог бы (желательно статически) связать для выполнения тех же операций таким образом? Я действительно предпочел бы использовать что-то настолько близкое к gcc, особенно когда речь идет о совместимости с файлами, созданными gcc, в качестве входных данных и выдачи того же результата, поскольку у меня уже есть такая версия моей собственной исполняемой программы.
Все эти инструменты obj * основаны на Библиотека BFD. Если вы посмотрите, как objdump делает свое дело, и скопируете его, вы сможете сделать то же самое в своем собственном коде.
Еще одна вещь, которую вы можете сделать, это просто скопировать код из objdump и друзей в ваши собственные программы. Это открытый исходный код, и вы можете сделать это. Все, что вам нужно, это сделать ваши собственные программы также GPL, какими они должны быть в любом случае, чтобы использовать библиотеку BFD.
Программы objdump и objcopy не являются частью gcc, они являются частью binutils. Кстати, libbfd и libopcodes также являются частью binutils, и они содержат функции, которые вы можете использовать.