3

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

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

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

谢谢你。

4

1 回答 1

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 在内核空间,用户态程序不能访问这个符号。您将不得不编写一个内核模块。在其中,您可以打印出存储在 sys_call_table[] 向量数组中的地址。

于 2012-10-22T17:02:52.340 回答