首页 / 知识
关于符号:以跨平台方式查找c二进制函数名称的最简单方法是什么?
2023-04-15 13:57:00

what is the easiest way to lookup function names of a c binary in a cross-platform manner?我想编写一个小的实用程序,以从C共享库中调用任意函数。 用户应该能够列出所有导出的功能,类似于objdump或nm的功能。 我检查了这些实用程序的来源,但它们令人生畏。 如果dl库也具有此功能,则在Google上找不到足够的信息。 (说明编辑:我不想只调用一个事先已知的函数。我将感谢您回答中的示例片段。) 好吧,我会讲一些有关Windows的知识。从DLL导出的C函数不包含有关类型,名称或参数数量的信息-也不相信您可以确定给定函数的调用约定。 为了进行比较,请看一下National Instruments的LabVIEW编程环境。您可以从DLL导入函数,但是在使用给定函数之前,必须手动键入参数的类型和名称。如果此限制可以,请编辑您的问题以反映该问题。 我不知道* nix环境有什么可能。 编辑:关于您的澄清。如果您不知道函数会提前做什么,那么您在Windows上就很困惑,因为通常您将无法确定函数采用的参数数量和类型。
这可能与您要查找的内容接近: 只有明智的解决方案(无需重新发明轮子)似乎使用libbfd。缺点是它的文档稀缺,就我的目的而言,它有点肿。 一种标准的API是dlopen / dlsym API。 AFAIK由Linux和Mac OS X的标准C库(libSystem)上的GNU libc实现,并且可能由MinGW或其他兼容软件包在Windows上实现。 您可以尝试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 我在Perl中写过类似的东西。在Win32上,它运行dumpbin / exports,在POSIX上,它运行nm -gP。然后,由于是Perl,因此使用正则表达式解释结果:对于Win32(stdcall函数),使用/ _( S +)@ d + /;对于POSIX,使用/ ^( S +)T /。 nm和objdump的源代码可用。如果要从规范开始,那么ELF是您要研究的内容。 /艾伦
ek!您已经涉及了非常依赖平台的编程主题之一。在Windows上,您具有DLL,在Linux上,您具有 |
最新内容
相关内容
linux查找设备号命令?
linux查找设备号命令?,设备,系统,信息,名称,分区,网上,情况,软件,技术,工具,在linux中如何知道自己的IDE设备的代号呢?例如,第一个 IDE 硬盘的linux查找网卡的命令?
linux查找网卡的命令?,地址,系统,网络,实时,工具,信息,技术指标,电脑,状态,网卡,Linux怎么查询网卡配置1、首先在电脑上打开Linux系统,然后进入linux命令和库函数?
linux命令和库函数?,系统,标准,管理,地址,服务,库函数,环境,平台,第一,状态,1.linux系统调用和库函数调用的区别系统调用和库函数在执行的效果字符串查找命令linux?
字符串查找命令linux?,系统,字符串,工具,信息,文件,命令,字符,选项,文本,范本,如何在Linux下查找文件内容包含某个特定字符串的文件在linux中glinux查找帮助的命令?
linux查找帮助的命令?,系统,命令,信息,软件,名称,文件,指令,进程,表示,参数,linux搜索文件名命令(使用find命令在Linux上查找文件和目录)findlinux查找帮助的命令?
linux查找帮助的命令?,系统,命令,信息,软件,名称,文件,指令,进程,表示,参数,linux搜索文件名命令(使用find命令在Linux上查找文件和目录)findlinux查找重复项命令?
linux查找重复项命令?,工具,系统,电脑,百度,文件,命令,情况,名字,标准,通用,linux查找目录下是否有相同文件可以使用ls命令,ls跟dos下的dir命令linux命令查找进程?
linux命令查找进程?,系统,名称,软件,状态,进程,电脑,信息,命令,材料,数据,怎么查看linux进程名称1、linux 下查看进程可以使用的命令:ps命令查linux查看函数命令?
linux查看函数命令?,系统,信息,名称,命令,位置,情况,公用,名字,标准,资料,linux下有没有像查看函数那样直接使用man命令来查看结构体的命令?这linux命令查找日志?
linux命令查找日志?,地址,信息,系统,名称,对比,状态,实时,命令,日志,等级,linux后台自动执行命令nohup与日志查看将一个在后台暂停的命令,变成linux查找php命令?
linux查找php命令?,服务,信息,系统,名称,工具,软件,网络,代码,工作,网站,Linux该怎么查看系统的PHP进程linux服务器查看php信息,用到的工具:雅黑linux命令查找内容?
linux命令查找内容?,命令,文件,网络,名称,信息,工作,标准,系统,管理,位置,linux下按文件名和文件内容查找文件1、按名称查找文件你可以借助正