|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
通过昨天第一次发帖,效果让我无比震撼,同时感到压力很大。
我都是分析代码,晚上在寝室拿手机照着看书的,对操作系统想好好理解原理的态度,让我晚上辗转反则
在昨天发贴后,不少朋友和好友跟我又联系了起来,让我为之精神一振,当然也有不少朋友提的问题让我十分无奈
想好好理解我发的代码和内容,是基于你学习完8086王爽汇编以后的,更好的是你起码知道一点操作系统的原理
在这里我推荐1下,在把8086学习后,
可以入手看下小甲鱼的解密系列,把PE的结构好好研究一下,我知道绝对是不容易的,但是慢慢来,起码对PE有个了解
其次,把WIN32汇编语言程序设计,也就是啄石成器,罗云彬这本书的前面,不是小甲鱼说罗哥通篇都概述了,但是却没有怎么很深入的讲解么。
起码在研究操作系统前,你要有这样的1个简单的基础,起码这样看起来不会那么辛苦
其次对C语言有个逻辑性的思想,当然如果你已经编程高手或者对破解解密逆向已经站在1个高峰,确实不需要怎么在留意我所说的了
**************************************************************************************************************************
由于我也是初学,我并不能像小甲鱼老师还有很多出视频的老师一样有一个很清楚的认识后,在给大家讲解
我仅仅做到的就是通过我读到的,摸索到的,然后记录下来,这也就是所谓的‘手记’
如果在这里我写的很啰嗦或者我有错误的地方,还请你多多告诉我,和指导我
作为初学者,真的是概念十分容易出错,而且出错后,整个逻辑会有很大的差错
由于我的语言能力表达不是很好,但是我会尽我所能,去给大家描述
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
涉及到的汇编 可以到我的网盘下载这个方便查阅或者互联网可以搜索 http://115.com/file/andrtoqh
涉及到的代码 http://115.com/file/anmvny2z
最后推荐1个好用的下载工具 http://115.com/file/anmvn8vx
看到1句话很有感悟,分享给大家 挡住了去路的, 往往不是大树,而是小藤
************************************************************************************************************************
下面开始进入正题。
在昨天我的手记中,说的有点含糊,也许是我在理解上也不是很肯定所以留下的也仅仅只是个笼统的说法
http://bbs.fishc.com/thread-15560-1-1.html(参考网站,当然也可以参考网盘里面的代码,也可以去参考orange's 一个操作系统的实现)
昨天晚上我也仔细的在推敲了下。
在GDT中,迷惑的还是描述符属性是有2个字节(BYTE), 和8个位构造的。
P位(Present) P= 1时表示段存在,P= 0时候,表示段不存在。
DPL 描述符的特权等级。
S位 S= 1时候表示描述符是数据段/代码段 ; S= 0时候系统段/门描述符
TYPE 是描述符的类型
G位 段界限粒度位, G = 0时,段界限为字节型,既G = 1时,界限粒度为4KB。
D/B位 可执行代码中,
D位等于1时32位的地址或 8位操作数, D等0时, 就是16位的地址或8位操作数
B位, 是向下扩展数据段描述符中, B = 1时候,就4GB的界限, B = 0,就是64KB。在描述推栈中,4GB相对的是使用32位的推栈指针寄存器, 相对的,64KB的时候就是16位的寄存器
在昨天还有个朋友也提出了1个问题,寻址机制,晚上我也好好的参悟了一下
逻辑地址 → 分段机制 → 线性地址 → 分页机制 → 物理地址 (在没有打开分页机制的时候,我们可以说逻辑地址,线性地址,物理地址,都是1个概念的产物,但是当有了分页机制的时候,就发生了稍微不同的改变了,我将在后面的手记中提到)
有个关系很好的哥们昨天在看解密的时候遇到了对描述符/保护模式概念的模糊不清,虽然这位朋友是很厉害的啊,哈哈
在GDT,LDT,已经IDT中,每一个描述符,都有自己的界限, 属性, 内容, 等等, 他们都只是对自己的描述符,产生保护
当然,把昨天留下自己问题的选择子的概念也给大家交涉下。
选择子
在这之前给大家继续补充下概念,GDT好比是定义的数据结构,他是用来提供存储机制的。 而这个呢,又是段寄存器和GDT的描述符共同提供的。
; GDT 选择子
SelectorCode32 equ LABEL_DESC_CODE32 - LABEL_GDT
SelectorVideo equ LABEL_DESC_VIDEO - LABEL_GDT
SelectorVideo就是选择子,它不是偏移, 他有3个结构构成,描述符的索引, TI, RPL
你可以这样理解,当TI, RPL都是0的时候,那么他就是GDT基地址的偏移了。~
上面的已经记录了有一些了,你或许觉得还很少,但是对于我是一个大3的学生来说,面临毕业,各种忙碌,都是晚上看书的我来说,已经都有些透支了,书要看的仔细,而且不能一直抽烟,否则对寝室的他人也是不好的。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
所以, 我还是今天就在多手记记录下一部分,还是希望大家踊跃拍砖
LDT,其实在看WIN32程序设计的时候,当听到小甲鱼老师说,GDT啊,LDT的时候,就很有欲望的想去知道了,
其实与GDT区别不是很大,只是说,GDT是1个全局的描述符表,所以,LDT就是局部的描述符表。
它好比给我的感觉就是C++中的父类和继承类的关系一样,调用了他的方法。(代码是pmtest3.asm)
与之又有点不同的是他多了自己方法?不是么?
; 选择子类型值说明
; 其中:
; SA_ : Selector Attribute
SA_RPL0 EQU 0 ; ┓
SA_RPL1 EQU 1 ; ┣ RPL
SA_RPL2 EQU 2 ; ┃
SA_RPL3 EQU 3 ; ┛
SA_TIG EQU 0 ; ┓TI
SA_TIL EQU 4 ; ┛
他的选择子仅仅比GDT多了1个选择子而已。
最后在说下特权级,他们有4个特权级的 从高到低的特权是 0, 1, 2, 3
一般情况下,代码和数据都是存放在内层权限当中的(也就是高的特权级中)
内核一般在0层(最内层)
服务一般是在1, 2层(中间)
应用程序是在3层 (最外层)
CPL(Current Privilege Level), DPL(Descriptor Privilege Level), RPL(Requested Privilege Level)。是3中特权级别进行特权级的检验。
CPL,是当前特权级别他是被存储在CS SS的第0位和第1位。一般的情况,CPL都是等于代码段的特权级别的。
当程序发生转移的时候,处理器就会改变CPL。当没有发生转移,或者代码段一致的时候,就不会改变CPL了
DPL,是描述符特权级他是存储在门描述符的DPL字段或者是在段描述符。他有访问数据段,非一致代码段, 调用门,一致代码段访问不一致代码段, TSS的情况, 在这里都是特权级别达到了,才可以访问操作,只有一致代码段访问不一致代码段要求提高1个界别,和TSS的访问是有规定最低权限的。
RPL,请求权限级别是通过选择子的第0位和第1位来进行表现操作的, 处理器会通过CPL和RPL来确认是否可以访问,是否合法, 当RPL的访问特权比CPL小的时候, 他将起到决定的作用。
操作系统中1个程序接受选择子的时候, 就会把选择子的RPL设定为特权级别, 而不是更高级别的CPL进行校验
今天就记录到这里,今天就不发那个回复才可以看的“东西”啦,本着想接受拍砖,也希望前辈们,踊跃拍砖,能让晚辈更加吸收前辈的经验。
同样的,我的联系方式可以在我的个性签名找到我的QQ,或者可以直接论坛联系我,谢谢了啊。~
2012/03/22 下午
|
评分
-
查看全部评分
|