1

Я пытаюсь написать LKM, которым необходимо прочитать адрес области vm из процесса. Я использую pid_task(), чтобы получить указатель на task_struct, но я получаю компиляцию ошибки, когда я пытаюсь использовать его, чтобы получить начальный адрес vmarea.Доступ к областям vm процесса

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> 

Другой:

После компиляции успешно, вы должны судить указатели является NULL или нет.

+0

Спасибо большое. Теперь работает. –

 Смежные вопросы

  • Нет связанных вопросов^_^