Как обратиться из драйвера к памяти процесса напрямую(без использования функций ZwWriteVirtualMemory ZwReadVirtualMemory)? Как определить, где распологаеться процесс?
Clerk Т.е. Как определить, где распологаеться виртуальная память процесса? Чтобы потом было можно обращаться к нему из ядра. На сколько я знаю происходит постоянное переключение процессов и у каждого своя виртуальная память. И если я обращусь из ядра к памяти например так mov eax,[0x1000000]. То не факт что я получу данные нужного мне процесса.
Twister Прочитал статью про KeStackAttachProcess. http://www.wasm.ru/article.php?article=dumping Это не совсем то что я хотел. Я хочу обратиться к памяти процесса напрямую. Я чттал что можно преобразовать виртуальный адрес в физический. Допустим я это сделал, но тогда у меня возникает вопрос. Как по физическому адресу обратиться к памяти?
А всё я понял что надо сделать. Всего то надо было указать каталог страниц в CR3 нужного мне процесса.
открою страшный секрет - KeStackAttachProcess эт и делает, только куда удобнее, чем ручное забивание в CR3 поля Process->DirectoryTableBase
Aids Сам же сказал, что процессы прыгают по памяти. Тебе именно поэтому и надо обращаться к виртуальной памяти, чтоб он не "упрыгал" Зачем тебе физический адрес. С ним работает система - на фига он тебе ? Процессы работают с виртуальной памятью и сидят там достаточно прочно, если их "придержать". А если адрес вообще в своп попал - какой физический адрес ?
Ещё интересный момент. Нехорошо получится если ты будешь обращаться к юзерской памяти из ядра. Юзер возьмёт да освободит её - синий экран. здесь есть вариант - после получения необходимых адресов повышать уровень запроса прерываний, или же блокировать этот участок памяти.
Так ты и не совсем то прочитал... Ну а вообще, тебе уже внятно объяснили, как из дрова достучаться до памяти конкретного процесса.