objdump и objcopy как библиотека c / c ++

Мне нужно выполнить objdump на ELF, чтобы получить адрес и / или размеры конкретных функций и переменных, а также objcopy преобразовать его в другой формат для операций, выполняемых позже. Особенно с первой частью, некоторые из операций, выполненных в результате objdump немного сложнее, поэтому я пошел с созданием небольшого приложения C ++ для выполнения этого. Это работает, однако в настоящее время он вызывает GCC objdump а также objdopy непосредственно включая его параметры с system вызов.

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

Мой вопрос заключается в том, существует ли какая-либо форма библиотеки (gcc?), Которую я мог бы (желательно статически) связать для выполнения тех же операций таким образом? Я действительно предпочел бы использовать что-то настолько близкое к gcc, особенно когда речь идет о совместимости с файлами, созданными gcc, в качестве входных данных и выдачи того же результата, поскольку у меня уже есть такая версия моей собственной исполняемой программы.

1

Решение

Все эти инструменты obj * основаны на Библиотека BFD. Если вы посмотрите, как objdump делает свое дело, и скопируете его, вы сможете сделать то же самое в своем собственном коде.

Еще одна вещь, которую вы можете сделать, это просто скопировать код из objdump и друзей в ваши собственные программы. Это открытый исходный код, и вы можете сделать это. Все, что вам нужно, это сделать ваши собственные программы также GPL, какими они должны быть в любом случае, чтобы использовать библиотеку BFD.

3

Другие решения

Программы objdump и objcopy не являются частью gcc, они являются частью binutils. Кстати, libbfd и libopcodes также являются частью binutils, и они содержат функции, которые вы можете использовать.

2