Bare-metal 与厂商的约定
厂商为操作系统开发者提供 Firmware
CPU Reset (Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 3A/3B)
EIP = 0x0000fff0
CR0 = 0x60000010
EFLAGS = 0x00000002
Reset 后处理器都从固定地址 (Reset Vector) 启动
Firmware 负责加载操作系统
-kernel
可以绕过 Firmware 直接加载内核 (RTFM)状态机 (初始状态) 开始执行
Firmware: BIOS vs. UEFI
今天的 Firmware 面临麻烦得多的硬件:
BIOS 提供机制,将
7c00
位置CS:IP = 0x7c00
, (R[CS] << 4) | R[IP] == 0x7c00
CS = 0x07c0, IP = 0
CS = 0, IP = 0x7c00
虽然最多只有 446 字节代码 (64B 分区表 + 2B 标识)
Talk is cheap. Show me the code. ——Linus Torvalds
有没有可能我们真的去看从 CPU Reset 以后每一条指令的执行?
标准化的加载流程
.efi
更好的程序支持
Firmware 通常是只读的 (当然……)
CIH 病毒的作者陈盈豪被逮捕,但并未被定罪