首页
社区
课程
招聘
[求助]保护模式的段选择子问题!
发表于: 2008-8-29 23:22 7536

[求助]保护模式的段选择子问题!

2008-8-29 23:22
7536
因不能在其他版块发帖按论坛的提示所以就发在这里了!

假如有2个进程 我都用OD载入后看到
一个是记事本 一个是其他的程序 他们段寄存器都一样如下

ES 0023
CS 001B
SS 0023
DS 0023
FS 0038
GS 0000

这几个段寄存器的TI位都是0
从保护模式段寄存器的格式看
TI=0指示从全局描述符表GDT中读取描述符;TI=1指示从局部描述符表LDT中读取描述符。

1:明明执行的是用户程序代码
怎么选择子永远指向GDT中? 不是只有当调用API才会使得选择子指向GDT中吗?

2:为什么2个进程的寄存器都一样?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 371
活跃值: (67)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
2
1.应该是windows内存管理设计的原因.所谓gdt或者ldt其实都是可以存段选子的.(具体是什么类型的段选择字已经不记得了)
   windows在设计内存处理的之初,为了方便,用户模式下的段选择子就是lz的那几个值(应该一般是不会变的).建议lz使用syser|softice|icesword具体看一下这几个具体的段选择字所代表的段基址及其limit即可知23类基本没有什么"选择"作用,因为base addr=0,则虚拟地址直接等于线性地址了(不知道记忆是否出错了)

2.如上所述,段选择子只是一个分段功能...具休还得看page directory table&page table对内存进行分页.不同的进程在cr3是不同的,也就是说其有着不同的page directory table&page table.因此具体的物理地址就不同了.这样就达到一个虚拟内存的功能.

3.因许久没有搞底层了.有一些不记得了.有错,勿怪.推荐楼主看:<intel manuals>.那里都有,然后使用一些工具(ie.syser|softice|od)验证一下.这种问题就会迎刃而解了.
---
尽量自己先试着解决问题,在问问题的同时,试着自己解决问题.
2008-8-30 00:02
0
雪    币: 235
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
windows 是没有LDT的
2009-6-20 10:57
0
雪    币: 220
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
第二点好像不对吧?cr3不同,虚拟地址还可能相同,进程隔离关键不在CR3,而是空闲物理页管理吧?
2009-6-20 21:25
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
5
现代操作系统,包括WINDOWS,保护的实现通常完全不使用(或几乎不使用)分段机制,主要是通过分页机制来实现保护,因为分页机制更加通用,在多种平台的硬件中都有支持,而分段机制只是x86系统的一种遗留保留下来,因此很少使用。
2009-6-21 15:28
0
雪    币: 214
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
1 不明白
2 使用不tongue的CR3,就可以是相同的线性地址对应不通的物理地址。

你可以去看看于渊的 第三章 pmtest8.asm
2009-7-1 09:02
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
可以看看于渊的《自己动手写操作系统》,应该是第三章里面有的!
2009-7-1 13:42
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
学习了!谢谢
2009-8-13 10:37
0
游客
登录 | 注册 方可回帖
返回
//