возмущать байт в _int_malloc () в glibc - PullRequest
2 голосов
/ 15 ноября 2011

после прохождения кода glibc для malloc() и фактического распределителя т.е. _int_malloc() функция Я не могу понять значение "perturn_byte". Его используют в alloc_perturb macro() во многих местах в _int_malloc().

я знаю, что этот вопрос только для конкретного ответа, пожалуйста, простите меня. Но на тот случай, если кто-нибудь уже знает, что ответчик спасет меня от ударов головой.

спасибо

1 Ответ

3 голосов
/ 15 ноября 2011

Вот коммит, который добавляет perturb_byte:

http://repo.or.cz/w/glibc.git/commitdiff/854278dff83a754f1d24a17c1c1068e8ebfe6195

А вот ключевой комментарий (и пример включения этой функции):

+  /* Make uses of freed and uninitialized memory known.  */
+  mallopt (M_PERTURB, 42);

Итак, это функция отладки для обнаружения неправильного использования памяти free-d или malloce, но еще не инициализированной памяти.

Каждый байт памяти, который malloc получает из системы (через brk или mmap), будетбыть заполненным perturb_byte (который не равен нулю).Я думаю, что свободная память также будет заполнена.

Тогда пользователь может проверить, есть ли еще неинициализированные в неправильном диапазоне или есть некоторые записи в свободную память.

Здесьэто документация: http://www.gnu.org/s/hello/manual/libc/Malloc-Tunable-Parameters.html

M_PERTURB

Если ненулевое значение, блоки памяти заполняются значениями, зависящими от некоторых младших битов этого параметра, когда они выделяются (кроме случаев, когда они выделяются calloc)и освобожден.Это можно использовать для отладки использования неинициализированной или освобожденной памяти кучи.

Как я вижу, это можно использовать только для проверки вручную из отладчика.

...