Memory 访问进程的vm区域

Memory 访问进程的vm区域,memory,module,kernel,memory-address,virtual-address-space,Memory,Module,Kernel,Memory Address,Virtual Address Space,我正在尝试编写一个LKM,它必须从进程中读取vm区域地址。我使用pid_task()获取指向task_结构的指针,但是当我尝试使用它获取vmarea的开始地址时,我发现编译错误 struct task_struct *ts; ts = pid_task(find_vpid(pid_t)pid,PIDTYPE_PID); printk(KERN_INFO "%lu",ts->mm->mmap->start); 我得到一个错误“error:dereferencepointtoco

我正在尝试编写一个LKM,它必须从进程中读取vm区域地址。我使用pid_task()获取指向task_结构的指针,但是当我尝试使用它获取vmarea的开始地址时,我发现编译错误

struct task_struct *ts;
ts = pid_task(find_vpid(pid_t)pid,PIDTYPE_PID);
printk(KERN_INFO "%lu",ts->mm->mmap->start);
我得到一个错误“error:dereferencepointtocomplete type”

我是一个linux noob,也是LKM中一个完全的noob

我非常感谢你的帮助


谢谢大家

我对内核源代码树(2.6.35)进行了测试,代码如下,编译正常:

struct task_struct *ts;
pid_t pid;

ts = pid_task(find_vpid(pid),PIDTYPE_PID);
printk(KERN_INFO "%lu",ts->mm->mmap->vm_start);
您能在内核源代码树中尝试上面的代码吗?我认为您可能需要包括所有需要的头文件,例如:

#include <asm/uaccess.h>
#include <linux/errno.h>
#include <linux/time.h>
#include <linux/proc_fs.h>
#include <linux/stat.h>
#include <linux/init.h>
#include <linux/capability.h>
#include <linux/file.h>
#include <linux/fdtable.h>
#include <linux/string.h>
#include <linux/namei.h>
#include <linux/mnt_namespace.h>
#include <linux/mm.h>
#include <linux/swap.h>
#include <linux/rcupdate.h>
#include <linux/kallsyms.h>
#include <linux/stacktrace.h>
#include <linux/resource.h>
#include <linux/module.h>
#include <linux/mount.h>
#include <linux/security.h>
#include <linux/ptrace.h>
#include <linux/tracehook.h>
#include <linux/cgroup.h>
#include <linux/cpuset.h>
#include <linux/audit.h>
#include <linux/poll.h>
#include <linux/nsproxy.h>
#include <linux/oom.h>
#include <linux/elf.h>
#include <linux/pid_namespace.h>
#include <linux/fs_struct.h>
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
另一个:

编译成功后,应该判断指针是否为NULL