Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Отображения виртуальной памяти



Функция Win32 API VirtualQuery может использоваться для получения информации о состоянии адресов виртуальной памяти. Синтаксис ее таков:

 

DWORD VirtualQuery (

LPCVOID IpAddress ,              // Адрес области.
 PMEMORY _ BASICONFORMATION IpBuffer , // Адрес информационного буфера
 DWORD dwLength                        // Размер буфера

);

 

Используется также функция VirtualQueryEx , расширенная версия VirtualQuery , которая позволяет получать информацию о внешних виртуальных адресных пространствах:

DWORD VirtualQueryEx (

HANDLE hProcess                    // Дескриптор процесса
 LPCVOID IpAddress ,                      // Адрес области
 MEMORY _ BASIC _ INFORMATION IpBuffer , // Адрес информационного буфера
 DWORD dwLength                       //  Размер буфера

);

Параметр 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; Просмотров: 77; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.011 с.)
Главная | Случайная страница | Обратная связь