переменная печати с типом из общей библиотеки - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть программа, которая использует некоторые методы и типы из общей библиотеки extern. Я хочу проанализировать двоичный файл с помощью GDB. Все работает отлично. Я могу пройтись по программе и напечатать переменные. Но если я хочу напечатать структуру, определенную в заголовочном файле общей библиотеки, я получаю следующее сообщение

No symbol "_t_TYPE" in current context.

иерархия печати

(gdb) print vType
$3 = (TYPE) 0x7fffe75e69d0
(gdb) print (TYPE) 0x7fffe75e69d0
$4 = (_t_TYPE *) 0x7fffe75e69d0
(gdb) print (_t_TYPE *) 0x7fffe75e69d0
No symbol "_t_TYPE" in current context.

Я не могу скомпилировать библиотеку с флагами отладки или без оптимизации.

Я знаю, что файл удален. Результат "file library.so":

библиотека: ELF 64-битный общий объект LSB, x86-64, версия 1 (SYSV), динамически связан, BuildID [sha1] = 3f26c595cb3a940260bb82dfa7ec60094db4928 c, раздели

Есть ли способ напечатать структуру?

1 Ответ

1 голос
/ 02 апреля 2020

Необходимо рассмотреть два случая:

  1. Тип struct X общедоступен, но не используется вашей программой.
  2. Тип является непрозрачным и закрытым для библиотека.

В первом случае вы можете либо использовать переменную типа struct X где-нибудь в вашей программе, либо использовать метод из этого ответа , чтобы сделать определение struct X доступно для GDB.

Во втором случае разработчики библиотеки действительно не хотят, чтобы вы заглядывали в их частные детали реализации. Единственный способ сделать это - выполнить обратный инжиниринг кода в библиотеке. Если вы сделаете это, обратите внимание, что реализация может измениться даже при незначительных обновлениях библиотеки (поскольку это частная реализация детали, изменение ее не влияет на документированный API или ABI библиотеки).

заголовочный файл не очень помогает. typedef struct _t_TYPE* TYPE;

Да: это обычная техника для сокрытия реализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...