我正在编写一个在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中导出这个函数吗?
默认情况下,函数没有在内核中导出,有什么强烈的原因吗?
发布于 2014-08-20 16:06:00
您可以导出该函数,但是您的模块将只能在修补好的内核上运行。
我认为,它没有导出的原因很简单:这不是外部接口的一部分。例如,由于内核的3.10版本,没有ipgre_tunnel_locate()。
我应该再说一遍,仅仅因为你需要符号而导出符号并不是一种可靠的技术。
https://stackoverflow.com/questions/25376369
复制相似问题