首页
社区
课程
招聘
[旧帖] [原创]内核学习的心得体会与关键技术 0.00雪花
发表于: 2012-7-12 08:44 1782

[旧帖] [原创]内核学习的心得体会与关键技术 0.00雪花

2012-7-12 08:44
1782
写下这篇帖子是因为我最近老是遇到蓝屏问题,并且对问题发问还得到的都是一些错误答案,经过两天的深入学习和到各大学资料库里整理,学习,最终得到以下几点误区,希望新手同学能够少走一些弯路,当然以下如果有不对的地方也请指出,相互学习。
第一点 SSDT SHADOW表并非被分页到了硬盘
第二点 ring 0并不是计算机的最高权限,在奔腾4以后,已经在硬件上引入了ring -1的概念,当然前提是进入ring 0控制关键寄存器使程序接管ring -1,这也是基于VT技术的调试器原理,当然AMD也是支持的,国内外相关资料很少,但是国外有个开源项目,blue pills 蓝色药丸
第三点 在SSDT 表中的一些不被常用的函数,是经常被交换的,当你使用硬编码或者读取内存时,先判断是否可读写再进行操作,或者适当降低中断级,也可以先调用一次那个函数,例如 kd就没有降低,导致有些函数反汇编的时候是无响应的,而XT做的比较好,会在读取不出的情况降低中断级再一次尝试读取。
第四点 在多核情况下,每个核都维护各自的相关寄存器
第五点 因为第四点,所以在关保护与中断的时候,并不是绝对安全的,或者这么说,在你的程序里HOOK了一个函数,但是别的CPU正在读取那个函数,这样就会产生非预料的错误,因为你只关闭了当前的CPU的中断,我查尽了所有资料,都没有确保稳定的方法,也有向CPU所有核心插入APC的,当然我们这些小菜,用一下自旋锁就差不多了
第六点 对于IRQL的概念,在使用的时候尽量使中间代码少一点,这样非预料的错误就少一点,比如有些函数在WDK中查不到,但是我们在并不知道他的中断级下用了,这样蓝屏的几率就大了,有一些函数会在内部使用自旋锁,这样中断级就到了2,这都是后台的,我们看不见的。这时读取分页内存时会发生一定几率的蓝屏。

最后一点  说一下我最讨厌的两类人

  第一类  有技术但是不喜欢共享的人,偶然间发现他会的没有分享技术被别人分享了,就会跳出来振振有词。
  第二类  啥也不会的但是自认为自己啥都会了的脚本小子。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 338
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
写总结的很好:ring -1 解决不了根本问题
2012-7-12 08:59
0
雪    币: 500
活跃值: (950)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
顶lz,最后几句说的很好
2012-7-12 09:14
0
雪    币: 16
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
忍不住要给LZ叫好,技术牛,人品更牛。顶
2012-7-12 22:55
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
楼主能讲讲ring -1级别么 对这个比较感兴趣,查资料网上直说最高级别是ring 0,没找到ring -1的资料
2012-7-23 11:11
0
游客
登录 | 注册 方可回帖
返回
//