NTFS引导代码反汇编解析

需积分: 3 8 下载量 5 浏览量 更新于2024-08-01 收藏 264KB DOC 举报
"本文档详细解析了NTFS文件系统引导代码的反汇编过程,并进行了注释,旨在帮助读者理解其工作原理。" 在NTFS文件系统的启动过程中,引导代码起着至关重要的作用。引导代码通常位于磁盘的引导扇区(BOOT sector),它的主要任务是加载操作系统的核心部分到内存中并开始执行。以下是对给出的反汇编代码的解释: 1. **跳转指令**:`EB52 jmp short 0x54` 是一个短距离跳跃指令,它跳过了前两个字节(可能包含一些填充或保留字节)并开始执行实际的引导代码。 2. **禁用中断**:`FA cli` 是清除中断标志(CLI)的指令,用于关闭处理器的中断处理,确保在引导过程中不会被其他事件中断。 3. **初始化寄存器**:`33C0 xor ax, ax` 清零AX寄存器,这通常是准备设置段寄存器的前奏。`8ED0 mov ss, ax` 和 `8ED8 mov ds, ax` 分别将SS和DS段寄存器设置为AX的值,这样栈指针(SP)和数据段(DS)都被设置为0。 4. **设置堆栈**:`BC007C mov sp, 0x7c00` 将堆栈指针设置为0x7C00,这是引导扇区的偏移地址,意味着栈空间将从引导扇区开始。 5. **恢复中断**:`FB sti` 是设置中断标志(STI)的指令,允许中断再次发生。这可能是为了接收后续的BIOS服务。 6. **读取扇区**:`B8C007 mov ax, 0x7c0` 设置AX寄存器为0x7C0,这个值用于调用BIOS中断。`E81600 call 0x7b` 调用函数0x7b,该函数负责读取磁盘扇区。 7. **重新加载自身**:`B8000D mov ax, 0xd00` 将AX设置为0xd00,这是内存中的新位置。`8EC0 move ss, ax` 和 `33DB xor bx, bx` 准备将引导扇区重新加载到0xD00:0x000。 8. **读取扇区数**:`C6060E0010 mov byte [0xe], 0x10` 设置读取的扇区数为16(0x10)。 9. **调用读扇区功能**:`E85300 call 0xc7` 调用函数0xc7来执行实际的磁盘读取操作。 10. **调用BIOS INT 13**:函数0x7b使用`8A162400 mov dl, [0x24]` 获取驱动器号(这里是硬盘,通常为0x80),然后调用`B408 mov ah, 0x8` 设置读取扇区的功能号(0x8),`CD13 int 0x13` 实际调用BIOS中断13来读取扇区。 11. **错误处理**:如果读取失败,`7305 jnc 0x8a` 跳过错误处理代码,否则执行错误处理代码,如设置CX和DH寄存器以表示错误信息。 12. **计算磁盘地址**:接下来的代码涉及计算磁盘的柱面、磁头和扇区,这与INT 13读扇区中断的服务有关,用于定位要读取的数据。 13. **返回执行**:最后,`CB retf` 指令将控制权返回给调用者,通常是在内存的特定地址(0xd00:0x26a)继续执行。 通过这段反汇编和注释,我们可以了解到NTFS引导代码如何与硬件交互,读取磁盘数据,并初始化系统环境以准备加载操作系统。这是理解系统启动流程的关键步骤。