写自己的内核模块——获取一个进程的物理地址
来源:互联网 发布:高通kryo 知乎 编辑:程序博客网 时间:2024/05/17 23:22
首先,根据一个虚拟地址是可以得到物理地址的,这个内核模块是可以做到的。
大概就以下这几步:
1、得到当前进程的task_struct结构体(类似于current宏的实现)
2、得到进程的mm_struct结构体
3、搞一个虚拟地址(一个变量的地址或者一个函数的地址)
4、先得到pgd,然后根据pgd找到pud,根据pud找到pte,当当当当,你得到了该变量(或者函数)所在页面的页表表项地址,意味着你得到了偏移量。
5、现在要做的就是根据页表的到页面的物理地址,和偏移量相加。done,物理地址得到。
实现代码如下:
int i = 1; //得到了一个虚拟地址unsigned long addr = (unsigned long)(&i);unsigned long real_addr;unsigned long *pte_addr;//得到个当前进程的task_struct结构体struct task_struct *curr= get_current(); //得到当前进程的mm_struct结构体struct mm_struct *mm = curr->mm;struct pgd_t *pgd = pgd_offset(mm,addr);if(!pgd){ printk("pgd error!\n"); return 0;}struct pud_t *pud = pud_offset(pgd,addr);struct pmd_t *pmd = pmd_offset(pud,addr);if(!pmd){ printk("pmd error!\n"); return 0; } //得到页表项地址 unsigned long pte = pte_offset(pmd,addr); if(!pte){ printk("pte error\n"); return 0;}//得到页内偏移量(线性地址的后12位)real_addr = addr&0x00000fff; pte_addr = pte;//页表表项内容后20位填充的是页框起始地址real_addr += (*pte_addr)&0x000fffff; printk("\t虚拟地址为%ld\n",addr);printk("\t物理地址为%ld\n",real_addr);return 0;
在运行这个代码的时候,要导出一些内核函数。
0 0
- 写自己的内核模块——获取一个进程的物理地址
- 内核模块编程——打印一个进程的vm_area_struct
- 自己写freebsd的内核防火墙模块
- 如何把一个自己写的外部驱动模块编译添加到内核中 来自网络
- 编译一个自己的内核模块,并加载进内核
- 内核_如何加载自己写的模块[ZT]
- 内核代号101 — 动手写自己的内核
- 内核代号101 — 动手写自己的内核
- 内核代号101 — 动手写自己的内核
- 内核代号101 — 动手写自己的内核
- ARM LINUX内核如何确定自己的实际物理地址
- 给xt800(手机)写一个hello world的内核模块
- 自己写的一个进程池的简单测试范例
- 如何写一个给自己的框架写一个优雅的Java Config模块(一)
- 如何写一个给自己的框架写一个优雅的Java Config模块(二)
- 如何写一个给自己的框架写一个优雅的Java Config模块(三)
- 如何写一个给自己的框架写一个优雅的Java Config模块(四)
- 如何写一个给自己的框架写一个优雅的Java Config模块
- Docker源码分析(一):Docker架构
- Action class [userAction] not found - action - file:/D:/tomcat-6.0.29/webapps/SS
- grep查找时,去掉grep本身那一条
- 视频m3u8文件转ts视频,vb.net源码(各小段视频下载合并)
- EasyUI学习笔记_3
- 写自己的内核模块——获取一个进程的物理地址
- what happened when we don't set the namespace attrribute in Struts 2?
- 当推荐算法开源包多如牛毛,为什么我们还要专门的推荐算法工程师
- go 开发环境
- WPF 基础到企业应用系列5——WPF千年轮回 续前缘
- Caused by: java.lang.ClassNotFoundException: org.hibernate.cache.CacheProvider
- 反射帮助类更新2015/11/07
- OC内存管理分类
- hdu1671 Phone List (字典树)