Анализируя аварийные дампы ядра Windows с помощью WinDBG, я часто сталкивался с проблемой, когда WinDBG не может прочитать некоторую область памяти. Недавно при анализе аварийного дампа ядра (файл минидампа) я заметил, что было шесть переменных стека (включая два параметра), из которых WinDBG успешно сбросил значения четырех переменных стека, но возвращал значения для двух других переменных. Я не мог этого понять, потому что все шесть переменных были частью одного фрейма стека.
В дополнение к этому я заметил, что когда я пытался сделать дамп глобальной структуры данных, WinDBG вернул мне ошибку, указывающую «Невозможно прочитать память по адресу 0xfffff801139c50d0». Я не мог понять, почему WinDBG не может прочитать переменную, которая была определена глобально в моем драйвере.
Я правильно загрузил символы, включая файл PDB моего драйвера. WinDBG не выдавал мне никаких ошибок, связанных с символами.
Я хочу понять причину такого поведения. Почему WinDBG не может прочитать значение локальных и глобальных переменных? Может ли кто-нибудь дать мне объяснение такому поведению?