如何获取本机系统调用地址

时间:2012-06-18 09:42:06

标签: linux kernel system-calls

在Linux上我试图确定哪些系统调用被挂钩(系统调用挂钩)以及哪些系统调用没有挂钩。我需要回答以下问题:

  1. 如何从用户空间(具有root访问权限)读取挂钩系统调用的地址?

  2. 如何获取原始系统调用的地址?

  3. 谢谢。

1 个答案:

答案 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 []向量数组中的地址。