ATTEMPTED_EXECUTE_OF_NOEXECUTE_MEMORY
От: anonymous185  
Дата: 01.12.13 22:31
Оценка: 5 (1)
есть (необычная) ситуация когда ring0 вызывает функцию в юзермодной длл. (как и для чего это делается отдельный вопрос, не относящийся к сути проблемы). на xp/2003/vista/2008/win7/win8 (32 и 64) всё работает стабильно. а вот на win 8.1 32 бит PAE (64 пока не смотрел) — вываливается в BSOD при попытке исполнения первой инструкции в user space.



#pf — ATTEMPTED_EXECUTE_OF_NOEXECUTE_MEMORY

Page-Fault Error Code: 0x11

Virtual address for the attempted execute — совпадает с адрессом функцию в юзермодной длл (он же в CR2)


смотрю в PTE он валидный и NX бит в нём не установлен !
вообще все соседние PTE 'правильные' — там где в длл данные — есть NX для этих страниц, где код — нет
ну и если просто в ring3 вызвать функцию — то всё ok.
вообщем что-то никак не могу понять — почему процессор генерит исключение, если память executable (нет NX бита) и только в ring0 (по идее не должно зависит от этого а только от NX). ну и как я писал выше проблема появилась только на 8.1 — на всех предыдущих системах работает. есть какие-то мысли почему это происходит ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.