我正在编写一个挂钩INET_PRE_ROUTING
的Netfilter钩子函数。在这个钩子函数中,我想访问ipgre_tunnel_locate()
中定义的ip_gre.c
作为静态。在查看/proc/kallsyms
时,ipgre_tunnel_locate()
列出如下:
ffffffffa03acb30 t ipgre_tunnel_locate [ip_gre]
上面的第二列暗示该函数是本地的和未导出的。我可以使用EXPORT_SYMBOL(ipgre_tunnel_locate)
中的ip_gre.c so
导出此函数,我可以在我的NetFilter prerouting挂钩函数中使用它吗? `
是否有任何强有力的理由说明默认情况下该函数未在内核中导出?
答案 0 :(得分:0)
您可以导出该功能,但您的模块只能使用已修补的内核运行。
我认为,它不导出的原因很简单:这不是外部接口的一部分。例如,自3.10
版本的内核以来,没有ipgre_tunnel_locate()
。
我应该再说一次,仅仅因为你需要它而导出符号并不是一种可靠的技术。