<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Волчьи IT-мысли &#187; windbg</title>
	<atom:link href="http://sww-it.ru/tag/windbg/feed" rel="self" type="application/rss+xml" />
	<link>http://sww-it.ru</link>
	<description>Компьютерная безопасность, IT, антивирусная индустрия.</description>
	<lastBuildDate>Wed, 18 Jan 2012 11:20:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Использование мэппинга драйверов</title>
		<link>http://sww-it.ru/2010-07-08/485?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25d0%25b8%25d1%2581%25d0%25bf%25d0%25be%25d0%25bb%25d1%258c%25d0%25b7%25d0%25be%25d0%25b2%25d0%25b0%25d0%25bd%25d0%25b8%25d0%25b5-%25d0%25bc%25d1%258d%25d0%25bf%25d0%25bf%25d0%25b8%25d0%25bd%25d0%25b3%25d0%25b0-%25d0%25b4%25d1%2580%25d0%25b0%25d0%25b9%25d0%25b2%25d0%25b5%25d1%2580%25d0%25be%25d0%25b2</link>
		<comments>http://sww-it.ru/2010-07-08/485#comments</comments>
		<pubDate>Thu, 08 Jul 2010 11:50:08 +0000</pubDate>
		<dc:creator>SWW</dc:creator>
				<category><![CDATA[Отладка]]></category>
		<category><![CDATA[windbg]]></category>
		<category><![CDATA[драйвер]]></category>
		<category><![CDATA[мэппинг]]></category>
		<category><![CDATA[трюки]]></category>

		<guid isPermaLink="false">http://sww-it.ru/?p=485</guid>
		<description><![CDATA[<p align="justify">В отладчике WinDbg существует специальная возможность – мэппинг драйвера. Отладчик может перехватить момент загрузки драйвера на тестовой машине и загрузить в память копию драйвера с машины разработчика. Эта способность избавляет разработчика от проблемы копирования файла драйвера на тестовую машину и, конечно, от забывчивости.</p> <p></p> <p align="justify">Прежде всего, необходимо внести в переменные окружения компьютера разработчика [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">В отладчике WinDbg существует специальная возможность – мэппинг драйвера. Отладчик может перехватить момент загрузки драйвера на тестовой машине и загрузить в память копию драйвера с машины разработчика. Эта способность избавляет разработчика от проблемы копирования файла драйвера на тестовую машину и, конечно, от забывчивости.</p>
<p><span id="more-485"></span></p>
<p align="justify">Прежде всего, необходимо внести в переменные окружения компьютера разработчика параметр <strong>_NT_KD_FILES</strong>, где значением этого параметра должен быть полный путь до специального map-файла, например, <strong>c:\driver.map</strong>.</p>
<p align="justify">Далее, необходимо создать сам map-файл по выбранному пути с указанным содержимым:</p>
<blockquote><p>map<br />
\??\C:\1\driver32.sys<br />
C:\project_path\out\debug\driver32.sys
</p></blockquote>
<p align="justify">Во второй строке файла необходимо указать путь до драйвера на тестовой машине (например, на VmWare) так, как он указан в реестре данного сервиса. В третьей строке необходимо указать путь до файла на машине разработчика. Удобнее всего использовать путь до директории, в которой собирается chk-билд драйвера. Тогда каждый раз при загрузке драйвера будет загружена его новая версия.
</p>
<p align="justify">В отладчике процесс загрузки драйвера с машины разработчика на тестовую машину выглядит примерно так:</p>
<blockquote><p>kd> g<br />
KD: Accessing &#8216;C:\project_path\out \debug\driver32.sys&#8217; (\??\C:\1\driver32.sys)<br />
  File size 91K&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.<br />
MmLoadSystemImage: Pulled \??\C:\1\driver32.sys from kd</p></blockquote>
<p align="justify">Удачной отладки!</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fsww-it.ru%2F2010-07-08%2F485&amp;title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%BC%D1%8D%D0%BF%D0%BF%D0%B8%D0%BD%D0%B3%D0%B0%20%D0%B4%D1%80%D0%B0%D0%B9%D0%B2%D0%B5%D1%80%D0%BE%D0%B2" id="wpa2a_2"><img src="http://sww-it.ru/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://sww-it.ru/2010-07-08/485/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Небольшой трюк с WRP под Windows Vista+</title>
		<link>http://sww-it.ru/2010-03-10/423?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25d0%25bd%25d0%25b5%25d0%25b1%25d0%25be%25d0%25bb%25d1%258c%25d1%2588%25d0%25be%25d0%25b9-%25d1%2582%25d1%2580%25d1%258e%25d0%25ba-%25d1%2581-wrp-%25d0%25bf%25d0%25be%25d0%25b4-windows-vista</link>
		<comments>http://sww-it.ru/2010-03-10/423#comments</comments>
		<pubDate>Wed, 10 Mar 2010 10:20:45 +0000</pubDate>
		<dc:creator>SWW</dc:creator>
				<category><![CDATA[Внутренности Windows]]></category>
		<category><![CDATA[token]]></category>
		<category><![CDATA[windbg]]></category>
		<category><![CDATA[windows 7]]></category>
		<category><![CDATA[windows file protection]]></category>
		<category><![CDATA[windows resource protection]]></category>
		<category><![CDATA[windows vista]]></category>

		<guid isPermaLink="false">http://sww-it.ru/?p=423</guid>
		<description><![CDATA[<p align="justify">Как известно, в операционной системе Windows (2000, XP, 2003) существует механизм защиты системных файлов, также известный как Windows File Protection. Данный механизм не позволяет изменять или удалять критичные объекты операционной системы, в частности системные DLL и различные драйверы. В случае обнаружения изменений ОС восстанавливает такие файлы.</p> <p align="justify">Вкратце суть алгоритма сводилась к следующему: в [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">Как известно, в операционной системе Windows (2000, XP, 2003) существует механизм защиты системных файлов, также известный как <a href="http://ru.wikipedia.org/wiki/Windows_File_Protection">Windows File Protection</a>. Данный механизм не позволяет изменять или удалять критичные объекты операционной системы, в частности системные DLL и различные драйверы. В случае обнаружения изменений ОС восстанавливает такие файлы.</p>
<p align="justify">Вкратце суть алгоритма сводилась к следующему: в системном процессе winlogon.exe существовал следящий поток. Если он замечал изменение системной компоненты, то компонента восстанавливалась из запасной копии.</p>
<p align="justify">В скором времени данный алгоритм изучили и были придуманы многочисленные <a href="http://www.bitsum.com/aboutwfp.asp">способы обхода</a> данной технологи. Использование недокументированных функций системной библиотеки sfc_os.dll или изменение sfc.dll/sfc_os.dll стали широко использоваться в различных вредоносных программах.</p>
<p align="justify">Но не это нас интересует, а то, как видоизменился данный механизм в операционных системах Windows Vista и Windows 7.</p>
<p><span id="more-423"></span></p>
<p align="justify">В данных операционных системах Microsoft полностью отказалась от данной технологии и перешла на технологию <a href="http://ru.wikipedia.org/wiki/Windows_Resource_Protection">Windows Resource Protection</a>. Теперь в системе нет следящего потока, а доступ к файлам ограничивается операционной системой с помощью DACL и <a href="http://ru.wikipedia.org/wiki/Access_Control_List">ACL</a>, стандартного механизма защиты Windows. Однако даже у администратора нет прав на изменение или удаление системных файлов.</p>
<p align="justify">Поэкспериментируем с операционной системой Windows 7 RTM и попробуем удалить какой-либо системный файл.</p>
<div id="attachment_428" class="wp-caption aligncenter" style="width: 1034px"><a href="http://sww-it.ru/wp-content/uploads/2010/03/procmon_access_denied.png"><img src="http://sww-it.ru/wp-content/uploads/2010/03/procmon_access_denied-1024x728.png" alt="" title="procmon_access_denied" width="1024" height="728" class="size-large wp-image-428" /></a><p class="wp-caption-text">Так выглядит попытка удаления системного файла, которую я отследил с помощью Process Monitor</p></div>
<div id="attachment_432" class="wp-caption aligncenter" style="width: 429px"><a href="http://sww-it.ru/wp-content/uploads/2010/03/prop_1.png"><img src="http://sww-it.ru/wp-content/uploads/2010/03/prop_1.png" alt="" title="prop_1" width="419" height="515" class="size-full wp-image-432" /></a><p class="wp-caption-text">Посмотрим свойства файла</p></div>
<p align="justify">Как и было сказано даже у администратора нет прав на изменение файла.</p>
<div id="attachment_435" class="wp-caption aligncenter" style="width: 429px"><a href="http://sww-it.ru/wp-content/uploads/2010/03/prop_2.png"><img src="http://sww-it.ru/wp-content/uploads/2010/03/prop_2.png" alt="" title="prop_2" width="419" height="515" class="size-full wp-image-435" /></a><p class="wp-caption-text">Посмотрим, как с этим обстоят дела у TrustedInstaller</p></div>
<p align="justify">Как мы видим &#8212; полный контроль над файлом.</p>
<p align="justify">Однако, если вы администратор, то вы можете захватить владение данным файлом и потом уже выставить ему необходимые права.</p>
<p align="justify">Все это не очень удобно, если необходимо произвести изменение нескольких файлов. Попробуем найти способ проще. Для этого воспользуемся отладчиком WinDbg и утилитой psgetsid, которая умеет транслировать имя в SID и обратно:</p>
<blockquote><p>C:\1>psgetsid &#171;NT SERVICE\TrustedInstaller&#187;</p>
<p>PsGetSid v1.43 &#8212; Translates SIDs to names and vice versa<br />
Copyright (C) 1999-2006 Mark Russinovich<br />
Sysinternals &#8212; www.sysinternals.com</p>
<p>SID for NT SERVICE\TrustedInstaller:<br />
<strong>S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464</strong></p></blockquote>
<p align="justify">Теперь перечислим все процессы в системе и попробуем найти хотя бы один имеющий нужные нам права:</p>
<blockquote><p>kd> <span style="color: #0000ff;">!for_each_process &#171;r $t0 = @#Process; r? $t1 = @@c++(((nt!_EPROCESS*)@$t0)->Token.Object); !token -n @$t1 &#038; 0xFFFFFFF8;&#187;</span></p></blockquote>
<p align="justify">Приведу лишь token первого процесса (системного):</p>
<blockquote><p>_TOKEN 87a01398<br />
TS Session ID: 0<br />
User: S-1-5-18 (Well Known Group: NT AUTHORITY\SYSTEM)<br />
Groups:<br />
 00 S-1-5-32-544 (Alias: BUILTIN\Administrators)<br />
    Attributes &#8212; Default Enabled Owner<br />
 01 S-1-1-0 (Well Known Group: localhost\Everyone)<br />
    Attributes &#8212; Mandatory Default Enabled<br />
 02 S-1-5-11 (Well Known Group: NT AUTHORITY\Authenticated Users)<br />
    Attributes &#8212; Mandatory Default Enabled<br />
 03 S-1-16-16384 Unrecognized SID<br />
    Attributes &#8212; GroupIntegrity GroupIntegrityEnabled<br />
Primary Group: S-1-5-18 (Well Known Group: NT AUTHORITY\SYSTEM)<br />
Privs:<br />
 02 0&#215;000000002 SeCreateTokenPrivilege            Attributes -<br />
 03 0&#215;000000003 SeAssignPrimaryTokenPrivilege     Attributes -<br />
 04 0&#215;000000004 SeLockMemoryPrivilege             Attributes &#8212; Enabled Default<br />
 05 0&#215;000000005 SeIncreaseQuotaPrivilege          Attributes -<br />
 07 0&#215;000000007 SeTcbPrivilege                    Attributes &#8212; Enabled Default<br />
 08 0&#215;000000008 SeSecurityPrivilege               Attributes -<br />
 09 0&#215;000000009 SeTakeOwnershipPrivilege          Attributes -<br />
 10 0x00000000a SeLoadDriverPrivilege             Attributes -<br />
 11 0x00000000b SeSystemProfilePrivilege          Attributes &#8212; Enabled Default<br />
 12 0x00000000c SeSystemtimePrivilege             Attributes -<br />
 13 0x00000000d SeProfileSingleProcessPrivilege   Attributes &#8212; Enabled Default<br />
 14 0x00000000e SeIncreaseBasePriorityPrivilege   Attributes &#8212; Enabled Default<br />
 15 0x00000000f SeCreatePagefilePrivilege         Attributes &#8212; Enabled Default<br />
 16 0&#215;000000010 SeCreatePermanentPrivilege        Attributes &#8212; Enabled Default<br />
 17 0&#215;000000011 SeBackupPrivilege                 Attributes -<br />
 18 0&#215;000000012 SeRestorePrivilege                Attributes -<br />
 19 0&#215;000000013 SeShutdownPrivilege               Attributes -<br />
 20 0&#215;000000014 SeDebugPrivilege                  Attributes &#8212; Enabled Default<br />
 21 0&#215;000000015 SeAuditPrivilege                  Attributes &#8212; Enabled Default<br />
 22 0&#215;000000016 SeSystemEnvironmentPrivilege      Attributes -<br />
 23 0&#215;000000017 SeChangeNotifyPrivilege           Attributes &#8212; Enabled Default<br />
 25 0&#215;000000019 SeUndockPrivilege                 Attributes -<br />
 28 0x00000001c SeManageVolumePrivilege           Attributes -<br />
 29 0x00000001d SeImpersonatePrivilege            Attributes &#8212; Enabled Default<br />
 30 0x00000001e SeCreateGlobalPrivilege           Attributes &#8212; Enabled Default<br />
 31 0x00000001f SeTrustedCredManAccessPrivilege   Attributes -<br />
 32 0&#215;000000020 SeRelabelPrivilege                Attributes -<br />
 33 0&#215;000000021 SeIncreaseWorkingSetPrivilege     Attributes &#8212; Enabled Default<br />
 34 0&#215;000000022 SeTimeZonePrivilege               Attributes &#8212; Enabled Default<br />
 35 0&#215;000000023 SeCreateSymbolicLinkPrivilege     Attributes &#8212; Enabled Default<br />
Authentication ID:         (0,3e7)<br />
Impersonation Level:       Anonymous<br />
TokenType:                 Primary<br />
Source: *SYSTEM*           TokenFlags: 0&#215;2000 ( Token in use )<br />
Token ID: 3ea              ParentToken ID: 0<br />
Modified ID:               (0, 3eb)<br />
RestrictedSidCount: 0      RestrictedSids: 00000000<br />
OriginatingLogonSession: 0</p></blockquote>
<p align="justify">Попробуем во всем выводе в консоли WinDbg найти SID TrustedInstaller. На моем тестовом стенде ничего найдено не было. Но ведь есть сервис, который может изменять системные компоненты и находится он в <strong>\Windows\servicing\TrustedInstaller.exe</strong>, а запустить его мы можем вручную из вкладки Services. Называется он Windows Modules Installer и имеет следующее описание: «<em>Enables installation, modification, and removal of Windows updates and optional components. If this service is disabled, install or uninstall of Windows updates might fail for this computer.</em>»</p>
<p align="justify">После запуска можно повторить команду вывода Token для каждого процесса или найти Token вручную в процессе TrustedInstaller.exe.</p>
<blockquote><p>PROCESS <strong>85f79030</strong>  SessionId: 0  Cid: 0910    Peb: 7ffd3000  ParentCid: 01e8<br />
    DirBase: 3ef59520  ObjectTable: 90e37080  HandleCount: 121.<br />
    Image: TrustedInstaller.exe</p>
<p>kd> <span style="color: #0000ff;">? poi( <strong>85f79030</strong> + 0xf8 ) &#038; 0xFFFFFFF8</span><br />
Evaluate expression: -1730040888 = <strong>98e1abc8</strong></p></blockquote>
<p align="justify">0xf8 – это смещение до Token в структуре nt!_EPROCESS, а Token – это структура nt!_EX_FAST_REF:</p>
<blockquote><p>kd> <span style="color: #0000ff;">dt nt!_EX_FAST_REF</span><br />
   +0&#215;000 Object           : Ptr32 Void<br />
   +0&#215;000 RefCnt           : Pos 0, 3 Bits<br />
   +0&#215;000 Value            : Uint4B</p></blockquote>
<p align="justify">Поэтому необходимо отбросить младшие 3 бита адреса.</p>
<blockquote><p>kd> <span style="color: #0000ff;">!token -n <strong>98e1abc8</strong></span><br />
_TOKEN <strong>98e1abc8</strong><br />
TS Session ID: 0<br />
User: S-1-5-18 (Well Known Group: NT AUTHORITY\SYSTEM)<br />
Groups:<br />
 00 S-1-16-16384 Unrecognized SID<br />
    Attributes &#8212; GroupIntegrity GroupIntegrityEnabled<br />
 01 S-1-1-0 (Well Known Group: localhost\Everyone)<br />
    Attributes &#8212; Mandatory Default Enabled<br />
 02 S-1-5-32-545 (Alias: BUILTIN\Users)<br />
    Attributes &#8212; Mandatory Default Enabled<br />
 03 S-1-5-6 (Well Known Group: NT AUTHORITY\SERVICE)<br />
    Attributes &#8212; Mandatory Default Enabled<br />
 04 S-1-2-1 (no name mapped)<br />
    Attributes &#8212; Mandatory Default Enabled<br />
 05 S-1-5-11 (Well Known Group: NT AUTHORITY\Authenticated Users)<br />
    Attributes &#8212; Mandatory Default Enabled<br />
 06 S-1-5-15 (Well Known Group: NT AUTHORITY\This Organization)<br />
    Attributes &#8212; Mandatory Default Enabled<br />
 <strong>07 S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464 (Well Known Group: NT SERVICE\TrustedInstaller)</strong><br />
    Attributes &#8212; Default Enabled Owner<br />
 08 S-1-5-5-0-1412741 (no name mapped)<br />
    Attributes &#8212; Mandatory Default Enabled Owner LogonId<br />
 09 S-1-2-0 (Well Known Group: localhost\LOCAL)<br />
    Attributes &#8212; Mandatory Default Enabled<br />
 10 S-1-5-32-544 (Alias: BUILTIN\Administrators)<br />
    Attributes &#8212; Default Enabled Owner<br />
Primary Group: S-1-5-18 (Well Known Group: NT AUTHORITY\SYSTEM)<br />
Privs:<br />
 03 0&#215;000000003 SeAssignPrimaryTokenPrivilege     Attributes -<br />
 04 0&#215;000000004 SeLockMemoryPrivilege             Attributes &#8212; Enabled Default<br />
 05 0&#215;000000005 SeIncreaseQuotaPrivilege          Attributes -<br />
 07 0&#215;000000007 SeTcbPrivilege                    Attributes &#8212; Enabled Default<br />
 08 0&#215;000000008 SeSecurityPrivilege               Attributes -<br />
 09 0&#215;000000009 SeTakeOwnershipPrivilege          Attributes -<br />
 10 0x00000000a SeLoadDriverPrivilege             Attributes -<br />
 11 0x00000000b SeSystemProfilePrivilege          Attributes &#8212; Enabled Default<br />
 12 0x00000000c SeSystemtimePrivilege             Attributes -<br />
 13 0x00000000d SeProfileSingleProcessPrivilege   Attributes &#8212; Enabled Default<br />
 14 0x00000000e SeIncreaseBasePriorityPrivilege   Attributes &#8212; Enabled Default<br />
 15 0x00000000f SeCreatePagefilePrivilege         Attributes &#8212; Enabled Default<br />
 16 0&#215;000000010 SeCreatePermanentPrivilege        Attributes &#8212; Enabled Default<br />
 17 0&#215;000000011 SeBackupPrivilege                 Attributes &#8212; Enabled<br />
 18 0&#215;000000012 SeRestorePrivilege                Attributes &#8212; Enabled<br />
 19 0&#215;000000013 SeShutdownPrivilege               Attributes -<br />
 20 0&#215;000000014 SeDebugPrivilege                  Attributes &#8212; Enabled Default<br />
 21 0&#215;000000015 SeAuditPrivilege                  Attributes &#8212; Enabled Default<br />
 22 0&#215;000000016 SeSystemEnvironmentPrivilege      Attributes -<br />
 23 0&#215;000000017 SeChangeNotifyPrivilege           Attributes &#8212; Enabled Default<br />
 25 0&#215;000000019 SeUndockPrivilege                 Attributes -<br />
 28 0x00000001c SeManageVolumePrivilege           Attributes -<br />
 29 0x00000001d SeImpersonatePrivilege            Attributes &#8212; Enabled Default<br />
 30 0x00000001e SeCreateGlobalPrivilege           Attributes &#8212; Enabled Default<br />
 33 0&#215;000000021 SeIncreaseWorkingSetPrivilege     Attributes &#8212; Enabled Default<br />
 34 0&#215;000000022 SeTimeZonePrivilege               Attributes &#8212; Enabled Default<br />
 35 0&#215;000000023 SeCreateSymbolicLinkPrivilege     Attributes &#8212; Enabled Default<br />
Authentication ID:         (0,3e7)<br />
Impersonation Level:       Anonymous<br />
TokenType:                 Primary<br />
Source: Advapi             TokenFlags: 0&#215;2000 ( Token in use )<br />
Token ID: 158ec1           ParentToken ID: 0<br />
Modified ID:               (0, 158ff6)<br />
RestrictedSidCount: 0      RestrictedSids: 00000000<br />
OriginatingLogonSession: 3e7
</p></blockquote>
<p align="justify">А теперь давайте подменим Token процесса FAR.exe на Token процесса TrustedInstaller.exe:</p>
<blockquote><p>PROCESS <strong>84c9e030</strong>  SessionId: 1  Cid: 08d0    Peb: 7ffda000  ParentCid: 07b0<br />
    DirBase: 3ef593c0  ObjectTable: 90fe1308  HandleCount: 264.<br />
    Image: Far.exe</p>
<p>kd> <span style="color: #0000ff;">ed <strong>84c9e030</strong>+f8 <strong>98e1abc8</strong></span>
</p></blockquote>
<p align="justify">После этих нехитрых манипуляций файловый менеджер FAR получает все необходимые права и может изменять и/или удалять защищаемые системные файлы без каких-либо изощрений с захватом прав пользования отдельного файла.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fsww-it.ru%2F2010-03-10%2F423&amp;title=%D0%9D%D0%B5%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%BE%D0%B9%20%D1%82%D1%80%D1%8E%D0%BA%20%D1%81%20WRP%20%D0%BF%D0%BE%D0%B4%20Windows%20Vista%2B" id="wpa2a_4"><img src="http://sww-it.ru/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://sww-it.ru/2010-03-10/423/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WDK 7.1.0 и WinDbg 6.12.2.633</title>
		<link>http://sww-it.ru/2010-02-27/418?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=wdk-7-1-0-%25d0%25b8-windbg-6-12-2-633</link>
		<comments>http://sww-it.ru/2010-02-27/418#comments</comments>
		<pubDate>Sat, 27 Feb 2010 10:49:42 +0000</pubDate>
		<dc:creator>SWW</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[wdk]]></category>
		<category><![CDATA[windbg]]></category>

		<guid isPermaLink="false">http://sww-it.ru/?p=418</guid>
		<description><![CDATA[<p>Итак, обновились Windows Debugging Tools, теперь WinDbg входит в поставку WDK (не знаю зачем это было делать).</p> <p>Что нового в WinDbg 6.12.2.633 Что нового в WDK 7.1.0 Скачать</p> ]]></description>
			<content:encoded><![CDATA[<p>Итак, обновились Windows Debugging Tools, теперь WinDbg входит в поставку WDK (не знаю зачем это было делать).</p>
<p><a href="http://www.microsoft.com/whdc/devtools/debugging/whatsnew.mspx#">Что нового в WinDbg 6.12.2.633</a><br />
<a href="http://www.microsoft.com/whdc/devtools/wdk/RelNotesW7.mspx">Что нового в WDK 7.1.0</a><br />
<a href="http://www.microsoft.com/whdc/DevTools/WDK/WDKpkg.mspx">Скачать</a></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fsww-it.ru%2F2010-02-27%2F418&amp;title=WDK%207.1.0%20%D0%B8%20WinDbg%206.12.2.633" id="wpa2a_6"><img src="http://sww-it.ru/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://sww-it.ru/2010-02-27/418/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Адрес модуля в WinDbg</title>
		<link>http://sww-it.ru/2009-11-20/339?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25d0%25b0%25d0%25b4%25d1%2580%25d0%25b5%25d1%2581-%25d0%25bc%25d0%25be%25d0%25b4%25d1%2583%25d0%25bb%25d1%258f-%25d0%25b2-windbg</link>
		<comments>http://sww-it.ru/2009-11-20/339#comments</comments>
		<pubDate>Fri, 20 Nov 2009 13:32:07 +0000</pubDate>
		<dc:creator>SWW</dc:creator>
				<category><![CDATA[Отладка]]></category>
		<category><![CDATA[windbg]]></category>

		<guid isPermaLink="false">http://sww-it.ru/?p=339</guid>
		<description><![CDATA[<p style="text-align: justify;">Довольно часто я сталкиваюсь с тем, что необходимо получить имя модуля по какому-либо адресу внутри него. Например, для того, чтобы загрузить символы этого модуля. Отладчик использует отложенную загрузку символов (deferred symbol loading или lazy symbol loading) и выражается она в том, что символы подгружаются только тогда, когда они нужны. Делается это специально, иначе [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Довольно часто я сталкиваюсь с тем, что необходимо получить имя модуля по какому-либо адресу внутри него. Например, для того, чтобы загрузить символы этого модуля. Отладчик использует отложенную загрузку символов (<em>deferred symbol loading</em> или <em>lazy symbol loading</em>) и выражается она в том, что символы подгружаются только тогда, когда они нужны. Делается это специально, иначе программист устанет ждать, когда же загрузятся все символы. Я, кстати, не знаю в чем смысл «когда они нужны». Эта тайна доступна лишь программистам WinDbg.</p>
<p style="text-align: justify;"><span id="more-339"></span></p>
<p>И так часто бывает, что по команде <span style="color: #0000ff;">lm</span> видны лишь несколько модулей ядра:</p>
<blockquote><p>kd&gt; <span style="color: #0000ff;">lm</span></p>
<p>start    end        module name<br />
8181c000 81bd5000   nt         (pdb symbols)          c:\symserver\ntkrpamp.pdb\37D328E3BAE5460F8E662756ED80951D2\ntkrpamp.pdb</p>
<p>Unloaded modules:<br />
85b4a000 85b57000   crashdmp.sys<br />
85b57000 85b61000   dump_storport.sys<br />
85b61000 85b7b000   dump_LSI_SCSI.sys<br />
85b7b000 85b8c000   dump_dumpfve.sys</p></blockquote>
<p style="text-align: justify;">Рассмотрим типичную ситуацию, в которой необходимо получить имя модуля по адресу в его образе:</p>
<blockquote><p>kd&gt; <span style="color: #0000ff;">!devstack \Device\Harddisk0\DR0</span></p>
<p>!DevObj   !DrvObj            !DevExt   ObjectName<br />
84680d20  \Driver\partmgr    84680dd8<br />
&gt; 8457d1e0  \Driver\disk       8457d298  DR0<br />
<strong>83d03708  \Driver\LSI_SCSI   83d037c0  0000004b</strong></p>
<p>!DevNode 83d031d0 :</p>
<p>DeviceInst is &#171;SCSI\Disk&amp;Ven_VMware_&amp;Prod_VMware_Virtual_S\4&amp;2b9256da&amp;0&amp;000000&#8243;</p>
<p>ServiceName is &#171;disk&#187;</p>
<p>kd&gt; <span style="color: #0000ff;">!devobj 83d03708</span><br />
Device object (83d03708) is for:<br />
0000004b \Driver\LSI_SCSI <strong>DriverObject 833bbb98</strong><br />
Current Irp 00000000 RefCount 0 Type 00000007 Flags 00001050<br />
Dacl 87c8f334 DevExt 83d037c0 DevObjExt 83d03a38 DevNode 83d031d0<br />
ExtensionFlags (0&#215;00000800)<br />
Unknown flags 0&#215;00000800<br />
AttachedDevice (Upper) 8457d1e0 \Driver\disk<br />
Device queue is not busy.</p>
<p>kd&gt; <span style="color: #0000ff;">!drvobj 833bbb98 2</span><br />
Driver object (833bbb98) is for:<br />
\Driver\LSI_SCSI<br />
DriverEntry:   81fec005<br />
DriverStartIo: 00000000<br />
DriverUnload:  807b9a50<br />
AddDevice:     807b379c</p>
<p>Dispatch routines:</p>
<p>[00] IRP_MJ_CREATE                      807e460a	+0x807e460a<br />
[01] IRP_MJ_CREATE_NAMED_PIPE           81841fef	nt!IopInvalidDeviceRequest<br />
[02] IRP_MJ_CLOSE                       807e4565	+0x807e4565<br />
[03] IRP_MJ_READ                        81841fef	nt!IopInvalidDeviceRequest<br />
[04] IRP_MJ_WRITE                       81841fef	nt!IopInvalidDeviceRequest<br />
[05] IRP_MJ_QUERY_INFORMATION           81841fef	nt!IopInvalidDeviceRequest<br />
[06] IRP_MJ_SET_INFORMATION             81841fef	nt!IopInvalidDeviceRequest<br />
[07] IRP_MJ_QUERY_EA                    81841fef	nt!IopInvalidDeviceRequest<br />
[08] IRP_MJ_SET_EA                      81841fef	nt!IopInvalidDeviceRequest<br />
[09] IRP_MJ_FLUSH_BUFFERS               81841fef	nt!IopInvalidDeviceRequest<br />
[0a] IRP_MJ_QUERY_VOLUME_INFORMATION    81841fef	nt!IopInvalidDeviceRequest<br />
[0b] IRP_MJ_SET_VOLUME_INFORMATION      81841fef	nt!IopInvalidDeviceRequest<br />
[0c] IRP_MJ_DIRECTORY_CONTROL           81841fef	nt!IopInvalidDeviceRequest<br />
[0d] IRP_MJ_FILE_SYSTEM_CONTROL         81841fef	nt!IopInvalidDeviceRequest<br />
<strong>[0e] IRP_MJ_DEVICE_CONTROL              807e46cb	+0x807e46cb</strong><br />
[0f] IRP_MJ_INTERNAL_DEVICE_CONTROL     807b3ee3	+0x807b3ee3<br />
[10] IRP_MJ_SHUTDOWN                    81841fef	nt!IopInvalidDeviceRequest<br />
[11] IRP_MJ_LOCK_CONTROL                81841fef	nt!IopInvalidDeviceRequest<br />
[12] IRP_MJ_CLEANUP                     81841fef	nt!IopInvalidDeviceRequest<br />
[13] IRP_MJ_CREATE_MAILSLOT             81841fef	nt!IopInvalidDeviceRequest<br />
[14] IRP_MJ_QUERY_SECURITY              81841fef	nt!IopInvalidDeviceRequest<br />
[15] IRP_MJ_SET_SECURITY                81841fef	nt!IopInvalidDeviceRequest<br />
[16] IRP_MJ_POWER                       807b998f	+0x807b998f<br />
[17] IRP_MJ_SYSTEM_CONTROL              807e48fe	+0x807e48fe<br />
[18] IRP_MJ_DEVICE_CHANGE               81841fef	nt!IopInvalidDeviceRequest<br />
[19] IRP_MJ_QUERY_QUOTA                 81841fef	nt!IopInvalidDeviceRequest<br />
[1a] IRP_MJ_SET_QUOTA                   81841fef	nt!IopInvalidDeviceRequest<br />
[1b] IRP_MJ_PNP                         807e629c	+0x807e629c</p>
<p>kd&gt; <span style="color: #0000ff;">lma 0x807e46cb</span></p>
<p>start    end        module name</p></blockquote>
<p style="text-align: justify;">Команда <span style="color: #0000ff;">lm</span> с параметром <span style="color: #0000ff;"><strong>a</strong> <em>Address</em></span> должна вывести имя модуля, в котором содержится данный адрес, но символы не загружены и список модулей практически пуст. Как вариант – это загрузить все символы для всех модулей ядра, но, не загружая их.</p>
<p style="text-align: justify;">
<blockquote>
<p style="text-align: justify;">kd&gt; <span style="color: #0000ff;">.reload /n /s</span><br />
Connected to Windows Server 2008/Windows Vista 6001 x86 compatible target at (Fri Nov 20 15:54:17.231 2009 (GMT+3)), ptr64 FALSE<br />
Loading Kernel Symbols<br />
&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;<br />
&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.<br />
&#8230;..<br />
Loading unloaded module list<br />
&#8230;.<br />
kd&gt;<span style="color: #0000ff;"> lm</span><br />
start    end        module name<br />
8060e000 80616000   kdcom      (deferred)<br />
80616000 80676000   mcupdate_GenuineIntel   (deferred)<br />
80676000 80687000   PSHED      (deferred)<br />
80687000 8068f000   BOOTVID    (deferred)<br />
8068f000 806d0000   CLFS       (deferred)<br />
806d0000 807b0000   CI         (deferred)<br />
807b0000 807f1000   storport   (deferred)<br />
8181c000 81bd5000   nt         (pdb symbols)          c:\symserver\ntkrpamp.pdb\37D328E3BAE5460F8E662756ED80951D2\ntkrpamp.pdb<br />
81bd5000 81c08000   hal        (deferred)<br />
81e0e000 81e8a000   Wdf01000   (deferred)<br />
81e8a000 81e97000   WDFLDR     (deferred)<br />
&#8230;</p>
<p>Unloaded modules:<br />
85b4a000 85b57000   crashdmp.sys<br />
85b57000 85b61000   dump_storport.sys<br />
85b61000 85b7b000   dump_LSI_SCSI.sys<br />
85b7b000 85b8c000   dump_dumpfve.sys</p></blockquote>
<p style="text-align: justify;">
<p style="text-align: justify;">Как мы видим, информация о модулях обновилась, а загрузка символов все еще отложена. Теперь попробуем еще раз воспользоваться командой <span style="color: #0000ff;">lm</span>:</p>
<p style="text-align: justify;">
<blockquote>
<p style="text-align: justify;">kd&gt; <span style="color: #0000ff;">lma 0x807e46cb</span><br />
start    end        module name<br />
807b0000 807f1000   storport   (deferred)</p></blockquote>
<p style="text-align: justify;">
<p style="text-align: justify;">Вот мы и получили имя модуля и можем подгрузить только его символы.</p>
<p style="text-align: justify;">
<p style="text-align: justify;">Альтернативный вариант – воспользоваться скриптовым языком отладчика и перечислить все модули ядра:</p>
<p style="text-align: justify;">

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">$$ pointer to modules list
r $t0 <span style="color: #339933;">=</span> nt<span style="color: #339933;">!</span>PsLoadedModuleList
&nbsp;
	.<span style="color: #202020;">echo</span> <span style="color: #ff0000;">&quot;Section             Start               End                 Name&quot;</span>
&nbsp;
.<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span> r $t1 <span style="color: #339933;">=</span> poi<span style="color: #009900;">&#40;</span>@$t0<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
       <span style="color: #009900;">&#40;</span>@$t1 <span style="color: #339933;">!=</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span> <span style="color: #009900;">&#40;</span>@$t1 <span style="color: #339933;">!=</span> @$t0<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
       r $t1 <span style="color: #339933;">=</span> poi<span style="color: #009900;">&#40;</span>@$t1<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    r<span style="color: #339933;">?</span> $t2 <span style="color: #339933;">=</span> <span style="color: #339933;">#CONTAINING_RECORD( @$t1, nt!_LDR_DATA_TABLE_ENTRY, InLoadOrderLinks );</span>
    as <span style="color: #339933;">/</span>x $<span style="color: #009900;">&#123;</span><span style="color: #339933;">/</span>v<span style="color: #339933;">:</span>$Section<span style="color: #009900;">&#125;</span> @$t2
&nbsp;
    $$  Get image name into $DriverName
    as <span style="color: #339933;">/</span>msu $<span style="color: #009900;">&#123;</span><span style="color: #339933;">/</span>v<span style="color: #339933;">:</span>$DriverName<span style="color: #009900;">&#125;</span> @@c<span style="color: #339933;">++</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>@$t2<span style="color: #339933;">-&gt;</span>BaseDllName<span style="color: #009900;">&#41;</span>
    $$  Get image base into $Start
    as <span style="color: #339933;">/</span>x $<span style="color: #009900;">&#123;</span><span style="color: #339933;">/</span>v<span style="color: #339933;">:</span>$Start<span style="color: #009900;">&#125;</span> @@c<span style="color: #339933;">++</span><span style="color: #009900;">&#40;</span>@$t2<span style="color: #339933;">-&gt;</span>DllBase<span style="color: #009900;">&#41;</span>
    $$  Get image base <span style="color: #339933;">+</span> image size into $End
    as <span style="color: #339933;">/</span>x $<span style="color: #009900;">&#123;</span><span style="color: #339933;">/</span>v<span style="color: #339933;">:</span>$End<span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#40;</span> @@c<span style="color: #339933;">++</span><span style="color: #009900;">&#40;</span>@$t2<span style="color: #339933;">-&gt;</span>DllBase<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> @@c<span style="color: #339933;">++</span><span style="color: #009900;">&#40;</span>@$t2<span style="color: #339933;">-&gt;</span>SizeOfImage<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
&nbsp;
    .<span style="color: #202020;">block</span>
    <span style="color: #009900;">&#123;</span>
        .<span style="color: #202020;">echo</span> $<span style="color: #009900;">&#123;</span>$Section<span style="color: #009900;">&#125;</span><span style="color: #339933;">:</span> $<span style="color: #009900;">&#123;</span>$Start<span style="color: #009900;">&#125;</span><span style="color: #339933;">:</span> $<span style="color: #009900;">&#123;</span>$End<span style="color: #009900;">&#125;</span><span style="color: #339933;">:</span> $<span style="color: #009900;">&#123;</span>$DriverName<span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    ad $<span style="color: #009900;">&#123;</span><span style="color: #339933;">/</span>v<span style="color: #339933;">:</span>$End<span style="color: #009900;">&#125;</span>
    ad $<span style="color: #009900;">&#123;</span><span style="color: #339933;">/</span>v<span style="color: #339933;">:</span>$Start<span style="color: #009900;">&#125;</span>
    ad $<span style="color: #009900;">&#123;</span><span style="color: #339933;">/</span>v<span style="color: #339933;">:</span>$DriverName<span style="color: #009900;">&#125;</span>
    ad $<span style="color: #009900;">&#123;</span><span style="color: #339933;">/</span>v<span style="color: #339933;">:</span>$Section<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<blockquote><p>kd&gt; <span style="color: #0000ff;">$$&gt;a&lt; c:\dbg_get_kernel_modules.txt</span><br />
Section             Start               End                 Name<br />
0xffffffff82f69ba0: 0xffffffff8181c000: 0xffffffff81bd5000: ntoskrnl.exe<br />
0xffffffff82f69b30: 0xffffffff81bd5000: 0xffffffff81c08000: hal.dll<br />
0xffffffff82f69ab8: 0xffffffff8060e000: 0xffffffff80616000: kdcom.dll<br />
0xffffffff82f69a40: 0xffffffff80616000: 0xffffffff80676000: mcupdate.dll<br />
0xffffffff82f699c8: 0xffffffff80676000: 0xffffffff80687000: PSHED.dll<br />
0xffffffff82f69950: 0xffffffff80687000: 0xffffffff8068f000: BOOTVID.dll<br />
0xffffffff82f698e0: 0xffffffff8068f000: 0xffffffff806d0000: CLFS.SYS<br />
0xffffffff82f69870: 0xffffffff806d0000: 0xffffffff807b0000: CI.dll<br />
0xffffffff82f697f8: 0xffffffff81e0e000: 0xffffffff81e8a000: Wdf01000.sys<br />
0xffffffff82f69780: 0xffffffff81e8a000: 0xffffffff81e97000: WDFLDR.SYS<br />
0xffffffff82f69710: 0xffffffff81e97000: 0xffffffff81edd000: acpi.sys<br />
0xffffffff82f69698: 0xffffffff81edd000: 0xffffffff81ee6000: WMILIB.SYS<br />
0xffffffff82f69620: 0xffffffff81ee6000: 0xffffffff81eee000: msisadrv.sys<br />
0xffffffff82f695b0: 0xffffffff81eee000: 0xffffffff81f15000: pci.sys<br />
0xffffffff82f69538: 0xffffffff81f15000: 0xffffffff81f24000: partmgr.sys<br />
0xffffffff82f694c0: 0xffffffff81f24000: 0xffffffff81f27000: compbatt.sys<br />
0xffffffff82f69448: 0xffffffff81f27000: 0xffffffff81f31000: BATTC.SYS<br />
0xffffffff82f693d0: 0xffffffff81f31000: 0xffffffff81f40000: volmgr.sys<br />
0xffffffff82f69358: 0xffffffff81f40000: 0xffffffff81f8a000: volmgrx.sys<br />
0xffffffff82f692e0: 0xffffffff81f8a000: 0xffffffff81f91000: intelide.sys<br />
0xffffffff82f69268: 0xffffffff81f91000: 0xffffffff81f9f000: PCIIDEX.SYS<br />
0xffffffff82f691f0: 0xffffffff81f9f000: 0xffffffff81faf000: mountmgr.sys<br />
0xffffffff82f69178: 0xffffffff81faf000: 0xffffffff81fb7000: atapi.sys<br />
0xffffffff82f69100: 0xffffffff81fb7000: 0xffffffff81fd5000: ataport.SYS<br />
0xffffffff82f69088: 0xffffffff81fd5000: 0xffffffff81fef000: lsi_scsi.sys<br />
0xffffffff82f6ff90: 0xffffffff807b0000: 0xffffffff807f1000: storport.sys<br />
&#8230;</p></blockquote>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fsww-it.ru%2F2009-11-20%2F339&amp;title=%D0%90%D0%B4%D1%80%D0%B5%D1%81%20%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8F%20%D0%B2%20WinDbg" id="wpa2a_8"><img src="http://sww-it.ru/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://sww-it.ru/2009-11-20/339/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Темы WinDbg</title>
		<link>http://sww-it.ru/2009-11-19/327?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25d1%2582%25d0%25b5%25d0%25bc%25d1%258b-windbg</link>
		<comments>http://sww-it.ru/2009-11-19/327#comments</comments>
		<pubDate>Thu, 19 Nov 2009 18:07:48 +0000</pubDate>
		<dc:creator>SWW</dc:creator>
				<category><![CDATA[Отладка]]></category>
		<category><![CDATA[themes]]></category>
		<category><![CDATA[windbg]]></category>

		<guid isPermaLink="false">http://sww-it.ru/?p=327</guid>
		<description><![CDATA[<p style="text-align: justify;">Рабочее место разработчика должно быть удобным для него. Ничего не должно отвлекать от процесса разработки или анализа и все должно быть под рукой. Отладчик WinDbg не блещет красивым и удобным интерфейсом, но старается покорять громадными техническими возможностями.</p> <p style="text-align: justify;">Данная заметка – это вольное изложение документации, которая поставляется с отладчиком.</p> <p style="text-align: justify;"> [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Рабочее место разработчика должно быть удобным для него. Ничего не должно отвлекать от процесса разработки или анализа и все должно быть под рукой. Отладчик WinDbg не блещет красивым и удобным интерфейсом, но старается покорять громадными техническими возможностями.</p>
<p style="text-align: justify;">Данная заметка – это вольное изложение документации, которая поставляется с отладчиком.</p>
<p style="text-align: justify;">
<p style="text-align: justify;"><span id="more-327"></span>Тема отладчика WinDbg – это специальным образом сконфигурированное рабочее место с окнами, закрепленными на своем месте. Выше уже было сказано то, что данный отладчик не отличается дружественным интерфейсом, поэтому темы в нем представлены в виде .reg файлов, которые можно импортировать (и экспортировать из реестра) в определенную ветку реестра (HKEY_CURRENT_USER\Software\Microsoft\Windbg).</p>
<p style="text-align: justify;">
<h3 style="text-align: justify;">Загрузка темы</h3>
<p style="text-align: justify;">
<ol style="text-align: justify;">
<li>Рекомендуется очистить все данные рабочего места. Из GUI WinDbg – File-&gt;Clear Workspace или удалив ключ HKEY_CURRENT_USER\Software\Microsoft\Windbg\Workspaces.</li>
<li>Загрузить тему из директории <strong>themes </strong>(C:\Program Files\Debugging Tools for Windows\themes\) отладчика по вашему выбору. Импортирование информации из .reg файла затрет текущее рабочее место.</li>
</ol>
<p style="text-align: justify;">
<h3 style="text-align: justify;">Перед использованием темы</h3>
<p style="text-align: justify;">
<ol style="text-align: justify;">
<li>После загрузки темы запустите WinDbg без параметров. Откроется рабочее место по умолчанию.</li>
<li>Настройте готовую тему так, как вам это нужно. Не забудьте про пути к символам, исходным кодам и так далее. Также можно подвигать окна так, как вам будет удобно с ними работать.</li>
<li>Закройте отладчик и сохраните ваше рабочее место.</li>
<li>После всех настроек можно экспортировать ветку реестра HKEY_CURRENT_USER\Software\Microsoft\Windbg\Workspaces в .reg файл.</li>
</ol>
<p style="text-align: justify;">
<h3 style="text-align: justify;">Предустановленные темы отладчика WinDbg</h3>

<a href='http://sww-it.ru/2009-11-19/327/theme_standard' title='theme_standard'><img width="150" height="150" src="http://sww-it.ru/wp-content/uploads/2009/11/theme_standard-150x150.jpg" class="attachment-thumbnail" alt="theme_standard" title="theme_standard" /></a>
<a href='http://sww-it.ru/2009-11-19/327/theme_standardvs' title='theme_standardvs'><img width="150" height="150" src="http://sww-it.ru/wp-content/uploads/2009/11/theme_standardvs-150x150.jpg" class="attachment-thumbnail" alt="theme_standardvs" title="theme_standardvs" /></a>
<a href='http://sww-it.ru/2009-11-19/327/theme_srcdisassembly' title='theme_srcdisassembly'><img width="150" height="150" src="http://sww-it.ru/wp-content/uploads/2009/11/theme_srcdisassembly-150x150.jpg" class="attachment-thumbnail" alt="theme_srcdisassembly" title="theme_srcdisassembly" /></a>
<a href='http://sww-it.ru/2009-11-19/327/theme_multimon' title='theme_multimon'><img width="150" height="150" src="http://sww-it.ru/wp-content/uploads/2009/11/theme_multimon-150x150.jpg" class="attachment-thumbnail" alt="theme_multimon" title="theme_multimon" /></a>

<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fsww-it.ru%2F2009-11-19%2F327&amp;title=%D0%A2%D0%B5%D0%BC%D1%8B%20WinDbg" id="wpa2a_10"><img src="http://sww-it.ru/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://sww-it.ru/2009-11-19/327/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Трюки WinDbg</title>
		<link>http://sww-it.ru/2009-04-15/187?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25d1%2582%25d1%2580%25d1%258e%25d0%25ba%25d0%25b8-windbg</link>
		<comments>http://sww-it.ru/2009-04-15/187#comments</comments>
		<pubDate>Tue, 14 Apr 2009 21:27:55 +0000</pubDate>
		<dc:creator>SWW</dc:creator>
				<category><![CDATA[Отладка]]></category>
		<category><![CDATA[windbg]]></category>
		<category><![CDATA[трюки]]></category>

		<guid isPermaLink="false">http://sww-it.ru/?p=187</guid>
		<description><![CDATA[<p>Представляю вашему вниманию страницу &#171;Трюки WinDbg&#187;, которую буду пополнять по мере возможности. Об изменениях в ней я сообщу дополнительно. Вопросы можно оставлять в любой теме, которая относится к данной странице.</p> ]]></description>
			<content:encoded><![CDATA[<p>Представляю вашему вниманию страницу <a href="http://sww-it.ru/windbg-tricks">&#171;Трюки WinDbg&#187;</a>, которую буду пополнять по мере возможности. Об изменениях в ней я сообщу дополнительно. Вопросы можно оставлять в любой теме, которая относится к данной странице.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fsww-it.ru%2F2009-04-15%2F187&amp;title=%D0%A2%D1%80%D1%8E%D0%BA%D0%B8%20WinDbg" id="wpa2a_12"><img src="http://sww-it.ru/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://sww-it.ru/2009-04-15/187/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Трюки WinDbg</title>
		<link>http://sww-it.ru/windbg-tricks?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=windbg-tricks</link>
		<comments>http://sww-it.ru/windbg-tricks#comments</comments>
		<pubDate>Tue, 14 Apr 2009 21:12:55 +0000</pubDate>
		<dc:creator>SWW</dc:creator>
				<category><![CDATA[Без рубрики]]></category>
		<category><![CDATA[windbg]]></category>
		<category><![CDATA[трюки]]></category>

		<guid isPermaLink="false">http://sww-it.ru/?page_id=158</guid>
		<description><![CDATA[<p style="text-align: justify;">Этот раздел предназначен для описания различных трюков WinDbg. Некоторые их них полезны, некоторые очень полезны. Большинство я использую при динамическом анализе различных руткитов, однако, не стоит забывать о том, что WinDbg можно использовать как дебаггер приложений пользовательского режима. Сам дебаггер содержит громадное количество команд, но используется очень малая их часть. Поэтому будем считать, [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Этот раздел предназначен для описания различных трюков <a href="http://www.microsoft.com/whdc/devtools/debugging/default.mspx" target="_blank">WinDbg</a>. Некоторые их них полезны, некоторые очень полезны. Большинство я использую при динамическом анализе различных руткитов, однако, не стоит забывать о том, что WinDbg можно использовать как дебаггер приложений пользовательского режима. Сам дебаггер содержит громадное количество команд, но используется очень малая их часть. Поэтому будем считать, что этот раздел я пишу сам для себя как справочник, чтобы не забыть. Данная страница будет пополняться по мере того, как я вспомню о том, что сюда надо написать :)  Повествование будет вестись в виде вопросов и ответов. И когда-нибудь я разобью все это на подразделы, но не сейчас (это предложение исчезнет в случае реализации).</p>
<p style="text-align: justify;">
<p style="text-align: justify;"><strong>В: Как правильно прописать путь до символов от Microsoft?</strong></p>
<p style="text-align: justify;">О: Находясь в WinDbg нажмите Ctrl-S и вставьте туда <span style="color: #0000ff;">c:\symserver;SRV*c:\symserver*http://msdl.microsoft.com/download/symbols</span></p>
<p style="text-align: justify;">
<p style="text-align: justify;"><strong>В: Чтобы проверить что-нибудь очень быстро, например, какое-либо смещение или получить недокументированную структуру приходится запускать виртуальную машину, а потом WinDbg. Можно как-нибудь быстрее?</strong></p>
<p style="text-align: justify;">О: Да. Запоминайте: <span style="color: #0000ff;">windbg.exe, Ctrl-K, Local, Enter</span>. Вы запустили WinDbg локально на своей реальной машине. Учтите, что структуры будут верны для вашей версии операционной системы. В Windows Vista необходимо предварительно выполнить команду <span style="color: #0000ff;">bcdedit -debug on</span> из cmd, запущенного под администратором и перегрузиться.</p>
<p style="text-align: justify;">
<p style="text-align: justify;"><strong>В: Можно ли создать дамп-файл не уводя машину в BSOD?</strong></p>
<p style="text-align: justify;">О: Можно. Для этого необходимо использовать команду <span style="color: #0000ff;">.dump</span>. Например, чтобы создать дамп-файл памяти ядра необходимо выполнить <span style="color: #0000ff;">.dump /f c:\kernel.dmp</span>. Кстати, если вы собираетесь делать это по COM-порту (или виртуальному pipe-порту в виртуальной машине), то приготовьтесь ждать, очень долго ждать.</p>
<p style="text-align: justify;">
<p style="text-align: justify;"><strong>В: Как записать в файл произвольный фрагмент памяти?</strong></p>
<p style="text-align: justify;">О: Сделать это можно командой <span style="color: #0000ff;">.writemem</span>. Например, <span style="color: #0000ff;">.writemem c:\dumpnt.exe 0x804d7000 L?20d000</span>. Знак вопроса необходим для того, чтобы WinDbg не проверял размер записываемых данных.</p>
<p style="text-align: justify;">
<p style="text-align: justify;"><strong>В: А записать в память из файла можно?</strong></p>
<p style="text-align: justify;">О: Используйте команду <span style="color: #0000ff;">.readmem</span>.</p>
<p style="text-align: justify;">
<p style="text-align: justify;"><strong>В: Как искать и находить в памяти строчку или определенную последовательность байт?</strong></p>
<p style="text-align: justify;">О: Это можно сделать с помощью команды <span style="color: #0000ff;">s</span>. Для поиска ANSI-строки необходимо использовать ключ <span style="color: #0000ff;">-a</span>, для UNICODE-строки <span style="color: #0000ff;">-u</span>:</p>
<blockquote>
<p style="text-align: justify;">lkd> <span style="color: #0000ff;">s -a nt L?20d000 &#171;PAGE&#187;</span><br />
804d72f0  50 41 47 45 00 00 00 00-ef f8 0d 00 00 20 09 00  PAGE&#8230;&#8230;&#8230; ..<br />
804d7318  50 41 47 45 4c 4b 00 00-10 e5 00 00 00 20 17 00  PAGELK&#8230;&#8230;. ..<br />
804d7340  50 41 47 45 56 52 46 59-a6 ea 00 00 00 10 18 00  PAGEVRFY&#8230;&#8230;..<br />
804d7368  50 41 47 45 57 4d 49 00-ff 16 00 00 00 00 19 00  PAGEWMI&#8230;&#8230;&#8230;<br />
804d7390  50 41 47 45 4b 44 00 00-93 3d 00 00 00 20 19 00  PAGEKD&#8230;=&#8230; ..<br />
804d73b8  50 41 47 45 53 50 45 43-21 0e 00 00 00 60 19 00  PAGESPEC!&#8230;.`..<br />
804d73e0  50 41 47 45 48 44 4c 53-b8 1d 00 00 00 70 19 00  PAGEHDLS&#8230;..p..<br />
804d7430  50 41 47 45 44 41 54 41-b8 15 00 00 00 50 1a 00  PAGEDATA&#8230;..P..<br />
804d7458  50 41 47 45 43 4f 4e 53-40 30 00 00 00 70 1a 00  PAGECONS@0&#8230;p..<br />
804d7480  50 41 47 45 4b 44 00 00-21 c0 00 00 00 b0 1a 00  PAGEKD..!&#8230;&#8230;.<br />
804d74a8  50 41 47 45 43 4f 4e 53-8c 01 00 00 00 80 1b 00  PAGECONS&#8230;&#8230;..<br />
804d74d0  50 41 47 45 4c 4b 43 4f-88 00 00 00 00 90 1b 00  PAGELKCO&#8230;&#8230;..<br />
804d74f8  50 41 47 45 56 52 46 43-49 34 00 00 00 a0 1b 00  PAGEVRFCI4&#8230;&#8230;<br />
804d7520  50 41 47 45 56 52 46 44-48 06 00 00 00 e0 1b 00  PAGEVRFDH&#8230;&#8230;.<br />
804f285f  50 41 47 45 57 68 00 10-00 00 53 e8 51 3a 05 00  PAGEWh&#8230;.S.Q:..<br />
804f3936  50 41 47 45 68 00 10 00-00 53 8b f8 e8 79 29 05  PAGEh&#8230;.S&#8230;y).<br />
805ac98b  50 41 47 45 74 50 3d 2e-65 64 61 74 49 3d 49 4e  PAGEtP=.edatI=IN<br />
805adba0  50 41 47 45 74 19 81 f9-2e 65 64 61 74 11 85 c0  PAGEt&#8230;.edat&#8230;<br />
806c3548  50 41 47 45 5f 46 41 55-4c 54 5f 57 49 54 48 5f  PAGE_FAULT_WITH_<br />
806c35df  50 41 47 45 53 5f 41 56-41 49 4c 41 42 4c 45 0d  PAGES_AVAILABLE.<br />
806c362c  50 41 47 45 5f 46 41 55-4c 54 5f 49 4e 5f 4e 4f  PAGE_FAULT_IN_NO<br />
806c363d  50 41 47 45 44 5f 41 52-45 41 0d 0a 00 00 00 18  PAGED_AREA&#8230;&#8230;<br />
806c3b53  50 41 47 45 53 0d 0a 00-00 20 00 00 00 4b 45 52  PAGES&#8230;. &#8230;KER<br />
806c3b6f  50 41 47 45 5f 45 52 52-4f 52 0d 0a 00 18 00 00  PAGE_ERROR&#8230;&#8230;<br />
806c3bce  50 41 47 45 5f 45 52 52-4f 52 0d 0a 00 00 10 01  PAGE_ERROR&#8230;&#8230;<br />
806c51f7  50 41 47 45 53 5f 49 4e-5f 50 52 4f 43 45 53 53  PAGES_IN_PROCESS</p></blockquote>
<p style="text-align: justify;">Для поиска последовательности байт необходимо использовать ключ <span style="color: #0000ff;">-b</span>:</p>
<blockquote>
<p style="text-align: justify;">lkd> <span style="color: #0000ff;">s -b nt L?20d000 8b ff 55 8b ec 33 c0 50 50 50 ff 75 30</span><br />
80579084  8b ff 55 8b ec 33 c0 50-50 50 ff 75 30 ff 75 2c  ..U..3.PPP.u0.u,</p></blockquote>
<p style="text-align: justify;">
<p style="text-align: justify;"><strong>В: Как посмотреть структуру, чтобы раскрывались входящие в нее структуры?</strong></p>
<p style="text-align: justify;">О: Необходимо использовать команду <span style="color: #0000ff;">dt</span> с ключом <span style="color: #0000ff;">-r[глубина рекурсии]</span> <span style="color: #000000;">(в примере я использовал значение 2, хотя обычно хватает и 1)</span>:</p>
<p style="text-align: justify;">

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">lkd<span style="color: #339933;">&gt;</span> <span style="color: #339933;">!</span>object \Driver\beep
Object<span style="color: #339933;">:</span> 88c87c28  Type<span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span>84d902c0<span style="color: #009900;">&#41;</span> Driver
    ObjectHeader<span style="color: #339933;">:</span> 88c87c10 <span style="color: #009900;">&#40;</span>old version<span style="color: #009900;">&#41;</span>
    HandleCount<span style="color: #339933;">:</span> <span style="color: #0000dd;">0</span>  PointerCount<span style="color: #339933;">:</span> <span style="color: #0000dd;">3</span>
    Directory Object<span style="color: #339933;">:</span> 8b675718  Name<span style="color: #339933;">:</span> Beep
lkd<span style="color: #339933;">&gt;</span> dt nt<span style="color: #339933;">!</span>_DRIVER_OBJECT 88c87c28 <span style="color: #339933;">-</span>r2
   <span style="color: #339933;">+</span><span style="color: #208080;">0x000</span> Type             <span style="color: #339933;">:</span> <span style="color: #0000dd;">4</span>
   <span style="color: #339933;">+</span><span style="color: #208080;">0x002</span> Size             <span style="color: #339933;">:</span> <span style="color: #0000dd;">168</span>
   <span style="color: #339933;">+</span><span style="color: #208080;">0x004</span> DeviceObject     <span style="color: #339933;">:</span> <span style="color: #208080;">0x88d6f990</span> _DEVICE_OBJECT
      <span style="color: #339933;">+</span><span style="color: #208080;">0x000</span> Type             <span style="color: #339933;">:</span> <span style="color: #0000dd;">3</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x002</span> Size             <span style="color: #339933;">:</span> <span style="color: #208080;">0x110</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x004</span> ReferenceCount   <span style="color: #339933;">:</span> <span style="color: #0000dd;">0</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x008</span> DriverObject     <span style="color: #339933;">:</span> <span style="color: #208080;">0x88c87c28</span> _DRIVER_OBJECT
         <span style="color: #339933;">+</span><span style="color: #208080;">0x000</span> Type             <span style="color: #339933;">:</span> <span style="color: #0000dd;">4</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x002</span> Size             <span style="color: #339933;">:</span> <span style="color: #0000dd;">168</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x004</span> DeviceObject     <span style="color: #339933;">:</span> <span style="color: #208080;">0x88d6f990</span> _DEVICE_OBJECT
         <span style="color: #339933;">+</span><span style="color: #208080;">0x008</span> Flags            <span style="color: #339933;">:</span> <span style="color: #208080;">0x12</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x00c</span> DriverStart      <span style="color: #339933;">:</span> <span style="color: #208080;">0x8ef22000</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x010</span> DriverSize       <span style="color: #339933;">:</span> <span style="color: #208080;">0x7000</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x014</span> DriverSection    <span style="color: #339933;">:</span> <span style="color: #208080;">0x88d6f480</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x018</span> DriverExtension  <span style="color: #339933;">:</span> <span style="color: #208080;">0x88c87cd0</span> _DRIVER_EXTENSION
         <span style="color: #339933;">+</span><span style="color: #208080;">0x01c</span> DriverName       <span style="color: #339933;">:</span> _UNICODE_STRING <span style="color: #ff0000;">&quot;\Driver<span style="color: #000099; font-weight: bold;">\B</span>eep&quot;</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x024</span> HardwareDatabase <span style="color: #339933;">:</span> <span style="color: #208080;">0x82957e68</span> _UNICODE_STRING <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\R</span>EGISTRY\MACHINE\HARDWARE\DESCRIPTION\SYSTEM&quot;</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x028</span> FastIoDispatch   <span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x02c</span> DriverInit       <span style="color: #339933;">:</span> <span style="color: #208080;">0x8ef26005</span>           <span style="color: #993333;">long</span>  Beep<span style="color: #339933;">!</span>GsDriverEntry<span style="color: #339933;">+</span><span style="color: #0000dd;">0</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x030</span> DriverStartIo    <span style="color: #339933;">:</span> <span style="color: #208080;">0x8ef23248</span>           <span style="color: #993333;">void</span>  Beep<span style="color: #339933;">!</span>BeepStartIo<span style="color: #339933;">+</span><span style="color: #0000dd;">0</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x034</span> DriverUnload     <span style="color: #339933;">:</span> <span style="color: #208080;">0x8ef23364</span>           <span style="color: #993333;">void</span>  Beep<span style="color: #339933;">!</span>BeepUnload<span style="color: #339933;">+</span><span style="color: #0000dd;">0</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x038</span> MajorFunction    <span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #0000dd;">28</span><span style="color: #009900;">&#93;</span> <span style="color: #208080;">0x8ef23186</span>           <span style="color: #993333;">long</span>  Beep<span style="color: #339933;">!</span>BeepOpen<span style="color: #339933;">+</span><span style="color: #0000dd;">0</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x00c</span> NextDevice       <span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x010</span> AttachedDevice   <span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x014</span> CurrentIrp       <span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x018</span> Timer            <span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x01c</span> Flags            <span style="color: #339933;">:</span> <span style="color: #208080;">0x44</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x020</span> Characteristics  <span style="color: #339933;">:</span> <span style="color: #208080;">0x100</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x024</span> Vpb              <span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x028</span> DeviceExtension  <span style="color: #339933;">:</span> <span style="color: #208080;">0x88d6fa48</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x02c</span> DeviceType       <span style="color: #339933;">:</span> <span style="color: #0000dd;">1</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x030</span> StackSize        <span style="color: #339933;">:</span> <span style="color: #0000dd;">1</span> <span style="color: #ff0000;">''</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x034</span> Queue            <span style="color: #339933;">:</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x000</span> ListEntry        <span style="color: #339933;">:</span> _LIST_ENTRY <span style="color: #009900;">&#91;</span> <span style="color: #208080;">0x0</span> <span style="color: #339933;">-</span> <span style="color: #208080;">0x0</span> <span style="color: #009900;">&#93;</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x000</span> Wcb              <span style="color: #339933;">:</span> _WAIT_CONTEXT_BLOCK
      <span style="color: #339933;">+</span><span style="color: #208080;">0x05c</span> AlignmentRequirement <span style="color: #339933;">:</span> <span style="color: #0000dd;">0</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x060</span> DeviceQueue      <span style="color: #339933;">:</span> _KDEVICE_QUEUE
         <span style="color: #339933;">+</span><span style="color: #208080;">0x000</span> Type             <span style="color: #339933;">:</span> <span style="color: #0000dd;">20</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x002</span> Size             <span style="color: #339933;">:</span> <span style="color: #0000dd;">20</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x004</span> DeviceListHead   <span style="color: #339933;">:</span> _LIST_ENTRY <span style="color: #009900;">&#91;</span> <span style="color: #208080;">0x88d6f9f4</span> <span style="color: #339933;">-</span> <span style="color: #208080;">0x88d6f9f4</span> <span style="color: #009900;">&#93;</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x00c</span> Lock             <span style="color: #339933;">:</span> <span style="color: #0000dd;">0</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x010</span> Busy             <span style="color: #339933;">:</span> <span style="color: #0000dd;">0</span> <span style="color: #ff0000;">''</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x074</span> Dpc              <span style="color: #339933;">:</span> _KDPC
         <span style="color: #339933;">+</span><span style="color: #208080;">0x000</span> Type             <span style="color: #339933;">:</span> <span style="color: #208080;">0x13</span> <span style="color: #ff0000;">''</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x001</span> Importance       <span style="color: #339933;">:</span> <span style="color: #208080;">0x1</span> <span style="color: #ff0000;">''</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x002</span> Number           <span style="color: #339933;">:</span> <span style="color: #0000dd;">0</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x004</span> DpcListEntry     <span style="color: #339933;">:</span> _LIST_ENTRY <span style="color: #009900;">&#91;</span> <span style="color: #208080;">0x0</span> <span style="color: #339933;">-</span> <span style="color: #208080;">0x0</span> <span style="color: #009900;">&#93;</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x00c</span> DeferredRoutine  <span style="color: #339933;">:</span> <span style="color: #208080;">0x8ef2333c</span>           <span style="color: #993333;">void</span>  Beep<span style="color: #339933;">!</span>BeepTimeOut<span style="color: #339933;">+</span><span style="color: #0000dd;">0</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x010</span> DeferredContext  <span style="color: #339933;">:</span> <span style="color: #208080;">0x88d6f990</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x014</span> SystemArgument1  <span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x018</span> SystemArgument2  <span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x01c</span> DpcData          <span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x094</span> ActiveThreadCount <span style="color: #339933;">:</span> <span style="color: #0000dd;">0</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x098</span> SecurityDescriptor <span style="color: #339933;">:</span> <span style="color: #208080;">0x8b674548</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x09c</span> DeviceLock       <span style="color: #339933;">:</span> _KEVENT
         <span style="color: #339933;">+</span><span style="color: #208080;">0x000</span> Header           <span style="color: #339933;">:</span> _DISPATCHER_HEADER
      <span style="color: #339933;">+</span><span style="color: #208080;">0x0ac</span> SectorSize       <span style="color: #339933;">:</span> <span style="color: #0000dd;">0</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x0ae</span> Spare1           <span style="color: #339933;">:</span> <span style="color: #0000dd;">0</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x0b0</span> DeviceObjectExtension <span style="color: #339933;">:</span> <span style="color: #208080;">0x88d6faa0</span> _DEVOBJ_EXTENSION
         <span style="color: #339933;">+</span><span style="color: #208080;">0x000</span> Type             <span style="color: #339933;">:</span> <span style="color: #0000dd;">13</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x002</span> Size             <span style="color: #339933;">:</span> <span style="color: #0000dd;">0</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x004</span> DeviceObject     <span style="color: #339933;">:</span> <span style="color: #208080;">0x88d6f990</span> _DEVICE_OBJECT
         <span style="color: #339933;">+</span><span style="color: #208080;">0x008</span> PowerFlags       <span style="color: #339933;">:</span> <span style="color: #0000dd;">0</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x00c</span> Dope             <span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x010</span> ExtensionFlags   <span style="color: #339933;">:</span> <span style="color: #208080;">0x800</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x014</span> DeviceNode       <span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x018</span> AttachedTo       <span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x01c</span> StartIoCount     <span style="color: #339933;">:</span> <span style="color: #0000dd;">0</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x020</span> StartIoKey       <span style="color: #339933;">:</span> <span style="color: #0000dd;">0</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x024</span> StartIoFlags     <span style="color: #339933;">:</span> <span style="color: #0000dd;">0</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x028</span> Vpb              <span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x02c</span> DependentList    <span style="color: #339933;">:</span> _LIST_ENTRY <span style="color: #009900;">&#91;</span> <span style="color: #208080;">0x88d6facc</span> <span style="color: #339933;">-</span> <span style="color: #208080;">0x88d6facc</span> <span style="color: #009900;">&#93;</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x034</span> ProviderList     <span style="color: #339933;">:</span> _LIST_ENTRY <span style="color: #009900;">&#91;</span> <span style="color: #208080;">0x88d6fad4</span> <span style="color: #339933;">-</span> <span style="color: #208080;">0x88d6fad4</span> <span style="color: #009900;">&#93;</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x0b4</span> Reserved         <span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>
   <span style="color: #339933;">+</span><span style="color: #208080;">0x008</span> Flags            <span style="color: #339933;">:</span> <span style="color: #208080;">0x12</span>
   <span style="color: #339933;">+</span><span style="color: #208080;">0x00c</span> DriverStart      <span style="color: #339933;">:</span> <span style="color: #208080;">0x8ef22000</span>
   <span style="color: #339933;">+</span><span style="color: #208080;">0x010</span> DriverSize       <span style="color: #339933;">:</span> <span style="color: #208080;">0x7000</span>
   <span style="color: #339933;">+</span><span style="color: #208080;">0x014</span> DriverSection    <span style="color: #339933;">:</span> <span style="color: #208080;">0x88d6f480</span>
   <span style="color: #339933;">+</span><span style="color: #208080;">0x018</span> DriverExtension  <span style="color: #339933;">:</span> <span style="color: #208080;">0x88c87cd0</span> _DRIVER_EXTENSION
      <span style="color: #339933;">+</span><span style="color: #208080;">0x000</span> DriverObject     <span style="color: #339933;">:</span> <span style="color: #208080;">0x88c87c28</span> _DRIVER_OBJECT
         <span style="color: #339933;">+</span><span style="color: #208080;">0x000</span> Type             <span style="color: #339933;">:</span> <span style="color: #0000dd;">4</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x002</span> Size             <span style="color: #339933;">:</span> <span style="color: #0000dd;">168</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x004</span> DeviceObject     <span style="color: #339933;">:</span> <span style="color: #208080;">0x88d6f990</span> _DEVICE_OBJECT
         <span style="color: #339933;">+</span><span style="color: #208080;">0x008</span> Flags            <span style="color: #339933;">:</span> <span style="color: #208080;">0x12</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x00c</span> DriverStart      <span style="color: #339933;">:</span> <span style="color: #208080;">0x8ef22000</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x010</span> DriverSize       <span style="color: #339933;">:</span> <span style="color: #208080;">0x7000</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x014</span> DriverSection    <span style="color: #339933;">:</span> <span style="color: #208080;">0x88d6f480</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x018</span> DriverExtension  <span style="color: #339933;">:</span> <span style="color: #208080;">0x88c87cd0</span> _DRIVER_EXTENSION
         <span style="color: #339933;">+</span><span style="color: #208080;">0x01c</span> DriverName       <span style="color: #339933;">:</span> _UNICODE_STRING <span style="color: #ff0000;">&quot;\Driver<span style="color: #000099; font-weight: bold;">\B</span>eep&quot;</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x024</span> HardwareDatabase <span style="color: #339933;">:</span> <span style="color: #208080;">0x82957e68</span> _UNICODE_STRING <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\R</span>EGISTRY\MACHINE\HARDWARE\DESCRIPTION\SYSTEM&quot;</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x028</span> FastIoDispatch   <span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x02c</span> DriverInit       <span style="color: #339933;">:</span> <span style="color: #208080;">0x8ef26005</span>           <span style="color: #993333;">long</span>  Beep<span style="color: #339933;">!</span>GsDriverEntry<span style="color: #339933;">+</span><span style="color: #0000dd;">0</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x030</span> DriverStartIo    <span style="color: #339933;">:</span> <span style="color: #208080;">0x8ef23248</span>           <span style="color: #993333;">void</span>  Beep<span style="color: #339933;">!</span>BeepStartIo<span style="color: #339933;">+</span><span style="color: #0000dd;">0</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x034</span> DriverUnload     <span style="color: #339933;">:</span> <span style="color: #208080;">0x8ef23364</span>           <span style="color: #993333;">void</span>  Beep<span style="color: #339933;">!</span>BeepUnload<span style="color: #339933;">+</span><span style="color: #0000dd;">0</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x038</span> MajorFunction    <span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #0000dd;">28</span><span style="color: #009900;">&#93;</span> <span style="color: #208080;">0x8ef23186</span>           <span style="color: #993333;">long</span>  Beep<span style="color: #339933;">!</span>BeepOpen<span style="color: #339933;">+</span><span style="color: #0000dd;">0</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x004</span> AddDevice        <span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x008</span> Count            <span style="color: #339933;">:</span> <span style="color: #0000dd;">0</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x00c</span> ServiceKeyName   <span style="color: #339933;">:</span> _UNICODE_STRING <span style="color: #ff0000;">&quot;Beep&quot;</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x000</span> Length           <span style="color: #339933;">:</span> <span style="color: #0000dd;">8</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x002</span> MaximumLength    <span style="color: #339933;">:</span> <span style="color: #208080;">0xa</span>
         <span style="color: #339933;">+</span><span style="color: #208080;">0x004</span> Buffer           <span style="color: #339933;">:</span> <span style="color: #208080;">0x88c70640</span>  <span style="color: #ff0000;">&quot;Beep&quot;</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x014</span> ClientDriverExtension <span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x018</span> FsFilterCallbacks <span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>
   <span style="color: #339933;">+</span><span style="color: #208080;">0x01c</span> DriverName       <span style="color: #339933;">:</span> _UNICODE_STRING <span style="color: #ff0000;">&quot;\Driver<span style="color: #000099; font-weight: bold;">\B</span>eep&quot;</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x000</span> Length           <span style="color: #339933;">:</span> <span style="color: #208080;">0x18</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x002</span> MaximumLength    <span style="color: #339933;">:</span> <span style="color: #208080;">0x18</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x004</span> Buffer           <span style="color: #339933;">:</span> <span style="color: #208080;">0x88c53368</span>  <span style="color: #ff0000;">&quot;\Driver<span style="color: #000099; font-weight: bold;">\B</span>eep&quot;</span>
   <span style="color: #339933;">+</span><span style="color: #208080;">0x024</span> HardwareDatabase <span style="color: #339933;">:</span> <span style="color: #208080;">0x82957e68</span> _UNICODE_STRING <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\R</span>EGISTRY\MACHINE\HARDWARE\DESCRIPTION\SYSTEM&quot;</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x000</span> Length           <span style="color: #339933;">:</span> <span style="color: #208080;">0x5a</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x002</span> MaximumLength    <span style="color: #339933;">:</span> <span style="color: #208080;">0x5c</span>
      <span style="color: #339933;">+</span><span style="color: #208080;">0x004</span> Buffer           <span style="color: #339933;">:</span> <span style="color: #208080;">0x8286b760</span>  <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\R</span>EGISTRY\MACHINE\HARDWARE\DESCRIPTION\SYSTEM&quot;</span>
   <span style="color: #339933;">+</span><span style="color: #208080;">0x028</span> FastIoDispatch   <span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>
   <span style="color: #339933;">+</span><span style="color: #208080;">0x02c</span> DriverInit       <span style="color: #339933;">:</span> <span style="color: #208080;">0x8ef26005</span>     <span style="color: #993333;">long</span>  Beep<span style="color: #339933;">!</span>GsDriverEntry<span style="color: #339933;">+</span><span style="color: #0000dd;">0</span>
   <span style="color: #339933;">+</span><span style="color: #208080;">0x030</span> DriverStartIo    <span style="color: #339933;">:</span> <span style="color: #208080;">0x8ef23248</span>     <span style="color: #993333;">void</span>  Beep<span style="color: #339933;">!</span>BeepStartIo<span style="color: #339933;">+</span><span style="color: #0000dd;">0</span>
   <span style="color: #339933;">+</span><span style="color: #208080;">0x034</span> DriverUnload     <span style="color: #339933;">:</span> <span style="color: #208080;">0x8ef23364</span>     <span style="color: #993333;">void</span>  Beep<span style="color: #339933;">!</span>BeepUnload<span style="color: #339933;">+</span><span style="color: #0000dd;">0</span>
   <span style="color: #339933;">+</span><span style="color: #208080;">0x038</span> MajorFunction    <span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #0000dd;">28</span><span style="color: #009900;">&#93;</span> <span style="color: #208080;">0x8ef23186</span>     <span style="color: #993333;">long</span>  Beep<span style="color: #339933;">!</span>BeepOpen<span style="color: #339933;">+</span><span style="color: #0000dd;">0</span></pre></div></div>

<p style="text-align: justify;">
<p style="text-align: justify;"><strong>В: Как в структуре посмотреть какую-либо входящую в нее структуру отдельно?</strong></p>
<p style="text-align: justify;">О: Для просмотра структур используется команда <span style="color: #0000ff;">dt</span>. Поле нужно указывать после имени модуля и названия самой структуры:</p>
<blockquote>
<p style="text-align: justify;">lkd> <span style="color: #0000ff;">dt nt!_OBJECT_TYPE poi(PsProcessType) TypeInfo.</span><br />
+0&#215;060 TypeInfo  :<br />
+0&#215;000 Length    : 0x4c<br />
+0&#215;002 UseDefaultObject : 0 &#187;<br />
+0&#215;003 CaseInsensitive : 0 &#187;<br />
+0&#215;004 InvalidAttributes : 0xb0<br />
+0&#215;008 GenericMapping : _GENERIC_MAPPING<br />
+0&#215;018 ValidAccessMask : 0x1f0fff<br />
+0x01c SecurityRequired : 0&#215;1 &#187;<br />
+0x01d MaintainHandleCount : 0 &#187;<br />
+0x01e MaintainTypeList : 0 &#187;<br />
+0&#215;020 PoolType  : 0 ( NonPagedPool )<br />
+0&#215;024 DefaultPagedPoolCharge : 0&#215;1000<br />
+0&#215;028 DefaultNonPagedPoolCharge : 0x2a8<br />
+0x02c DumpProcedure : (null)<br />
+0&#215;030 OpenProcedure : (null)<br />
+0&#215;034 CloseProcedure : (null)<br />
+0&#215;038 DeleteProcedure : 0x8094bb7a        void  nt!PspProcessDelete+0<br />
+0x03c ParseProcedure : (null)<br />
+0&#215;040 SecurityProcedure : 0x809732e4        long  nt!SeDefaultObjectMethod+0<br />
+0&#215;044 QueryNameProcedure : (null)<br />
+0&#215;048 OkayToCloseProcedure : (null)</p></blockquote>
<p style="text-align: justify;">
<p style="text-align: justify;"><strong>В: А можно как-нибудь разыменовывать указатель?</strong></p>
<p style="text-align: justify;">О: Да, используйте команду <span style="color: #0000ff;">poi</span>(см. выше).</p>
<p style="text-align: justify;">
<p style="text-align: justify;"><strong>В: Для WinDbg есть различные дополнения. Как ими управлять?</strong></p>
<p style="text-align: justify;">О: Все очень просто. Для того, чтобы посмотреть список загруженных дополнений воспользуйтесь командой <span style="color: #0000ff;">.chain</span>. Для выгрузки и загрузки используйте <span style="color: #0000ff;">.unload</span> и <span style="color: #0000ff;">.load</span> соответственно.</p>
<p style="text-align: justify;">
<p style="text-align: justify;"><strong>В: Как во время отладки в режиме ядра загрузить символы пользовательского пространства?</strong></p>
<p style="text-align: justify;">О: Используйте <span style="color: #0000ff;">.reload /user</span>.  Также используйте эту команду, если хотите увидеть стэк вызовов (<span style="color: #0000ff;">k</span>) в пользовательском пространстве текущего потока.</p>
<p style="text-align: justify;">
<p style="text-align: justify;"><strong>В: Можно как-нибудь искать MZ/PE модули в памяти по PE-заголовку?</strong></p>
<p style="text-align: justify;">О:<strong> </strong>Для поиска можно воспользоваться командой <span style="color: #0000ff;">s</span>, но проще использовать замечательную команду <span style="color: #0000ff;">.imgscan<span style="color: #000000;">. Модуль она не всегда определяет, да в большинстве случаев это и не нужно.</span></span></p>
<blockquote>
<p style="text-align: justify;">lkd> <span style="color: #0000ff;">.imgscan /r poi(MmSystemRangeStart) L10000000</span><br />
MZ at 8016a000 &#8212; size 13900<br />
MZ at 802c7000 &#8212; size d000<br />
MZ at 8032c000 &#8212; size 8c600<br />
MZ at 8051f000 &#8212; size b000<br />
Name: <br />
MZ at 80573000 &#8212; size 11000<br />
MZ at 80800000 &#8212; size 25c000<br />
Name: ntoskrnl.exe<br />
MZ at 80a5c000 &#8212; size 2c000<br />
Name: HAL.dll<br />
MZ at 815e8000 &#8212; size 7400<br />
MZ at 81637000 &#8212; size 2f000<br />
MZ at 8171d000 &#8212; size 38000<br />
MZ at 81878000 &#8212; size ff000<br />
MZ at 819f5000 &#8212; size 26000<br />
ReadVirtual: 819effa8 not properly sign extended<br />
ReadVirtual: 819effa9 not properly sign extended<br />
Name:</p>
<p>MZ at 8a806000 &#8212; size a000<br />
MZ at 8a814000 &#8212; size ad000<br />
Name: MZђ</p></blockquote>
<p style="text-align: justify;">
<p style="text-align: justify;"><strong>В: Как получить детальную информацию о модуле, его заголовках, секциях и т.д. по его адресу?</strong></p>
<p style="text-align: justify;">О: Есть две замечательные команды: <span style="color: #0000ff;">!lmi</span> и <span style="color: #0000ff;">!dh</span>. Рекомендую их использовать именно в таком порядке.</p>
<blockquote>
<p style="text-align: justify;">lkd> ? nt<br />
Evaluate expression: -2107363328 = 82643000<br />
lkd> <span style="color: #0000ff;">!lmi 82643000</span><br />
Loaded Module Info: [82643000]<br />
Module: ntkrpamp<br />
Base Address: 82643000<br />
Image Name: ntkrpamp.exe<br />
Machine Type: 332 (I386)<br />
Time Stamp: 4a77feb3 Tue Aug 04 13:26:11 2009<br />
Size: 3b9000<br />
CheckSum: 370777<br />
Characteristics: 122  perf<br />
Debug Data Dirs: Type  Size     VA  Pointer<br />
CODEVIEW    25, ebf18,   eb718 RSDS &#8212; GUID: {143D55DD-4AC9-42A4-93AC-D9DF136B9EF5}<br />
Age: 2, Pdb: ntkrpamp.pdb<br />
CLSID     4, ebf14,   eb714 [Data not mapped]<br />
Image Type: MEMORY   &#8212; Image read successfully from loaded memory.<br />
Symbol Type: PDB      &#8212; Symbols loaded successfully from symbol server.<br />
c:\symserver\ntkrpamp.pdb\143D55DD4AC942A493ACD9DF136B9EF52\ntkrpamp.pdb<br />
Load Report: public symbols , not source indexed<br />
c:\symserver\ntkrpamp.pdb\143D55DD4AC942A493ACD9DF136B9EF52\ntkrpamp.pdb</p></blockquote>
<p style="text-align: justify;">Команда <span style="color: #0000ff;">!dh</span> показывает более детальную информацию об образе со всеми заголовками и т.д.</p>
<blockquote>
<p style="text-align: justify;">lkd> <span style="color: #0000ff;">!dh 82643000</span></p>
<p>File Type: EXECUTABLE IMAGE<br />
FILE HEADER VALUES<br />
14C machine (i386)<br />
16 number of sections<br />
4A77FEB3 time date stamp Tue Aug 04 13:26:11 2009</p>
<p>0 file pointer to symbol table<br />
0 number of symbols<br />
E0 size of optional header<br />
122 characteristics<br />
Executable<br />
App can handle >2gb addresses<br />
32 bit word machine</p>
<p>OPTIONAL HEADER VALUES<br />
10B magic #<br />
8.00 linker version<br />
2EFA00 size of code<br />
BB200 size of initialized data<br />
3600 size of uninitialized data<br />
EC4B0 address of entry point<br />
1000 base of code<br />
&#8212;&#8212; new &#8212;&#8212;<br />
00400000 image base<br />
1000 section alignment<br />
200 file alignment<br />
1 subsystem (Native)<br />
6.00 operating system version<br />
6.00 image version<br />
6.00 subsystem version<br />
3B9000 size of image<br />
800 size of headers<br />
370777 checksum<br />
00040000 size of stack reserve<br />
00002000 size of stack commit<br />
00100000 size of heap reserve<br />
00001000 size of heap commit<br />
0  DLL characteristics<br />
2FF000 [    F674] address [size] of Export Directory<br />
36A348 [      8C] address [size] of Import Directory<br />
36C000 [   34170] address [size] of Resource Directory<br />
0 [       0] address [size] of Exception Directory<br />
36D400 [    1C48] address [size] of Security Directory<br />
3A1000 [   17B28] address [size] of Base Relocation Directory<br />
EBEDC [      38] address [size] of Debug Directory<br />
0 [       0] address [size] of Description Directory<br />
0 [       0] address [size] of Special Directory<br />
0 [       0] address [size] of Thread Storage Directory<br />
C0D20 [      40] address [size] of Load Configuration Directory<br />
0 [       0] address [size] of Bound Import Directory<br />
1000 [     264] address [size] of Import Address Table Directory<br />
0 [       0] address [size] of Delay Import Directory<br />
0 [       0] address [size] of COR20 Header Directory<br />
0 [       0] address [size] of Reserved Directory</p>
<p>SECTION HEADER #1<br />
.text name<br />
EAF3D virtual size<br />
1000 virtual address<br />
EB000 size of raw data<br />
800 file pointer to raw data<br />
0 file pointer to relocation table<br />
0 file pointer to line numbers<br />
0 number of relocations<br />
0 number of line numbers<br />
68000020 flags<br />
Code<br />
Not Paged<br />
(no align specified)<br />
Execute Read</p>
<p>Debug Directories(2)<br />
Type       Size     Address  Pointer<br />
cv           25       ebf18    eb718    Format: RSDS, guid, 2, ntkrpamp.pdb<br />
(    10)       4       ebf14    eb714</p>
<p>SECTION HEADER #2<br />
_PAGELK name<br />
861 virtual size<br />
EC000 virtual address<br />
A00 size of raw data<br />
EB800 file pointer to raw data<br />
0 file pointer to relocation table<br />
0 file pointer to line numbers<br />
0 number of relocations<br />
0 number of line numbers<br />
68000020 flags<br />
Code<br />
Not Paged<br />
(no align specified)<br />
Execute Read</p>
<p>SECTION HEADER #3<br />
POOLCODE name<br />
19DB virtual size<br />
ED000 virtual address<br />
1A00 size of raw data<br />
EC200 file pointer to raw data<br />
0 file pointer to relocation table<br />
0 file pointer to line numbers<br />
0 number of relocations<br />
0 number of line numbers<br />
68000020 flags<br />
Code<br />
Not Paged<br />
(no align specified)<br />
Execute Read</p>
<p>SECTION HEADER #4<br />
POOLMI name<br />
BAD virtual size<br />
EF000 virtual address<br />
C00 size of raw data<br />
EDC00 file pointer to raw data<br />
0 file pointer to relocation table<br />
0 file pointer to line numbers<br />
0 number of relocations<br />
0 number of line numbers<br />
68000020 flags<br />
Code<br />
Not Paged<br />
(no align specified)<br />
Execute Read</p>
<p>SECTION HEADER #5<br />
.data name<br />
4638C virtual size<br />
F0000 virtual address<br />
8800 size of raw data<br />
EE800 file pointer to raw data<br />
0 file pointer to relocation table<br />
0 file pointer to line numbers<br />
0 number of relocations<br />
0 number of line numbers<br />
C8000040 flags<br />
Initialized Data<br />
Not Paged<br />
(no align specified)<br />
Read Write</p>
<p>SECTION HEADER #6<br />
ALMOSTRO name<br />
C9C virtual size<br />
137000 virtual address<br />
C00 size of raw data<br />
F7000 file pointer to raw data<br />
0 file pointer to relocation table<br />
0 file pointer to line numbers<br />
0 number of relocations<br />
0 number of line numbers<br />
C8000040 flags<br />
Initialized Data<br />
Not Paged<br />
(no align specified)<br />
Read Write</p>
<p>SECTION HEADER #7<br />
SPINLOCK name<br />
E84 virtual size<br />
138000 virtual address<br />
0 size of raw data<br />
0 file pointer to raw data<br />
0 file pointer to relocation table<br />
0 file pointer to line numbers<br />
0 number of relocations<br />
0 number of line numbers<br />
C8000080 flags<br />
Uninitialized Data<br />
Not Paged<br />
(no align specified)<br />
Read Write</p>
<p>SECTION HEADER #8<br />
PAGE name<br />
18EB06 virtual size<br />
139000 virtual address<br />
18EC00 size of raw data<br />
F7C00 file pointer to raw data<br />
0 file pointer to relocation table<br />
0 file pointer to line numbers<br />
0 number of relocations<br />
0 number of line numbers<br />
60000020 flags<br />
Code<br />
(no align specified)<br />
Execute Read</p>
<p>SECTION HEADER #9<br />
PAGELK name<br />
14412 virtual size<br />
2C8000 virtual address<br />
14600 size of raw data<br />
286800 file pointer to raw data<br />
8290B000 file pointer to relocation table<br />
0 file pointer to line numbers<br />
0 number of relocations<br />
0 number of line numbers<br />
60000020 flags<br />
Code<br />
(no align specified)<br />
Execute Read</p>
<p>SECTION HEADER #A<br />
PAGEKD name<br />
4419 virtual size<br />
2DD000 virtual address<br />
4600 size of raw data<br />
29AE00 file pointer to raw data<br />
0 file pointer to relocation table<br />
0 file pointer to line numbers<br />
0 number of relocations<br />
0 number of line numbers<br />
60000020 flags<br />
Code<br />
(no align specified)<br />
Execute Read</p>
<p>SECTION HEADER #B<br />
PAGEVRFY name<br />
16D9B virtual size<br />
2E2000 virtual address<br />
16E00 size of raw data<br />
29F400 file pointer to raw data<br />
0 file pointer to relocation table<br />
0 file pointer to line numbers<br />
0 number of relocations<br />
0 number of line numbers<br />
60000020 flags<br />
Code<br />
(no align specified)<br />
Execute Read</p>
<p>SECTION HEADER #C<br />
PAGEHDLS name<br />
1D8A virtual size<br />
2F9000 virtual address<br />
1E00 size of raw data<br />
2B6200 file pointer to raw data<br />
0 file pointer to relocation table<br />
0 file pointer to line numbers<br />
0 number of relocations<br />
0 number of line numbers<br />
60000020 flags<br />
Code<br />
(no align specified)<br />
Execute Read</p>
<p>SECTION HEADER #D<br />
PAGEBSS name<br />
48 virtual size<br />
2FB000 virtual address<br />
0 size of raw data<br />
0 file pointer to raw data<br />
0 file pointer to relocation table<br />
0 file pointer to line numbers<br />
0 number of relocations<br />
0 number of line numbers<br />
C0000080 flags<br />
Uninitialized Data<br />
(no align specified)<br />
Read Write</p>
<p>SECTION HEADER #E<br />
PAGEVRFB name<br />
23C0 virtual size<br />
2FC000 virtual address<br />
0 size of raw data<br />
0 file pointer to raw data<br />
0 file pointer to relocation table<br />
0 file pointer to line numbers<br />
0 number of relocations<br />
0 number of line numbers<br />
C0000080 flags<br />
Uninitialized Data<br />
(no align specified)<br />
Read Write</p>
<p>SECTION HEADER #F<br />
.edata name<br />
F674 virtual size<br />
2FF000 virtual address<br />
F800 size of raw data<br />
2B8000 file pointer to raw data<br />
0 file pointer to relocation table<br />
0 file pointer to line numbers<br />
0 number of relocations<br />
0 number of line numbers<br />
40000040 flags<br />
Initialized Data<br />
(no align specified)<br />
Read Only</p>
<p>SECTION HEADER #10<br />
PAGEDATA name<br />
802C virtual size<br />
30F000 virtual address<br />
8200 size of raw data<br />
2C7800 file pointer to raw data<br />
0 file pointer to relocation table<br />
0 file pointer to line numbers<br />
0 number of relocations<br />
0 number of line numbers<br />
C0000040 flags<br />
Initialized Data<br />
(no align specified)<br />
Read Write</p>
<p>SECTION HEADER #11<br />
PAGEKDD name<br />
C015 virtual size<br />
318000 virtual address<br />
C200 size of raw data<br />
2CFA00 file pointer to raw data<br />
0 file pointer to relocation table<br />
0 file pointer to line numbers<br />
0 number of relocations<br />
0 number of line numbers<br />
C0000040 flags<br />
Initialized Data<br />
(no align specified)<br />
Read Write</p>
<p>SECTION HEADER #12<br />
PAGEVRFC name<br />
3608 virtual size<br />
325000 virtual address<br />
3600 size of raw data<br />
2DBC00 file pointer to raw data<br />
0 file pointer to relocation table<br />
0 file pointer to line numbers<br />
0 number of relocations<br />
0 number of line numbers<br />
40000040 flags<br />
Initialized Data<br />
(no align specified)<br />
Read Only</p>
<p>SECTION HEADER #13<br />
PAGEVRFD name<br />
CE8 virtual size<br />
329000 virtual address<br />
E00 size of raw data<br />
2DF200 file pointer to raw data<br />
0 file pointer to relocation table<br />
0 file pointer to line numbers<br />
0 number of relocations<br />
0 number of line numbers<br />
C0000040 flags<br />
Initialized Data<br />
(no align specified)<br />
Read Write</p>
<p>SECTION HEADER #14<br />
INIT name<br />
41436 virtual size<br />
32A000 virtual address<br />
41600 size of raw data<br />
2E0000 file pointer to raw data<br />
0 file pointer to relocation table<br />
0 file pointer to line numbers<br />
0 number of relocations<br />
0 number of line numbers<br />
E2000020 flags<br />
Code<br />
Discardable<br />
(no align specified)<br />
Execute Read Write</p>
<p>SECTION HEADER #15<br />
.rsrc name<br />
34170 virtual size<br />
36C000 virtual address<br />
34200 size of raw data<br />
321600 file pointer to raw data<br />
0 file pointer to relocation table<br />
0 file pointer to line numbers<br />
0 number of relocations<br />
0 number of line numbers<br />
40000040 flags<br />
Initialized Data<br />
(no align specified)<br />
Read Only</p>
<p>SECTION HEADER #16<br />
.reloc name<br />
17B28 virtual size<br />
3A1000 virtual address<br />
17C00 size of raw data<br />
355800 file pointer to raw data<br />
0 file pointer to relocation table<br />
0 file pointer to line numbers<br />
0 number of relocations<br />
0 number of line numbers<br />
42000040 flags<br />
Initialized Data<br />
Discardable<br />
(no align specified)<br />
Read Only</p></blockquote>
<p style="text-align: justify;"><strong>В: Как получить информацию о запущенных процессах в системе?</strong></p>
<p style="text-align: justify;">О: Для этого необходимо использовать команду <span style="color: #0000ff;">!process</span>. При отладке в пользовательском режиме необходимо использовать команду <span style="color: #0000ff;">.tlist</span>.</p>
<p style="text-align: justify;">Перечислим все процессы в системе <span style="color: #0000ff;">!process 0 0</span>:</p>
<blockquote>
<p style="text-align: justify;">lkd> <span style="color: #0000ff;">!process 0 0</span><br />
**** NT ACTIVE PROCESS DUMP ****<br />
PROCESS 8494ed90  SessionId: none  Cid: 0004    Peb: 00000000  ParentCid: 0000<br />
DirBase: 00122000  ObjectTable: 8b201e88  HandleCount: 3367.<br />
Image: System</p>
<p>PROCESS 889c5cf8  SessionId: none  Cid: 01f4    Peb: 7ffdd000  ParentCid: 0004<br />
DirBase: bbc26020  ObjectTable: 8b2f5038  HandleCount:  28.<br />
Image: smss.exe</p>
<p>PROCESS 87f27d90  SessionId: 0  Cid: 027c    Peb: 7ffd7000  ParentCid: 0270<br />
DirBase: bbc26060  ObjectTable: 96a266b0  HandleCount: 796.<br />
Image: csrss.exe</p>
<p>PROCESS 88dd4d90  SessionId: 0  Cid: 02b0    Peb: 7ffdf000  ParentCid: 0270<br />
DirBase: bbc260a0  ObjectTable: 96bdff18  HandleCount: 106.<br />
Image: wininit.exe</p>
<p>PROCESS 88bab520  SessionId: 1  Cid: 02b8    Peb: 7ffdf000  ParentCid: 02a8<br />
DirBase: bbc26040  ObjectTable: 96bf6050  HandleCount: 744.<br />
Image: csrss.exe</p></blockquote>
<p style="text-align: justify;">
<p style="text-align: justify;"><strong>В: Как переключиться в контекст конкретного процесса?</strong></p>
<p style="text-align: justify;">О: Используйте команду <span style="color: #0000ff;">.process</span> (не путайте с командой <span style="color: #0000ff;">!process</span>).</p>
<blockquote>
<p style="text-align: justify;">lkd> .process<br />
Implicit process is now 85330020<br />
lkd> .process /r/p 87f27d90<br />
Implicit process is now 87f27d90<br />
Loading User Symbols<br />
&#8230;&#8230;&#8230;&#8230;..</p>
</blockquote>
<p style="text-align: justify;"><strong>В: А как переключиться &#171;регистровый&#187; контекст произвольного потока?</strong></p>
<p style="text-align: justify;">О: Во время отладки в ядре вам доступны те регистры, которые связаны с текущим потоком, который вы отлаживаете. Используйте команду <span style="color: #0000ff;">.thread</span> для переключения в &#171;регистровый&#187; контекст другого потока.</p>
<p style="text-align: justify;">
<p style="text-align: justify;"><strong>В: Какие есть команды для получения информации об объектах?</strong></p>
<p style="text-align: justify;">О: Я перечислю самые полезные на мой взгляд: <span style="color: #0000ff;">!object</span>, <span style="color: #0000ff;">!devobj</span>, <span style="color: #0000ff;">!devstack</span>, <span style="color: #0000ff;">!drvobj</span></p>
<p style="text-align: justify;">Команда <span style="color: #0000ff;">!object</span> показывает информацию о системном объекте. Например так:</p>
<blockquote>
<p style="text-align: justify;">lkd> <span style="color: #0000ff;">!object 0x860ad988</span><br />
Object: 860ad988  Type: (84d902c0) Driver<br />
ObjectHeader: 860ad970 (old version)<br />
HandleCount: 0  PointerCount: 5<br />
Directory Object: 8b671350  Name: atapi</p></blockquote>
<p style="text-align: justify;">Или так:</p>
<blockquote>
<p style="text-align: justify;">lkd> <span style="color: #0000ff;">!object \Device\Harddisk0</span><br />
Object: 8d2d1c50  Type: (84d491a0) Directory<br />
ObjectHeader: 8d2d1c38 (old version)<br />
HandleCount: 1  PointerCount: 6<br />
Directory Object: 8b6133a8  Name: Harddisk0</p>
<p>Hash Address  Type          Name<br />
&#8212;- &#8212;&#8212;-  &#8212;-          &#8212;-<br />
21  86b0eac8 Device        DR0<br />
33  8d2e29f8 SymbolicLink  Partition0<br />
34  8b673e40 SymbolicLink  Partition1<br />
35  8b671e30 SymbolicLink  Partition2</p></blockquote>
<p style="text-align: justify;">Команда <span style="color: #0000ff;">!devobj</span> показывает детальную информацию о структуре DEVICE_OBJECT:</p>
<blockquote>
<p style="text-align: justify;">lkd> <span style="color: #0000ff;">!devobj \Device\Harddisk0\DR0</span><br />
Device object (86b0eac8) is for:<br />
DR0 \Driver\disk DriverObject <strong>86674718</strong><br />
Current Irp 00000000 RefCount 0 Type 00000007 Flags 00000050<br />
Vpb 86674198 Dacl 8b735a6c DevExt 86b0eb80 DevObjExt 86b0efc0 Dope 86674130<br />
ExtensionFlags (0&#215;00000800)<br />
Unknown flags 0&#215;00000800<br />
AttachedDevice (Upper) 86b0e7b8 \Driver\partmgr<br />
AttachedTo (Lower) <strong>860ad2d0</strong> \Driver\ACPI<br />
Device queue is not busy.</p></blockquote>
<p style="text-align: justify;">А команда <span style="color: #0000ff;">!devstack</span> показывает в удобном виде стек устройства:</p>
<blockquote>
<p style="text-align: justify;">lkd> <span style="color: #0000ff;">!devstack 860ad2d0</span><br />
!DevObj   !DrvObj            !DevExt   ObjectName<br />
86b0e7b8  \Driver\partmgr    86b0e870<br />
86b0eac8  \Driver\disk       86b0eb80  DR0<br />
> 860ad2d0  \Driver\ACPI       8519b6b8<br />
85b66028  \Driver\iaStor     85b660e0  IAAStorageDevice-0<br />
!DevNode 85b2f280 :<br />
DeviceInst is &#171;IDE\DiskST9320421AS_____________________________SD13____\4&#8243;30b36239&#8243;0&#8243;0.0.0&#8243;<br />
ServiceName is &#171;disk&#187;</p></blockquote>
<p style="text-align: justify;">В свою очередь, команда <span style="color: #0000ff;">!drvobj</span> покажет детальную информацию о структуре DRIVER_OBJECT:</p>
<blockquote>
<p style="text-align: justify;">lkd> .reload /f classpnp.sys<br />
lkd> <span style="color: #0000ff;">!drvobj 86674718 2</span><br />
Driver object (86674718) is for:<br />
\Driver\disk<br />
DriverEntry:   8afd0bbc    disk!GsDriverEntry<br />
DriverStartIo: 00000000<br />
DriverUnload:  8afedab2    CLASSPNP!ClassUnload<br />
AddDevice:     8afec4e9    CLASSPNP!ClassAddDevice</p>
<p>Dispatch routines:<br />
[00] IRP_MJ_CREATE                      8afd9d24    CLASSPNP!ClassGlobalDispatch<br />
[01] IRP_MJ_CREATE_NAMED_PIPE           8266b9d2    nt!IopInvalidDeviceRequest<br />
[02] IRP_MJ_CLOSE                       8afd9d24    CLASSPNP!ClassGlobalDispatch<br />
[03] IRP_MJ_READ                        8afd9d24    CLASSPNP!ClassGlobalDispatch<br />
[04] IRP_MJ_WRITE                       8afd9d24    CLASSPNP!ClassGlobalDispatch<br />
[05] IRP_MJ_QUERY_INFORMATION           8266b9d2    nt!IopInvalidDeviceRequest<br />
[06] IRP_MJ_SET_INFORMATION             8266b9d2    nt!IopInvalidDeviceRequest<br />
[07] IRP_MJ_QUERY_EA                    8266b9d2    nt!IopInvalidDeviceRequest<br />
[08] IRP_MJ_SET_EA                      8266b9d2    nt!IopInvalidDeviceRequest<br />
[09] IRP_MJ_FLUSH_BUFFERS               8afd9d24    CLASSPNP!ClassGlobalDispatch<br />
[0a] IRP_MJ_QUERY_VOLUME_INFORMATION    8266b9d2    nt!IopInvalidDeviceRequest<br />
[0b] IRP_MJ_SET_VOLUME_INFORMATION      8266b9d2    nt!IopInvalidDeviceRequest<br />
[0c] IRP_MJ_DIRECTORY_CONTROL           8266b9d2    nt!IopInvalidDeviceRequest<br />
[0d] IRP_MJ_FILE_SYSTEM_CONTROL         8266b9d2    nt!IopInvalidDeviceRequest<br />
[0e] IRP_MJ_DEVICE_CONTROL              8afd9d24    CLASSPNP!ClassGlobalDispatch<br />
[0f] IRP_MJ_INTERNAL_DEVICE_CONTROL     8afd9d24    CLASSPNP!ClassGlobalDispatch<br />
[10] IRP_MJ_SHUTDOWN                    8afd9d24    CLASSPNP!ClassGlobalDispatch<br />
[11] IRP_MJ_LOCK_CONTROL                8266b9d2    nt!IopInvalidDeviceRequest<br />
[12] IRP_MJ_CLEANUP                     8266b9d2    nt!IopInvalidDeviceRequest<br />
[13] IRP_MJ_CREATE_MAILSLOT             8266b9d2    nt!IopInvalidDeviceRequest<br />
[14] IRP_MJ_QUERY_SECURITY              8266b9d2    nt!IopInvalidDeviceRequest<br />
[15] IRP_MJ_SET_SECURITY                8266b9d2    nt!IopInvalidDeviceRequest<br />
[16] IRP_MJ_POWER                       8afd9d24    CLASSPNP!ClassGlobalDispatch<br />
[17] IRP_MJ_SYSTEM_CONTROL              8afd9d24    CLASSPNP!ClassGlobalDispatch<br />
[18] IRP_MJ_DEVICE_CHANGE               8266b9d2    nt!IopInvalidDeviceRequest<br />
[19] IRP_MJ_QUERY_QUOTA                 8266b9d2    nt!IopInvalidDeviceRequest<br />
[1a] IRP_MJ_SET_QUOTA                   8266b9d2    nt!IopInvalidDeviceRequest<br />
[1b] IRP_MJ_PNP                         8afd9d24    CLASSPNP!ClassGlobalDispatch</p></blockquote>
<p style="text-align: justify;">
<p style="text-align: justify;"><strong>В: Каким образом запускать скрипты, которые поддерживает отладчик?</strong></p>
<p style="text-align: justify;">О: Для начала сохраните скрипт в текстовом файле. Потом используйте команды:</p>
<p style="text-align: justify;">
<blockquote><p><span style="color: #0000ff;">$< Filename<br />
$>< Filename<br />
$$< Filename<br />
$$>< Filename<br />
$$>a< Filename [arg1 arg2 arg3 ... ]</span></p></blockquote>
<p style="text-align: justify;">Разницу в командах смотрите в документации.</p>
<p style="text-align: justify;"><strong>В: Какие есть команды для того, чтобы посмотреть структуры PEB и TEB?</strong></p>
<p style="text-align: justify;">О: Есть такие команды. Это <span style="color: #0000ff;">!peb</span> и <span style="color: #0000ff;">!teb</span>.</p>
<p style="text-align: justify;">
<blockquote>
kd> <span style="color: #0000ff;">!process 81631158</span><br />
PROCESS 81631158  SessionId: 0  Cid: 0790    <strong>Peb: 7ffd5000</strong>  ParentCid: 0750<br />
    DirBase: 062c0200  ObjectTable: e1980568  HandleCount:  28.<br />
    Image: calc.exe<br />
    VadRoot 815a9ea0 Vads 51 Clone 0 Private 119. Modified 0. Locked 0.<br />
    DeviceMap e19b5d88<br />
    Token                             e1b6d818<br />
    ElapsedTime                       00:00:15.484<br />
    UserTime                          00:00:00.015<br />
    KernelTime                        00:00:00.156<br />
    QuotaPoolUsage[PagedPool]         57956<br />
    QuotaPoolUsage[NonPagedPool]      2040<br />
    Working Set Sizes (now,min,max)  (641, 50, 345) (2564KB, 200KB, 1380KB)<br />
    PeakWorkingSetSize                641<br />
    VirtualSize                       27 Mb<br />
    PeakVirtualSize                   34 Mb<br />
    PageFaultCount                    664<br />
    MemoryPriority                    BACKGROUND<br />
    BasePriority                      8<br />
    CommitCharge                      194</p>
<p>        THREAD 815aa228  Cid 0790.0794  <strong>Teb: 7ffdf000</strong> Win32Thread: e1b75490 WAIT: (WrUserRequest) UserMode Non-Alertable<br />
            8146d020  SynchronizationEvent<br />
        Not impersonating<br />
        DeviceMap                 e19b5d88<br />
        Owning Process            0       Image:         <Unknown><br />
        Attached Process          81631158       Image:         calc.exe<br />
        Wait Start TickCount      4717           Ticks: 13 (0:00:00:00.203)<br />
        Context Switch Count      142                 LargeStack<br />
        UserTime                  00:00:00.000<br />
        KernelTime                00:00:00.203<br />
        Win32 Start Address calc!WinMainCRTStartup (0&#215;01012475)<br />
        Start Address kernel32!BaseProcessStartThunk (0x7c8106f5)<br />
        Stack Init f801d000 Current f801cc20 Base f801d000 Limit f8018000 Call 0<br />
        Priority 12 BasePriority 8 PriorityDecrement 2 DecrementCount 16<br />
        ChildEBP RetAddr<br />
        f801cc38 80500cd6 nt!KiSwapContext+0x2e (FPO: [Uses EBP] [0,0,4])<br />
        f801cc44 804f9d62 nt!KiSwapThread+0&#215;46 (FPO: [0,0,0])<br />
        f801cc6c bf802f52 nt!KeWaitForSingleObject+0x1c2 (FPO: [5,5,4])<br />
WARNING: Frame IP not in any known module. Following frames may be wrong.<br />
        f801cd4c 8053d638 0xbf802f52<br />
        f801cd4c 0007fee8 nt!KiFastCallEntry+0xf8 (FPO: [0,0] TrapFrame-EDITED @ f801ccec)<br />
        f801cd64 00000000 0x7fee8<br />
kd> <span style="color: #0000ff;">.process /r/p 81631158</span><br />
Implicit process is now 81631158<br />
.cache forcedecodeuser done<br />
Loading User Symbols<br />
&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;<br />
kd> <span style="color: #0000ff;">!peb</span><br />
PEB at 7ffd5000<br />
    InheritedAddressSpace:    No<br />
    ReadImageFileExecOptions: No<br />
    BeingDebugged:            No<br />
    ImageBaseAddress:         01000000<br />
    Ldr                       001a1e90<br />
    Ldr.Initialized:          Yes<br />
    Ldr.InInitializationOrderModuleList: 001a1f28 . 001a2bd0<br />
    Ldr.InLoadOrderModuleList:           001a1ec0 . 001a2bc0<br />
    Ldr.InMemoryOrderModuleList:         001a1ec8 . 001a2bc8<br />
            Base TimeStamp                     Module<br />
         1000000 3b7d8410 Aug 18 00:52:32 2001 C:\WINDOWS\system32\calc.EXE<br />
        7c900000 4802a12c Apr 14 04:11:24 2008 C:\WINDOWS\system32\ntdll.dll<br />
        7c800000 4802a12c Apr 14 04:11:24 2008 C:\WINDOWS\system32\kernel32.dll<br />
        7c9c0000 4802a111 Apr 14 04:10:57 2008 C:\WINDOWS\system32\SHELL32.dll<br />
        77dd0000 4802a0b2 Apr 14 04:09:22 2008 C:\WINDOWS\system32\ADVAPI32.dll<br />
        77e70000 4802a106 Apr 14 04:10:46 2008 C:\WINDOWS\system32\RPCRT4.dll<br />
        77fe0000 4802a11b Apr 14 04:11:07 2008 C:\WINDOWS\system32\Secur32.dll<br />
        77f10000 4802a0be Apr 14 04:09:34 2008 C:\WINDOWS\system32\GDI32.dll<br />
        7e410000 4802a11b Apr 14 04:11:07 2008 C:\WINDOWS\system32\USER32.dll<br />
        77c10000 4802a188 Apr 14 04:12:56 2008 C:\WINDOWS\system32\msvcrt.dll<br />
        77f60000 4802a116 Apr 14 04:11:02 2008 C:\WINDOWS\system32\SHLWAPI.dll<br />
        5cb70000 4802a114 Apr 14 04:11:00 2008 C:\WINDOWS\system32\ShimEng.dll<br />
        6f880000 4802a098 Apr 14 04:08:56 2008 C:\WINDOWS\AppPatch\AcGenral.DLL<br />
        76b40000 4802a13c Apr 14 04:11:40 2008 C:\WINDOWS\system32\WINMM.dll<br />
        774e0000 4802a111 Apr 14 04:10:57 2008 C:\WINDOWS\system32\ole32.dll<br />
        77120000 4802a112 Apr 14 04:10:58 2008 C:\WINDOWS\system32\OLEAUT32.dll<br />
        77be0000 4802a117 Apr 14 04:11:03 2008 C:\WINDOWS\system32\MSACM32.dll<br />
        77c00000 4802a11d Apr 14 04:11:09 2008 C:\WINDOWS\system32\VERSION.dll<br />
        769c0000 4802a11c Apr 14 04:11:08 2008 C:\WINDOWS\system32\USERENV.dll<br />
        5ad70000 4802a11e Apr 14 04:11:10 2008 C:\WINDOWS\system32\UxTheme.dll<br />
        773d0000 4802a094 Apr 14 04:08:52 2008 C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83\comctl32.dll<br />
    SubSystemData:     00000000<br />
    ProcessHeap:       000a0000<br />
    ProcessParameters: 00020000<br />
    WindowTitle:  &#8216;C:\WINDOWS\system32\calc.EXE&#8217;<br />
    ImageFile:    &#8216;C:\WINDOWS\system32\calc.EXE&#8217;<br />
    CommandLine:  &#8216;&#187;C:\WINDOWS\system32\calc.EXE&#187; &#8216;<br />
    DllPath:      &#8216;C:\WINDOWS\system32;C:\WINDOWS\system32;C:\WINDOWS\system;C:\WINDOWS;.;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem&#8217;<br />
    Environment:  00010000<br />
        =::=::\<br />
        =C:=C:\<br />
        ALLUSERSPROFILE=C:\Documents and Settings\All Users<br />
        APPDATA=C:\Documents and Settings\sww\Application Data<br />
        CLIENTNAME=Console<br />
        CommonProgramFiles=C:\Program Files\Common Files<br />
        COMPUTERNAME=SWW-3DF7AD85928<br />
        ComSpec=C:\WINDOWS\system32\cmd.exe<br />
        FARHOME=C:\Far<br />
        FARLANG=English<br />
        FP_NO_HOST_CHECK=NO<br />
        HOMEDRIVE=C:<br />
        HOMEPATH=\Documents and Settings\sww<br />
        LOGONSERVER=\\SWW-3DF7AD85928<br />
        NUMBER_OF_PROCESSORS=1<br />
        OS=Windows_NT<br />
        Path=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem<br />
        PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH<br />
        PROCESSOR_ARCHITECTURE=x86<br />
        PROCESSOR_IDENTIFIER=x86 Family 6 Model 23 Stepping 8, GenuineIntel<br />
        PROCESSOR_LEVEL=6<br />
        PROCESSOR_REVISION=1708<br />
        ProgramFiles=C:\Program Files<br />
        SESSIONNAME=Console<br />
        SystemDrive=C:<br />
        SystemRoot=C:\WINDOWS<br />
        TEMP=C:\DOCUME~1\sww\LOCALS~1\Temp<br />
        TMP=C:\DOCUME~1\sww\LOCALS~1\Temp<br />
        USERDOMAIN=SWW-3DF7AD85928<br />
        USERNAME=sww<br />
        USERPROFILE=C:\Documents and Settings\sww<br />
        windir=C:\WINDOWS<br />
kd> <span style="color: #0000ff;">!teb 7ffdf000 </span><br />
TEB at 7ffdf000<br />
    ExceptionList:        0007ff10<br />
    StackBase:            00080000<br />
    StackLimit:           0007d000<br />
    SubSystemTib:         00000000<br />
    FiberData:            00001e00<br />
    ArbitraryUserPointer: 00000000<br />
    Self:                 7ffdf000<br />
    EnvironmentPointer:   00000000<br />
    ClientId:             00000790 . 00000794<br />
    RpcHandle:            00000000<br />
    Tls Storage:          00000000<br />
    PEB Address:          7ffd5000<br />
    LastErrorValue:       1309<br />
    LastStatusValue:      c0000034<br />
    Count Owned Locks:    0<br />
    HardErrorMode:        0
</p></blockquote>
<p style="text-align: justify;">Данные команды крайне полезны при анализе дампа. Не забывайте про них.</p>
<p style="text-align: justify;"><strong>В: Как получить имя модуля по адресу внутри него?</strong></p>
<p style="text-align: justify;">О: Прочтите статью <a href="http://sww-it.ru/2009-11-20/339">&#171;Адрес модуля в WinDbg&#187;</a> и/или воспользуйтесь командой <span style="color: #0000ff;">lma</span> или предоставленным скриптом.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">$$ pointer to modules list
r $t0 <span style="color: #339933;">=</span> nt<span style="color: #339933;">!</span>PsLoadedModuleList
&nbsp;
	.<span style="color: #202020;">echo</span> <span style="color: #ff0000;">&quot;Section             Start               End                 Name&quot;</span>
&nbsp;
.<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span> r $t1 <span style="color: #339933;">=</span> poi<span style="color: #009900;">&#40;</span>@$t0<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
       <span style="color: #009900;">&#40;</span>@$t1 <span style="color: #339933;">!=</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span> <span style="color: #009900;">&#40;</span>@$t1 <span style="color: #339933;">!=</span> @$t0<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
       r $t1 <span style="color: #339933;">=</span> poi<span style="color: #009900;">&#40;</span>@$t1<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    r<span style="color: #339933;">?</span> $t2 <span style="color: #339933;">=</span> <span style="color: #339933;">#CONTAINING_RECORD( @$t1, nt!_LDR_DATA_TABLE_ENTRY, InLoadOrderLinks );</span>
    as <span style="color: #339933;">/</span>x $<span style="color: #009900;">&#123;</span><span style="color: #339933;">/</span>v<span style="color: #339933;">:</span>$Section<span style="color: #009900;">&#125;</span> @$t2
&nbsp;
    $$  Get image name into $DriverName
    as <span style="color: #339933;">/</span>msu $<span style="color: #009900;">&#123;</span><span style="color: #339933;">/</span>v<span style="color: #339933;">:</span>$DriverName<span style="color: #009900;">&#125;</span> @@c<span style="color: #339933;">++</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>@$t2<span style="color: #339933;">-&gt;</span>BaseDllName<span style="color: #009900;">&#41;</span>
    $$  Get image base into $Start
    as <span style="color: #339933;">/</span>x $<span style="color: #009900;">&#123;</span><span style="color: #339933;">/</span>v<span style="color: #339933;">:</span>$Start<span style="color: #009900;">&#125;</span> @@c<span style="color: #339933;">++</span><span style="color: #009900;">&#40;</span>@$t2<span style="color: #339933;">-&gt;</span>DllBase<span style="color: #009900;">&#41;</span>
    $$  Get image base <span style="color: #339933;">+</span> image size into $End
    as <span style="color: #339933;">/</span>x $<span style="color: #009900;">&#123;</span><span style="color: #339933;">/</span>v<span style="color: #339933;">:</span>$End<span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#40;</span> @@c<span style="color: #339933;">++</span><span style="color: #009900;">&#40;</span>@$t2<span style="color: #339933;">-&gt;</span>DllBase<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> @@c<span style="color: #339933;">++</span><span style="color: #009900;">&#40;</span>@$t2<span style="color: #339933;">-&gt;</span>SizeOfImage<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
&nbsp;
    .<span style="color: #202020;">block</span>
    <span style="color: #009900;">&#123;</span>
        .<span style="color: #202020;">echo</span> $<span style="color: #009900;">&#123;</span>$Section<span style="color: #009900;">&#125;</span><span style="color: #339933;">:</span> $<span style="color: #009900;">&#123;</span>$Start<span style="color: #009900;">&#125;</span><span style="color: #339933;">:</span> $<span style="color: #009900;">&#123;</span>$End<span style="color: #009900;">&#125;</span><span style="color: #339933;">:</span> $<span style="color: #009900;">&#123;</span>$DriverName<span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    ad $<span style="color: #009900;">&#123;</span><span style="color: #339933;">/</span>v<span style="color: #339933;">:</span>$End<span style="color: #009900;">&#125;</span>
    ad $<span style="color: #009900;">&#123;</span><span style="color: #339933;">/</span>v<span style="color: #339933;">:</span>$Start<span style="color: #009900;">&#125;</span>
    ad $<span style="color: #009900;">&#123;</span><span style="color: #339933;">/</span>v<span style="color: #339933;">:</span>$DriverName<span style="color: #009900;">&#125;</span>
    ad $<span style="color: #009900;">&#123;</span><span style="color: #339933;">/</span>v<span style="color: #339933;">:</span>$Section<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p style="text-align: justify;"><strong>В: Что такое мэппинг драйверов в WinDbg и как этим пользоваться?</strong></p>
<p style="text-align: justify;">О: Читайте в <a href="http://sww-it.ru/2010-07-08/485">отдельной статье</a>.</p>
<p style="text-align: justify;"><strong>В: А есть вообще полезные команды в WinDbg?</strong></p>
<p style="text-align: justify;">О: Конечно. Самая лучшая из них &#8212; <span style="color: #0000ff;">.cls</span> :)</p>
<p style="text-align: justify;">
<p style="text-align: justify;">Полезные скрипты при динамическом анализе руткитов (взято с разрешения авторов из статьи <a href="http://nobunkum.ru/issue001/rootkits-windbg.html" target="_blank">&#171;Обнаружение руткитов режима ядра с помощью отладчика&#187;</a>).</p>
<p style="text-align: justify;">Скрипт для перечисления некоторых колбеков ядра:</p>
<p style="text-align: justify;">

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">.<span style="color: #202020;">echo</span> Create Process Notifiers<span style="color: #339933;">:</span>
$$ нотификаторы на создание процессов
r $t0 <span style="color: #339933;">=</span> nt<span style="color: #339933;">!</span>PspCreateProcessNotifyRoutine
&nbsp;
$$ перебираем EX_CALLBACK элементы массива
.<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>r $t2 <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> @$t2 <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">8</span><span style="color: #339933;">;</span> r $t2 <span style="color: #339933;">=</span> @$t2 <span style="color: #339933;">+</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    $$ отбрасываем младшие <span style="color: #0000dd;">3</span> бита<span style="color: #339933;">,</span> 
    $$ которые хранят количество ссылок на указатель
    r $t3 <span style="color: #339933;">=</span> @@c<span style="color: #339933;">++</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">long</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>@$t0 <span style="color: #339933;">+</span> @$t2 <span style="color: #339933;">*</span> <span style="color: #0000dd;">4</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span> <span style="color: #208080;">0xfffffff8</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    .<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>@$t3<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        $$ если указатель не равен нулю<span style="color: #339933;">,</span> 
        $$ выводим поле Function из EX_CALLBACK_ROUTINE_BLOCK
        dps @@c<span style="color: #339933;">++</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">long</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>@$t3 <span style="color: #339933;">+</span> <span style="color: #0000dd;">4</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> L <span style="color: #0000dd;">1</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
.<span style="color: #202020;">echo</span> Create Thread Notifiers<span style="color: #339933;">:</span>
$$ нотификаторы на создание потоков
r $t0 <span style="color: #339933;">=</span> nt<span style="color: #339933;">!</span>PspCreateThreadNotifyRoutine
&nbsp;
.<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>r $t2 <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> @$t2 <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">8</span><span style="color: #339933;">;</span> r $t2 <span style="color: #339933;">=</span> @$t2 <span style="color: #339933;">+</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    r $t3 <span style="color: #339933;">=</span> @@c<span style="color: #339933;">++</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">long</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>@$t0 <span style="color: #339933;">+</span> @$t2 <span style="color: #339933;">*</span> <span style="color: #0000dd;">4</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span> <span style="color: #208080;">0xfffffff8</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    .<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>@$t3<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        dps @@c<span style="color: #339933;">++</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">long</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>@$t3 <span style="color: #339933;">+</span> <span style="color: #0000dd;">4</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> L <span style="color: #0000dd;">1</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
.<span style="color: #202020;">echo</span> Load Image Notifiers<span style="color: #339933;">:</span>
$$ нотификаторы на загрузку исполняемых образов
r $t0 <span style="color: #339933;">=</span> nt<span style="color: #339933;">!</span>PspLoadImageNotifyRoutine
&nbsp;
.<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>r $t2 <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> @$t2 <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">8</span><span style="color: #339933;">;</span> r $t2 <span style="color: #339933;">=</span> @$t2 <span style="color: #339933;">+</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    r $t3 <span style="color: #339933;">=</span> @@c<span style="color: #339933;">++</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">long</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>@$t0 <span style="color: #339933;">+</span> @$t2 <span style="color: #339933;">*</span> <span style="color: #0000dd;">4</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span> <span style="color: #208080;">0xfffffff8</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    .<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>@$t3<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        dps @@c<span style="color: #339933;">++</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">long</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>@$t3 <span style="color: #339933;">+</span> <span style="color: #0000dd;">4</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> L <span style="color: #0000dd;">1</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
.<span style="color: #202020;">echo</span> Registry Callbacks<span style="color: #339933;">:</span>
$$ нотификаторы на события системного реестра
r $t0 <span style="color: #339933;">=</span> nt<span style="color: #339933;">!</span>CmpCallBackVector
&nbsp;
.<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>r $t2 <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> @$t2 <span style="color: #339933;">&lt;</span> <span style="color: #208080;">0x64</span><span style="color: #339933;">;</span> r $t2 <span style="color: #339933;">=</span> @$t2 <span style="color: #339933;">+</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    r $t3 <span style="color: #339933;">=</span> @@c<span style="color: #339933;">++</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">long</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>@$t0 <span style="color: #339933;">+</span> @$t2 <span style="color: #339933;">*</span> <span style="color: #0000dd;">4</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span> <span style="color: #208080;">0xfffffff8</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    .<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>@$t3<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        dps @@c<span style="color: #339933;">++</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">long</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>@$t3 <span style="color: #339933;">+</span> <span style="color: #0000dd;">4</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> L <span style="color: #0000dd;">1</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p style="text-align: justify;">Скрипт, проверяющий ServiceTable существующих потоков в системе:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">$$ указатель на список процессов
r $t0 <span style="color: #339933;">=</span> nt<span style="color: #339933;">!</span>PsActiveProcessHead
&nbsp;
$$ перечисляем активные процессы
.<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>r $t1 <span style="color: #339933;">=</span> poi<span style="color: #009900;">&#40;</span>@$t0<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#40;</span>@$t1 <span style="color: #339933;">!=</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span> <span style="color: #009900;">&#40;</span>@$t1 <span style="color: #339933;">!=</span> @$t0<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      r $t1 <span style="color: #339933;">=</span> poi<span style="color: #009900;">&#40;</span>@$t1<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    r<span style="color: #339933;">?</span> $t2 <span style="color: #339933;">=</span> <span style="color: #339933;">#CONTAINING_RECORD(@$t1, nt!_EPROCESS, ActiveProcessLinks);</span>
    as <span style="color: #339933;">/</span>x $<span style="color: #009900;">&#123;</span><span style="color: #339933;">/</span>v<span style="color: #339933;">:</span>$Procc<span style="color: #009900;">&#125;</span> @$t2
&nbsp;
    $$  Get image name into $ImageName.
    <span style="color: #202020;">as</span> <span style="color: #339933;">/</span>ma $<span style="color: #009900;">&#123;</span><span style="color: #339933;">/</span>v<span style="color: #339933;">:</span>$ImageName<span style="color: #009900;">&#125;</span> @@c<span style="color: #339933;">++</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>@$t2<span style="color: #339933;">-&gt;</span>ImageFileName<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
&nbsp;
    .<span style="color: #202020;">block</span>
    <span style="color: #009900;">&#123;</span>
        .<span style="color: #202020;">echo</span> $<span style="color: #009900;">&#123;</span>$Procc<span style="color: #009900;">&#125;</span><span style="color: #339933;">:</span> $<span style="color: #009900;">&#123;</span>$ImageName<span style="color: #009900;">&#125;</span>
        .<span style="color: #202020;">echo</span> Active threads<span style="color: #339933;">:</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    $$ указатель на список активных потоков этого процесса
    r<span style="color: #339933;">?</span> $t3 <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>nt<span style="color: #339933;">!</span>_LIST_ENTRY <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&amp;</span>@$t2<span style="color: #339933;">-&gt;</span>ThreadListHead<span style="color: #339933;">;</span>
&nbsp;
    $$ перечисляем потоки
    .<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>r $t4 <span style="color: #339933;">=</span> poi<span style="color: #009900;">&#40;</span>@$t3<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
          <span style="color: #009900;">&#40;</span>@$t4 <span style="color: #339933;">!=</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span> <span style="color: #009900;">&#40;</span>@$t4 <span style="color: #339933;">!=</span> @$t3<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
          r $t4 <span style="color: #339933;">=</span> poi<span style="color: #009900;">&#40;</span>@$t4<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        r<span style="color: #339933;">?</span> $t5 <span style="color: #339933;">=</span> <span style="color: #339933;">#CONTAINING_RECORD(@$t4, nt!_ETHREAD, ThreadListEntry)</span>
        r<span style="color: #339933;">?</span> $t5 <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>nt<span style="color: #339933;">!</span>_KTHREAD <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>@$t5
&nbsp;
        $$ получаем значение KTHREAD<span style="color: #339933;">::</span><span style="color: #202020;">ServiceTable</span>
        r $t6 <span style="color: #339933;">=</span> @@c<span style="color: #339933;">++</span><span style="color: #009900;">&#40;</span>@$t5<span style="color: #339933;">-&gt;</span>ServiceTable<span style="color: #009900;">&#41;</span>
&nbsp;
        r $t7 <span style="color: #339933;">=</span> nt<span style="color: #339933;">!</span>KeServiceDescriptorTable
        r $t8 <span style="color: #339933;">=</span> nt<span style="color: #339933;">!</span>KeServiceDescriptorTableShadow
&nbsp;
        as <span style="color: #339933;">/</span>x $<span style="color: #009900;">&#123;</span><span style="color: #339933;">/</span>v<span style="color: #339933;">:</span>$Kthread<span style="color: #009900;">&#125;</span> @$t5
        as <span style="color: #339933;">/</span>x $<span style="color: #009900;">&#123;</span><span style="color: #339933;">/</span>v<span style="color: #339933;">:</span>$SDT<span style="color: #009900;">&#125;</span> @$t6
&nbsp;
        .<span style="color: #202020;">block</span> 
        <span style="color: #009900;">&#123;</span>
            .<span style="color: #202020;">echo</span> $<span style="color: #009900;">&#123;</span>$Kthread<span style="color: #009900;">&#125;</span> ServiceTable <span style="color: #339933;">=</span> $<span style="color: #009900;">&#123;</span>$SDT<span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        $$ проверяем значение
        .<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>@$t6 <span style="color: #339933;">!=</span> @$t7<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span> <span style="color: #009900;">&#40;</span>@$t6 <span style="color: #339933;">!=</span> @$t8<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            .<span style="color: #202020;">block</span>
            <span style="color: #009900;">&#123;</span>
                .<span style="color: #202020;">echo</span> <span style="color: #339933;">!!!</span> Changed value of KTHREAD<span style="color: #339933;">::</span><span style="color: #202020;">ServiceTable</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        ad $<span style="color: #009900;">&#123;</span><span style="color: #339933;">/</span>v<span style="color: #339933;">:</span>$Kthread<span style="color: #009900;">&#125;</span>
        ad $<span style="color: #009900;">&#123;</span><span style="color: #339933;">/</span>v<span style="color: #339933;">:</span>$SDT<span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    ad $<span style="color: #009900;">&#123;</span><span style="color: #339933;">/</span>v<span style="color: #339933;">:</span>$ImageName<span style="color: #009900;">&#125;</span>
    ad $<span style="color: #009900;">&#123;</span><span style="color: #339933;">/</span>v<span style="color: #339933;">:</span>$Procc<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fsww-it.ru%2Fwindbg-tricks&amp;title=%D0%A2%D1%80%D1%8E%D0%BA%D0%B8%20WinDbg" id="wpa2a_14"><img src="http://sww-it.ru/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://sww-it.ru/windbg-tricks/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>IDA vs Windbg</title>
		<link>http://sww-it.ru/2009-03-08/50?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ida-vs-windbg</link>
		<comments>http://sww-it.ru/2009-03-08/50#comments</comments>
		<pubDate>Sun, 08 Mar 2009 10:41:13 +0000</pubDate>
		<dc:creator>SWW</dc:creator>
				<category><![CDATA[Отладка]]></category>
		<category><![CDATA[ida]]></category>
		<category><![CDATA[windbg]]></category>

		<guid isPermaLink="false">http://sww-it.ru/?p=50</guid>
		<description><![CDATA[<p style="text-align: justify;">Относительно недавно вышла новая IDA v5.4. В ней были заявлены возможности удаленной отладки, используя Windbg. Конечно, в IDA появились и другие интересные вещи. Среди них я бы выделил те самые три отладчика: Bosch, GDB, Windbg; возможность писать на Python (видимо для гиков и «аверов», которые строят на этом системы анализа); и, задерживаем дыхание, [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Относительно недавно вышла новая <strong>IDA v5.4</strong>. В ней были заявлены возможности удаленной отладки, используя <strong>Windbg</strong>. Конечно, в <strong>IDA</strong> <a href="http://www.hex-rays.com/idapro/54/index.htm" target="_blank">появились</a> и другие интересные вещи. Среди них я бы выделил те самые три отладчика: <strong>Bosch</strong>, <strong>GDB</strong>,<strong> Windbg</strong>; возможность писать на <strong>Python</strong> (видимо для гиков и «аверов», которые строят на этом системы анализа); и, задерживаем дыхание, возможность получить  имена локальных переменных и типы из формата .PDB. Последнее означает то, что теперь можно загрузить наконец-то <span style="color: #0000ff;">ntoskrnl.exe</span> в <strong>IDA</strong> и все недокументированные структуры будут как на ладони (это ж надо дойти до этого только к версии 5.4).</p>
<p style="text-align: justify;"><span id="more-50"></span>Картинка ниже показывает недокументированную структуру <span style="color: #0000ff;">_KTHREAD</span> файла ядра.</p>
<p style="text-align: justify;"><img class="aligncenter size-full wp-image-51" title="Недокументрированные структуры" src="http://sww-it.ru/wp-content/uploads/2009/03/structures.png" alt="Недокументрированные структуры" width="714" height="573" /></p>
<p style="text-align: justify;">Возможности загрузить структуры в другой анализируемый файл &#8212; нет. Пользуемся старым способом: добавляем нужные нам структуры и экспортируем их в виде .IDC файла, который потом подгружаем в анализируемый сэмпл. Неудобно добавлять каждую структуру по отдельности, также неудобно то, что нет возможности сразу подгрузить все структуры из .PDB в анализируемый файл.</p>
<p style="text-align: justify;">Первым делом, я взялся смотреть отладчик, так как он мне интереснее всего. Скачиваем по <a href="http://www.hex-rays.com/idapro/debugger/windbg_tut.pdf" target="_blank">ссылке</a> статью, в которой описываются настройки <strong>IDA</strong> для удаленной отладки с помощью <strong>Windbg</strong>. Прежде всего, я советую обратить внимание на следующие моменты:</p>
<ul class="unIndentedList" style="text-align: justify;">
<li> Конфигурация источника символов. Не забываем прописать путь в переменные окружения или перед запуском <strong>IDA</strong> выполняем команду <span style="color: #0000ff;">set</span>.</li>
<li> Выбираем <span style="color: #0000ff;">Debugger-&gt;Attach</span>, а не <span style="color: #0000ff;">Debugger-&gt;Run</span>.</li>
<li> Не забываем поставить галочку <span style="color: #0000ff;">Kernel mode debugging</span>.</li>
</ul>
<p style="text-align: justify;"><img class="aligncenter size-full wp-image-52" title="Подключение к ядру" src="http://sww-it.ru/wp-content/uploads/2009/03/attach_options.png" alt="Подключение к ядру" width="404" height="353" /></p>
<p style="text-align: justify;">Сразу после подключения мы получаем полноценный отладчик, который умеет выполнять команды <strong>Windbg</strong> в отдельном окошке. Нам доступны все расширения (смотри <span style="color: #0000ff;">.chain</span> и <span style="color: #0000ff;">.load</span>). Не забывайте нажимать <strong>C</strong> для преобразования в код. В отладчике также работает <strong>Hex-Rays</strong> (для этого надо создать функцию, нажмите <strong>P</strong>, а потом <strong>F5</strong>).</p>
<p style="text-align: justify;"><img class="aligncenter size-full wp-image-53" title="Главное окно отладчика" src="http://sww-it.ru/wp-content/uploads/2009/03/debugger.png" alt="Главное окно отладчика" width="800" height="466" /></p>
<p style="text-align: justify;">Пожалуй, я задумаюсь о полноценном переходе на отладчик <strong>IDA</strong>, использующий <strong>Windbg</strong>. Графический интерфейс однозначно удобнее, а если меня застигнет ностальгия, то всегда под рукой строка для ввода команд <strong>Windbg</strong>.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fsww-it.ru%2F2009-03-08%2F50&amp;title=IDA%20vs%20Windbg" id="wpa2a_16"><img src="http://sww-it.ru/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://sww-it.ru/2009-03-08/50/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
	</channel>
</rss>

