热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

ReactOS源码分析——内核加载器(一)

计算机BIOS读取硬盘第一个扇区的数据到内存0x7C00位置,将控制权交给主引导记录(MBR),MBR再搜索系统的活动分区表,加载活动分区表的第一个扇区到一个固定的地址。MBR接下来将控制权交给

计算机BIOS读取硬盘第一个扇区的数据到内存0x7C00位置,将控制权交给主引导记录(MBR),MBR再搜索系统的活动分区表,加载活动分区表的第一个扇区到一个固定的地址。MBR接下来将控制权交给PBR,PBR解析FAT或NTFS格式文件系统,找到引导内核的文件NTLDR,将该文件加载到0x20000。最后将控制权交给NTLDR进行内核启动。

原版的启动源码是一段汇编程序,这段汇编程序的路径大概是在“\boot\freeldr\bootsect\dosmbr.asm”。

我这里参考的源码不是原版ReactOS,这里的参考源码是源于《Windows内核设计思想》作者陈树宝改写的精简版BMR启动源码。我查看了原版DOSMBR代码,它的代码更加接近于Windows XP的启动逻辑。陈树宝的版本更加易于理解。下面给出陈树宝的代码片段:

start:
cli ; 关中断,将标志寄存器中的中断标志位清零,禁止中断;
xor ax, ax ; 异或运算,两个操作数相同,即清零运算;
mov ss, ax ; 设置栈段寄存器,段寄存器清零;
mov sp, 7c00h ; 设置栈顶,栈顶为0x7C00;
sti ; 开中断,将标志寄存器中的中断标志位置1,开启中断;

push 07c0h
pop ds
mov ax, 07c0h ; 设置数据段寄存器
mov ds, ax

; 加载NTLDR
push dword 80000h/512-8 ; count - ntldr扇区总数,80000h / 512 - 8 = 0x3F8
push dword 8 ; src - 开始读取的扇区号
push dword 20000h ; des - 存放数据的目的地址
call LoadSector ; 加载扇区

;ntfsboot jmp 0x2000:0000,fatboot jmp 0x2000:0003
push word 2000h
push word 0000h
o16 retf

未完待续…


推荐阅读
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 在 Windows 10 中,F1 至 F12 键默认设置为快捷功能键。本文将介绍几种有效方法来禁用这些快捷键,并恢复其标准功能键的作用。请注意,部分笔记本电脑的快捷键可能无法完全关闭。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文介绍如何通过Windows批处理脚本定期检查并重启Java应用程序,确保其持续稳定运行。脚本每30分钟检查一次,并在需要时重启Java程序。同时,它会将任务结果发送到Redis。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 离线环境下的Python及其第三方库安装指南
    在项目开发中,有时会遇到电脑只能连接内网或完全无法联网的情况。本文将详细介绍如何在这种环境下安装Python及其所需的第三方库,确保开发工作的顺利进行。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 本文将详细介绍在Windows 7环境下,检查U盘启动盘是否制作成功的多种方法,包括通过BIOS设置和使用模拟启动工具。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • 高效解决应用崩溃问题!友盟新版错误分析工具全面升级
    友盟推出的最新版错误分析工具,专为移动开发者设计,提供强大的Crash收集与分析功能。该工具能够实时监控App运行状态,快速发现并修复错误,显著提升应用的稳定性和用户体验。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
author-avatar
Jiaquan_Sun_106
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有