如您所知,Multiboot2 内核包含在 ELF32 文件中。ELF32 文件必须通过 .lds 脚本清楚地告知选择器地址。
但问题是 grub2 需要一个地址才能在物理内存中加载内核。而在ELF文件中定义的地址被grub2当LD链接该目标地址中的每个内核对象时被grub2用作目标物理地址。显然,分页后虚拟地址和物理地址之间的关系将完全改变。
所以,我想知道当内核头文件(在 ASM 中)试图长跳转到 C 内核时,如果一切都会出错。
因为我不能指望 GCC 会做什么,因为简单的转储很难理解复杂的现代优化规则。
所以我不能在跳转时代码怎么做,它是用相对地址还是绝对地址跳转?或者我可以简单地更改一些选项,让两个程序以不同的方式处理代码。
非常感谢!