2010-12-22 73 views
19

我是微軟Detours新手。我已經安裝它來跟蹤進程產生的系統調用。我運行我從網上獲得的以下命令:Microsoft Detours如何工作以及如何使用它來獲取堆棧跟蹤?

syelogd.exe /q C:\Users\xxx\Desktop\log.txt 
withdll.exe /d:traceapi.dll C:\Program Files\Google\Google Talk\googletalk.exe 

我得到日誌文件。問題是我不完全理解這裏發生的事情。彎路如何運作?它如何跟蹤系統調用? 另外我不知道如何讀取log.txt中的輸出。這裏是log.txt中的一行

20101221060413329 2912 50.60: traceapi: 001 GetCurrentThreadId() 

最後我想獲取進程的堆棧跟蹤。我怎麼弄到的?

回答

22

Detours讓你攔截任何功能。它在你指定的地址中放置一個jmp,爲你的代碼創建一個蹦牀。最後,如果你想這樣做,你可以調用舊函數。 要使用Detours,您必須在要攔截的進程中注入代碼。

爲了簡化這個過程中,你可以使用Deviare API Hook它做所有的注塑人員,您可以使用從支持COM技術,包括.NET,德爾福,C++,Python的任何編程語言,等等。 攔截應用程序下載後包中你會發現一些例子。有一個名爲DeviareCSharpConsole的控制檯,可以攔截任何顯示完整堆棧跟蹤信息的進程的API。

這是正路Deviare API Hook作品,但你需要做什麼,如果你想創建一個鉤另一個進程的應用程序:

Deviare API Hook Design

的代理應在目標進程創建攔截你想要的API。要攔截這些API,您可以使用Detours,但必須對未包含在該庫中的IPC員工進行編碼。

如果您需要使用Deviare API Hook在目標進程內編寫代碼,則可以使用Deviare Custom Hooks。該功能可讓您攔截API並異步處理已處理的參數。

15

首先,我會高度建議,如果你想執行API掛鉤,我會用easyhook:http://easyhook.codeplex.com/(開源)。 這是一個非常好,簡單的API鉤子框架。

關於如何獲取堆棧跟蹤,我不記得具體怎麼做,但查看WinAPIOverride32:http://jacquelin.potier.free.fr/winapioverride32/(開源)。 他這樣做,它是開源的。 此外,如果您需要研究的痕跡,WinAPIOverride32是一個很好的應用程序,用於研究應用程序的工作方式。

編輯:只需添加一個應用程序。 http://www.rohitab.com/就像WinAPIOVerride32,但它支持64位,並且自從我編寫了這個答案後,它確實得到了改進。我必須指出,在某些情況下,它錯過了我在WinAPIOverride32中找到的API調用,但它仍然非常好。不幸的是,該來源沒有發佈。

關於如何API鉤狀作品, 那麼它很長的解釋,我想指出你的這篇文章: http://www.codeproject.com/KB/system/hooksys.aspx 它給出了它是如何在引擎蓋下做了一個很好的解釋(有除了什麼其他方法寫在那裏,但仍然是一篇非常好的文章)。

希望它有幫助! :-)

20

相反彎路(這是免費的,僅32位)或easyhook(這是KHM,一個有點亂碼),你可能想看看mhook 2.4這是非常整潔的代碼和BSD許可。適用於x86和x64,處理IP相關代碼等。

還有關於它如何在網站上運行的詳細說明。

alt text

對於堆棧跟蹤,你可以使用CaptureStackBackTrace()kernel32,或者如果你想獲得幻想,用StackWalk64()dbghelp

相關問題