0

「!htrace -diff」では 16 フレームしか表示できないようです。スタック トレースのフレーム数を増やすにはどうすればよいですか? 以下は、!htrace -diff によって検出されたリークされたハンドルの 1 つです。完全なスタック トレースがないと、何も読み取れません。

Handle = 0x00000f7c - OPEN
Thread ID = 0x00001cc4, Process ID = 0x00009f20

0x01b8dad8: +0x01b8dad8
0x018c6e93: +0x018c6e93
0x7788179a: +0x7788179a
0x000a20bb: +0x000a20bb
0x753ab069: +0x753ab069
0x7539cf87: +0x7539cf87
0x75322776: +0x75322776
0x7539d07e: +0x7539d07e
0x7539c549: +0x7539c549
0x778ae707: +0x778ae707
0x7785c32e: +0x7785c32e
0x77a2ff66: ntdll!ZwCreateEvent+0x00000012
0x69bffc58: verifier!AVrfpNtCreateEvent+0x0000006b
0x77390d93: KERNELBASE!CreateEventExW+0x0000006e
0x773911c6: KERNELBASE!CreateEventW+0x00000027
0x69bffd8f: verifier!AVrfpCreateEventW+0x00000078
4

2 に答える 2

0

残念ながらできません。

シンボルが正しく設定されていると仮定すると、次の可能性が見えます

!htrace によって報告されるトレースの一部は、別のプロセス コンテキストからのものである可能性があります。この場合、戻りアドレスが現在のプロセス コンテキストで適切に解決されないか、間違ったシンボルに解決される可能性があります。

出典: WinDbg ヘルプ ( .hh !htrace)

これは、別のプロセスがプロセスにハンドルを挿入し、アドレスがそのプロセスに関連付けられている場合に発生する可能性があります。この場合、リストされたプロセス ID は、!htraceデバッグしているプロセスと一致しません (|プロセス ID を取得するには (パイプ) と入力します)。

そのような場合、プロセスにアタッチして (ここでは.attach 0x<pid>,0nがデフォルトです)、そこから残りのコールスタックを取得しようとすることができますが、私はこれを自分で行ったことはありません。

于 2014-12-09T20:09:01.983 に答える
0

このリンクは、基本的にハードコーディングされていることを示しています

スタック トレースの最大深度は、現在 16 にハードコードされています (ただし、将来変更される可能性があります)。また、スタック トレースのカーネル モード部分のエントリもいくつか含まれています。これらのスタック トレース エントリは、カーネル デバッガーで !htrace を使用して、カーネルまたはドライバーの開発者が表示できます。したがって、トレースごとに約 11 のユーザー モード エントリを取得することは正確に聞こえます。

于 2014-12-09T14:54:28.383 に答える