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
来获取符号的地址。它们是否存在任何类似的机制,我可以读取符号表以从内核空间中提取符号的地址?
答案 0 :(得分:2)
根据您的内核版本,您可以使用kallsyms_lookup_name和/或kallsyms_on_each_symbol从内核空间中运行的代码中获取符号的地址。
仅在内核配置中设置CONFIG_KALLSYMS
时才有效。
请注意,我不建议查找要调用的函数的地址,除非没有更好的方法(内核API)来执行您想要的操作。但是,如果没有其他帮助,kallsyms _ *()API可能是要走的路。