首页 文章

x86 - 保护模式下的分段有什么用途?

提问于
浏览
0

我读到了x86内存分段,我认为我遗漏了一些东西,线性(虚拟)地址是通过从GDT条目(基地址)取32位,从偏移地址取32位而构建的 . 求它们得到一个32位的虚拟地址 .

现在我看到32个偏移位可以跨越所有VA空间,因此实际上不需要使用32位基址 . 所以我得出结论,基地址并没有真正在翻译过程中发挥作用,这让我发现使用分段(在x86保护模式下)的内存保护是无用的,因为我们可以获得具有ring 0权限的VA段使用偏移地址本身 . (EG . 当我们的段具有ring 3特权时跳转0x08000001 - 到内核VA)

那么我们基于分页的所有内存保护?

2 回答

  • 0

    段选择器和段描述符包含有关存储器段边界的数据 .
    描述符中不仅包含边界,还包含访问类型 .

    0到3的特权级别,更少的特权级别 . 读写执行信息 . 因此,段中的每个不同权限级别具有不同的访问权限,并且它是保护模式的基本机制的一部分 .

    传统分段只是防止每个段区域的重复,否则代码段将被应用程序(或用户)的数据段或堆栈段存储器污染 .

    最近的分段包含具有段选择器和段描述符的更确定的保护方法 .

    在引导过程之后,系统正在进入用户权限模式(3),之后您无法访问内核权限模式(0),除非使用rootkit或者可能还有其他方法可以让熟练的黑客使用 . :)

  • 0

    您观察到32位偏移可以跨越整个VA空间是正确的 . 但段描述符也包含限制,因此使用该段超出该限制的任何访问都将导致#GP(一般保护错误) . 此外,您不能只在ring-3代码中使用ring-0段;这首先会破坏戒指水平的目的 .

相关问题