libbfd и общие библиотеки

Я использую libbfd отобразить адреса программы в функцию / строку #/ имя файла, которая отлично работает для функций в моем коде. Но когда он попадает в адрес функции, которая находится в общей библиотеке (например, /lib64/libc.so), он не может выполнить перевод.

Например, моя программа может генерировать следующий вывод:

my_malloc_hook (): 237 [main.c]
0x3f0be80ed2
autolistVarSet (): 38 [list.c]
main (): 336 [main.c]
0x3f0be1ed1d
_start (): 0 []

И вы можете видеть, как адреса 0x3f0bexxxxx не были переведены. Я уверен, что это функции в libc из-за вывода ldd:

linux-vdso.so.1 => (0x00007fff71def000)
libc.so.6 => /lib64/libc.so.6 (0x0000003f0be00000)
/lib64/ld-linux-x86-64.so.2 (0x0000003f0ba00000)

Моя программа относительно длинна, чтобы публиковать здесь, но суть этого:

bfd_init();
bfd_set_default_target(TARGET);
bfd_openr(program, NULL);
bfd_read_minisymbols(...);
bfd_map_over_sections(...);

Я отмечаю в bfd_map_over_sections() обратный вызов, что ни один из разделов не связан с общими библиотеками.

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

0 ответов

Другие вопросы по тегам