我找不到系统调用表的内核地址。 我通常通过grepping sys_call来做到这一点 但在一个系统中,我可以看到地址 但在其他情况下,它并没有显示该条目。
root@ubuntu:~# cat /proc/kallsyms | grep sys_call
ffffffff8122aa90 t proc_sys_call_handler
ffffffff81726432 t ret_from_sys_call
ffffffff81726644 T int_ret_from_sys_call
ffffffff81728146 t sysexit_from_sys_call
ffffffff81728386 t sysretl_from_sys_call
ffffffff8172858e t ia32_ret_from_sys_call
**ffffffff81801400 R sys_call_table**
ffffffff81809cc0 R ia32_sys_call_table
root@ubuntu:~#
没有系统调用表...为什么不显示R类型符号??
/ $ cat /proc/kallsyms | grep sys_call
ffffffff8119c230 t proc_sys_call_handler
ffffffff817a1a57 t ret_from_sys_call
ffffffff817a1c50 T int_ret_from_sys_call
ffffffff817a2cb8 t sysexit_from_sys_call
ffffffff817a2ed8 t sysretl_from_sys_call
ffffffff817a30be t ia32_ret_from_sys_call
/ $
/ $
在什么情况下会发生这种情况? 一些建议会很好 谢谢
答案 0 :(得分:1)
您应该在两种情况下查看内核的版本,请查看uname -r
。
最初是在早期版本的内核2.4.x中导出的。这最初有“EXPORT_SYMBOL(sys_call_table);”来自linux / kernel / ksyms.c的行
sys_call_table
被正确导出,后来变为静态并移除了IMU。
现在已经在一些最新的内核中再次导出(在某些版本中> 3.3.x)。我建议深入了解LXR以查看详细信息。
答案 1 :(得分:0)
您需要检查当前内核是否使用选项CONFIG_KALLSYMS_ALL = y进行编译