我想写一个小工具来调用C共享库中的任意函数。用户应该能够列出所有导出的函数,类似于objdump或nm所做的。我检查了这些实用程序的源代码,但它们令人生畏。在google上找不到足够的信息,如果dl库也有这个功能的话。
(澄清编辑:我不想只调用一个预先知道的函数。我将非常感谢您的答案中的示例片段。)
发布于 2008-09-15 20:28:41
这可能与您正在寻找的内容很接近:http://python.net/crew/theller/ctypes/
发布于 2008-09-15 20:33:38
好的,我会说一点关于Windows的事情。从DLL导出的C函数不包含有关类型、名称或参数数量的信息--我也不相信您可以确定给定函数的调用约定。
为了进行比较,可以看看National Instrument的LabVIEW编程环境。您可以从DLL导入函数,但在使用给定函数之前,必须手动键入参数的类型和名称。如果这个限制是可以的,请编辑您的问题以反映这一点。
我不知道*nix环境下有什么是可能的。
编辑:关于您的澄清。如果你事先不知道函数是什么,你在Windows上就很糟糕了,因为通常你不能确定函数接受的参数的数量和类型。
发布于 2008-09-15 20:34:08
你可以试试ParaDyn的SymtabAPI。它可以让你抓取共享库(或可执行文件)中的所有符号,并查看它们的类型、偏移量等。所有这些都封装在一个相当不错的C++接口中,可以在很多平台上运行。它还提供了对二进制重写的支持,您可以使用二进制重写在运行时执行您正在讨论的操作。
网页在这里:
http://www.paradyn.org/html/symtab2.1-features.html
文档在这里:
http://ftp.cs.wisc.edu/paradyn/releases/release5.2/doc/symtabProgGuide.21.pdf
https://stackoverflow.com/questions/66544
复制相似问题