Попробуем увеличить детализацию адресного пространства (по сравнению с тем, что показано в таблице 13-2). Например, таблица 13-3 показывает ту же карту адресного пространства, но в другом «масштабе»: по ней можно узнать, из каких блоков состоит каждый регион.
Базовый адрес | Тип | Размер | Блоки | Атрибут(ы) защиты | Описание |
Free | |||||
Private | -RW- | ||||
Private | -RW- | ||||
Free | |||||
Private | -HW- | ||||
Private | -HW- --- | ||||
Free | |||||
Private | -RW- | Стек потока | |||
Reserve | -RW- s— | ||||
0010D000 | Private | -RW- G- | |||
0010E000 | Private | -RW- --- | |||
Private | ? | -RW- | |||
Private | -RW- --- | ||||
Reserve | -RW- --- | ||||
Mapped | -RW- | ||||
Mapped | -RW- —— | ||||
Reserve | -RW- --- | ||||
Mapped | -R — | DeviceHarddiskVoluume1WTNNTsystem32unicode.nls | |||
Happed | R | ||||
Free | 409GO | ||||
Mapped | -R-- | DeviceHarddiskVoluume1WTNNTsystem32locale.nls | |||
Mapped | -R-- --- | ||||
Free | |||||
002А0000 | Happed | -R — | DeviceHarddiskVoluume1WTNNTsystem32sortkey.nls | ||
002А0000 | Mapped | -R-- --- | |||
002Е1000 | Free | ||||
002F0000 | Mapped | -R- | DeviceHarddiskVoluume1WTNNTsystem32sorttbls.nls | ||
002F0000 | Mapped | -R-- --- | |||
002F4000 | Free | ||||
Mapped | ER- | ||||
Mapped | ЕR-- —-- | ||||
Reserve | ER-- --- | ||||
003C0000 | Mapped | ER-- --- | |||
ОО3С2000 | Reserve | ER-- --- | |||
ОО3С8000 | Free | ||||
Image | ERWC | С:CDx86Debug14_VMMap.exe | |||
Image | -R-- --- | ||||
Image | ЕR-- —-- | ||||
Image | -R-- --- | ||||
Image | -RW- --- | ||||
Image | -R-- --- | ||||
0041А000 | Free | ||||
Mapped | -R- | ||||
Mapped | -R- --- | ||||
Free | |||||
Mapped | ER-- | ||||
Mapped | ER-- --- | ||||
004B3000 | Reserve | ER-- --- | |||
Private | -RW- --- | ||||
Privale | -RW- --- | ||||
Free | |||||
Pr ivate | -RW- --- | ||||
Private | -RW- --- | ||||
Free | |||||
Private | -RW- --- | ||||
Private | -RW- --- | ||||
Reserve | -RW- --- | ||||
007А0000 | Mapped | -R-- --- | DeviceHarddiskVolume1WINNTsystem32ctype.nls | ||
007А0000 | Mapped | -R-- --- | |||
007A2000 | Free | ||||
007В0000 | Private | -RW- --- | |||
007В0000 | Private | -RW- --- | |||
007В1000 | Reserve | -RW- --- | |||
Free | |||||
699D0000 | Image | ERWC | С:WINNTSystern32PSAPI.dll | ||
699D0000 | Image | -R-- --- | |||
Image | ER- --- | ||||
699D5000 | Image | -RWC --- | |||
699D9000 | Image | -R-- --- | |||
699DB000 | Free | ||||
77D50000 | Imago | ERWC | C:WINNTsystem32RPCRT4.DLL | ||
77D50000 | Image | -R-- --- | |||
77D51000 | image | ER-- --- | |||
77DB8000 | Image | 409G | -RW- --- | ||
77DB9000 | Image | -R-- --- | |||
77DBE000 | Free | ||||
77DC0000 | Image | ERWC | С:WINNTsyatem32ADVAPI32.dll | ||
77DC0000 | Image | -R-- --- | |||
77DС1000 | Image | ER-- --- | |||
77Е0С000 | Image | -RW- --- | |||
77E00000 | Image | -RWC --- | |||
77Е0E000 | Image | -R-- --- | |||
77Е14000 | Free | ||||
77E20000 | Image | ERWC | С:WINNTsystem32USER32.dll | ||
/7Е20000 | Image | -R-- --- | |||
77Е21000 | Image | ER-- --- | |||
77Е76000 | Image | -RW- --- | |||
77Е77000 | Image | -R-- --- | |||
77Е82000 | Free | ||||
77Е90000 | Image | ERWC | С WINNTsystem32KERNEL32.dll | ||
77Е90000 | Image | -R-- --- | |||
77Е91000 | Image | ER-- --- | |||
77ЕЕВ000 | Image | -RW- --- | |||
77EED000 | Image | -RWC --- | |||
77ЕЕЕ000 | Image | -R-- --- | |||
77F40000 | Image | ERWC | С WINNTsystem32GDI32.DLL | ||
77F40000 | Image | -R-- --- | |||
77F41000 | Image | ER-- --- | |||
77F77000 | Image | -RW- --- | |||
77F78000 | Image | -R-- --- | |||
77F7B000 | Free | ||||
77F80000 | Image | ERWC | С WINTSystem32ntdll.dll | ||
77F80000 | Image | 409b | -R-- --- | ||
77F81000 | Image | ER-- --- | |||
77FCA000 | Image | RW- --- | |||
77FCC000 | Image | -RWC --- | |||
77FCD000 | Image | -R-- --- | |||
77FF6000 | Free | ||||
Image | ERWC | С WINNTsystem32MSVCRT.dll | |||
Image | -R-- --- | ||||
Image | ER-- --- | ||||
Image | -R-- --- | ||||
7803С000 | Image | -RW- --- | |||
7803F000 | Image | -RWC --- | |||
Image | -R-- --- | ||||
Free | |||||
7F6F0000 | Mapped | ER-- --- | |||
7F6F0000 | Mapped | ER-- --- | |||
7F6F7000 | Reserve | ER-- --- | |||
7F7F0000 | Free | ||||
7FFB0000 | Mapped | -R-- --- | |||
7FFB0000 | Mapped | -R-- --- | |||
7FFD4000 | Free | ||||
7FFDE000 | Private | ERW --- | |||
7FFDE000 | Private | ERW --- | |||
7FFDF000 | Private | ERW --- | |||
7FFDF000 | Private | ERW --- | |||
7FFF0000 | Private | -R-- --- | |||
7FFE0000 | Private | -R-- --- | |||
7FFE1000 | Reserve | -R-- --- |
Таблица 13-3. Образец карты адресного пространства процесса (с указанием блоков внутри регионов) в Windows 2000 на 32-разрядном процессоре типа x86
Разумеется, в свободных регионах блоков нет, поскольку им не переданы страни цы физической памяти. Строки с описанием блоков состоят из пяти полей.
В первом поле показывается адрес группы страниц с одинаковыми состоянием и атрибутами защиты. Например, по адресу 0x77E20000 передана единственная страница (4096 байтов) физической памяти с атрибутом защиты, разрешающим только чтение. А по адресу 0x77E21000 присутствует блок размером 85 страниц (348 160 байтов) переданной памяти с атрибутами, разрешающими и чтение, и исполнение. Если бы атрибуты защиты этих блоков совпадали, их можно было бы объединить, и тогда на карте памяти появился бы единый элемент размером в 86 страниц (352 256 байтов).
Во втором поле сообщается тип физической памяти, с которой связан тот или иной блок, расположенный в границах зарезервированного региона. В нем появляется одно из пяти возможных значений: Free (свободный), Private (закрытый), Mapped (проецируемый), Image (образ) или Reserve (резервный). Значения Private, Mapped и Image говорят о том, что блок поддерживается физической памятью соответственно из страничного файла, файла данных, загруженного EXE- или DLL-модуля. Если же в поле указано значение Free или Reserve, блок вообще не связан с физической памятью.
Чаще всего блоки в пределах одного региона связаны с однотипной физической памятью. Однако регион вполне может содержать несколько блоков, связанных с физической памятью разных типов. Например, образ файла, проецируемого в память, может быть связан с EXE- или DLL-файлом. Если Вам понадобится что-то записать на одну из страниц в таком регионе с атрибутом защиты PAGEWRITECOPY или PAGE_EXECUTE_WRITECOPY, система подсунет Вашему процессу закрытую копию, связанную со страничным файлом, а не с образом файла. Эта новая страница получит те же атрибуты, что и исходная, но без защиты по типу «копирование при записи».
В третьем поле проставляется размер блока. Все блоки непрерывны в границах региона, и никаких разрывов между ними быть не может.
В четвертом поле показывается количество блоков внутри зарезервированного региона.
В пятом поле выводятся атрибуты защиты и флаги атрибутов защиты текущего блока. Атрибуты защиты блока замещают атрибуты защиты региона, содержащего данный блок. Их допустимые значения идентичны применяемым для регионов; кроме того, блоку могут быть присвоены флаги PAGE_GUARD, PAGE_WRITECOMBINE и PAGE_NOCACHE, недопустимые для региона.