2013-03-13 133 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