Блоки внутри регионов

Попробуем увеличить детализацию адресного пространства (по сравнению с тем, что показано в таблице 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, недопустимые для региона.