首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问进程的vm区域

访问进程的vm区域
EN

Stack Overflow用户
提问于 2013-03-13 10:51:21
回答 1查看 351关注 0票数 1

我正在尝试编写一个LKM,它必须从进程中读取vm区域地址。我使用pid_task()来获取指向task_struct的指针,但是当我尝试使用它来获取vmarea的起始地址时,我得到了编译错误。

代码语言:javascript
复制
struct task_struct *ts;
ts = pid_task(find_vpid(pid_t)pid,PIDTYPE_PID);
printk(KERN_INFO "%lu",ts->mm->mmap->start);

并且我得到了错误“错误:取消对不完整类型的指针引用”

我是linux新手,也是LKM的新手。

如果能帮上忙我会很感激的。

谢谢大家

EN

回答 1

Stack Overflow用户

发布于 2013-03-13 12:32:31

我用以下代码在我的内核源码树(2.6.35)上进行了测试,编译正常:

代码语言:javascript
复制
struct task_struct *ts;
pid_t pid;

ts = pid_task(find_vpid(pid),PIDTYPE_PID);
printk(KERN_INFO "%lu",ts->mm->mmap->vm_start);

你可以尝试在你的内核源代码树中使用上面的代码吗?我认为您可能需要包含所有需要的头文件,例如:

代码语言:javascript
复制
#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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15376175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档