#bootloader #kernel #x86-64 #parser #pe #point #basic

gamozolabs/pe_parser

Pure Rust x86_64 bootloader and kernel

1个不稳定版本

0.1.0 2020年4月11日

#32 in #pe

478 星级 & 25 关注者

6KB
97

摘要

这是一个几乎完全用Rust编写的bootloader和kernel,没有任何第三方依赖。这个代码库中的一切都是你需要的。

构建

要求

构建此项目需要Rust、nasmlld-link(来自LLVM的链接器)。这个bootloader和kernel无论构建系统如何都是相同的构建方式。它应该可以在Linux、Windows、OSX、BSD等操作系统上构建。

您可以从这里或通过apt install nasm获取nasm。

您可以从这里或通过apt install lld获取LLVM二进制文件。

您可以从这里获取Rust。您必须使用nightly Rust!

此项目要求您安装i586-pc-windows-msvcx86_64-pc-windows-msvc的Rust目标。

rustuptarget add i586-pc-windows-msvc x86_64-pc-windows-msvc

特别是nasmlld-linkrustupcargo必须在您的PATH中。如果这些中有一个不在您的PATH中,您可能需要为特定版本创建符号链接(例如:lld-link-10

构建

要构建此项目,只需运行cargo run,这将创建一个名为pxe的文件夹,其中将包含需要通过TFTP服务器公开的文件夹。可选地,可以从pxe文件夹将文件复制到您现有的PXE部署文件夹。

使用方法

这个引导加载程序和内核需要使用PXE引导。它们在任何形式下都不支持磁盘。所有操作都通过网络进行。要使用此引导加载程序和内核,您需要设置一个有效的PXE引导环境。这需要使用DHCP服务器和TFTP服务器来完成。

TFTP服务器必须指向包含chocolate_milk.bootchocolate_milk.kern的目录。DHCP服务器应配置为使用chocolate_milk.boot作为引导映像。这是一个针对BIOS的特定引导加载程序,与EFI/UEFI不兼容。

设计

构建系统

我们使用一个基于Rust的构建系统,位于src/main.rs。我们在Rust中构建了这个构建系统,这样我们就不需要在构建过程中承担任何其他依赖。这个构建系统对需要构建的已安装程序进行了一些检查,构建并扁平化引导加载程序,并组装引导加载程序。

引导加载程序

引导加载程序是一个简单的i586 Rust程序,按照MSVC调用约定PE生成。我们的构建系统src/main.rs将其扁平化为加载的PE内存映像。然后,它直接附加到初始的bootloader/src/stage0.asm入口占位符。一旦进入32位模式并设置选择器后,我们就直接跳转到bootloader::entry()


lib.rs:

支持基本的x86_64和i386的PE解析器。目前这个解析器不支持重定位。

无运行时依赖