troushoo

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

  1. --/--/--(--) --:--:--|
  2. スポンサー広告

ProcDumpExt : Microsoft のAndrew Richards 氏作のデバッガエクステンション

概要・まとめ
Microsoft のAndrew Richards 氏作のデバッガエクステンションProcDumpExt を紹介します。
今回紹介するコマンドは、TechEd 2013のAndrew 氏のセッションで紹介されていたコマンドです。

内容
デバッガエクステンションProcDumpExt を紹介します。
ProcDumpExt はMicrosoft のSenior Escalation Engineer のAndrew Richards 氏作のデバッガエクステンションです。
ダウンロードはこちらからできます。
ProcDumpExt のダウンロード

以下、TechEd 2013 のAndrew 氏のセッションで紹介されていた3つのコマンドを紹介します。
・!deep
・!grep
・!ungrep

!deep
”!deep <数字>” という風に使用します。
”!deep <数字>” は、”~*knL” の出力のうち、フレームの数が<数字> 以上ののみ表示します。

以下は、”!deep 10” を実行した結果です。
フレームの数が10個以上のもののみが表示されていることがわかります。
!deep 10

!grep
”!grep <検索文字列> <コマンド>” という風に使用します。
<コマンド> の出力のうち、<検索文字列> を含む行のみを表示します。

以下は、”!grep user32 lm” を実行した結果です。
”lm” の結果のうち、”user32” を含む行のみが表示されていることがわかります。
!grep user32 lm

!ungrep
”!ungrep <検索文字列> <コマンド>” という風に使用します。
!grep とは逆に、<コマンド> の出力のうち、<検索文字列> を含まない行のみを表示します。

以下は、”!ungrep user32 lm” を実行した結果です。
lm の結果のうち、user32 を含まない行のみが表示されていることがわかります。
!ungrep user32 lm

補足
ProcDumpExt は、他にもコマンドがあります。
以下は、ProcDumpExt v6.4のヘルプです。

0:001> !ProcDumpExt.help
=========================================================================================
Help for ProcDumpExt v6.4 - Copyright 2009-2013 Andrew Richards
=========================================================================================
!seek - Equivalent of ~*knL and/or !deep 1

