访问 other process | 用户 空间

 往任意USER PROCESS的内存读写

kernel/ptrace.c :
/*
 * Access another process' address space.
 * Source/target buffer must be kernel space,
 * Do not walk the page table directly, use get_user_pages
 */

int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, int write)
/
/
get_user_pages
/
/
copy_to_user_page
copy_from_user_page


mm/memory.c  :
int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
                unsigned long start, int len, int write, int force,
                struct page **pages, struct vm_area_struct **vmas)
根据start(即指定的开始地址)找到vma,并把地址和page关联





例子 :

static int proc_pid_environ(struct task_struct *task, char * buffer)
{
        int res = 0;
        struct mm_struct *mm = get_task_mm(task);
        if (mm) {
                unsigned int len = mm->env_end - mm->env_start;
                if (len > PAGE_SIZE)
                        len = PAGE_SIZE;
                res = access_process_vm(task, mm->env_start, buffer, len, 0);

//mm->env_start     是int  为env开始地址, 把指定process的env内容读到buffer里
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值