我有一个我需要使用的DLL。我还有一个程序可以调用这个dll来使用它。我需要能够在另一个程序中使用这个DLL,但是之前的程序员没有留下任何文档或源代码。有没有办法可以监控对此dll的调用以及传递的内容是什么?
答案 0 :(得分:4)
总的来说,你不能。这来自Dependency Walker常见问题解答:
问:如何查看参数和 返回函数的类型?
答:对于大多数功能,这个 信息根本就不存在 模块。 Windows的模块文件 format仅提供单个文本 字符串来标识每个函数。 没有结构化的方式来列出 参数个数,参数 类型或返回类型。然而, 有些语言做了一些事情 功能“装饰”或“整理”, 这是编码的过程 信息到文本字符串中。对于 例如,像int Foo这样的函数(int, int)用简单的装饰编码 可能会导出为_Foo @ 8。 8 指的是使用的字节数 参数。如果是C ++装饰的话 使用后,该函数将被导出 as?Foo @@ YGHHH @ Z,可以 直接解码回来了 函数的原始原型:int Foo(int,int)。依赖沃克 通过使用支持C ++ undecoration Undecorate C ++ Functions Command。
编辑:我认为,你可以做的一件事就是获得一个反汇编程序并反汇编DLL和/或调用代码,并从中得出参数的数量和类型,和返回类型。但是你无法找到参数的名称。
答案 1 :(得分:1)
你可以在DLL上使用dumpbin
(这是Visual Studio Professional或VC ++ Express的一部分,或者下载平台工具包,甚至使用OpenWatcom C ++)来寻找'exports'部分,作为一个例子:
dumpbin /all SimpleLib.dll | more Output would be: Section contains the following exports for SimpleLib.dll 00000000 characteristics 4A15B11F time date stamp Thu May 21 20:53:03 2009 0.00 version 1 ordinal base 2 number of functions 2 number of names ordinal hint RVA name 1 0 00001010 fnSimpleLib 2 1 00001030 fnSimpleLib2
看看序数,有两个函数导出...唯一的问题是找出使用的参数......
您也可以使用PE Explorer为您找到这个。编写参数有点棘手,您需要反汇编二进制文件,并在文件中的偏移量处查找函数调用,然后通过查看“SP”,“BP”寄存器来计算参数。
希望这有帮助, 最好的祝福, 汤姆。
答案 2 :(得分:0)
你可以 hook 你希望监控的DLL中的函数(如果你知道它们有多少参数)