Bochs源码分析 - 16:conforming与non-conforming代码段区别以及Bochs代码的实现

本文详细解析了x86架构中一致代码段(conforming)与非一致代码段(non-conforming)的区别,通过Intel手册的描述,分析了它们在权限管理和调用过程中的作用。一致代码段允许不同特权级别的代码执行,而非一致代码段则会导致权限异常。文中通过实例和Bochs模拟器的分析,阐述了一致代码段在实际使用中的安全性和调用机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

        之前在学习x86架构时,在代码段中有一个点让我感到困惑,就是type field 11位。这个之前一直似懂非懂,说不理解吧知道这么个玩意,说理解吧又不知道其具体干嘛,感觉是方便系统调用加快速度,尤其当遇到权限问题,自己就糊里糊涂,这篇文章让自己彻底分析明白这个问题。

Intel手册说明

        下面来引用intel手册中对这问题的描述(卷三 3.4.5.1节)

        Code segments can be either conforming or nonconforming. A transfer of execution into a more-privileged conforming segment allows execution to continue at the current privilege level. A transfer into a nonconforming segment at a different privilege level results in a general-protection exception (#GP), unless a call gate or task gate is used.

        这上面讲:对于一致代码段,其可以由低权限调用高权限中的代码(反过来不行);对于非一致代码段,其不同权限调用会触发GP一样,必须通过调用们或任务门。 

        All data segments are nonconforming, meaning that they cannot be accessed by less privileged programs or procedures (code executing at numerically higher privilege levels). Unlike code segments, however, data segments can be accessed by more privileged programs or procedures (code executing at numerically lower privilege levels) without using a special access gate.

        我们现在来讲这部分的是”所有数据段都是非一致代码段“,低权限程序无法访问,但是其高权限程序可以直接访问低权限代码中的数据。

一致代码段在实际的使用

        一致代码段是为了一些代码在不管零环和三环都可以很方便的调用而设计的一种机制,这与windows系统中的SSDT表中的调用不是一回事。举一个例子,我们现在设计了一个math.lib来完成运算任务,当三环和零环都需要调用这个库来完成计算任务时,其最好的方式就是使用一致代码段。

    &

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值