Windows 内核加载器(NTLDR)
当一台计算机启动后,会读取引导驱动器(软盘,硬盘等等)的第一个扇区0x7c00处的代码,即MBR代码。然后,MBR代码搜索系统活动分区表,并加载分区引导记录PBR代码到内存中。PBR代码负责解析FAT或NTFS文件格式,并找到NTLDR
。随后,从PBR代码转到NTLDR
的前半部分——startup.com的代码中来。startup.com
将会检测物理地址,开启A20地址线,重定位GDT、IDT,开启保护模式,加载osloader.exe
。随后osloader.exe
开始启动。
分解NTLDR:找到NTLDR
文件,用Hex编辑器打开,搜索字符串“MZ”,从文件开始到“MZ”之前为startup.com
的内容,从“MZ”所在地址到文件结束为osloader.exe的内容。
使用IDA Pro打开 startup.com
,可以看到:
1 | seg000:0100 public start |
其中start_0为startup.com
的真正的入口地址,进入start_0:
1 | eg000:02D8 start_0 proc near ; CODE XREF: start↑j |
进入SuMain函数:
1 | seg000:1AC0 SuMain proc near ; CODE XREF: start_0+36↑p |
(未完待续)