从内核的符号表中获取符号的地址

时间:2012-12-02 10:40:51

标签: linux-kernel netfilter

arif@khost:~/src/linux$ global -x ip_rcv_finish
ip_rcv_finish     319 net/ipv4/ip_input.c static int ip_rcv_finish(struct sk_buff *skb)

现在如果我想使用这个函数,我需要初始化一个指向这个函数的指针。

为了能够做到这一点,我需要函数的地址。

我从用户空间看到我可以阅读/proc/kallsyms来获取符号的地址。它们是否存在任何类似的机制,我可以读取符号表以从内核空间中提取符号的地址?

1 个答案:

答案 0 :(得分:2)

根据您的内核版本,您可以使用kallsyms_lookup_name和/或kallsyms_on_each_symbol从内核空间中运行的代码中获取符号的地址。

仅在内核配置中设置CONFIG_KALLSYMS时才有效。

请注意,我不建议查找要调用的函数的地址,除非没有更好的方法(内核API)来执行您想要的操作。但是,如果没有其他帮助,kallsyms _ *()API可能是要走的路。