Почему ZwUnmapViewOfSection () отображает память всего процесса, если в качестве аргумента указан базовый адрес PE? - PullRequest
0 голосов
/ 16 ноября 2018

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

ZwUnmapViewOfSection(remoteProcessInfo->hProcess, static_cast<PVOID>(remoteImageBaseAddress))

Согласно документации MSDN, ZwUnmapViewOfSection отображает один раздел, содержащий remoteImageBaseAddress.

Тем не менее, двоичные файлы PE имеют несколько разделов (.text, .data и т. Д.), Поэтому этот вызов не отображает только один из них?

Что мне не хватает? Я также не понимаю, почему remoteImageBaseAddress (базовый адрес) указан в качестве аргумента, так как этот адрес не принадлежит разделу .text (исполняемый код).

1 Ответ

0 голосов
/ 10 декабря 2018

Я думаю, что вы запутались между разделами PE-файла и объектом управления Windows типа Section.

Раздел в PE-файле - это просто фрагмент необработанных данных, обычно классифицируемых по их атрибутам.

В Windows объект section является объектом управления внутренней памятью, который используется для сопоставления физических файлов на диске с виртуальным адресным пространством процесса.Поэтому, когда ZwUnmapViewOfSection передается адрес сопоставленного файла (раздела), он удаляет объект раздела - он же сопоставленный файл, из пространства ядра и адресного пространства процесса.Это не меняет фактические разделы PE-файла.

Я надеюсь, вы понимаете это сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...