2

Logger.exe を使用してメソッド呼び出しを出力するには、windbg が必要です。

Logexts.dll を分析した後、!logexts.logm i sampleapplication.dllが sampleapplication.dll で行われた呼び出しを Windbg 画面に出力することがわかりました。

しかし、sampleapplication.dll で行われたメソッド呼び出しを確認できません。それ、どうやったら出来るの?

sampleapplicationにprint()というメソッドがあり、このメソッドを呼び出すとwindbgの画面に表示されるとします。

それ、どうやったら出来るの?

4

3 に答える 3

3

LogExts.dll 拡張機能は、WinDBG フォルダーの winext\manifest 内の「ヘッダー」ファイルで指定された呼び出しのみをログに記録します。ネイティブ/管理されていない呼び出しのみをログに記録できます (つまり、.NET/管理されたものは記録できません)。

私はこのツールの最初の作成者でした... 1999 年に作成されたもので、マニフェストの多くは当時存在していた Microsoft API を反映しています。当初の目的は、サードパーティ製アプリケーションをデバッグして、最終的に Windows XP となったものと互換性を持たせる方法を見つけることでした。

于 2013-08-31T19:50:48.380 に答える
1

ロギングを WinDbg 出力ウィンドウに出力しますか? 以下を使用します。

!logexts.logo e d

これによりログが有効になり、出力ウィンドウに出力されるはずです

あなたがリストしたものは、モジュールの包含または除外リストを作成するためのものです(F1ヘルプから):

!logexts.logm 拡張機能は、モジュールの包含リストまたはモジュールの除外リストを作成または表示します。

    !logexts.logm i Modules 
!logexts.logm x Modules 
!logexts.logm 

パラメーター

i ロガーがモジュール包含リストを使用するようにします。指定されたモジュールで構成されます。

x ロガーがモジュール除外リストを使用するようにします。これは、Logexts.dll、kernel32.dll、および指定されたモジュールで構成されます。

Modules 含めるモジュールまたは除外するモジュールを指定します。このリストは累積的ではありません。このコマンドを使用するたびに、まったく新しいリストが作成されます。複数のモジュールがリストされている場合は、それらをスペースで区切ります。アスタリスク (*) を使用して、すべてのモジュールを示すことができます。

解説 パラメーターを指定しない場合、!logexts.logm 拡張機能は、現在の包含リストまたは除外リストを表示します。

拡張子 !logexts.logm x * と !logexts.logm i は同等です: 完全に空の包含リストになります。

拡張機能 !logexts.logm i * と !logexts.logm x は同等です。Logexts.dll と kernel32.dll のみを含む除外リストになります。Logger はそれ自体をログに記録することが許可されていないため、これら 2 つのモジュールは常に除外されます。

ここではいくつかの例を示します。

0:001> !logm
Excluded modules:
  LOGEXTS.DLL      [mandatory]
  KERNEL32.DLL     [mandatory]
  USER32.DLL
  GDI32.DLL
  ADVAPI32.DLL

0:001> !logm x winmine.exe
Excluded modules:
  Logexts.dll      [mandatory]
  kernel32.dll     [mandatory]
  winmine.exe

0:001> !logm x user32.dll gdi32.dll
Excluded modules:
  Logexts.dll      [mandatory]
  kernel32.dll     [mandatory]
  user32.dll
  gdi32.dll

0:001> !logm i winmine.exe mymodule2.dll
Included modules:
  winmine.exe
  mymodule2.dll
于 2012-04-26T19:54:11.810 に答える
0

@エドチュム:

ログが表示されます。ただし、メソッド呼び出しではありません。

フォームにボタンがあります。そのボタンがクリックされたときに method1() を呼び出しています。しかし、ログに記録すると、これだけが表示されます。

`Thrd 1bcc 7243DD89 GetProcAddress( 0x77640000 "GetDlgItem") -> 0x77648510
Thrd 1bcc 0012B8A9 GetDlgItem( 0x0001083A 0x00000000) -> NULL [FAIL]
Thrd 1bcc 7243DD89 GetProcAddress( 0x77640000 "IsWindowVisible") -> 0x77656939
Thrd 1bcc 009718E6 IsWindowVisible( 0x0001083C) -> TRUE
Thrd 1bcc 7243DD89 GetProcAddress( 0x77640000 "IsWindowEnabled") -> 0x7764C921
Thrd 1bcc 009718E6 IsWindowEnabled( 0x0001083C) -> TRUE
Thrd 1bcc 7243DD89 GetProcAddress( 0x77640000 "SetCapture") -> 0x77676B2A
Thrd 1bcc 0012BBFE SetCapture( 0x0001083C) -> NULL [FAIL]
Thrd 1bcc 7243DD89 GetProcAddress( 0x77640000 "NotifyWinEvent") -> 0x7765F299
Thrd 1bcc 7243DD89 GetProcAddress( 0x77640000 "InvalidateRect") -> 0x77657BC9
Thrd 1bcc 00972610 InvalidateRect( 0x0001083C [0x0024E88C] -> 0 , 0 , 75 , 23  FALSE) -> TRUE
Thrd 1bcc 7243DD89 GetProcAddress( 0x77640000 "MapWindowPoints") -> 0x77657915
Thrd 1bcc 009726C7 MapWindowPoints( 0x0001083C NULL 0x00000001) -> 16711916 ( [0x01B30B24] -> 286 , 269 )
Thrd 1bcc 00972610 InvalidateRect( 0x0001083C [0x0024E804] -> 0 , 0 , 75 , 23  FALSE) -> TRUE
Thrd 1bcc 7243DD89 GetProcAddress( 0x77640000 "UpdateWindow") -> 0x77652BD9
Thrd 1bcc 009718E6 UpdateWindow( 0x0001083C) -> TRUE
Thrd 1bcc 009726C7 MapWindowPoints( 0x0001083C NULL 0x00000001) -> 16711916 ( [0x01B32AE8] -> 286 , 269 )
Thrd 1bcc 7243DD89 GetProcAddress( 0x77640000 "WindowFromPoint") -> 0x77676D0C
Thrd 1bcc 0012B98C WindowFromPoint( 286 269) -> 0x0001083C
Thrd 1bcc 7243DD89 GetProcAddress( 0x77640000 "ReleaseCapture") -> 0x7764C49E
Thrd 1bcc 0012B11F ReleaseCapture() -> TRUE
于 2012-04-28T20:02:13.333 に答える