1

notepad.exe をアタッチした後、windbg で uf コマンドを実行しました。コマンドは uf notepad!WinMain でした。次の出力が得られました。

0:000> uf notepad!WinMain
notepad!WinMain:
0021138d mov     edi,edi
0021138f push    ebp
00211390 mov     ebp,esp
00211392 sub     esp,1Ch
00211395 push    esi
00211396 push    edi
00211397 push    6
002113c8 test    eax,eax
002113ca jl      notepad!WinMain+0x118 (00211c93)

notepad!WinMain+0x43:
002113d0 push    ebx
002113d1 push    dword ptr [ebp+14h]
002113d4 push    edi
002113d5 call    notepad!SkipProgramName (00213170)
002113e5 je      notepad!WinMain+0x10e (00211ca9)

notepad!WinMain+0x5e:
002113eb push    esi
002113ec push    esi
002113ed call    dword ptr [notepad!_imp__GetCurrentProcessId (00211084)]

など..すべてのジャンプ命令の後に気付くと、次のような新しいブロックが作成されます

002113ca jl      notepad!WinMain+0x118 (00211c93)

notepad!WinMain+0x43:

そして

002113e5 je      notepad!WinMain+0x10e (00211ca9)

notepad!WinMain+0x5e:

したがって、関数の逆アセンブリのジャンプごとに新しいブロックの作成を省略できる WinDbg の設定を知りたかったのです。U コマンドで取得した方法で出力を取得できないのはなぜですか?

だから私はこのようなオプションを探しています

002113c8 test    eax,eax002113ca 
jl      notepad!WinMain+0x118 (00211c93)
**blank line omitted**
**notepad!WinMain+0x43:** omitted**
002113d0 push    ebx002113d1 push    dword ptr [ebp+14h]

何か助けはありますか?

4

1 に答える 1

5

関数コードがコード セクション全体に分散している可能性があるため (リンカーがどこに何を配置するかを決定し、通常、最も実行される部分を一番上に移動することになります)

ここで、uは特定の関数に興味があるかどうかは気にしません。命令を順番にダンプするだけですが、ufは関連するすべてのコード ブロックを検索し、関数全体に見えるようにそれらをまとめてフォーマットする必要があります。

編集:残念ながら(私が知る限り)あなたのニーズに合わせてwindbgを調整するための即時設定はありません-ここでは、おそらく何らかの後処理(空白行などを削除するためのきれいな印刷スクリプト必要)。

于 2009-05-25T14:48:47.087 に答える