!seek [-q] [-e symbol] [<symbol> [command]]
- Execute 'command' against stacks that contain 'symbol'
(Note, don't include a displacement in the specified symbol)

- Specify '-q' (quiet) to omit the per-thread header

- Specify '-e' to exclude stacks that contain 'symbol'
(Note, don't include a displacement in the specified symbol)

e.g. !seek
!seek ReadFile
!seek ReadFile kbn
!seek ReadFile dps @rsp @rsp+0x20
!seek -q ReadFile !teb
!seek -e SleepEx ReadFile !teb

!seek -? - Display the help for !seek
!seek -help - Display the help for !seek

=========================================================================================
!deep - Equivalent of ~*knL but only displays stacks that are at least
'depth' frames deep (default depth is 1)

!deep [<depth> [-q] [-s symbol] [-e symbol] [command]]
- Execute 'command' against stacks that are at least 'depth' frames deep

- Specify '-q' (quiet) to omit the per-thread header

- Specify '-s' to only include stacks that contain 'symbol'
(Note, don't include a displacement in the specified symbol)

- Specify '-e' to exclude stacks that contain 'symbol'
(Note, don't include a displacement in the specified symbol)

e.g. !deep
!deep 25
!deep 25 kbn
!deep 25 dps @rsp @rsp+0x20

!deep 25 -q
!deep 25 -q !teb

!deep 25 -s ReadFile
!deep 25 -s ReadFile kbn
!deep 25 -s ReadFile dps @rsp @rsp+0x20

!deep 25 -e SleepEx
!deep 25 -e SleepEx kbn
!deep 25 -e SleepEx dps @rsp @rsp+0x20

!deep -? - Display the help for !deep
!deep -help - Display the help for !deep

=========================================================================================
!busy - Equivalent of ~*knL but only displays stacks that are at least
'depth' frames deep (default depth is 1) and are not waiting for:-
~ ntdll!NtWaitFor*
~ ntdll!ZwWaitFor*
~ ntdll!NtRemoveIoCompletion
~ ntdll!ZwRemoveIoCompletion
~ ntdll!NtReplyWaitReceivePort
~ ntdll!ZwReplyWaitReceivePortEx

!busy [<depth> [-x] [-q] [-s symbol] [-e symbol] [command]]
- Execute 'command' against stacks that are at least 'depth' frames deep
and are not waiting (for the list above)

- Specify '-x' to also exclude waiters of network calls, and sleeps:-
~ ntdll!NtRequestWaitReplyPort
~ ntdll!ZwRequestWaitReplyPort
~ ntdll!ZwDelayExecution
~ ntdll!NtDelayExecution
~ ntdll!RtlDeactivateActivationContextUnsafeFast

- Specify '-q' (quiet) to omit the per-thread header

- Specify '-s' to only include stacks that contain 'symbol'
(Note, don't include a displacement in the specified symbol)

- Specify '-e' to exclude stacks that contain 'symbol'
(Note, don't include a displacement in the specified symbol)

e.g. !busy
!busy 25
!busy 25 kbn
!busy 25 dps @rsp @rsp+0x20

!busy 25 -x
!busy 25 -x kbn
!busy 25 -x dps @rsp @rsp+0x20

!busy 25 -q
!busy 25 -q !teb

!busy 25 -s ReadFile
!busy 25 -s ReadFile kbn
!busy 25 -s ReadFile dps @rsp @rsp+0x20

!busy 25 -e SleepEx
!busy 25 -e SleepEx kbn
!busy 25 -e SleepEx dps @rsp @rsp+0x20

!busy -? - Display the help for !busy
!busy -help - Display the help for !busy

=========================================================================================
!dpx - Equivalent of dps, dpp, dpa and dpu (combined); also class types (dt) and trap frames (kV)

!dpx - Displays from rsp/esp to the stack base
!dpx N - Displays the first N values, from rsp/esp down
!dpx <addr> N
- Displays the first N values, from <addr> down
!dpx <addr> <addr>
- Displays from addr to addr

- Specify '-u' to display an unlimited number of values
Default limit is 6,000 addresses

- Specify '-a' to display all stack values
Default only displays stack values that point to a value

- Specify the following to limit the types; multiple options are allowed
-da : ANSI strings
-du : UNICODE strings
-dt : Data Types (Classes only)
-ds : Symbols
-df : Trap Frames (Kernel only)

e.g. !dpx
!dpx 20
!dpx -a
!dpx -da -du 20
!dpx <addr> <addr> -u
!dpx <addr> <addr> -u -a

=========================================================================================
!dtr - Equivalent of dt for each valid register

!dtr [args]
!dtr - Lists registers that point to an address; includes class type
!dtr <arg> - Equivalent of dt @reg <arg> for each valid register
!dtr <arg> --> dt @reg <arg>

e.g. !dtr
!dtr nt!_ERESOURCE
!dtr nt!_ERESOURCE Flag

=========================================================================================
!grep - Only shows lines which contain <search>
- Search is case sensitive
- Lines are delimited by newline ('\n')
- !grep can be chained

!grep <search> <command>

e.g. !grep days vertarget
!grep call u @eip
!grep dt !dpx
!grep dt !grep DUser !dpx

!ungrep - Same as !grep but exclusion

!head <bytes> <command>
!tail <bytes> <command>

=========================================================================================
!loadsos - Runs .cordll and .loadby sos
!loadpsscor - Runs .cordll and .load psscor2/4
!loadsosex - Runs .cordll and .load sosex
- Note, sosex is loaded with sos or psscor2/4

Define PROCDUMPEXT_LOADCORDLL to choose the extension at load
0 = Disabled
1 = SOS + SOSEX
2 = PSSCORx + SOSEX (default)
=========================================================================================
!comment - Display the dump's comment
!tlist - Display the dump's tlist
!line - Print a line
!bigline - Print a three big lines
!kr - knL printed upside down so WinDiff works better
!ghostthreads - Lists all threads; real or ghosts
!gt - Same as !ghostthreads
!spa - Search for a Pointer that is Pointer Aligned
!msr - Displays the Model-Specific Registers (MSR)
!timers - Sorted version of !timer - uses MEX
!tags - List the GUID and Size of the secondary callback chunks
!dbgp - Dump a DBGP ACPI table
!dbg2 - Dump a DBG2 ACPI table
!crashtask - Enable crashdump support on the current (modern) process
!tid - Set the current thread to the TID in the dump's comment
!dml - Toggle .prefer_dml
!url <url> - Open a url
!notes - Executes the common commands needed to write case notes
!help - Displays the help for all commands

=========================================================================================

リンク
・ProcDumpExt のダウンロード先
http://sdrv.ms/11C7S9c


テーマ:Windows - ジャンル:コンピュータ

  1. 2013/09/10(火) 22:43:20|
  2. WinDbg
  3. | トラックバック:0
  4. | コメント:0
<<RawCap を用いてWireshark で自マシン間の通信を解析する方法 | ホーム | 誰がレジストリを変更したか? : 監査ポリシー>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://troushoo.blog.fc2.com/tb.php/133-48a54a02
この記事にトラックバックする(FC2ブログユーザー)

スポンサーリンク

最新記事

月別アーカイブ

カテゴリ

ツール (92)
ネットワーク (76)
Visual Studio (56)
SOS・Psscor2/Psscor4 (25)
WinDbg (25)
Linux (24)
Azure (17)
Tips (20)
英語 (1)
About Me (1)
未分類 (0)

全記事表示リンク

全ての記事を表示する

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。