Файл: Руссинович М., Маргозис А. Утилиты Sysinternals. Справочник администратора 2012.pdf
Добавлен: 29.10.2018
Просмотров: 32983
Скачиваний: 742

Утилиты для работы с процессами и диагностики
Глава 7 217
копированием при записи, процесс получает дополнительную закрытую
память, которая помечается как доступная для чтения и записи. Эта за-
крытая память находится в ОЗУ или файле подкачки, а не в файле об-
раза. В столбце 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 Environ-
ment. Закрытые данные не могут совместно использоваться разными
процессами.
Примечание Определение «закрытой памяти» в VMMap шире одноименного терми-
на, принятого в Process Explorer: в первом под «закрытой памятью» понимают всю
закрытую память, переданную процессу.
• Таблица страниц (Page Table) — закрытая память режима ядра, связанная
с таблицами страниц процесса. Обратите внимание на то, что эта память
никогда не отображается в представлении VMMap Details (Подробно),
в котором отображается только память пользовательского режима.
SIN_ch_07.indd 217
27.12.2011 14:30:23

218 Часть
II
Работа с утилитами
• Свободная (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, либо при обращении к памяти, помеченной как no-
access или зарезервированной, но еще не выделенной, возникает ошибка
нарушения доступа.
SIN_ch_07.indd 218
27.12.2011 14:30:23

Утилиты для работы с процессами и диагностики
Глава 7 219
• Details (Подробно) — в представлении Details содержит дополнитель-
ную информацию для области памяти, такие как путь к файлу, в котором
хранятся страницы, идентификатор кучи (для памяти из кучи), иденти-
фикатор потока (для памяти стека) или поколение .NET AppDomain и
Garbage Collection.
Примечание API
VirtualProtect может изменять типы защиты любой страницы, уста-
новленный при ее выделении. Это означает, что в разделяемой области памяти могут
появиться страницы закрытой памяти (например, если эта область выделена в файле
подкачки, после чего приложение сменило тип защиты на copy-on-write, а затем моди-
фицировала эти страницы).
Хронология моментальных снимков
VMMap сохраняет моментальные снимки состояния выделения памяти для
целевого процесса. Можно загрузить любой из моментальных снимков в
главное окно VMMap и сравнить с другим снимком для поиска изменений.
При отслеживании оснащенного процесса VMMap делает моменталь-
ные снимки автоматически. В меню Options | Trace Snapshot Interval
(Параметры | Интервал получения моментального снимка) можно выбрать
интервал в 1, 2, 5 или 10 секунд. Можно приостанавливать и возобновлять
автоматическое получение моментальных снимков, нажимая Ctrl+Space, и
вручную получать моментальные снимки в любое время нажатием F5.
При анализе процессов, не содержащих библиотеки VMMap, моменталь-
ные снимки не создаются автоматически, их приходится делать вручную,
нажимая F5.
Рис. 7-4. Окно Timeline в VMMap
Щелкните кнопку Timeline (Хронология) в основном окне VMMap,
чтобы открыть одноименное окно (рис. 7-4) с графическим представле-
нием истории выделения памяти в рабочем наборе процесса. Инструмент
Timeline позволяет загружать ранее полученные моментальные снимки в
основное окно VMMap и попарно сравнивать их. Горизонтальная ось графи-
ка представляет число секунд с момента получения первоначального момен-
тального снимка, а вертикальная ось — обращения к рабочему набору про-
цесса. Цвета на графике соответствуют цветам, обозначающим типы памяти
в основном окне VMMap.
SIN_ch_07.indd 219
27.12.2011 14:30:23

220 Часть
II
Работа с утилитами
Когда включено автоматическое получение моментальных снимков для
отслеживания процесса, содержимое диалогового окна Timeline автомати-
чески обновляется. Можно щелкнуть кнопку Pause (Пауза), чтобы прио-
становить автоматическое получение моментальных снимков; и щелкнуть
еще раз, чтобы возобновить его. Чтобы обновить окно Timeline при просмо-
тре процесса, не содержащего DLL VMMap, нужно закрыть это окно и снова
открыть его.
Щелкните в любой точке хронологии, чтобы загрузить в основное окно
VMMap соответствующий моментальный снимок. Чтобы сравнить любые два
моментальных снимка, щелкните точку под одним из снимков и перетащите
указатель мыши ко второй точке. Пока кнопка мыши нажата, на временной
шкале отображаются вертикальные линии, показывающие, моменты полу-
чения моментальных снимков, а область между двумя выбранными точками
затеняется (рис. 7-5). Чтобы изменить детализацию временной шкалы для об-
легчения выбора моментальных снимков, щелкните кнопки со значками (+) и
(–), затем перетащите горизонтальный ползунок прокрутки.
Рис. 7-5. Окно VMMap Timeline во время выбора двух моментальных снимков
При сравнении моментальных снимков диаграммы в основном окне
VMMap отображают различия между этими снимками в виде прироста или
убыли значений с момента получения предыдущего моментального сним-
ка. Диапазоны адресов в представлении Details, имеющиеся в новом момен-
тальном снимке, но отсутствующие в предыдущем, выделяются зеленым, а
диапазоны, имеющиеся только в предыдущем снимке, — красным. Чтобы
увидеть эти диапазоны, раскройте соответствующие узлы дерева операций
выделения памяти. Строки представления Details, не изменившие цвет, по-
казывают изменения размера рабочего набора. Для просмотра изменений
определенного типа памяти выберите этот тип в представлении Summary.
Если выбрать в меню View (Вид) команду Empty Working Set (Очистить
рабочий набор), VMMap освободит всю физическую память, назначенную
процессу, и получит новый моментальный снимок. Эта функция полезна
для измерения памяти, потребляемой отдельными функциями, которые вы-
зывают приложения: опустошите рабочий набор, вызовите функцию и обно-
вите экран, чтобы узнать, сколько физической памяти ушло у приложения
на этот вызов.
SIN_ch_07.indd 220
27.12.2011 14:30:23

Утилиты для работы с процессами и диагностики
Глава 7 221
Чтобы переключиться со сравнения на просмотр одного моментального
снимка, откройте окно Timeline (Временная линейка) и выберите любой
моментальный снимок.
Просмотр текста из областей памяти
В некоторых случаях предназначение области памяти можно понять по
хранящимся в ней строкам. Для просмотра строк длиной от трех символов
ASCII или Unicode, выберите область в представлении Details, а затем вы-
берите команду меню View | Strings (Вид | Строки). VMMap откроет окно,
показывающее диапазон виртуальных адресов и найденные в нем строки
(рис. 7-6). Если внутри выбранной области есть блоки, будет выполнен по-
иск по всем блокам в области.
Строки данных не входят в моментальные снимки. Эта функция работа-
ет только с выполняющимися процессами, но не с сохраненными файлами
VMMap (.mmp-файлами), загруженными с диска. Кроме того, строки считы-
ваются напрямую из памяти процесса при вызове этой функции, так что они
могут измениться с момента получения последнего моментального снимка.
Примечание В программировании термин «строка» обозначает структуру данных,
состоящую из последовательности символов, обычно представляющую понятный че-
ловеку текст.
Рис. 7-6. Окно VMMap Strings
Поиск и копирование текста
Чтобы найти определенный текст в представлении Details, нажмите Ctrl+F.
Функция поиска подсветит следующую видимую строку представления
Details, содержащую указанный текст в любом столбце. Заметьте, что поиск
текста внутри свернутых областей с блоками не выполняется. Чтобы повто-
рить предыдущий поиск, нажмите F3.
VMMap предоставляет два способа копирования текста в буфер обмена:
• нажатие Ctrl+A копирует весь текст из окна VMMap, включая имя и
идентификатор процесса, и весь текст из представлений Summary и De-
SIN_ch_07.indd 221
27.12.2011 14:30:24