2012-04-26 22 views
1

我需要windbg使用Logger.exe打印方法調用。在windbg中使用Logger.exe打印方法調用

分析Logexts.dll後,我得知!logexts.logm我sampleapplication.dll將打印sampleapplication.dll中所做的調用到windbg屏幕上。

但我沒能看到sampleapplication.dll進行的方法調用。我怎麼做?

假設如果在sampleapplication的方法,打印()中,當調用此方法時,應該在windbg中屏幕打印。

我該怎麼做?

回答

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我是等效的:它們導致完全爲空的包含列表。

擴展名!logexts.logm i *和!logexts.logm x是等效的:它們會生成一個僅包含Logexts.dll和kernel32.dll的排除列表。這兩個模塊總是被排除,因爲Logger不允許自己登錄。

下面是一些例子:

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 
+0

謝謝。但這對我不起作用。 !logexts.logm顯示可用的API類別。所有功能都禁用。我應該啓用它們嗎? – Rockstart 2012-04-27 17:24:38

+0

@Rockstart所以不會'!logexts.logo e d'工作? – EdChum 2012-04-27 19:00:57

+0

它不起作用。你有沒有嘗試過,是否有用? – Rockstart 2012-04-28 09:17:00

0

@EdChum:

日誌被看見。但不是方法調用。

我有一個表格上的按鈕。我在單擊該按鈕時調用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 
+0

該文檔似乎表明只有Win32 API和COM調用將被記錄,它並不表示您的DLL中的任何方法都將被記錄。 – EdChum 2012-04-29 16:14:25

+0

它也顯示了啓用的類別和模塊包含列表它包括你的dll嗎? :http://windbg.info/doc/1-common-cmds.html#22_logexts – EdChum 2012-04-29 16:17:18

+0

@EdChum:是的,它顯示我的DLL和所有可用的類別啓用。 – Rockstart 2012-04-30 08:37:31

2

的LogExts.dll擴展將只記錄在「頭」文件WinDbg的文件夾的winext \清單內指定的呼叫。它只能記錄本機/非託管調用(即不支持.NET /管理的東西)。

我是這個工具的原始作者......它是在1999年寫的,這麼多清單反映了當時存在的微軟API。最初的目的是調試第三方應用程序,以弄清如何使它們與最終成爲Windows XP的應用程序兼容。