Запуск VMMap и выбор процесса




Первое, что нужно сделать, запустив VMMap, – выбрать процесс для анализа. Если не указать процесс во входном файле или командной строке, VMMap откроет окно Select or Launch Process (Выбор или запуск процесса). На вкладке View a Running Process (Просмотр запущенного процесса) можно выбрать уже запущенный процесс, а с вкладки Launch and Trace a New Process (Запуск и отслеживание нового процесса) можно запустить новый процесс и следить за его распределениями памяти. Окно Select or Launch Process (Выбор или запуск процесса) можно открыть и позже, нажав Ctrl+P.

Просмотр запущенного процесса

Выберите процесс на вкладке View a Running Process (Просмотр запущенного процесса) (рис. 2) и щелкните OK. Чтобы быстро найти процесс по идентификатору (PID) или по использованию памяти, щелкните на любом заголовке столбца, чтобы отсортировать строки по этому столбцу. Доступны следующие столбцы: User (Пользователь), Private Bytes (Байты закрытой памяти), Working Set (Рабочий набор) и Architecture (Архитектура) (в последнем показано, является ли процесс 32-разрядным или 64-разряд-ным). Чтобы обновить список, щелкните кнопку Refresh (Обновить).

На вкладке View a Running Process (Просмотр запущенного процесса) перечислены только те процессы, которые VMMap может открыть. Если VMMap запущена без администраторских прав (включая привилегию Debug [Отладка]), список будет включать только процессы, запущенные тем же пользователем, что запустил VMMap, на том же или более низком уровне целостности (IL). В Windows Vista и выше можно перезапустить VMMap с повышенными правами, щелкнув кнопку Show All Processes (Показать все процессы) или выбрав команду меню File | Run As Administrator (Файл | Запустить от имени администратора).

В Windows с архитектурой x64 VMMap может анализировать 32- и 64-разрядные процессы. Для анализа 32-разрядных процессов VMMap запускает свою 32-разрядную версию и 64-разрядную для анализа 64-разрядных процессов. Если использовать параметр командной строки-64, 64-разрядная версия утилиты будет использоваться для анализа всех процессов.

Рисунок 2 – Окно Select or Launch Process со списком запущенных процессов

Запуск и мониторинг нового процесса

Если запустить приложение из VMMap, оно получит инструментарий для отслеживания отдельных операций выделения памяти и соответствующих вызовов в стеке. Введите путь к приложению и, если требуется, аргументы командной строки и папку для запуска, как показано на рис. 7-3, после чего щелкните OK. VMMap подгружает свою DLL в целевой процесс при его запуске и перехватывает его вызовы API виртуальной памяти. Кроме типа выделяемой памяти, размера и сведений о ее защите, VMMap собирает данные о стеке вызовов в момент выделения. VMMap по-разному группирует эти сведения.

В Windows с архитектурой x64 VMMap может “впрыскивать” DLL cо своим инструментарием и отслеживать программы для x86 и x64, при этом запускается 32- или 64-разрядная версия утилиты, соответственно. Однако в Windows x64 VMMap не может отслеживать программы.NET, собранные для «любого ЦП» («Any CPU»), это возможно только в 32-разрядных версиях Windows. Однако мониторинг возможен и в 64-разрядных версиях Windows – путем выбора на вкладке View a Running Process (Просмотр запущенного процесса) окна Select or Launch Process (Выбор или запуск процесса).

Окно VMMap

После выбора или запуска процесса VMMap анализирует его, показывает графическое представление виртуальной и физической памяти, а также табличные представления Summary (Общие) и Details (Подробно). В них типы памяти представлены различными цветами. Представление Summary также выделено отдельным цветом.

Первая гистограмма в окне VMMap (рис. 1) –Committed (Переданная). Ее разноцветные части показывают относительные пропорции различных типов памяти, преданной в адресное пространство процесса. Также она служит эталоном, с которым сравниваются две другие диаграммы. Общее число, показанное над правой частью диаграммы, показывает не всю распределенную память, а только «доступную» процессу память. Области, которые пока только зарезервированы, еще не доступны, а потому не отображаются на этой диаграмме. Другими словами, сюда включается физическая память (ОЗУ), память из файла подкачки и спроецированных в память файлов.

