Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Специально пошел глянул сперты сырцы винды... 07.03.06 23:34 Число просмотров: 2541
Автор: Killer{R} <Dmitry> Статус: Elderman
|
> напрямую - значит без посредников > тоесть ReadProcessMemory(proc, procaddr, buff, size) > работает так: [память процесса proc] -> [buff в > вызывающем процессе] > или так: [память процесса proc] -> > [буфер-посредник(напр. map-file)] -> [buff в вызывающем > процессе] > > ???
Специально пошел глянул сперты сырцы винды. ReadProcessMemory вызывает ядро. Передает ему хэндлы на 2 процесса, 2 адреса и 2 размера. Итого - 6 32хбитных (на x86) переменных. Ядро делает валидацию хэндлов, адресов и далее исходя из размера буфера:
Если буфер небольшой аттачится к одному процессу, копирует в nonpaged буфер из его адресного пространства кусок в себя, затем аттачится к другому и пишет в него это дело.
Если буфер больше определенного значения ядро аттачится к одному из процессов процессу лочит виртуальные адреса в физические (кстати если физ. памяти мало а хочется скопировать много то по идее это дело обломается), мапит нужные физически адреса себе в виртуальные адреса в пространстве ядра, затем аттачится назад и делает банальный memcpy на эти адреса.
|
|
|