首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ubuntu使用'DS‘和'SS’段吗?

ubuntu使用'DS‘和'SS’段吗?
EN

Stack Overflow用户
提问于 2014-08-05 12:57:33
回答 1查看 243关注 0票数 0

在Ubuntu14.04 amd64中,我将GDT信息转储到内核模块中:

代码语言:javascript
复制
0000:  NULL desc
0008:  32-bit CODE desc, DPL 0
0010:  64-bit CODE desc, DPL 0
0018:  DATA desc, DPL 0
0020:  32-bit CODE desc, DPL 3
0028:  DATA desc, DPL 3
0030:  64-bit CODE desc, DPL 3
0038:  NULL desc
0040:  busy TSS desc
0050:  NULL desc
0058:  NULL desc
0060:  NULL desc
0068:  NULL desc
0070:  NULL desc
0078:  16-bit DATA desc, DPL 3

并转储内核模块的段寄存器:

代码语言:javascript
复制
CS = 10H
DS = 00H
ES = 00H
SS = 00H
FS = 00H
GS = 00H

Q1:内核模块不使用DS和SS吗?

另一方面,我编写了一个ring 3应用程序,还转储了main()中的段寄存器:

代码语言:javascript
复制
CS = 33H
DS = 00H
ES = 00H
SS = 2BH
FS = 00H
GS = 00H

Q2:应用程序的CS指向GDT中的64位代码,SS指向GDT中的数据desc。这是没有问题的,但为什么应用程序的DS也是00H?

我不认为gcc可以不使用DS或SS编译所有的代码。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-05 13:15:27

64位模式(也称为长模式)不使用分段,因此任何空选择器(即00H)都可以用于数据段(除了CS)。选择64位模式和32位(兼容性)模式仍然需要代码段,但是选择器的offsetlength部分不被使用。

所以,在某种意义上,DS和SS仍然在被“使用”(因为它或多或少是不可能避免它们的),而不是来自GDT。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25139432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档