在Linux上我试图确定哪些系统调用被挂钩(系统调用挂钩)以及哪些系统调用没有挂钩。我需要回答以下问题:
如何从用户空间(具有root访问权限)读取挂钩系统调用的地址?
如何获取原始系统调用的地址?
谢谢。
答案 0 :(得分:0)
系统调用表存储在sys_call_table []中 下面是在linux kenrel中输入系统调用的汇编代码,entry.S:
sysenter_do_call:
425 cmpl $(NR_syscalls), %eax
426 jae syscall_badsys
427 call *sys_call_table(,%eax,4)
428 movl %eax,PT_EAX(%esp)
429 LOCKDEP_SYS_EXIT
430 DISABLE_INTERRUPTS(CLBR_ANY)
431 TRACE_IRQS_OFF
432 movl TI_flags(%ebp), %ecx
433 testl $_TIF_ALLWORK_MASK, %ecx
434 jne sysexit_audit
由于sys_call_table位于内核空间,userland程序无法访问此符号。您必须编写内核模块。在其中,您可以打印出存储在sys_call_table []向量数组中的地址。