LD_PRELOAD malloc to shm_open - PullRequest
       49

LD_PRELOAD malloc to shm_open

0 голосов
/ 12 апреля 2019

Я пытаюсь перехватить malloc вызов, используя LD_PRELOAD. Я хочу переместить все выделенные памяти в общую память, изменив malloc на shm_open, а затем mmap. Как я могу это сделать?

LD_PRELOAD из malloc работает нормально. Я могу перехватить каждый malloc звонок. Однако вызов shm_open в перехваченном malloc завершается неудачно, потому что shm_open требует связывания librt, который ссылается на libdl, что dlsym в LD_PRELOAD. Существует рекурсивная вставка. Я думал о создании статической библиотеки распределенного распределения памяти. Тогда позвони из перехваченного malloc Но librt не может быть динамически связан.

1 Ответ

0 голосов
/ 13 апреля 2019

Как я могу это сделать?

В общем, вы не можете.

Если вы хотите вставить низкоуровневые функции, такие как malloc, вашЛучше всего использовать только прямые системные вызовы более низкого уровня.

Использование чего-либо более высокого уровня, такого как shm_open, неизбежно приведет к проблемам в будущем.Даже если shm_open сегодня не использовал librt и dlopen, ничто не мешает ему сделать это завтра (и сломать ваш тщательно выстроенный карточный домик).

Помимо очевидных проблем прямой рекурсиитакже могут возникнуть проблемы с «порядком инициализации» (например, shm_open может потребовать инициализации malloc и librt, что не гарантируется при вызове самого первого malloc).

...