44

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

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

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

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

  1. APIHijack - 要求我为每个函数编写 C++ 代码。由于我只需要记录这些值,这似乎是一种矫枉过正。
  2. EasyHook - 与 1 相同,但允许使用 .NET 语言编写代码。
  3. OllyDbguHooker - 我仍然需要为每个函数编写代码,这次是在 Python 中。此外,我必须使用该struct模块在 Python 中进行许多转换,因为大多数函数使用指针传递值。

因为我只需要记录函数参数,我想要一个简单的解决方案。是否有任何自动化工具,我可以告诉我要监控哪些功能及其签名,然后获取详细的日志文件?

4

4 回答 4

30

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

进程监视器

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

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

于 2008-11-22T12:18:55.617 回答
13

更多谷歌搜索找到了我正在寻找的内容:WinAPIOverride32。它允许编写文本文件,例如:

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

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

于 2008-11-22T13:39:54.753 回答
3

此处的Visual Studio 插件运行时流程

Runtime Flow 实时监控和记录正在运行的 .NET 应用程序中的函数调用和函数参数,并显示堆栈跟踪树。监控不需要仪器或源代码。

于 2017-04-27T11:06:43.710 回答
0

如果您只想查看 DLL 的功能接口,可以尝试“Dependecies”(https://lucasg.github.io/Dependencies/)。这是作为开源的 DependencyWalker 的一个很好的翻版。

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

于 2021-01-14T08:44:00.977 回答