Вторая диаграмма – Private Bytes (Байты закрытой памяти). Здесь отображается память процесса, не разделяемая с другими процессами, выделенная в ОЗУ или файле подкачки. Сюда входит стек, кучи, неформатированная виртуальная память, страничные таблицы и области чтения-записи проекций образов и файлов. Надпись над правой частью диаграммы показывает общий размер собственной памяти процесса. Цветные области диаграммы показывают пропорции различных типов закрытой памяти. Отношение размера цветных областей к общей длине диаграммы показывает их долю в используемой виртуальной памяти.

Третья гистограмма показывает рабочий набор процесса. Рабочий набор - это виртуальная память процесса, загруженная в физическую оперативную память. Как и на предыдущей диаграмме, цветные области показывают доли различных типов памяти в ОЗУ, а их размер – относительную величину по сравнению с общей виртуальной памятью, выделенной процессу и загруженной в ОЗУ.

Заметьте, что эти диаграммы показывают только относительные пропорции различных типов памяти, но не являются картами памяти, отображающими ее размещение. Такую карту для 32-разрядных процессов предоставляет окно Address Space Fragmentation (Фрагментация адресного пространства). Под этими диаграммами расположена таблица Summary View (Сводка), в которой указаны разные типы памяти (см. раздел «Типы памяти» ниже), общий объем каждого типа, объем переданной процессу памяти и объем физического ОЗУ. Можно выбрать тип памяти в этой таблице, чтобы отфильтровать содержимое секции Details View (Подробные сведения). Таблицу можно отсортировать по значениям любого столбца, щелкнув его заголовок. Если щелкнуть тот же заголовок еще раз, данные будут отсортированы в обратном порядке. Порядок столбцов можно изменять, перетаскивая их. Можно также изменять ширину столбцов, растягивая границы между их заголовками.

Секция Details View (Подробные сведения), расположенная под таблицей Summary View, содержит информацию о каждой области памяти виртуального адресного пространства процесса, работающего в пользовательском режиме. Чтобы отображался только один тип, выберите этот тип в таблице Summary View. Чтобы вернуться к просмотру всех типов памяти, выберите в таблице Summary View строку Total (Всего). Сортировку, порядок и ширину столбцов в секции Details View можно изменять так же, как и в таблице Summary View.

Строки типов памяти в секции Details View, можно раскрывать, чтобы увидеть блоки, которыми выделялась память этого типа. Такая ситуация бывает, например, когда резервируется крупный блок памяти и передается процессу по частям. Это происходит и когда загрузчик образа или приложение создает проекцию файла, а затем создает несколько проецированных представлений этой проекции; например, чтобы установить разную защиту для разных областей проекции. Можно раскрывать и сворачивать отдельные группы подчиненных сопоставлений, щелкая на значках (+) и (–) в секции Details View. Также можно раскрыть или свернуть все группы сразу, выбрав в меню Options (Параметры) команду Expand All (Раскрыть все) или Collapse All (Свернуть все). Верхняя строка такой группы показывает суммы компонентов группы. Когда выбирается другой порядок сортировки, блоки остаются в строках верхнего уровня и сортируются внутри группы.

Если вам не нравится шрифт, выбранный для VMMap по умолчанию, можете выбрать другой шрифт для Summary View, Details View и некоторых диалоговых окон.

Типы памяти

VMMap разделяет выделенную память на несколько типов.

Образ (Image) – такая память представляет исполняемые файлы, такие как EXE и DLL, загруженные в процесс загрузчиком образов. Заметьте, что этот тип не включает исполняемые файлы, загруженные как файлы данных, которые относятся к типу памяти Mapped File (Проецируемый файл). Области исполняемого кода обычно доступны только для чтения и выполнения, возможно их разделение. Области данных, такие как инициализированные данные, обычно доступны для чтения и записи или с копированием при записи. Когда изменяются страницы, доступные c копированием при записи, процесс получает дополнительную закрытую память, которая помечается как доступная для чтения и записи. Эта закрытая память находится в ОЗУ или файле подкачки, а не в файле образа. В столбце Details (Подробно) представления Details View показан путь к файлу или имя секции.

Cпроецированный файл (Mapped File) – может использоваться совместно и представляет файл на диске. Проецируемые файлы часто являются библиотеками DLL с ресурсами и обычно содержат данные приложений. В столбце Details (Подробно) показан путь к файлу.

