监控应用程序调用DLL

44
简而言之:我想监控应用程序对DLL的选择性调用。我们有一款老旧的VB6应用程序,丢失了其源代码(当时公司没有使用源代码控制)。该应用程序使用第三方DLL。我想在一个新的C++应用程序中使用此DLL。不幸的是,DLL API只有部分文档记录,因此我不知道如何调用某些函数。我确实有这些函数签名。由于VB6应用程序使用了这个DLL,我想查看它如何调用多个函数。到目前为止,我已经尝试或查看了以下内容:
  1. APIHijack-需要我为每个函数编写C++代码。由于我只需要记录值,所以似乎有点过度kill。
  2. EasyHook-与1相同,但允许使用.NET语言编写代码。
  3. OllyDbguHooker-我仍然需要为每个函数编写代码,这次是用Python。另外,我必须在Python中使用struct模块进行许多转换,因为大多数函数使用指针传递值。
由于我只需要记录函数参数,我想要一个简单的解决方案。是否有任何自动化工具,我可以告诉它要监视哪些函数及其签名,然后获得详细的日志文件?
4个回答

31

一种“静态”解决方案(在需要时可以捕获堆栈跟踪)是Process Monitor

进程监视器

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

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


4
似乎它只监控Windows API函数。我需要监控一个非Windows API的DLL。我是不是漏了什么? - kshahar
不,确实如此。即使是进程监视器也会显示您的DLL堆栈,但方法名称会显示为“未知”。 - VonC

13

通过进一步的谷歌搜索,我找到了我需要的内容:WinAPIOverride32。它可以编写文本文件,如:

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

之后,这些文件可以在程序内部用来记录所有对NameOfFunction的调用。现在我只需要想办法记录数组和结构参数的日志。


2
对我来说并不容易。我正在尝试“查找”Outlook正在调用的函数,但我不知道它在调用哪个函数 :/ - Mooing Duck
我尝试下载了WinAPIOverride32(2021年1月)。Windows 10将其识别为病毒。同时,经过Chocolatey扫描也被确认包含病毒。很可能它的代码被用于编写某些病毒中,因此被标记为病毒。我还不确定是否会尝试使用它。 如果您想尝试编译自己的版本,则可使用旧版本的源代码。 - RexBarker

2

Visual Studio插件Runtime Flow 在此处

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


0

如果您只想查看DLL的函数接口,可以尝试使用“Dependecies”(https://lucasg.github.io/Dependencies/)。这是一个很好的开源DependencyWalker重制版。

这只允许您查看DLL的依赖项及其相应的函数名称(但不包括调用结构)。不幸的是,我认为它无法告诉您调用DLL / EXE使用了哪些特定函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接