C++ 在C+中查找外部调用+;动态链接库

C++ 在C+中查找外部调用+;动态链接库,c++,dll,interop,C++,Dll,Interop,目前,我们使用硬件驱动程序的DLL来连接特定的硬件。然而,我们也有一个在2002年左右用VC++编写的旧的内部开发的DLL,它将该DLL包装成几个核心函数。这段代码已经丢失很久了,在我出现之前就已经开发好了。因此,在出现故障的情况下,它不能被支持,甚至不能被查看。我们正试图通过直接从C#NET应用程序访问驱动程序来消除中间人 我知道这个DLL只是简单地包装了硬件供应商的DLL,但是方法签名并不相等。它看起来像是在单个方法中调用多个驱动程序函数。我的问题是:如何才能查看这个包装器DLL对这个特定函

目前,我们使用硬件驱动程序的DLL来连接特定的硬件。然而,我们也有一个在2002年左右用VC++编写的旧的内部开发的DLL,它将该DLL包装成几个核心函数。这段代码已经丢失很久了,在我出现之前就已经开发好了。因此,在出现故障的情况下,它不能被支持,甚至不能被查看。我们正试图通过直接从C#NET应用程序访问驱动程序来消除中间人

我知道这个DLL只是简单地包装了硬件供应商的DLL,但是方法签名并不相等。它看起来像是在单个方法中调用多个驱动程序函数。我的问题是:如何才能查看这个包装器DLL对这个特定函数的驱动程序DLL进行的所有外部调用?我不关心任何其他代码;我很确定,如果我能找出它打给司机的电话,我就能推断出来

编辑:一个更简洁的解释(这是虚构的)

Driver.dll有一个名为
startaquisition(int,string)
的函数。它还具有多种设置功能

Wrapper.dll有一个名为
startaquisition(int,string,double,int)
的函数

我怀疑Wrapper.dll正在调用Driver.dll的
startaquisition(int,string)
以及一些其他调用(可能是那些设置函数)。我想知道其他的电话可能是什么。

我想是的

即使它没有直接列出它,您仍然可以获取disassembly并检查导入表映射。也许通过将这个工具与另一个类似的工具配对,或者您可能会得到有趣的结果


任何有助于您的工具都必须处理DISAssembly。对于当前的可移植可执行格式(PE),存在用于导入/导出的显式部分。要用代码映射这些表,需要某种解释,这就是为什么我认为不存在一种可以直接进行映射的工具。

您可以尝试像IDA Pro()这样的反汇编程序。

看起来您必须构建自己的小实用程序来查找和反汇编现有程序,然后使用您喜爱的实用程序扫描输出文本并搜索您的呼叫。我希望您不必这样做,但这可能比找到一个已经这样做的实用程序要快。

如果您可以访问供应商DLL的接口,您可以构建自己的模拟替换库,并将其放入路径中,以便旧DLL使用它。
模拟库什么也不做,只报告何时调用任何导出以及何时调用

这是一个伟大的小反汇编程序,虽然有一个几分钟的学习曲线,使它达到那里。遗憾的是,我读取汇编的能力很弱,但很明显,它只跳转到一个外部函数startaquisition()。因此,我想我可以假设它没有调用任何其他设置函数,并且额外的变量可能未使用!它所做的一切就是推送和移动,所以我假设它应该是直接移动到驱动程序DLL减去几个参数。我在PE.Explorer之后尝试了这个(IDA免费),这是一个很好的反汇编程序!它做了很好的分析,并允许我用高亮等方式重命名堆栈变量。我真的希望我能找到一些可以输入PInvoke语句的东西,它会自动匹配变量,但我认为这已经足够了。这是一个好主意,如果没有其他人通过,我打算做什么。但这可能是一场为期几天的意志之战,目的是让出口与之匹配。