调研报告
目的:从 内核读取全部进程的 和 。
实验步骤:
, 要读取全部进程的信息,做出猜测,在描述进程信息的 结构体中,存放
着标志其在全部进程中的位置的信息,仔细审阅 结构体。
, 在 中, 行存在变量 !"#$ %&,其注释内容如下:
''
''($)*$+#$ %*,*#$ ##$"
''+#$**%*$)- *!$%#$.!%+#% *$
''#$ %**.*)$%/*)+#% )- *+
'') .$+*
''
0, 注释中说明 !"#$ %& 是 在全部进程中的位置标志;但是读取进
程信息时需要使用 )+#% )- *+(暂时不知道怎样使用)先来确定进程
是否没有正在被删除。
1, 调研 变量的使用,百度中搜索 ,找到如下说明:
常见的%$/222数据类型是结构。内核使用该结构将所有对
象维护在一个双向链表中。一个对象分属多个链表是很常见的, %&成员是一个
向前链接,指向下一个结构,3%&成员则是一个向后链接,指向前一
个结构。通常情况下,这些链表都成环形,也就是说,最后一个%&
指向链表中的第一个结构,而第一个3%&指向最后一个。这样就很容
易 双 向 遍 历 该 链 表 。 如 果 一 个 程 序 要 遍 历 整 个 链 表 , 它 需 要 保 存 第 一 个
结构的地址,以判断是否已遍历了整个链表。如果链表仅包含一个
结构,那么该结构必须引用其自身,也就是说,%&和
3%&都指向其自己。
*,+*#. *
4
*#. *5%&6
*#. *53%&6
7856
需要用到 (9 宏,来获取包含 变量的结构。
:, 调研 (9 的使用,查看内核中部分使用 (9 的
代码,分析出 (9 有三个参数
;<%(9=#8*,8<>==*,5>=?
=@>=#>A?
=B(>=C==*,5>2>AD<>>>
用于取得内存中任何结构体的首地址,要提供的参数是:结构体中某个成员
(<)的地址 #、结构体的类型 *,、提供地址那个成员的名字 <。
E, 调 研 )+#% )- *+ 的 使 用 , 搜 索 %*$ 下 的 全 部 包 含
)+#% )- *+ 的文件;通常函数定义在头文件中出现,查看所有搜索出
来的头文件。找到其定义的位置为 $),但此处没有注释,于是继续查看其 文
评论2