模块代码实现注意这里我只打印pid为1018这个进程的地址空间。
#include "linux/kernel.h"
#include "linux/module.h"
#include "linux/fs.h"
#include "linux/cdev.h"
#include "linux/device.h"
#include "linux/uaccess.h"
#include "linux/errno.h"
#include "linux/mm.h"
#include "linux/slab.h"
int __init mod_init(void)
{
struct task_struct *t;
struct vm_area_struct *vma;
for_each_process(t){
if(1018==t->pid){
printk("t->mm->pgd = 0x%0x \n",*(t->mm->pgd));
printk("t->pid = 0x%0x \n",t->pid);
for(vma = t->mm->mmap;vma!=NULL;vma = vma->vm_next){
printk("vma:start: %08x end: %08x\n",vma->vm_start,vma->vm_end);
}
}
}
return 0;
}
void __exit mod_clean(void)
{
printk(KERN_INFO"exit\n");
}
module_init(mod_init);
module_exit(mod_clean);
MODULE_AUTHOR("klp");
MODULE_DESCRIPTION("ubuntu test");
MODULE_LICENSE("GPL");
MODULE_ALIAS("mod:test");