我目前正在构建更高半的内核,我的引导加载程序在物理地址 0x100000(1M) 处加载内核,并且身份映射已设置为 0-4MB。这是一个问题:我怎样才能跳转到更高的虚拟地址(例如 3GB)。
我用谷歌搜索了这个问题,发现了两种方法:一种是使用地址空间扭曲,一种是设置页面条目以将 3GB~3GB+4MB 映射到 0-4MB 然后“跳转”到更高的地址。我决定使用第二种方式,但找不到足够的信息来实现它。我反汇编了我的内核,发现所有的地址都是绝对的,所以我相信单个“jmp”指令是不够的。我能想到的唯一方法是在 3GB 以上的虚拟地址中有一个函数,我们在较低空间调用这个函数,然后我们将在高空间执行,这个函数永远不应该返回。如果这是真的,我该怎么做?