1. 实验目的:
掌握从中获取 linux 系统信息的方法,了解可以利用 proc 文件系统进行用户态与内核态
的交互。尝试修改内核,添加一项功能,并编译、使用自己修改的内核,验证添加的功能。
2. 实验目标:
通过 proc 文件系统获取 linux 系统信息,编写程序获取 cpu 使用率,内存使用情况,网
络负载情况,进程信息等并显示;修改 sys 内文件,调整内核参数;修改内核中的 proc 源
码,通过系统调用实现进程的隐藏。
3. 实验原理:
3.1 /proc 信息解读
proc 文件系统主要包含三大类内容,进程相关部分,系统信息部分,以及系统子系统
部分。
进程文件都是以数字为名的子目录,这个数字就是相关进程的进程 ID,主要包含
cmdline(执行进程的命令行参数),stat(进程状态)等
内核系统信息处于proc根目录,大部分是常规只读文件可以直接查看,主要包含cpuinfo,
meminfo 等。
各子系统也是以非数字命名的目录下,甚至部分是可写进行调整系统内核参数,用户态
和内核态进行交互,主要包含 net(只读),sys(可写)等。
3.2 /proc 修改与应用
显示 PID 的 proc_root_readdir 函数中先生成非进程目录,再通过 proc_pid_readdir 函
数生成进程 pid 目录,这也是本次实验中需要主要关注的。对进程隐藏,实际上就是该进程
不在 proc 文件系统体现,直接查看 proc 文件目录无法查找到该进程,这样 ps 命令就无法
显示出该进程。在 proc_pid_readdir 函数中的 for 循环体就是往/proc 添加<pid>目录,我们
在填充目录之前判断该 task_struct 中的 hide 变量,只有 hide 变量为 0 时才把该进程填充到
/proc 中,这样就可以达到隐藏进程的目的。其中 hide 变量可以通过系统调用进行修改。
评论0