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 называется).

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