周壑x64位内核学习(一)、IA-32e模式 与Legacy模式 & 段描述符
一、IA-32e模式 与Legacy模式特点简要说明
IA-32e是IA-32模式的扩展,它是一种状态,其内核为64位,用户可以是32位也可以是64位
IA-32e强制平坦段,不支持TSS任务切换,取消了虚拟8086模式和实模式的切换
Legacy模式:内核32位,用用户32位
支持非平坦段,任务切换,支持虚拟8086和实模式的切换
二、判断是否是IA-32模式
IA32_EFER MSR C0000080H 中的值的第8位为1时,系统处于IA-32模式
IA32_EFER 结构如下:
三、gdt表段描述符
1、出现连续4个8字节全是0表明GDT已经结束
如图,我们可以发现,64位下gdt表比32位下要短得多
IA-32e模式下,数据段,代码段任使用64位描述符,强制平坦(除了FS,Gs)
gdt表中的段描述符一般还是64位,但TSS段描述符扩展到128位
cs段描述符:
2、cup一直在弱化段保护,强化页保护,64位下,除fs,gswin10基本不再使用段寄存器
由于段描述符没有被拓展,所以存不下64位的虚拟地址,由于强制平坦基址,段描述符基址永远是零,界限也永远是0
现在的段描述符更多的描述该段是否为特权段,是否是64位,是否为代码段,还是数据段
段描述符第21位L:64位的标志
四、TSS段寄存器
1、TSS段描述符被扩展到了128位,没有接收平坦
2、32位下的TSS段寄存器保存了各种寄存器,64位的TSS主要用于存放内核切换时用到的栈指针,图中IST是一些特殊的栈指针,和中断有关。RSP0,1,2,3就是零环,1环,2环,三环的默认栈指针
3、TSS段寄存器中的值
TSS段寄存器前4位为保存位,为了查看更清楚,我们直接查看地址fffff8035926d004
4、dg 40得到的并不是TSS段描述符真正的地址
真正的地址是 fffff8035926d000(如下)
显然,是由TSS的地址是由其段描述符的第64位到第95位,第56位到63位,第32位到第39位,第16位到31位组成的
五、idt段描述符
idt中断门描述符为128位
1、IST索引号
大多数段描述符的IST位都为0,但有一些是02 ,03 , 04之类的
IST与TSS段寄存器联系起来了,如果idt的中断描述符的IST位为0的话,就使用TSS中默认的RSP0栈,如果是2那就使用TSS中的IST2,依次类推,至于TSS的RSP1,RSP2,并不使用
2、64位下0环不再使用fs寄存器指向kpcr,换成了gs,用户层不变
3、64位下fs,gs不受强制平坦的影响
要找到这两个段寄存器基址,可以通过IA32_FS_BASE与IA32_GS_BASE读取
fs在0环读取不到,要在用户层读
4、idt表基本使用中断门描述符,陷阱门和调用门一般不用,任务门被废弃
原因是中断门会自动屏蔽eflag寄存器的if标志位(即关中断)
六、切换权限
1、中断
中断的话,比较简单,和32位很像
2、系统调用
系统调用进行权限切换比较复杂
x64位程序通过syscall进入内核
x86需要jmp far 跨段远跳到64位模式再进入内核,具体分析下次再说
__EOF__

本文作者:_TLSN
本文链接:https://www.cnblogs.com/lordtianqiyi/articles/16023985.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/lordtianqiyi/articles/16023985.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现