2013-03-13 129 views
1

我正在尝试编写一个必须从进程读取虚拟机区域地址的LKM。我正在使用pid_task()获取指向task_struct的指针,但是当我尝试使用它获取vmarea的起始地址时,出现编译错误。访问进程的虚拟机区域

struct task_struct *ts; 
ts = pid_task(find_vpid(pid_t)pid,PIDTYPE_PID); 
printk(KERN_INFO "%lu",ts->mm->mmap->start); 

,我得到的错误“错误:提领指向不完全类型”

我是一个Linux菜鸟和LKM完全小白。

我很感激任何帮助。

谢谢大家

回答

0

我有一个测试我的内核源代码树(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> 

另:成功

编译之后,你要判断指针为空或不是。

+0

非常感谢你。现在正在工作。 – 2013-03-13 06:33:29