jonny
驱动牛犊
驱动牛犊
  • 注册日期2002-02-04
  • 最后登录2002-05-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1502回复:8

如何在日Ring0下截获一段内存区域的写入操作?win2k,linux下均可,给个思路

楼主#
更多 发布于:2002-04-16 20:37
如题:
小弟要对Win2000下一段核心内存区域的写入进行截获,为了记录下写入的地址和操作后的值,那位大侠有着方面的经验,请多指教啊!谢谢大家!

最新喜欢:

xiangshifuxiangs...
wilton
驱动牛犊
驱动牛犊
  • 注册日期2001-04-23
  • 最后登录2005-03-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-04-17 12:34
这个问题很复杂,一般说来没有必要。看看你的问题是不是必须这样做。如果一定要做,需要用到CPU的调试功能(可能会和某些调试器冲突),或者分析Windows的虚拟内存管理,把包含你要保护的内容设置成不再物理内存,然后拦截INT 13。两种方法都很复杂,都很难调试(估计你找不到调试CPU)。资料可以参考IA-32 Intel Architecture Software Developer\'s Manual:Volume 3 System Programming Guide。
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-04-17 12:43
faint!
你应该写个debugger。
用dr0~dr3
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-04-17 13:39
faint!
你应该写个debugger。
用dr0~dr3

To Lov1999,\"faint\"中文是啥意思 ?
Tom_lyd
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-04-17 13:42
[quote]faint!
你应该写个debugger。
用dr0~dr3

To Lov1999,\"faint\"中文是啥意思 ? [/quote]
faint!
faint就是晕倒!
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-04-17 13:54
那你为啥总是晕倒,是不是病了?
Tom_lyd
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-04-17 13:59
那你为啥总是晕倒,是不是病了?

faint!
兄弟你倒是挺幽默
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-04-18 13:54
没仔细想过,不过实现不算太难吧?
我简单描述:
1、挂接页异常处理程序
2、取得你要截获的内存区域对应的页表项地址将其存在位改为0;
3、若页异常发生,判断是否为你要的区域,不是让系统处理,否则。。。
其中还有些细节:区域是可分页的话,处理要麻烦些;
对用户区的内存你先查查提交了没(VAD树),不要把错误程序胡乱访问未分配内存也当成触发条件。
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-04-18 13:59
你仅仅截获“写”操作的话,就改改CR0的WP位和表项的U/S、R/W位吧,简单一些。
游客

返回顶部