В способе обнаружения повреждения кучи я пытаюсь реализовать хеш-таблицу, чтобы хранить некоторую информацию о недопустимой памяти. Это делается внутри самого glibc. Когда мы выполняем malloc (), мы помещаем информацию, такую как адрес и размер, в хеш-таблицу, а когда освобождаем (), мы освобождаем соответствующую запись в хеш-таблице, опять же, в самой функции glibc free ().
Чтобы выделить память для хэш-таблицы, у меня есть mmap'd некоторая память (воздерживаться от использования malloc для этого, так как шансы повреждения, вызванного процессом, могут также повредить мою хэш-таблицу).
Проблема в том, что нет ограничения на количество malloc, которые может запрашивать процесс, для этого требуется, чтобы моя хеш-таблица была расширяемой. Поскольку моя хеш-таблица работает с индексами массива, память, используемая для хеш-таблицы, должна быть смежной, чтобы с помощью индекса мы могли легко добраться до корзины или записи. Теперь, когда хэш-таблица использует всю память, мне нужно снова сделать 'mmap' таким образом, чтобы эта память начиналась там, где заканчивалась предыдущая. Страница man mmap говорит, что мы можем предоставить адрес mmap, который будет служить подсказкой ядру для сопоставления виртуальной памяти по этому адресу. Для хеш-таблицы это будет выглядеть как кусок памяти. Я хотел бы попросить у вас предложений о том, насколько надежен этот подход и каковы возможные подводные камни при его использовании.