|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Окт 16, 2003 12:24:42 Господа Гуру! Просетите плиз чайника, как получить доступ к памяти другого процесса (не того в контексте которого вызван драйвер)? ZwRead/WriteVirtualMemory в режиме ядра нет. Хотелось бы как-то сэмулировать переключение процессов, чтобы в основную таблицу страниц загрузились из hyperspace таблицы страниц для нужного мне процесса. Что-то я слышал про MiMapPageInHyperSpace но не знаю как она работает (примеров нет). |
|
|
Дата: Окт 16, 2003 14:06:15 · Поправил: Four-Fpush eax ; reserve DWORD on stack
invoke PsLookupProcessByProcessId, ProcessId, esp
pop ProcessObject ; -> KPROCESS
.if eax == STATUS_SUCCESS
invoke KeAttachProcess, ProcessObject
; Делаешь то, что надо
invoke KeDetachProcess
fastcall ObfDereferenceObject, ProcessObject
.endif
KeAttachProcess/KeDetachProcess устарели, но поддерживаются для обратной совместимости. В место них начиная с 2000 KeStackAttachProcess/KeUnstackDetachProcess - документированы в IFS DDK. Про MiMapPageInHyperSpace забудь. |
|
|
Дата: Окт 16, 2003 16:10:03 Four-F спасибо. Делаю KeAttachProcess, лезу в таблицу PTE (мне физический адрес нужен страницы чужого процесса), а там адреса моего процесса... Мне бы именно процессы переключить. Чего-то я не понимаю, наверное. |
|
|
Дата: Окт 16, 2003 16:50:41 KeAttachProcess адресный контекст как раз и меняет 100%. Перед KeAttachProcess набери в айсе cpu и посмотри что в cr3 - это физический адрес каталога страниц + чуть-чуть флагов. Затем набери cpu после KeAttachProcess и срасни значенив в cr3 - увидишь, что они разные. PTE же для газных процессов запросто могут совпадать. Это значит, что они разделяют одну и ту же физическую страницу. Например код всех длл разделяется. А если ты смотришь PTE для адреса >80000000, то они почти все одинаковые. Ядро то для всех процессов одно. |
|
|
Дата: Окт 16, 2003 20:38:46 Все понял. Спасибо. Я-то дурак лазил по адресу 0C0000000h за pte, а надо на cr3 опираться. Я думал система прямо мне эти pte и перепишет, а оказывается все хитрее. |
|
|
Дата: Окт 17, 2003 17:01:07 PTE в диапазоне C0000000 - C01FFFFF покрывают юзерное пространство. C0300000 католог страниц. Страницы на которых лежат сами эти PTE, естественно уникальны для процесса. Но те страницы на которые кажут PTE могут и разделяться. PTE в диапазоне C0200000 - C03FFFFF покрывают системное пространство. Страницы на которых лежат сами эти PTE, разделяются всеми процессами. Но, по крайней мере два диапазона даже в системном пространстве, по 4МБ каждый, уникальны для каждого процесса. Это сами таблицы страниц C0000000 - C03FFFFF и рабочий набор процесса C0400000 - C07FFFFF. Возможно, в это сложно по началу врубиться. Почитай Соломона. Может несколько раз :-) |
|
|
Дата: Окт 17, 2003 17:45:48 Да, честно говоря с первого раза я не въехал. Вроде все сделал как надо, а не работает. Меня Шрайбер слегка ввел в заблуждение... Но вроде потихоньку начинаю вникать. Спасибо. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.091 |