您要为哪种格式组装或编译OS源代码



一般而言,无论是在汇编还是更高的级别上编写内核和OS时,您都需要在平面二进制中组装或编译代码,对吗?

您不能组装或将其编译为诸如精灵格式之类的东西,对

如果这样做,处理器会误解格式为代码并开始执行意外说明。

毕竟,您格式化可执行的二进制文件,以便操作系统知道代码和日期段在哪里开始和停止,然后可以将它们加载到GDT中并将它们添加到分页结构中。

但是,如果您正在编写的程序实际上是OS,那么它不会像用户应用程序那样在OS上运行,就像 OS,对吗?

也就是说,OS在金属上运行,而不是在任何其他软件上运行。

我在这里纠正吗?

,每个平台都有其自己的引导序列,这也定义了用户如何获得机器的控制。

例如,在x86世界中,第一个代码运行是来自BIOS ROM(主板供应商的硬接线固件),然后将加载初始启动程序(在存储块 - 设备上的扇区0,因此BIOS固件必须已经包含一些简单/完整的各种不同设备的驱动程序=这不是某种琐碎的夫妇说明,可以使PC升温,而是一个小型操作系统)。然后,Bootloader将处理剩余代码的进一步加载(如果不适合单个扇区或内核或提供的任何用户)。

)。

因此,如果您的引导加载程序足够复杂,它甚至可以理解用于内核的精灵二进制文件,并从中加载。

,但只要您跟踪要运行的最初代码(X86 PC上的BIOS固件),则必须是平坦的二进制代码,请在某个指定的地址开始代码(由CPU/董事会供应商定义,取决于第一个信号之后的CPU状态)。

此操作系统也可能已经太晚了,因此它不能保证它直接在裸金属上运行,它可能已经进入已经有些虚拟化环境中了。通常可以检测到它,但是使用 Perfect 仿真/虚拟化可能是无法检测的(然后,在计算机世界中,实现 Perfect 的实现往往非常难以捉摸)。但这并不能从操作系统的角度改变任何东西(*),它仍然可以像在裸机上一样运行,这取决于仿真/虚拟化以赶上并达到OS期望。

*)实际上,对于安全敏感的安装,检测在环境上的任何篡改并处理此类情况以减轻安全风险(自我破坏或擦除敏感信息)可能非常重要。


更新:还具有支持UEFI(现代BIOS)的现代董事会,TPM(值得信赖的平台模块)芯片,IME(Intel Management Engine),可以对初始平面二进制进行加密和数字签名,因此CPU不会执行它除非签名的解密和验证成功。

使用IME,情况更加复杂,就像计算机中的计算机一样,因此即使没有唤醒包装X86机器(仅在备用电源)时,后台可能会发生一些事情。

如果您刚刚开始研究OS开发,请不要担心。如果您打算创建一些基于X86的安全/医疗设备,则可以对此进行更多关注。

最新更新