【发布时间】:2019-11-24 11:15:33
【问题描述】:
可以在不知道函数原型的情况下从 DLL 文件调用函数吗?我尝试使用 pe-parser 库从 DLL 文件中提取所有导出的函数,但我只有函数名称,我不知道函数输入/输出。是否有任何解决方案可以从 dll 文件中找到导出的函数输入/输出?还是在不知道函数原型的情况下调用函数?
【问题讨论】:
-
您当然可以在不知道其签名的情况下调用 DLL 中的函数,但除非您碰巧获得正确的签名,否则程序将具有未定义的行为。函数需要的参数将从堆栈中挑选出来,如果你没有把这些参数放在那里,它会挑选它可以在堆栈上找到的东西,相信它确实是正确的参数。返回值也是如此。这不是正确的方法。
-
不确定您要做什么,但简短的回答是否定的,没有。在你打电话之前,你必须知道你在打电话。仅仅拥有函数地址是不够的,而且缺少一些 c++ 名称解构和/或反汇编程序业务端的一些重要时间,你只是没有它。这就是为什么打算公开调用的库提供描述参数、调用约定等的适当标题。
-
@WhozCraig, 描述参数的标题 我没有头文件。并在 DLL 文件中找到导出的函数,但我不知道如何调用该函数。
-
我明白你想要什么。我(和其他所有人)告诉你的是没有灵丹妙药。正如先知贾格尔几十年前所宣称的那样,“你不能总是得到你想要的。”如果没有具有正确调用约定和参数描述的函数指针类型,您能做的最好的事情就是临时的、偶然发生的、老式的反汇编。这是一个颠簸的旅程,所以祝你好运。如果您有 PDB,那将有很大帮助,但如果您甚至没有标头,我假设 PDB 已经远离雷达。
标签: c++ windows dll function-pointers