Может ли кто-нибудь помочь мне выяснить, как я могу получить адресное пространство динамически загружаемой библиотеки?
Контекст: я загружаю общую библиотеку, используя dlopen
, и в какой-то другой момент я хочучтобы отследить malloc
вызовы, но только те, которые были инициированы этой библиотекой.
То, что я сейчас делаю, находится в ловушке malloc
, которую я имею, я прохожу весь стек вызовов (получено с помощью backtrace
) и с использованием dladdr
Я проверяю каждый указатель на функцию, чтобы узнать, исходит ли он из моей общей библиотеки или нет, но он очень медленный.
Я подумал, что, возможно, если я забочусь только оодну библиотеку, которую я загружаю вручную, я могу просто получить ее адресное пространство, как оно есть в выводе карт памяти:
$ cat /proc/2049/maps | head
00400000-007a8000 r-xp 00000000 08:01 526896 /usr/bin/python3.5
009a8000-009aa000 r--p 003a8000 08:01 526896 /usr/bin/python3.5
...
и посмотреть, содержится ли адрес функции из стека вызовов в этом адресном пространстве?Я думаю, это должно быть намного быстрее ... Как я могу это сделать?Может быть, я могу получить .text
символьный адрес библиотеки, используя dlsym
(поскольку меня интересует только адрес исполняемого кода), но как тогда рассчитать размер?