LD_PRELOAD malloc to shm_open
Я пытаюсь перехватить malloc
звоните используя LD_PRELOAD
, Я хочу переместить все выделение памяти в общую память, изменив malloc
в shm_open
с последующим mmap
, Как мне это сделать?
LD_PRELOAD из malloc
работает отлично. Я могу перехватить каждый malloc
вызов. Тем не менее, призывая shm_open
в перехваченном malloc
не удается, потому что shm_open
требует связывания librt
какие ссылки на libdl
тот dlsym
в LD_PRELOAD требуется. Существует рекурсивная вставка. Я думал о создании статической библиотеки распределенного распределения памяти. Тогда позвони из перехваченного malloc
, Но librt
не может быть связан динамически.
1 ответ
Как мне это сделать?
В общем, вы не можете.
Если вы хотите вставить низкоуровневые функции, такие как malloc
Лучше всего использовать только прямые системные вызовы низкого уровня.
Использование чего-либо более высокого уровня, такого как shm_open
, неизбежно столкнется с неприятностями рано или поздно. Даже если shm_open
не использовал librt
а также dlopen
сегодня ничто не мешает сделать это завтра (и сломать ваш тщательно выстроенный карточный домик).
Помимо очевидных проблем прямой рекурсии, могут также быть проблемы "порядка инициализации" (например, shm_open
может потребовать, чтобы malloc
а также librt
инициализировали, что не гарантируется, когда самый первый malloc
называется).