首页
社区
课程
招聘
[求助]怎么取得本sys的内存范围?
发表于: 2009-6-1 14:21 5092

[求助]怎么取得本sys的内存范围?

2009-6-1 14:21
5092
上次在各位朋友的帮助下,已经用IDT Hook的方法,修改了0xE的中断入口,以避免缺页蓝屏。具体实现方法是如果保存非法访问地址的CR2寄存器地址不小于0x80000000,那么将其修改为0。
但是测试中发现开着SOFTICE的情况下,有的时候确实会出现不小于0x80000000的情况,而且如果修改为0就会蓝屏。
经过测试,发现发生中断时,esp会减小0x10,而且[esp+4]保存的是出错地址,所以我想通过判断出异常时当时的eip是否在本sys地址范围内之类的方法,来决定是否将CR2置0。

那么这样的方法可行么?中断时自动压入栈的结构到底是哪个?SOFTICE之类的,又是怎么区分这个中断是否是本sys造成的?

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 581
活跃值: (149)
能力值: ( LV12,RANK:600 )
在线值:
发帖
回帖
粉丝
2
又是怎么区分这个中断是否是本sys造成的?
因为是缺页..属于异常....发生异常时CPU会把引起异常的指令的地址EIP压栈..你可以根据这个EIP判断是否在你的驱动范围内....你可以从你的_DRIVER_OBJECT中获取相关信息...
2009-6-1 14:53
0
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
对啊,现在我就是不知道自己的sys到底占了多大内存啊,DRIVER_OBJECT里面有哪个字段指明自己占的是多少到多少之间么?
2009-6-1 15:04
0
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
呃,不好意思,DRIVER_OBJECT::DriverStart和DRIVER_OBJECT::DriverSize很明确了。。。
2009-6-1 15:09
0
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
刚刚又想到一个问题,如果是调用内核API后出了内存异常,那么这个方法就不管用了,不过这个似乎没有根治的方法。。。
2009-6-1 15:26
0
雪    币: 581
活跃值: (149)
能力值: ( LV12,RANK:600 )
在线值:
发帖
回帖
粉丝
6
调用内核API后出了内存异常
STACK STACK...
2009-6-1 15:56
0
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
根据esp来判断吗?问题是esp多少才是合法的似乎不好判断,调用到自己写的sys的,未必只有自己本身的几个线程吧?
2009-6-1 16:04
0
游客
登录 | 注册 方可回帖
返回
//