gpt4 book ai didi

x86 - 在 x86 上,启用分页是否会导致 "unconditional jump"(因为 EIP 现在是虚拟地址)?

转载 作者:行者123 更新时间:2023-12-04 11:41:52 29 4
gpt4 key购买 nike

当通过将 CR0 中的分页位设置为 1 来启用分页时,所有指针(包括 EIP)现在都被解释为虚拟地址而不是物理地址。除非 CPU 当前正在执行的内存区域是“身份映射”(虚拟地址映射到相同的物理地址),否则这似乎会导致 CPU 执行相当于“无条件跳转”的操作——它应该从不同的(物理)地址开始执行代码。

这真的会发生吗?让操作系统启动代码与这种行为可靠地工作似乎非常棘手。或者所有保护模式操作系统都身份映射他们自己的内核代码?

最佳答案

这不需要完整的身份 map ;例如,Linux 在运行完成后实际上会完全删除启动代码。相关代码在pmjump.S ,其中使用平面模式(32 位标识映射),并在启用保护模式后立即执行跳转。值得注意的是,由于切换到 32 位模式,跳转是以机器代码形式编写的。从那里,它通过 startup_32 进行设置页表。我不确定是否完全需要状态更改后的无条件跳转(例如,32-bit real mode 是未按预期执行此类操作的意外副作用)。

关于x86 - 在 x86 上,启用分页是否会导致 "unconditional jump"(因为 EIP 现在是虚拟地址)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30972707/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com