监视应用程序对DLL的调用

时间:2008-11-22 12:13:38

标签: dll monitoring hook monitor

简而言之:我想监视从应用程序到DLL的所选调用。

我们有一个旧的VB6应用程序,我们丢失了源代码(该公司当时没有使用源代码控制..)。此应用程序使用第三方DLL。

我想在新的C ++应用程序中使用此DLL。不幸的是,DLL API只是部分记录,所以我不知道如何调用某些函数。我确实有功能签名。

由于VB6应用程序使用此DLL,我想看看它如何调用多个函数。到目前为止,我已经尝试或看过 -

  1. APIHijack - 要求我为每个函数编写C ++代码。由于我只需要记录值,这似乎有点过分。
  2. EasyHook - 与1相同,但允许用.NET语言编写代码。
  3. OllyDbguHooker - 我仍然需要为每个函数编写代码,这次是在Python中。另外,我必须使用struct模块在​​Python中进行许多转换,因为大多数函数都使用指针传递值。
  4. 由于我只需要记录函数参数,我想要一个简单的解决方案。是否有任何自动化工具,我可以告诉哪些功能需要监控及其签名,然后获取详细的日志文件?

4 个答案:

答案 0 :(得分:25)

“静态”解决方案(在某种意义上它可以根据需要捕获堆栈跟踪)将是Process Monitor

Process Monitor

更动态的解决方案是ApiMonitor,但它可能太旧而无法与要监控的应用程序兼容。值得一试。

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

答案 1 :(得分:11)

更多Google搜索找到了我要找的内容:WinAPIOverride32。它允许编写文本文件,例如:

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

稍后,可以在程序内部使用这些文件来记录对NameOfFunction的所有调用。现在我只需要弄清楚如何记录数组和结构参数。

答案 2 :(得分:3)

Visual Studio Addin 运行时流程 here

  

实时运行时流程监视和记录函数调用和   运行.NET应用程序中的函数参数并显示堆栈   跟踪树。监控不需要任何工具或源代码。

答案 3 :(得分:0)

如果你只是想看看DLL的函数接口,你可以试试“依赖”(https://lucasg.github.io/Dependencies/)。这是作为 OpenSource 的 DependencyWalker 的一个很好的翻版。

这仅允许您查看 DLL 的依赖项,以及相应的函数名称(但不是调用结构)。不幸的是,我不相信它会告诉您调用 DLL/EXE 正在使用 DLL 中的哪些特定函数。