Переопределение «бесплатно» или «удалить» с помощью LD_PRELOAD и dlsym()

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

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

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

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

person elaine    schedule 22.06.2013    source источник
comment
почему не delete ptr?   -  person mrz    schedule 22.06.2013
comment
@mrz, потому что вопрос также отмечен тегом C   -  person David Ranieri    schedule 22.06.2013


Ответы (1)


Оно не может.

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

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

 free(do_something()); 

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

person nos    schedule 22.06.2013