2011-01-22 62 views
4

我該如何處理在當前進程中加載​​的DLL中的掛接/重定向函數(例如,來自Kernel32.dll的CreateThread)?在當前進程中掛鉤API調用?

(我沒有控制哪些代碼調用CreateThread件,所以它不喜歡我可以有代碼別的東西代替。)

語言沒有多大意義;我猜C/C++會是最好的選擇。


更新:

我忘了說:我不尋找那些需要額外的庫到我的程序的捆綁解決方案;我正在尋找一種手動方式來進行掛鉤(例如通過重寫函數的地址),而不是使用外部庫來執行此操作。

但是,由於那些提到了外部庫的人,抱歉,我沒有提前說過。

回答

2

退房http://easyhook.codeplex.com/

這是一個API掛鉤框架。 它的開源,非常好用!

+0

感謝您的鏈接;不幸的是,我已經聽說過(並使用過)EasyHook,但我正在尋找一個更輕量級的解決方案來解決這個問題。 (我不想加載整個庫只是爲了鉤住一個函數。) – Mehrdad 2011-01-22 20:23:07

3

有MS庫這樣的:Detours

+0

嗯......我聽說過Detours,但從來沒有使用它。它有多輕巧?我認爲它需要加載另一個庫...我想我應該說,我需要避免這種情況。 – Mehrdad 2011-01-22 20:24:11

+0

它非常輕量級,並且源代碼是公開的,但許可證強制您將它用作DLL。在任何情況下,你可以檢查他們如何做到這一點 – 2011-01-22 20:28:06

2

(這很可能會是一個「註釋」下的「彎路」的答案,但是,我的「信譽」更合適的還不夠加評論我想,讓我將它張貼作爲一個答案)

This postthis thread ("DirectShow question")下提到由亞歷山德羅·安傑利替換/本土替代走彎路(有一些粗糙的代碼示例以及)。

我實際上首先發現它引用another thread ("problem in hooking cocreateinstance")同時還搜索COM組件創建掛鉤/跟蹤(這第二個線程更側重於跨進程掛鉤,雖然)。

爲了方便起見,我還要添加一個鏈接WinAPIOverride32(Jacquelin Potier)。它似乎有「開發人員設計的圖形用戶界面」:)但沒有投訴,因爲它是開源的(如上所述)。