В некоторых задачах, таких как, скажем, поиск неэкспортируемых символов, полезно юзать ассерты проверяющие найденные адреса, пример:
ASSERT( MmIsAddressValid(currentAddress) == TRUE );
И если найдется что-то совсем не то, что искалось, то в отладчике по команде .cxr произойдет остановка на ассерте в сорцах, плюс будут видны все локальные переменные.
Но тут есть один нюанс. При использовании верифаера и опции emulate low resources, он помечает некоторые PTE как инвалидные, бит Valid == 0 (Transition PTE в моем случае).
kd> !pte 0xfffff800`0292fe04
VA fffff8000292fe04
PXE at FFFFF6FB7DBEDF80 PPE at FFFFF6FB7DBF0000 PDE at FFFFF6FB7E0000A0 PTE at FFFFF6FC00014978
contains 0000000000199063 contains 0000000000198063 contains 00000000001DA063 contains 062000000292F860
pfn 199 ---DA--KWEV pfn 198 ---DA--KWEV pfn 1da ---DA--KWEV not valid
Transition: 292f
Protect: 3 - ExecuteRead
А ф-ция MmIsAddressValid делает проверку:
PointerPte = MiGetPteAddress(VirtualAddress);
if (PointerPte->u.Hard.Valid == 0)
return FALSE;
Из-за этого ассерт сфейлится.
В релизе ессно таких проблем нет, но в debug'е пришлось убрать подобные ассерты.
ASSERT( MmIsAddressValid(currentAddress) == TRUE );
И если найдется что-то совсем не то, что искалось, то в отладчике по команде .cxr произойдет остановка на ассерте в сорцах, плюс будут видны все локальные переменные.
Но тут есть один нюанс. При использовании верифаера и опции emulate low resources, он помечает некоторые PTE как инвалидные, бит Valid == 0 (Transition PTE в моем случае).
kd> !pte 0xfffff800`0292fe04
VA fffff8000292fe04
PXE at FFFFF6FB7DBEDF80 PPE at FFFFF6FB7DBF0000 PDE at FFFFF6FB7E0000A0 PTE at FFFFF6FC00014978
contains 0000000000199063 contains 0000000000198063 contains 00000000001DA063 contains 062000000292F860
pfn 199 ---DA--KWEV pfn 198 ---DA--KWEV pfn 1da ---DA--KWEV not valid
Transition: 292f
Protect: 3 - ExecuteRead
А ф-ция MmIsAddressValid делает проверку:
PointerPte = MiGetPteAddress(VirtualAddress);
if (PointerPte->u.Hard.Valid == 0)
return FALSE;
Из-за этого ассерт сфейлится.
В релизе ессно таких проблем нет, но в debug'е пришлось убрать подобные ассерты.
Комментариев нет:
Отправить комментарий