Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Отображения виртуальной памяти ⇐ ПредыдущаяСтр 6 из 6
Функция Win32 API VirtualQuery может использоваться для получения информации о состоянии адресов виртуальной памяти. Синтаксис ее таков:
DWORD VirtualQuery ( LPCVOID IpAddress , // Адрес области. );
Используется также функция VirtualQueryEx , расширенная версия VirtualQuery , которая позволяет получать информацию о внешних виртуальных адресных пространствах:
DWORD VirtualQueryEx ( HANDLE hProcess // Дескриптор процесса );
Параметр hProcess - это дескриптор процесса. Параметр IpAddress - это начальный адрес для записи результирующих данных, который будет округляться в меньшую сторону до ближайшего кратного размеру страницы (4 Кб). Обе функции возвращают информацию в следующую структуру.
Struct MEMORY _ BASlC _ INFORMATION { PVOID BaseAdciress ; // Базовый адрес области PVOID AllocationBase ; // Базовый адрес выделенной области DWORD AllocationProtect ; // Первоначальная защита от доступа DWORD RegionSize ; // Размер области в байтах DWORD State ; // Передана зарезервирована, свободна DWORD Protect ; // Текущая защита от доступа DWORD Type; // Тип страниц }
Чтобы понять принцип действия членов этой структуры, необходимо знать о назначении данной функции. Чтобы сделать определение более понятным, назовем страницу, которой принадлежит адрес IpAddress, заданной ( specified) Следующий рисунок поможет разобраться в новой терминологии.
Функция VirtualQueryEx всегда заполняет следующие члены структуры MEMORY _ BASIC _ INFORMATION : · BaseAddress, которая возвращает базовый адрес заданной страницы; · RegionSize , представляющая собой количество байтов от начала заданной страницы до вершины заданной области. Если страница, содержащая адрес IpAddress, свободна (не зарезервирована и не передана), член структуры Stаte содержит символьную константу MEM _ FREE. Остальные члены (кроме BaseAddress и RegionSize ) не имеют значения. Если страница, содержащая адрес IpAddress, не свободна, функция определяет выделенную область (allocation region), то есть область виртуальной памяти, которая включает заданную страницу и была, первоначально выделена с помощью вызова функции VirtualAlloc . Начиная с базового адреса заданной страницы, функция последовательно просматривает все страницы выделенной области, проверяя, совпадают ли их типы выделения ( allocation type) и защиты (protection type) с аналогичными типами заданной страницы. Совокупность всех совпадающих упорядоченных страниц представляет собой заданную область. К ней относятся значения структуры MEMORY _ BASIC _ INFORMATION. Cтраница считается совпадающей с заданной страницей, если она удовлетворяет двум следующим условиям: · страница имеет тот же тип выделения, что и первоначальная страница, в соответствии со следующими значениями флага: MEM _ COMMIT , MEM _ RESERVE , MEM _ FREE , MEM _ PRIVATE , MEM _ MAPPED или MEM _ IMAGE ; · страница имеет тот же тип зашиты, что и первоначальная страница, в соответствии со следующими значениями флага: PAGE _ READONLY , PAGE _ READWRITE , PAGE _ NOACCESS , PAGE _ WRITECOPY , PAGE _ EXECUTE , PAGE _ EXECUTE _ READ , PAGE _ EXECUTE _ READWRITE , PAGE _ EXECUTE _ WRITECOPY , PAGE _ GUARD или PAGE _ NOCACHE . Рассмотрим остальные члены структуры MEMORY _ BASIC _ INFORMATION : · AllocationBase - базовый адрес выделенной области; · AllocationProtect - первоначальный тип защиты выделенной области; · State - одно из трех значений: MEM _ FREE , MEM _ RESERVE или МЕМ_СОММ I Т. Относится к заданной области; · Protect - текущий тип защиты заданной области; · Туре - одно из трех значений: MEM _ IMAGE , MEM _ MAPPED или MEM _ PRIVATE . Относится к заданной области. Эти константы имеют следующий смысл: MEM _ IMAGE указывает, что область отображена на файл образа задачи (image file), то есть на загрузочный; MEM _ MAPPED указывает, что область отображена на не загрузочный отображаемый в память файл (например, файл данных); MEM __ PRIVATE указывает, что область используется одним процессом, а не совместно.
СОДЕРЖАНИЕ ОТЧЕТА 1. Наименование лабораторной работы, ее цель.
2. Разработанное программное обеспечение для приложения, которое:
§ выдает информацию, получаемую при использовании API GlobalMemoryStatus. При выводе информации использовать диаграммы.
§ Составляет карту виртуальной памяти для любого процесса.
3. Примеры разработанных приложений (результаты и тексты программ).
|
Последнее изменение этой страницы: 2019-03-20; Просмотров: 90; Нарушение авторского права страницы