在DLL中获取导出函数的签名 [英] Get signatures of exported functions in a DLL

查看:431
本文介绍了在DLL中获取导出函数的签名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否可以从DLL获取导出的(C style?)函数的签名(参数计数/类型,返回类型)?我可以使用 DLL导出查看器查看功能名称,地址,序数等列表但我无法查看签名。我只有dll文件,没有.h或.def文件。

Is it possible to get an exported (C style?) function's signature (parameter count/types, return type) from a DLL? I can view the list of function names, addresses, ordinals, etc. with DLL Export Viewer but I can't view the signatures. I only have the dll file and don't have neither .h nor .def files.

更新:使用一个名为 API监视器,我可以附加到使用上述dll并查看函数调用的进程。这可以让我看到参数的数量,返回值和它们的整数值(指针?),但这并没有什么帮助。我可能应该找到一种方法来确定这些指针在调用时间中指向哪些类型的结构。

UPDATE: Using a tool called API Monitor, I can attach to a process that uses the mentioned dll and see the calls to the functions. This lets me to see the number of parameters, return value and their integer values (pointers?) but this doesn't help a lot. I probably should find a way to determine what type of structures those pointers are pointing to at the call time.

推荐答案

DLL不存储他们导出的功能的签名。其他答案都提到C ++,当C ++函数作为C ++ 导出时,这个名字确实会被破坏。使用正确的编译器进行纠错,您将得到签名。但大多数DLL不使用C ++名称导出C ++函数。相反,DLL选择导出的函数使用C风格的名称导出,因此即使DLL是用C ++编写的,导出的函数仍然没有任何签名信息。

DLLs do not store the signatures of the functions they export. Other answers have mentioned C++, and when a C++ function is exported as C++, then the name will indeed be mangled. Demangle it with the right compiler's mangling scheme, and you'll have the signature. But most DLLs do not export C++ functions using their C++ names. Instead, the functions a DLL chooses to export are exported using C-style names, so even if the DLL was written in C++, the exported functions still won't have any signature information.

你没有标题?大多数供应商在其SDK中都包含这种东西。如果你没有收到,那么向供应商投诉。如果你不应该得到一个,那么也许你会以错误的方式去做你的任务;你确定你应该直接使用那个DLL吗?

You don't have the header? Most vendors include that sort of thing in their SDKs. If you didn't get one, then complain to the vendor. If you weren't supposed to get one, then maybe you're going about your task the wrong way; are you sure you're supposed to use that DLL directly?

如果你没有头文件,那么你也可以问自己是否真的被允许,合法地,在你的程序中使用DLL。如果它只是您在系统中找到的任意DLL,那么即使您可以为其编写代码,您可能不会在运送程序时重新分配它。

If you do not have the header file, then you might also ask yourself whether you're really allowed, legally, to use the DLL in your program anyway. If it's just an arbitrary DLL you found on your system, then even if you can write code for it, you're probably not allowed to redistribute it when you ship your program.

这篇关于在DLL中获取导出函数的签名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