Я пытаюсь обернуть функцию. Для этого я подумал об использовании dlsym
, чтобы получить реальное расположение функции в памяти после ввода моей динамической библиотеки.
Я работаю на MacOS Mojave (10.14.6)
с Apple clang version 11.0.0 (clang-1100.0.33.8)
.
Iпопытался запустить довольно простой код, отображающий сообщение каждый раз, когда вызывался malloc
.
Поэтому я использовал код этого поста: Переопределение 'malloc' с использованием механизма LD_PRELOAD
Мой тестовый код был:
#include <stdlib.h>
int main()
{
(void)malloc(1);
(void)malloc(1);
return (0);
}
Я внедрил динамическую библиотеку, используя DYLD_INSERT_LIBRARIES=./mylib.so DYLD_FORCE_FLAT_NAMESPACE=1
в OSX и LD_PRELOAD=./mylib.so
в Ubuntu.
В OSX программа блокируется наdlsym
вызов, где, как и в окне настройки Ubuntu, программа работает нормально.
EDIT:
Как указывалось @R .., реализация dlsym
в OSX вызывает malloc (см. источники: https://opensource.apple.com/source/cctools/cctools-667.8.0/libdyld/dlopen.c)