而 UEFI 已经具备文件系统的支持,能够直接读取 FAT 分区中的文件。
对扇区的操作远比不上对分区中文件的操作更直观更简单。
实战
光说不练假把式,下面我们就来实战一把,感受下 UEFI 的启动方式。
大致流程是,我们把 PC 设置为 UEFI 启动方式,优先从 U 盘启动,而 U 盘又被我们事先格式化为 FAT32 格式,里面存放有我们的 UEFI 应用程序。
最终就是 UEFI 固件,将我们编写的 UEFI 应用程序给启动起来。
源码
main.c
struct EFI_SYSTEM_TABLE {
char _buf[60];
struct EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL {
unsigned long long _buf;
unsigned long long (\*OutputString)(
struct EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL \*This,
unsigned short \*String);
unsigned long long _buf2[4];
unsigned long long (\*ClearScreen)(
struct EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL \*This);
} \*ConOut;
};
void efi\_main(void \*ImageHandle __attribute__ ((unused)),
struct EFI_SYSTEM_TABLE \*SystemTable)
{
SystemTable->ConOut->ClearScreen(SystemTable->ConOut);
SystemTable->ConOut->OutputString(SystemTable->ConOut, L"Hello UEFI!\n");
while (1);
}
编译
$ x86_64-w64-mingw32-gcc -Wall -Wextra -e efi_main -nostdinc -nostdlib -fno-builtin -Wl,--subsystem,10 -o main.efi main.c
制作启动盘
- 把 U 盘格式化为 FAT32 格式
- 将 main.efi 存放到 U 盘的 EFI/BOOT/ 文件夹中,并重命名为 BOOTX64.EFI
启动
关闭计算机,插入刚刚制作好的 U 盘启动盘,确认 BIOS 中使用的是 UEFI 引导方式,并设置系统为 U 盘优先启动,且要关闭 Secure Boot 选项。
保存,开机
特写
可以看到,上电后先是显示开机画面(UEFI 固件阶段),接着立马在屏幕上显示 Hello UEFI!,正是下面这两句代码的作用。
SystemTable->ConOut->ClearScreen(SystemTable->ConOut); // 清屏
SystemTable->ConOut->OutputString(SystemTable->ConOut, L"Hello UEFI!\n"); // 打印 Hello UEFI!
一、网安学习成长路线图
网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、网安视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
三、精品网安学习书籍
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、网络安全源码合集+工具包
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、网络安全面试题
最后就是大家最关心的网络安全面试题板块