GET_KERNEL_SYMS - Linux手册页
Linux程序员手册 第2部分
更新日期: 2017-09-15
名称
get_kernel_syms-检索导出的内核和模块符号
语法
#include <linux/module.h> int get_kernel_syms(struct kernel_sym *table);
注意:glibc标头中未提供此系统调用的声明;请参阅注释。
说明
注意:此系统调用仅在Linux 2.6之前的内核中存在。
如果table为NULL,则get_kernel_syms()返回可用于查询的符号数。否则,它将填写一个结构表:
struct kernel_sym { unsigned long value; char name[60]; };
这些符号散布在#module-name形式的魔术符号中,内核名称为空。与该格式的符号关联的值是模块加载的地址。
从每个模块导出的符号都跟随其魔术模块标签,并且以相反的顺序返回模块。
返回值
成功后,返回复制到表中的符号数。错误时,返回-1并正确设置errno。
错误说明
只有一种可能的错误返回:
- ENOSYS
- 此版本的内核不支持get_kernel_syms()。
版本
该系统调用仅在Linux 2.4内核之前存在;否则,仅在Linux上可用。在Linux 2.6中已将其删除。
遵循规范
get_kernel_syms()是特定于Linux的。
备注
glibc不支持此过时的系统调用。 glibc标头中未提供任何声明,但是经过一段古怪的历史,2.23之前的glibc版本确实为此系统调用导出了ABI。因此,为了使用此系统调用,在代码中手动声明接口就足够了。或者,您可以使用syscall(2)调用系统调用。
BUGS
无法指示为表分配的缓冲区的大小。如果自程序查询符号表大小以来已将符号添加到内核,则内存将被破坏。
导出的符号名称的长度限制为59个字符。
由于这些限制,不建议使用query_module(2)来赞成使用此系统调用(如今,不赞成使用其手册页上描述的其他接口来支持其本身)。
另外参见
create_module(2),delete_module(2),init_module(2),query_module(2)
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。