linux驱动读取其他进程内存,开源一个Linux进程内存内核管理模块源码

看完以上的逻辑。大家是不是柳暗花明又一村,心里开朗了许多,他们之间是可以相互转换的。

通过进程pid_t可以拿到pid,通过pid可以拿到task_struct。又可以反过来通过task_struct拿到进程pid。

关闭进程接口

驱动源码是使用put_pid将进程pid*的使用次数减去1。

在Linux内核源码/kernel/pid.c下可以看到:

void put_pid(struct pid *pid){struct pid_namespace *ns;if(!pid)return;ns = pid->numbers[pid->level].ns;if((atomic_read(&pid->count) == 1) ||atomic_dec_and_test(&pid->count)) {kmem_cache_free(ns->pid_cachep, pid);put_pid_ns(ns);}}EXPORT_SYMBOL_GPL(put_pid);

读、写进程内存接口

首先根据pid*用get_pid_task取出task_struct。再用get_task_mm取出mm_struct结构。因为这个结构包含了进程的内存信息。首先检查内存是否可读if (vma->vm_flags & VM_READ)。

如果可读。那么开始计算物理内存地址位置。由于Linux内核默认开启MMU机制,所以只能以页为单位计算物理内存地址。计算物理内存地址的方法有很多。

如pagemap、pgd pud pmd pte、get_user_pages驱动里演示pagemap。

其他方法可自行参考Linux内核源码/fs/proc/task_mmu.c。

知道了物理内存地址后,读、写物理内存地址,Linux内核也有演示: driver

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值