Виртуальная память Windows и режим ядра

Я знаю, что в 32-битной архитектуре виртуальная память в режиме ядра отображается между 0x80000000 а также 0xFFFFFFFF,

Он содержит некоторые структуры, такие как EPROCESS , ETHREAD … и т.д., а также каталоги страниц и таблицы для текущего процесса.

При попытке получить виртуальный адрес определенной функции ntoskrnl, скажем, «nt! NtReadFile», я обнаружил, что он отображается в виртуальном адресе ядра. 0x89421130 например.

Я пытался залатать некоторые шлепки после RET со случайной инструкцией и при переключении в другой контекст процесса я обнаружил, что указанная мной инструкция все еще там.

Означает ли это, что виртуальная память, в которую загружен Ntoskrnl, остается неизменной в каждом виртуальном адресном пространстве процесса?

Благодарю.

2

Решение

Означает ли это, что виртуальная память, в которую загружен Ntoskrnl, остается неизменной в каждом виртуальном адресном пространстве процесса?

Да. В работающей системе Windows имеется одна копия ядра в памяти и точно такое же адресное пространство ядра (т.е. 0x80000000-0xFFFFFFFF на 32-разрядный) отображается в каждом процессе.

3

Другие решения


По вопросам рекламы [email protected]