云幻无心sky 发表于 2015-12-18 17:08

请问一下,怎么样修改一个进程的页表项,使该进程访问另一个进程的内存。

有人告诉修改页表项的前20个bit,即修改MFN(机器页框号)可以达到目的。这可行吗?可行的话,应该怎么修改?

Buddy_Zhang1 发表于 2015-12-21 13:42

我这里有个参考建议,因为一个进程访问另外一个进行需要相应的权限,但你可以通过下面提过的建议进行修改:

#include <asm/current.h>

void change_task(void)
{
   struct mm_struct *mm = current->mmap;

   mm->pgd = /* 这里写另外一个进程的 pgd 页表就可以 */;

}

云幻无心sky 发表于 2015-12-23 20:40

回复 2# Buddy_Zhang1
current->mmap指向的是这个程序所在进程的mm_struct结构体吗?


   

Buddy_Zhang1 发表于 2015-12-23 21:59

回复 3# 云幻无心sky



不好意思写完之后没 check,下面为更正代码:

#include <linux/sched.h>
#include <asm/current.h>

struct task_struct *task;
struct mm_struct *mm;

task = current;
mm = task->mm;

mm->pgd = /* 另外一个进程的 pgd */;


   
页: [1]
查看完整版本: 请问一下,怎么样修改一个进程的页表项,使该进程访问另一个进程的内存。