Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何仅使用函数名从DLL调用函数?C++;_C++_Windows_Dll_Function Pointers - Fatal编程技术网

C++ 如何仅使用函数名从DLL调用函数?C++;

C++ 如何仅使用函数名从DLL调用函数?C++;,c++,windows,dll,function-pointers,C++,Windows,Dll,Function Pointers,在不知道函数原型的情况下,可以从DLL文件调用函数吗?我尝试使用库从DLL文件中提取所有导出的函数,但我只有函数名,不知道函数输入/输出。是否有任何解决方案可以从dll文件中查找导出的函数输入/输出?或者在不知道函数原型的情况下调用函数?TL;博士-否 为了正确调用函数,您需要了解函数原型。它通常在DLL附带的h文件中提供 您可以尝试对DLL进行反向工程,以确定原型,但此信息不是PE文件的一部分 如果您有PDB文件,您可以从中提取相关信息。请参阅。您当然可以在不知道其签名的情况下调用DLL中的函

在不知道函数原型的情况下,可以从DLL文件调用函数吗?我尝试使用库从DLL文件中提取所有导出的函数,但我只有函数名,不知道函数输入/输出。是否有任何解决方案可以从dll文件中查找导出的函数输入/输出?或者在不知道函数原型的情况下调用函数?

TL;博士-否

为了正确调用函数,您需要了解函数原型。它通常在DLL附带的h文件中提供

您可以尝试对DLL进行反向工程,以确定原型,但此信息不是PE文件的一部分


如果您有PDB文件,您可以从中提取相关信息。请参阅。

您当然可以在不知道其签名的情况下调用DLL中的函数,但除非您碰巧获得了正确的签名,否则程序将具有未定义的行为。函数需要的参数将从堆栈中选取,如果您没有将这些参数放在堆栈中,它将选取在堆栈中可以找到的参数,并相信它确实是正确的参数。返回值也是如此。这不是正确的方法。不确定你想做什么,但简短的回答是不,没有。在你打电话之前,你必须知道你在打什么。只需要函数地址不够,缺少一些C++名称的散列和/或反汇编程序的业务端上的一些重要时间,你就没有它。这就是为什么打算公开调用的库提供适当的头文件来描述参数、调用约定等@WhozCraig,头文件描述我没有头文件的参数。并在DLL文件中找到导出的函数,但我不知道如何调用该函数。我知道您想要什么。我(和其他人)告诉你的是,没有什么灵丹妙药可以解决这个问题。正如先知贾格尔几十年前所宣称的那样,“你不可能总是得到你想要的。”如果没有一个具有适当调用约定和参数描述的函数指针类型,你所能做的最好的事情就是即席的、随意的、老式的反汇编。那是一次颠簸的旅程,祝你好运。如果你有PDB,它将非常有帮助,但是如果你甚至没有标题,我假设PDB是远离雷达的。它通常是在一个h文件中提供的。。。我没有它,想知道DLL文件中导出的函数。