2008-11-22 133 views
33

簡而言之:我想監視從應用程序到DLL的選定調用。監視DLL的應用程序調用

我們有一箇舊的VB6應用程序,我們失去了源代碼(該公司當時沒有使用源代碼控制..)。此應用程序使用第三方DLL。

我想在新的C++應用程序中使用此DLL。不幸的是,DLL API僅部分記錄,所以我不知道如何調用某些函數。我確實有函數簽名。

由於VB6應用程序使用這個DLL,我想看看它是如何調用幾個函數。到目前爲止,我已經試過或看過 -

  1. APIHijack - 要求我爲每個函數編寫C++代碼。由於我只需要記錄這些值,因此看起來像是一種矯枉過正。
  2. EasyHook - 與1相同,但允許使用.NET語言編寫代碼。
  3. OllyDbguHooker - 我仍然需要爲每個函數編寫代碼,這次用Python編寫。另外,我必須使用struct模塊在Python中進行許多轉換,因爲大多數函數都使用指針傳遞值。

由於我只需要記錄函數參數,我想要一個簡單的解決方案。是否有任何自動化工具,我可以告訴哪些功能要監視和簽名,然後獲取詳細的日誌文件?

回答

10

一些更多的谷歌搜索找到了我一直在尋找:WinAPIOverride32。它允許寫入文本文件,如:

CustomApi.dll|void NameOfFunction(long param1, double& param2); 

後來,這些文件可以在程序中用於登錄到NameOfFunction所有呼叫。現在我只需要弄清楚如何記錄數組和結構參數。

25

「靜態」解決方案(在某種意義上,它可以根據需要捕獲堆棧跟蹤)將爲Process Monitor

Process Monitor

更動態的解決方案將是ApiMonitor,但它可能是太舊,與監控的應用程序兼容。值得一試雖然。

http://www.rohitab.com/gallery/api-monitor-2-0/main-window.png

+4

似乎它只是監視Windows API函數。我需要監視一個非Windows API DLL。我錯過了什麼嗎? – kshahar 2008-11-22 12:28:25

+0

不,確實如此。即使進程監視器將顯示您的DLL堆棧,但方法的「未知」。 – VonC 2008-11-22 12:45:39

3

的Visual Studio外接運行流程here

運行流程進行實時監測和記錄函數調用和 功能參數在運行.NET應用程序,並顯示一個堆棧跟蹤 樹。沒有監測所需的儀器或源代碼。