首页
学习
活动
专区
圈层
工具
发布

DLL监控
EN

Stack Overflow用户
提问于 2010-10-26 04:09:31
回答 4查看 1.2K关注 0票数 3

是否有应用程序可以让我查看进程发送到DLL的内容?

我有一个进程和一个DLL,我想监控发送给函数的参数,这样我就可以自己使用DLL了。

DLL的导出是。

??0CCPCompressor@@AAE@XZ

??0CCPExpanor@@AAE@XZ

??1CCPCompressor@@AAE@XZ

??1CCPExpanor@@AAE@XZ

?清除@CCPCompressor@@QAEHXZ

?清除@CCPExpandor@@QAEHXZ

..Compress@CCPCompressor..

..Delete@CCPCompressor..

..Delete@CCPExpandor..

..Expand@CCPExpandor..

..Free@CCPCompressor..

..Free@CCPExpandor..

..Init@CCPCompressor..

..Init@CCPExpandor..

..New@CCPCompressor..

..New@CCPExpandor..

EN

回答 4

Stack Overflow用户

发布于 2010-10-26 04:35:02

一般来说,这不是一个好主意。即使您有一些捕获的参数集,如果不对DLL代码进行深入分析,您也不知道如何处理这些参数以及某些方法可以接受哪些范围的参数。例如:如果我调用一个方法DoMathOperation(Add,1,2),你可以模仿这个调用,但你不能做DoMathOperation(Multiply,2,2),因为你不知道这是可能的。

票数 0
EN

Stack Overflow用户

发布于 2010-10-26 16:01:29

最简单的方法是简单地重新定位原始dll,并使用相同的导出创建您自己创建的新dll。此dll将从备用位置LoadLibrary旧的dll。

这在这里不太适用- dll正在导出c++类成员,这有两个后果: c++类必须静态加载,因为没有c++机制来将c++函数指针(通过GetProcAddress获得)‘粘合’到一个类实例中。

这意味着您的shim dll将处于一个不幸的位置,即必须同时导入和导出,以及相同的符号集。

解决这个问题的唯一方法是将填充dll分成两部分编写:

Shim1:

一部分将获得原始dll的名称,并将导出与原始dll导出的相同的类定义:

代码语言:javascript
复制
 class __decldpec(dllexport) CCPCompressor {
  ...

Depends可以破解名称装饰,或者Undname.exe随Visual Studio一起分发。

这部分将使用位于其他文件夹中的shimdll2.dll的显式路径以及原始dll的LoadLibrary()。导入由shimdll2.dll导出的函数时需要使用GetProcAddress()

Shim2:

另一个填充dll将位于您试图截取的dll所在的文件夹中。此dll必须从原始压缩器dll导入类:

代码语言:javascript
复制
class __declspec(dllimport) CCPCompressor {
  ...

您可以使用第一个dll创建的dll导入库来实际链接符号。然后是从shim2.dll中导出函数,每当调用CCPCompressor方法时,shim1.dll都会调用该函数。

注意:其他:您的CCPCompressor类至少需要有一个大的虚数组,因为您不能从dll导出中知道应用程序期望该类有多大(除非您恰好有一个描述该类的实际头文件)。

要分解导出的名称以构建类定义:从Start > Programs > Visual Studio20XX -> Tools菜单打开Visual Studio20XX命令提示符。

代码语言:javascript
复制
c:\...\VC>undname ?Clear@CCPCompressor@@QAEHXZ
Microsoft (R) C++ Name Undecorator

Undecoration of :- "?Clear@CCPCompressor@@QAEHXZ"
is :- "public: int __thiscall CCPCompressor:Clear(void)"

c:\...\VC>_

对从原始dll (undname接受某种文本文件以加快此过程)导出的每个函数执行此操作,以了解如何声明匹配的类def。

票数 0
EN

Stack Overflow用户

发布于 2010-10-26 18:42:24

使用detours是否与您的需求兼容?

从该站点:

概述

创新的系统研究取决于是否能够轻松地检测和扩展现有的操作系统和应用程序功能。通过访问适当的源代码,通过重新构建操作系统或应用程序来插入新的工具或扩展通常是微不足道的。然而,在今天的世界中,系统研究人员很少能获得所有相关的源代码。

Detours是一个用于在x86、x64和IA64机器上插入任意Win32函数的库。通过重写目标函数的内存中代码来拦截Win32函数。Detour包还包含将任意DLL和数据段(称为有效负载)附加到任何Win32二进制文件的实用程序。

曲折保留未插入指令的目标函数(可通过trampoline调用)作为子例程,以供指令插入使用。我们的弹床设计实现了对现有二进制软件的一大类创新扩展。

我们已经使用Detour创建了一个自动分布式分区系统,对DCOM协议栈进行了检测和分析,并为基于COM的操作系统API创建了thunking层。在微软内部和行业内,都广泛使用了弯路。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4018419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档