GET_KERNEL_SYMS - Linux手册页

时间:2019-08-20 17:58:46  来源:igfitidea点击:

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/