【发布时间】:2014-11-07 18:01:58
【问题描述】:
我正在尝试向我的 linux 内核添加系统调用,并且在我修改 task_struct(通过添加链表)时使用内置链表将是有利的,并且 task_struct 已经有很多struct list_head 在那里用于其他目的。为了统一起见,我想坚持使用这种数据结构。
我的问题是我真的不完全了解如何使用这种结构。例如,我看到他们有“struct list_head children”。但是,这种结构的实现很简单,一个“*next”和“*last”。
我在网上查看了一些例子,每个例子都说,好吧
struct node{
int data;
struct list_head list;
};
但这是否表明我应该在 task_struct 中包含的数据结构应该是
struct node list;
?
如果我使用 list_head,我不太明白如何初始化结构以包含我希望它包含的数据。
本质上,我想添加一个系统调用的链表,并以 char* 链表(可读格式)的形式将它们附加到进程中。
目前,获取系统调用信息的语义并不重要......我只需要弄清楚如何让链表与task_struct一起工作。
编辑:例如我正在尝试做的事情:
我获得了一个函数执行的系统调用列表。我将它们保存在单独的 char* 变量中。我想在进程 task_struct 中添加一个列表,以跟踪所有这些系统调用。
例如
处理“abc”调用 printf ~> 等同于“WriteScreen” getchar ~> 等同于“ReadKey”
我现在有一段包含这两个字符串的用户态代码。我调用了一个系统调用,我将编写(每个标记一次)以使用这些系统调用“标记”进程。
两次调用后,'abc'的task_struct有一个列表
abc->task_struct->tag_list
此列表包含“WriteScreen”和“ReadKey”。
稍后我将使用这些标签来打印已调用 WriteScreen、ReadKey 等的进程的列表。这些将在我了解如何使用该列表来适当地存储附加到进程的字符串之后进行。
【问题讨论】:
标签: c linux-kernel kernel