mil*_*het 14 c++ dll signature method-signature dumpbin
我想从一个DLL调用一个方法,但我没有源文件头文件.我试图使用dumpbin/exports来查看方法的名称,但我可以找到方法签名?
有没有办法调用这种方法?
谢谢,
zda*_*dan 10
如果函数是C++函数,则可以从损坏的名称派生函数签名.Dependency Walker是一个可以为您完成此任务的工具.但是,如果DLL是使用C链接创建的(Dependency Walker会告诉你),那么你就不走运了.
C++语言对dll一无所知.
这是在Windows上吗?一种方法是:
depends.exe随附(Visual Studio)打开dllLoadLibrary()得到加载这个DLL(小心的路径)GetProcAddress()获取指向要调用的函数的指针FreeLibrary()以释放手柄BTW:此方法通常也称为运行时动态链接,而不是编译时动态链接,您可以使用关联
lib文件编译源.
*nixes有一些类似的机制dlopen,但之后我的记忆开始失败.有些东西叫objdump或nm应该让你开始检查功能.
小智 5
如您所见,DLL中的导出列表仅存储名称,而不存储签名.如果您的DLL导出C函数,您可能必须对这些函数进行反汇编和反向工程以确定方法签名.但是,C++会对导出名称中的方法签名进行编码.将方法名称和签名组合在一起的过程称为"名称重整". 此Stackoverflow问题有一个参考,用于从损坏的导出名称确定方法签名.
尝试免费的"Dependency Walker"(又名"依赖")实用程序."Undecorate C++ Functions"选项应确定C++方法的签名.
小智 4
通过分析反汇编的开头可以找出 C 函数签名。函数参数将位于堆栈上,函数将执行一些“弹出”操作以相反的顺序读取它们。您将找不到参数名称,但您应该能够找到它们的数量和类型。返回值可能会变得更加困难 - 它可能是通过“eax”寄存器或通过作为最后一个伪参数(位于堆栈顶部)传递给函数的特殊指针。