用虚拟内存检测页表信息

记录一下,利用虚拟内存检测页表信息的方法

  1. 获得mm_struct 内存描述符
    方法:1.利用调用内核函数,根据pid号可得
    2.用全局变量current直接得到当前进程的信息 current->mm就是当前进程的内存描述符。上面两者方法都需要在内核中运行,也就是说需要用insmod 一个驱动的方法在内核中运行这些代码。所以放在init里面的话,current现在的进程就是insmod进程
    2.根据mm_struct,得到顶层页表项pgd,然后根据pgd可以得到底层页表pte
    3.根据pte,调用pte_wtire等函数可以得到这个页表的权限等信息

参考博客:https://blog.csdn.net/sdulibh/article/details/51892202

但还有个问题:
cat /proc/modules可以查看可加载内核模块的信息。
在这里插入图片描述
可以看到这个驱动只有1487字节,没有满足4k,但是里面包含了这个驱动的所有段,包括:init段,Text段,data段,rodata段等,那么明显data段和rodata段得分别在不同的页中,因为一个页只有一个权限,要么ro,要么rw。
然后我用上述方法测试了一下那个页表,显示是可写的。不对呀,raodata和text段应该是不可写才对

用同样的方法测试用户app,发现是满足rodata段和data段分别在两个页,中间应该有很大的空隙,不过确实一个页一个权限,没问题。

现在还是驱动的地方没搞明白。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值