我想从一个DLL调用一个方法,但我没有源文件头文件.我试图使用dumpbin/exports来查看方法的名称,但我可以找到方法签名?
有没有办法调用这种方法?
谢谢,
如果函数是C++函数,则可以从损坏的名称派生函数签名.Dependency Walker是一个可以为您完成此任务的工具.但是,如果DLL是使用C链接创建的(Dependency Walker会告诉你),那么你就不走运了.
C++语言对dll一无所知.
这是在Windows上吗?一种方法是:
depends.exe
随附(Visual Studio)打开dll
验证要调用的函数的签名
使用LoadLibrary()
得到加载这个DLL(小心的路径)
用于GetProcAddress()
获取指向要调用的函数的指针
使用此指针到函数来使用有效参数进行调用
使用FreeLibrary()
以释放手柄
BTW:此方法通常也称为运行时动态链接,而不是编译时动态链接,您可以使用关联
lib
文件编译源.
*nixes有一些类似的机制dlopen
,但之后我的记忆开始失败.有些东西叫objdump
或nm
应该让你开始检查功能.
如您所见,DLL中的导出列表仅存储名称,而不存储签名.如果您的DLL导出C函数,您可能必须对这些函数进行反汇编和反向工程以确定方法签名.但是,C++会对导出名称中的方法签名进行编码.将方法名称和签名组合在一起的过程称为"名称重整". 此Stackoverflow问题有一个参考,用于从损坏的导出名称确定方法签名.
尝试免费的"Dependency Walker"(又名"依赖")实用程序."Undecorate C++ Functions"选项应确定C++方法的签名.