|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
相信很多人都看过了老罗的琢玉成器吧,保护模式下的寻址,我看了很多遍,看得实在很吐血。所以不得已要求助大家了:
老罗原文:“在保护模式下,同样以XXXX:YYYYYYYY格式表示一个虚拟地址,单凭段选择器中的数值XXXX根本无法反应段的基址在哪里”。“同样”一词我们就不去计较了,这种错误难免会出现。后面那句话就很令人吐白沫了,这好比指着一个长小鸡鸡的孩子说:长小鸡鸡根本无法反应他的性别。
他说如果TI位为0的话:
1,从GDTR中获得基址,而他老人家画的图上的GDTR中的基址是32位,很疑惑啊,我都对基址这个概念产生怀疑了,我记得8086汇编中的基址意思是段寄存器中的数值*10h+偏移地址得到xxxx:yyyy,其中xxx就是基址,而对照线性地址。XXXX:YYYYYYYY中的XXXX应该就是基址,这是16位的吧!!!!!!!
2,然后在GDT中以段寄存器的高13位当做位置索引得到段描述符。
这句话稍微能看懂点,不过我真的很好奇,为什么用高13位就当做位置索引就能得到段描述符,
用高13位作索引 和 得到段描述符之间怎么建立起得因果关系?
3,段描述符包含段的基址,限长,优先级等各种属性,这就得到了段的起始地址。
这句话 我就太费解了,首先那个基址我不知道到底指的是什么,连多少位我都不知道,
起始地址是什么东东啊!!!!! 我们忙乎了一阵子是求寻址的,他妈的居然是推出了这个一个不明不白的东西。
如果TI为1的话:
1,与TI为零的情况下的动作一样
2,从LDTR中获取LDT所在段的位置索引;
从他得图上可以看出,它是以段寄存器中的高13为作为索引值。这句话我稍微能看懂点。
3,然后以这个位置索引在GDT中得到LDT段的位置
他妈的这句简直狗屁不通啊,我肯定得自作聪明地为这个句子加几个逗号,
于是句子就变成了这样:然后,以这个位置索引,在GDT中得到LDT段的位置
位置?到底是什么位置?偏移位置,还是相对偏移位置,还是他自己发明的起始位置啊?我知道肯定不是他得家庭住址
4,然后才是用XXXX做索引从LDT段中获得段描述符,
这步跟图根本不照号啊!
5,再以这个段描述符得到段的基址等信息,
首先我不知道这什么意思,第二,我要那个段的基质等信息有什么用啊?
最后他老人家说:分这两种情况得到段的基址后,再以基址加上偏移地址YYYYYYYY才得到最好的线性地址。
这句话太令人匪夷所思了,第一种情况得出来的是什么起始地址,完全跟这句不照号啊!那个偏移在哪个寄存器啊?
如果是在esp,ebx之类的寄存器里,那么这根本就是指向的一个物理地址,也就不需要以上这么一大堆理论了,如果不是,那么它存在哪里?
我有幸看到过小甲鱼的视频,本来以为有救了,我能马上弄清楚这方面知识,可是,小甲鱼同学好像知识照本宣科哦
|
|