gpt4 book ai didi

linux - 在 Linux 哈希表中插入 PID

转载 作者:太空狗 更新时间:2023-10-29 12:15:09 25 4
gpt4 key购买 nike

目前我正在开发一个 Linux 内核模块,它可以隐藏任何正常进程。隐藏工作正常,但我还没有找到取消隐藏该过程的方法。首先,我从内核中的 task_struct 大列表中删除 struct task_struct:

struct task_struct *p;

//Finding the correct task_struct
for_each_process(p)
if(p->pid == pid){

// Removing the task_struct
struct list_head *next = task->tasks.next;
struct list_head *prev = task->tasks.prev;

next->prev=prev;
prev->next=next;
}

但是 task_struct 仍然是可追踪的,因为它位于包含每个进程的 task_struct 的哈希表中。事实上,大部分 PID-Lookup 都是由这个哈希表执行的。从那里删除任务结构有点棘手:

struct pid *pid; //struct pid of the task_struct
//Deleting for every pid_namespace the pid_chain from the hash_list
for (i = 0; i <= pid->level; i++) {
struct upid *upid = pid->numbers + i;
hlist_del_rcu(&upid->pid_chain);
}

问题是恢复两个结构:将 task_struct 插入回 task_structs 列表很容易,但我还没有找到恢复哈希表中链接的方法。这很困难,因为内核没有公开所需的结构。

在内核中,它是在这一行中完成的:

hlist_add_head_rcu(&upid->pid_chain,&pid_hash[pid_hashfn(upid->nr, upid->ns)]);

pid_hashfnpid_hash 定义如下:

#define pid_hashfn(nr, ns)  hash_long((unsigned long)nr + (unsigned long)ns, pidhash_shift)

static struct hlist_head *pid_hash;

我需要插入的结构是 pid_chain:

struct hlist_node pid_chain;

所以我的问题是,我怎样才能将 pid_chain 插入到正确的哈希列表中?有没有办法获得对哈希列表数组的引用,即使它被声明为静态?

或者,也许是一个不常见的想法:哈希列表是通过

分配的
pid_hash = alloc_large_system_hash("PID", sizeof(*pid_hash), 0, 18,HASH_EARLY | HASH_SMALL, &pidhash_shift, NULL,0, 4096);

所以,如果我能得到哈希列表内存的起始位置,我是否可以扫描相应的内存空间来寻找我的结构指针,然后将周围的内存区域转换为 struct hlist< 类型的结构/strong>?

感谢您的帮助。每个解决方案或想法都值得赞赏:)

最佳答案

sysmap 文件中有一个可用的哈希列表。你可以检查一次。

关于linux - 在 Linux 哈希表中插入 PID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27862132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com