Переопределение «free» или «delete» с помощью LD_PRELOAD & amp; dlsym ()

Переопределение ‘malloc’ с использованием механизма LD_PRELOAD

Как может LD_PRELOAD быть использованы для установки ptr на NULL или на любой другой адрес памяти, чтобы избежать использования висячих указателей.

void free(void *ptr)
{
real_free(ptr);

ptr = NULL // will only set local ptr to NULL
}

1

Решение

Это не может.

С LD_PRELOAD вы можете переопределять символы, такие как функция. Чтобы изменить указатель, переданный в free (), вам потребуется доступ к переменной вызывающей стороны free (), чтобы установить его в NULL. Но у вас есть доступ только к копии переданного указателя.

Обратите внимание, что вызывающая сторона может даже сделать что-то вроде:

 free(do_something());

В этом случае нет переменной для установки в NULL

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]