Лабораторная работа Ревизия 3 2 История изменений
![]()
|
ЭКСПЕРИМЕНТ 13: утилита Autoruns Чтобы увидеть, какие программы настроены на автоматический запуск на вашем компьютере, запустите утилиту Autoruns; Сравните полученный в Autoruns список с тем, что показывается Msconfig (доступной в Windows XP и Windows Server 2003), и обратите внимание на различия. 71 Рис. 19. Использование утилиты Autoruns ЭКСПЕРИМЕНТ 14: просмотр и изменение привязки процесса к процессорам B этом эксперименте вы модифицируете привязку процесса к процессорам и убедитесь, что привязка наследуется новыми процессами. 1. Запустите окно командной строки (cmd.exe). 2. Запустите диспетчер задач или Process Explorer и найдите cmd.exe в списке процессов. 3. Щелкните этот процесс правой кнопкой мыши и выберите команду Set Affinity (Задать соответствие). Должен появиться список процессоров. Рис. 20. Список процессоров 4. Выберите подмножество доступных процессоров в системе и нажмите ОК. Теперь потоки процесса будут работать только на выбранных вами процессорах. 5. Запустите Notepad.exe из окна командной строки (набрав notepad.exe). 6. Вернитесь в диспетчер задач или Process Explorer и найдите новый процесс Notepad. Щелкните его правой кнопкой мыши и выберите Set Affinity. Вы должны увидеть список процессоров, выбранных вами для процесса cmd.exe. Это вызвано тем, что процессы наследуют привязки к процессорам от своего родителя. 72 ЭКСПЕРИМЕНТ 15: просмотр событий уведомления ресурса памяти Для просмотра событий уведомления ресурса памяти (memory resource notification events) запустите Winobj (www.sysintemals.com) и щелкните каталог KernelObjects. B правой секции окна – события LowMemoryCondition иHighMemoryCondition. Рис. 21. Просмотр событий Если дважды щелкнуть любое из событий, то можно узнать, сколько описателей и/или ссылок открыто на эти объекты. Чтобы выяснить, есть ли в системе процессы, запросившие уведомления о ресурсе памяти, ищите в таблице описателей ссылки на «LowMemoryCondition» или «HighMemoryCondition». Это можно сделать в Process Explorer (команда Handle в меню Find) или в утилите Oh.exe из ресурсов Windows. ЭКСПЕРИМЕНТ 16: просмотр сопоставлений Windows-имен устройств внутренним именам устройств. Утилита Winobj (www.sysintemals.com) позволяет исследовать символьные ссылки, определяющие пространство Windows-имен устройств. Запустите Winobj и выберите каталог \?? в Windows 2000 или \Global?? в Windows XP либо Windows Server 2003. 73 Рис. 22. Просмотр символьных ссылок Обратите внимание на символьные ссылки справа. Попробуйте дважды щелкнуть устройство С: — вы должны увидеть нечто вроде того, что показано ниже. Рис. 23. Окно свойств С: представляет собой символьную ссылку на внутреннее устройство с именем \Device\HarddiskVolumel, или на первый том первого жесткого диска в системе. Элемент COMl, показанный Winobj, — символьная ссылка на \Device\SerialO и т. д. Попробуйте создать собственные ссылки командой subst в командной строке. ЭКСПЕРИМЕНТ 17: просмотр INF-файла драйвера При установке драйвера или другого программного обеспечения, у которого есть INF-файл, система копирует этот файл в каталог \Win-dows\Inf. Один из 74 файлов, которые всегда будут в этом каталоге, — Keyboard.inf, поскольку это INF-файл для драйвера класса клавиатур. Содержимое данного файла: Copyright (с) 1993–1996, Microsoft Corporation [version] signature="$Windows NT$" Class=Keyboard ClassGUID={4D36E96B-E325-11CE-BFC1-08002BE10318} Provider=XMSX LayoutFile=layout.inf DriverVer=07/01/2001, 5.1.2600.1106 [ClassInstall32.NT] AddReg=keyboa rd_class_add reg Если вы проведете поиск в этом файле по «.sys», то обнаружите запись, указывающую диспетчеру PnP пользовательского режима установить драйверы i8042prt.sys и kbdclass.sys: [STANDARD_CopyFiles] i8042prt.sys kbdclass.sys ЭКСПЕРИМЕНТ 18: просмотр САТ-файлов При установке компонента, например драйвера, файлы которого включают САТ-файл, Windows копирует этот файл в подкаталог каталога \Windows\System32\Catroot. Перейдите в этот каталог с помощью Explorer и найдите подкаталог с САТ-файлами. B частности, в Nt5.cat и Nt5inf.cat хранятся подписи для системных файлов Windows. Открыв один из САТ-файлов, вы увидите диалоговое окно с двумя вкладками: General (Общие), на которой показывается информация о подписи в данном файле, и Security Catalog (Каталог безопасности), где представлены хэши компонентов, подписанных с использованием этого САТ-файла. Ниже дан пример САТ-файла. 75 Рис. 24. пример САТ-файла ЭКСПЕРИМЕНТ 19: наблюдение за вводом-выводом на физическом диске C помощью механизма Event Tracing for Windows драйвера класса дисков утилита Diskmon от Sysinternals ведет мониторинг активности ввода-вывода на физических дисках и отображает ее в своем окне. Содержимое этого окна обновляется раз в секунду. Для каждой операции Diskmon показывает время, длительность, номер целевого диска, тип и смещение, а также длину. Рис. 25. Использование утилиты Diskmon ЭКСПЕРИМЕНТ 20 : просмотр информации NTFS 76 Для просмотра информации о NTFS-томе, в том числе о размещении и размере MFT и зоны MFT, вы можете использовать в Windows 2000 утилиту NTFSInfo (с сайта www.sysinternals.com), а в Windows XP или Windows Server 2003 — встроенную программу командной строки Fsutil.exe: C:\Users\+SysinternalsSuite>fsutil fsinfo ntfsinfo c: Серийный номер тома NTFS: 0x566c307c6c3058c7 Версия: 3.1 Число секторов: 0x0000000005d21db9 Всего кластеров: 0x0000000000ba43b7 Свободных кластеров: 0x00000000006322f7 Всего зарезервировано: 0x00000000000007e0 Байт на сектор: 512 Байт на кластер: 4096 Байт на сегмент FileRecord: 1024 Кластеров на сегмент FileRecord: 0 Допустимая длина данных MFT: 0x0000000004b40000 Начальный LCN таблицы MFT: 0x00000000000c0000 Начальный LCN таблицы MFT2: 0x0000000000000002 Начало зоны таблицы MFT: 0x0000000000512d00 Конец зоны таблицы MFT: 0x000000000051f520 Идентификатор ДР: 31BB093B-EDBA-11E0-8856-BEE2A1F45734 77 ЭКСПЕРИМЕНТ 21: просмотр пространства имен именованных каналов и наблюдение за активностью таких каналов Открыть корневой каталог FSD именованных каналов и перечислить его содержимое с помощью Windows API нельзя — для этого нужно воспользоваться сервисами встроенного API. Утилита PipeList (www.sysinternals.com) перечисляет именованные каналы, определенные на компьютере, число созданных экземпляров канала с данным именем и максимальное число каналов, заданное сервером при вызове Create- NamedPipe. Вот пример вывода PipeList. Рис. 26. Пример вывода PipeList Из этого листинга ясно, что некоторые системные компоненты используют именованные каналы как механизм связи. 78 ЭКСПЕРИМЕНТ 22: просмотр NetBIOS-имен через Nbtstat Для вывода списка активных сеансов в системе, кэшируемых сопоставлений NetBIOS-имен и IP-адресов, а также NetBIOS-имен, определенных на компьютере, можно использовать встроенную в Windows команду Nbtstat. Ниже приведен пример вывода этой команды с параметром — n, при указании которого выводится список NetBIOS-имен, определенных на компьютере C:\>nbtstat -n Рис. 27. Использование команды Nbtstat ЭКСПЕРИМЕНТ 23: анализ утечки памяти в пуле Утечка будет создаваться утилитой NotMyFault, которую можно скачать по ссылке www.sysintemals.com/windowsinternalsshtmL. После запуска NotMyFault.exe загружается драйвер устройства Myfault.sys и выводит такое диалоговое окно. 79 Рис. 28. Использование утилиты NotMyFault 1. Щелкните кнопку Leak Pool. Это заставит NotMyFault посылать запросы драйверу устройства Myfault на выделение памяти из подкачиваемого пула. (He нажимайте кнопку Do Bug, иначе вы вызовете крах системы). NotMyFault продолжит посылать запросы, пока вы не щелкнете кнопку Stop Leaking. Заметьте, что пул подкачиваемой памяти не освобождается даже при закрытии программы; в нем происходит постоянная утечка памяти до перезагрузки системы. Однако, поскольку утечка пула будет непродолжительной, это не должно вызвать никаких проблем в вашей системе. 2. Пока происходит утечка памяти в пуле, сначала откройте диспетчер задач и перейдите на вкладку Performance (Быстродействие). Вы увидите, как растет показатель Paged Pool (Выгружаемая память). To же самое можно увидеть в окне System Information утилиты Process Explorer. (Выберите Show и System Information.) 3. Чтобы определить метку пула, где происходит утечка, запустите Poolmon и нажмите клавишу b, чтобы сортировать по числу байтов. Дважды нажмите клавишу p для отображения в Poolmon только пула подкачиваемой памяти. Вы должны заметить, что пул с меткой «Leak» поднимается вверх по списку. (Poolmon выделяет строки, где происходят изменения.) 4. Теперь щелкните кнопку Stop Leaking, чтобы не истощить пул подкачиваемой памяти в своей системе. 5. Используя приемы, описанные в предыдущем разделе, запустите Strings (ее можно скачать с www.sysinternals.com) для поиска двоичных файлов драйвера, содержащих метку пула «Leak»: Strings \windows\system32\drivers\*.sys | findstr Leak Эта команда должна указать на файл Myfault.sys. 80 ЭКСПЕРИМЕНТ 24: определение истинного стартового адреса Windows- потоков Рис. 29. Стартовый адрес процесса cmd.exe (утилита Pstat) Рис. 30. Стартовый адрес процесса cmd.exe (утилита Tlist) Стартовый адрес нулевого потока, сообщаемый Pstat, соответствует внутренней Windows-функции start-of-process, а стартовые адреса потоков 1–3 указывают адреса внутренних Windows-функций start-of-thread. C другой стороны, Tlist показывает стартовый адрес пользовательской функции, вызываемой внутренней стартовой Windows-функцией. Поскольку большинство потоков в Windows-процессах начинается в одной из системных функций-оболочек, Process Explorer, показывая стартовые адреса потоков в процессе, пропускает фрейм начального вызова, представляющий функцию-оболочку, и вместо этого отображает второй фрейм в стеке. Например, обратите внимание на стартовый адрес потока в процессе, выполняющем Notepad.exe (Process\Properties\Threads). 81 Рис. 31. Список потоков процесса Notepad.exe Process Explorer не выводит всю иерархию вызовов при отображении стека вызовов. Вот что вы получите, щелкнув кнопку Stack. Рис. 32. Стек выбранного потока B строке 12 на этой иллюстрации показан первый фрейм в стеке — начало процесса-оболочки. Второй фрейм (строка 11) является основной точкой входа в Notepad.exe. 82 ЭКСПЕРИМЕНТ 25: наблюдение за частотой вызова системных сервисов Можно наблюдать за частотой вызова системных сервисов с помощью счетчика «Системных вызовов/сек» объекта «Система». Для этого нужно открыть оснастку «Производительность» (Пуск\ Панель управления\ Администрирование\ Производительность)и нажать кнопку «Добавить», чтобы добавить на график счетчик. Выберите объект «Система» и счетчик «Системных вызовов/сек», затем щелкнуть кнопки «Добавить» и «Закрыть». Рис. 33. Частота вызова системных сервисов ЭКСПЕРИМЕНТ 26: просмотр заголовков объектов и объектов типа Можно увидеть список объектов типа, объявленных диспетчеру объектов, с помощью утилиты Winobj (из пакета SysinternalsSuite). Далее в Winobj нужно открыть каталог ObjectTypes. 83 Рис. 34. Список объектов типа Чтобы просмотреть структуру данных типа объектов «процесс» в отладчике ядра, сначала идентифицируйте этот объект командой !process 0 0 (Debugging Tools for Windows (x86), утилита livekd). Рис. 35. Структура данных типа объектов "процесс" Затем нужно выполнить команду !object, указав адрес объекта «процесс» в качестве аргумента: Рис. 36. Объект указанного процесса Увидеть заголовок объекта позволяет команда dt _object_header (аргумент ObjectHeader). 84 Рис. 37. Заголовок указанного объекта Чтобы просмотреть структуру данных типа указанных объектов нужно использовать команду dt _object_type (аргумент адрес поля Type). Рис. 38. Структура данных типа указанных объектов Этот вывод показывает, что структура типа включает имя типа объекта, счетчики активных объектов этого типа, а также счетчики пикового числа описателей и объектов данного типа. B поле TypeInfo хранится указатель на структуру данных, в которой содержатся атрибуты, общие для всех объектов этого типа, а также указатели на методы типа (команда _object_type_initializer, аргумент адрес поля Type + адрес поля TypeInfo): 85 Рис. 39. Структура данных _object_type_initializer ЭКСПЕРИМЕНТ 27: наблюдение за загрузкой и выгрузкой профилей Чтобы увидеть, как профиль загружается в реестр, а потом выгружается, запустите командой runas какой-нибудь процесс под учетной записью пользователя, не вошедшего на данный момент в систему. Рис. 40. Использование команды Runas Пока новый процесс выполняется, запустите Regedit и обратите внимание на загруженный раздел профиля в HKEY_USERS. После завершения процесса нажмите в Regedit клавишу F5 для обновления, и этого профиля в реестре больше не будет. ЭКСПЕРИМЕНТ 28: анализ операций с реестром в простаивающей системе Поскольку реестр реализует функцию RegNotiJyChangeKey, с помощью которой приложения могут запрашивать уведомление об изменениях в реестре, не опрашивая его постоянно, в простаивающей системе Regmon не должен обнаруживать повторяющиеся обращения к одним и тем же разделам или параметрам реестра. Любая такая активность указывает на плохо написанное приложение, которое отрицательно влияет на общую производительность системы. Запустите Regmon и через несколько секунд изучите журнал вывода, чтобы выяснить, не пытается ли какая-то программа постоянно опрашивать реестр. 86 Рис. 41. Использование утилиты Regmon Найдя в выводе строку, связанную с опросом, щелкните ее правой кнопкой мыши и выберите из контекстного меню команду Process Properties, чтобы узнать, какой процесс занимается такой деятельностью. ЭКСПЕРИМЕНТ 29: загрузка и выгрузка кустов вручную Regedit в Windows XP или Windows Server 2003 позволяет загружать кусты, к которым можно обращаться через меню FiIe редактора реестра. Такая возможность полезна при анализе проблем, когда нужно просмотреть или отредактировать куст, полученный с незагружаемой системы или из резервной копии. 1. Кусты можно загружать только в HKLM или HKU, поэтому откройте Regedit, 2. укажите HKLM, а затем выберите «Загрузить куст» из меню «Файл». 3. Перейдите в каталог С:\Windows\Repair в диалоговом окне Load Hive «Загрузить куст», выберите System.bak и откройте его. При запросе введите Test в качестве имени раздела, в который будет загружаться этот куст. Откройте только что созданный раздел HKLM\Test и изучите содержимое куста. 87 Рис. 42. Содержимое созданного куста 4. Откройте HKLM\Systern\CurrentControlSet\Control\Hivelist и найдите элемент \Registry\Machine\Test, который продемонстрирует, как диспетчер конфигурации перечисляет загруженные кусты в разделе HiveList. 5. Укажите HKLM\Test и выберите «Выгрузить куст» из меню «Файл» для выгрузки этого куста. ЭКСПЕРИМЕНТ 30: просмотр описателей кустов Просмотреть описатели кустов можно с помощью утилиты Process Explorer. B Windows 2000 диспетчер объектов сообщает об описателях из таблицы как об открытых в системном процессе System Idle, а в Windows XP и Windows Server 2003 он показывает описатели как открытые в процессе System. Укажите нужный процесс и выберите Handles из подменю Lower Pane View в меню View. Задайте сортировку по типу описателя и прокручивайте список, пока не увидите файлы кустов. Рис. 43. Описатели кустов 88 ЭКСПЕРИМЕНТ 31: наблюдение за использованием пула подкачиваемой памяти для кустов реестра Административных утилит, которые показывали бы объем памяти из подкачиваемого пула, используемой кустами реестра вместе с профилями пользователей, в Windows 2000 нет. Однако команда !reg dumppool отладчика ядра сообщает не только число страниц, задействованных каждым загруженным кустом, но и количество страниц, занятых постоянными и переменными данными. B конце отчета команда выводит суммарный объем памяти, занятой кустами реестра. (Эта команда показывает лишь последние 32 символа в имени куста.) Пример использования команды kd> !reg dumppool: kd> !reg dumppool dumping hive at e1a25008 (\SystemRoot\System32\Config\SAM) Stable Length = 7000 6/7 pages present Volatile Length = 0 dumping hive at e1a14b60 (emRoot\System32\Config\SECURITY) Stable Length = c000 4/12 pages present Volatile Length = 1000 can't read HMAP_ENTRY at e24c5000 0/1 pages present Total pages present = 4114 / 17095 ЭКСПЕРИМЕНТ 32: просмотр блоков управления разделами Команда !reg openkeys отладчика ядра позволяет перечислить все блоки управления разделами, созданные в системе. B качестве альтернативы, если вы хотите просмотреть блок управления разделом для конкретного открытого раздела, используйте !reg findkcb. Рис. 44. Использование команды !reg findkcb Для анализа блока управления разделом, о котором сообщила предыдущая команда, предназначена команда !reg kcb. 89 Рис. 45. Использование команды !reg kcb Поле Flags указывает, что имя хранится в сжатой форме, а поле SubKeyCount — что в разделе имеется 137 подразделов. Литература 1. Microsoft Developer Network. URL: http://www.msdn.com 2. Руссинович М, Соломон Д. Внутренне устройство Microsoft Windows: Windows Server 2003, Windows XP и Windows 2000. URL: http://www.nrjetix.com/fileadmin/doc/publications/additional_info/Russinovich_M_Solomon _D_Inside_Microsoft_Windows.djvu 3. Основные инструменты работы с ОС семейства Microsoft Windows - Windows Sysinternals Suite. URL: http://technet.microsoft.com/ru-ru/sysinternals/default.aspx |