Прочитав эту интересную статью, в которой описывается метод отладки повреждения кучи , я начал задаваться вопросом, как я могу настроить его для своих нужд. Основная идея состоит в том, чтобы предоставить пользовательский malloc() для выделения целых страниц памяти, а затем включить некоторые биты защиты памяти для этих страниц, чтобы программа аварийно завершала работу при записи в них, а неправильная инструкция записи могла быть поймана в действии. . Пример кода — C под Linux (для включения защиты используется mprotect()), и мне любопытно, как применить это к родному C++ и Windows. VirtualAlloc() и/или VirtualProtect() выглядят многообещающе, но я не уверен, как будет выглядеть сценарий использования.
Fred *p = new Fred[100];
ProtectBuffer(p);
p[10] = Fred(); // like this to crash please
Я знаю о существовании специализированных инструментов для отладки повреждения памяти в Windows, но мне все же любопытно, можно ли будет сделать это "вручную", используя этот подход.
РЕДАКТИРОВАТЬ: Кроме того, это вообще хорошая идея под Windows или просто развлекательное интеллектуальное упражнение?