如何获取调用系统功能的程序的进程ID

问题描述 投票:0回答:1

我正在编写一个小型内核驱动程序,该驱动程序可以充当蜜罐并监视对系统上特定文件执行的操作。首先,请开始讲I used the code in this repository,为了简单起见,我对其进行了一些修改,使其仅适用于一个系统调用:sys_open

现在,我需要收集有关进程和运行该系统调用的用户的信息,以打开该文件,但是我找不到任何方法。我以为可以使用文件描述符来确定哪个进程具有文件描述符,但是在与我的大学教授讨论之后,他告诉我文件描述符不是系统范围内唯一的,而只是整个系统范围内的。

总结一下,有没有一种方法可以给我隐式调用sys_open的进程的PID?

c linux-kernel hook ftrace
1个回答
0
投票

[以内核代码运行时,有关当前正在运行的进程的信息存储在current全局变量中(确切地说,它实际上是特定于平台的宏而不是全局变量)。如果您在syscall处理程序(或一个钩子)中,则struct task_struct将是启动syscall的过程,您只需检查struct task_struct以获取其PID。

要获取当前进程的UID,GID,EUID,EGID(等等),您可以使用current中定义的一组宏。从current->pid

[有一些方便包装器,用于检索任务凭证的特定方面(在每种情况下,都只返回该值):

linux/cred.h
© www.soinside.com 2019 - 2024. All rights reserved.