接管 指定程序 的 执行页面异常、读写页面异常;然后 调用一下正常的 使其出现在快表;然后恢复到假的pte
------ 根据白皮书中 的error code 过滤出 执行、读写异常类型
相关:
将 402000 这个页面通过修改pte 设置为不存在(直接 给 p位置为 0);这样产生异常 我们接管
然后通过 0x10 判断 是否是执行异常;是的话,就将页面给挂上去。
全程接管 读写、执行异常
读写异常 -- 不能交给系统默认处理;因为系统有虚拟地址的管理,他可能以为还没有映射该页面或者可能被置换到磁盘文件等,再次映射;但是还是不是我们想要的正确的。
所以我们接管。
只接管 402000 页面(具体根据项目//后来我的项目是 412000)
因为其他页面也会产生异常;如果想把该程序的都接收,那么得区分出来分别处理,这里我们只处理一个页面就行;原理类似。
利用 TLB 使得瞬间正常,然后又恢复异常状态;不然只接管了一次。
在被接管得测试程序 一进入 0环 ,就保存 需要接管的 pte ;代码如上;
异常接管后;如果不给页面的话 ;它会一直死循环 页面异常;所以 我们给他假的页面
创建一个假页面:
再把假页面给 内核;这样 我们在内核接管的时候;可以将这个假页面给请求者。
处理之后不能直接退出;得手动平 error code 这个栈位;因为中断系统只平默认的5个。
接管处理:
代码执行异常:
读写异常接管:
同理。。。 只是纠正后用一下;让其快表中;然后恢复到假页面
OD 有时能读出; 要完善的话得考虑OD 和内核通讯得路径
程序退出 有可能蓝屏:
原因: 退出得时候;把页面得pte 应该设置成正常得;前面遇到过重复释放问题。程序有虚拟地址管理;程序结束会回收;找pte 物理页面找不到;会出错。
所以在退出程序得时候将pte 修改回来;还可以将钩子卸掉;
还是得C 了 窗口消息函数 然后 将 pte 得修改回来!★ ---- 这个才是i正确得。。。
不知道怎么回事 搬家博客的图片这里显示不了--- 有兴趣的可查看 我博客园 原版 博文 : https://www.cnblogs.com/leibso-cy/category/1573404.html
