2015-05-05 10 views
2

Мы имеем ситуацию, когда (упрощенный):Есть ли способ увидеть функции внутри архива C/C++ (.a)?

  1. test() существует в source.c
  2. source.c компилирует object.o
  3. object.o компонуется в архив archive.a
  4. archive.a компилируется в окончательном binary

Мы пытаемся изменить имя test() на что-то другое. Но шаг ссылки в (4) говорит, что новая сигнатура метода не существует. Используя gobjdump, мы видим, что новый переименованный метод существует в object.o (он находится в том же SECT, что и другие методы и не является UND).

Мы можем с уверенностью видеть, что object.o существует в archive.a. Однако мы не уверены (из-за сложной системы сборки), что archive.a содержит метод.

TL; DR: Есть ли способ увидеть внутри архивного файла и перечислить в нем функции конкретного двоичного объекта?

+1

Это C, или C++? C не имеет «методов» и «объектов» в этом отношении. – unwind

+0

Это на самом деле библиотека с открытым исходным кодом методов C, которые помещаются в архив, но скомпилированы в проект на C++. – JoshJ

+3

Вы можете использовать инструмент 'nm', чтобы отобразить все функции, найденные в библиотеке. –

ответ