Linux kernel 从/dev/kmem读取init_stack task_struct

Linux kernel 从/dev/kmem读取init_stack task_struct,linux-kernel,Linux Kernel,我是x86 64位Linux内核的root用户 我的目标是理解任务结构 我在/proc/kallsyms中查看了init_任务地址 我发现:0xFFFF83613740 我想用这个c代码从/dev/kmem读取这个任务结构条目。(此代码以root用户身份运行): #包括 #包括 int main() { 文件*fd=fopen(“/dev/kmem”,“r”); fseek(fd,SEEK_SET,0xffffffff83613740); 无符号字符缓冲区[1]; fread(缓冲器,1,1,f

我是x86 64位Linux内核的root用户

我的目标是理解任务结构

我在/proc/kallsyms中查看了init_任务地址

我发现:0xFFFF83613740

我想用这个c代码从/dev/kmem读取这个任务结构条目。(此代码以root用户身份运行):

#包括
#包括
int main()
{
文件*fd=fopen(“/dev/kmem”,“r”);
fseek(fd,SEEK_SET,0xffffffff83613740);
无符号字符缓冲区[1];
fread(缓冲器,1,1,fd);
fclose(fd);
返回0;
}
正如您所看到的,我只读取了一个字节,而不是整个task_struct对象。 当以root用户身份运行此代码时,我遇到一个segfault

你能告诉我怎么了吗

/proc/kallsyms init_task没有提供init的task_结构的内核地址吗? 如果是这样,我怎样才能得到地址

谢谢

#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE* fd = fopen("/dev/kmem","r");
    fseek(fd,SEEK_SET, 0xffffffff83613740);
    unsigned char buffer[1];
    fread(buffer,1,1,fd);
    fclose(fd);
    return 0;
}