Разделяемая (Shareable) – такая память может сообща использоваться процессами и находится в ОЗУ или файле подкачки (если он имеется). Эта память обычно содержит данные, совместно используемые процессами посредством общих секций библиотек DLL или объекты, находящиеся в файле подкачки или проецируемом файле (такие файлы называют также секциями в файле подкачки).

Куча (Heap) – закрытая память, распределяемая и управляемая диспетчером кучи пользовательского режима; обычно содержит данные приложений. Функции управления памяти приложений, использующие кучу,включают библиотечную функцию исполняющей среды C malloc, оператор C++ new, API-функции Windows Heap и устаревшие API-функции

GlobalAlloc и LocalAlloc.

Управляемая куча (Managed Heap) – представляет закрытую память, распределяемую и управляемую исполняющей средой.NET; обычно содержит данные приложений.

Стек (Stack) – память в стеке выделяется каждому потоку в процессе для хранения параметров функций, локальных переменных и записей о вызовах. Обычно при создании потока ему выделяется и резервируется фиксированный объем памяти стека, но процессу передается только сравнительно малая ее часть. По мере надобности память из данной выделенной области передается, но не освобождается, пока поток не завершится.

Закрытая память (Private Data) – эта память выделяется API-функцией VirtualAlloc и не обрабатывается диспетчером кучи или исполняющей средой.NET и не относится к категории памяти стека. Такая память обычно содержит данные приложений, а также блоки Process и Thread Environment. Закрытые данные не могут совместно использоваться разными процессами.

Таблица страниц (Page Table) – закрытая память режима ядра, связанная с таблицами страниц процесса. Обратите внимание на то, что эта память никогда не отображается в представлении VMMap Details (Подробно), в котором отображается только память пользовательского режима.

Свободная (Free) – свободные области памяти (нераспределенные области виртуального адресного пространства процесса). Чтобы включить свободные области памяти в представление Details (Подробно) при просмотре общей карты памяти процесса, выберите команду Options | Show Free Regions (Параметры | Показать свободные области).

Информация о памяти

В представлениях Details и Summary отображается следующая информация о типах памяти и операциях ее распределения. Чтобы уменьшить объем “мусора” в выходных данных, VMMap не отображает записи об операциях с нулевым объемом памяти.

Size (Размер) – общий размер распределенного типа или области. Сюда входят области, которые были зарезервированы, но не переданы процессам.

Committed (Переданная) – объем памяти, переданной процессам, т.е. расположенной в ОЗУ, файле подкачки или проецируемом файле.

Private (Закрытая) – объем памяти, принадлежащей единственному процессу.

Total WS (Рабочий набор, всего) – общий размер рабочего набора (физической памяти), связанного с этим типом памяти.

Private WS (Рабочий набор, закрытый) – размер неразделяемого рабочего набора.

Shareable WS (Рабочий набор, общий) – размер разделяемого рабочего набора.

Shared WS (Рабочий набор, совместно используемый) – размер рабочего набора, разделяемого с другими процессами в текущий момент.

Locked WS (Рабочий набор, заблокированный) – объем памяти, гарантированно остающейся в физической памяти и не вызывающей страничных ошибок при обращении.

Blocks (Блоки) – число областей памяти, выделенных по отдельности.

Largest (Наибольший) – размер наибольшего непрерывного блока памяти для данного типа (в представлении Summary).

Address (Адрес) – базовый адрес области памяти в виртуальном адресном пространстве процесса (в представлении Details).

Protection (Защита) – в представлении Details показывает типы операций, которые можно выполнять с памятью. В случае групп операций, включающих выделение блоков памяти, в столбце Protection отображается сводная информация о типах защиты выделенных блоков.

При попытке выполнения кода из области, не помеченной флагом Execute (если включен механизм DEP), либо записи в область, не имеющей флага Write или Copy-on-Write, либо при обращении к памяти, помеченной как noaccess или зарезервированной, но еще не выделенной, возникает ошибка нарушения доступа.

Details (Подробно) – в представлении Details содержит дополнительную информацию для области памяти, такие как путь к файлу, в котором хранятся страницы, идентификатор кучи (для памяти из кучи), идентификатор потока (для памяти стека) или поколение.NET AppDomain и Garbage Collection.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-20 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: