linux引导程序为什么要把自己加载到内存的7c00h这个特定的地方?
来源:互联网 发布:阿里域名价格 编辑:程序博客网 时间:2024/06/07 22:17
本文转自:http://hi.baidu.com/sinbad_li/item/98bb8c0ffd17c723a1312d51
系统启动过程简介
系统启动过程主要由一下几步组成(以硬盘启动为例):
1. 开机;
2. BIOS 加电或按reset键后都要进行系统复位,复位后指令地址为 0ffff:fff0,这个地方只有一条JMP指令, 跳转到系统自检 ( Power On Self Test -- POST )程序处;
3. 系统自检完成后,将硬盘的第一个扇区 (0头0道1扇区, 也就是Boot Sector)读入内存地址 0000:7c00 处;
4. 检查 (WORD) 0000:7dfe 是否等于 0xaa55, 若不等于则转去尝试其他启动介质, 如果没有其他启动介质 则显示 "No ROM BASIC" 然后死机;
5. 跳转到 0000:7c00 处执行 MBR 中的程序;
6. MBR程序 首先将自己复制到 0000:0600 处, 然后继续执行;
7. 在主分区表中搜索标志为活动的分区,如果没有发现活动分区或有不止一个活动分区, 则转停止;
8. 将活动分区的第一个扇区读入内存地址 0000:7c00 处;
9. 检查 (WORD) 0000:7dfe 是否等于 0xaa55, 若不等于则 显示 "Missing Operating System" 然后停止, 或尝 试软盘启动或;
10. 跳转到 0000:7c00 处继续执行特定系统的启动程序;
11. 启动系统...
以上步骤中 2,3,4,5 步是由 BIOS 的引导程序完成. 6,7,8,9,10步由MBR中的引导程序完成.
Boot Sector 结构简介
1. Boot Sector 的组成
Boot Sector 也就是硬盘的第一个扇区, 它由 MBR (Master Boot Record),DPT (Disk Partition Table) 和 Boot Record ID(Magic Number) 三部分组成。
MBR 又称作主引导记录,占用 Boot Sector 的前 446 个字节 ( 0 to 0x1BD ),包含了硬盘的一系列参数和一段系统主引导程序。引导程序主要是用来在系统硬件自检完后负责从活动分区中装载并运行系统引导程序(引导操作系统)。它的最后一条执行语句是一条JMP指令,跳到操作系统的引导程序去。这里往往是引导型病毒的注入点,也是各种多系统引导程序的注入点。但是由于引导程序本身完成的功能比较简单,所以我们完全可以判断该引导程序的合法性(比如看JMP指令的合法性),因而也易于修复。象命令fdisk/mbr可以修复MBR和KV300这类软件可以查杀任意类型的引导型病毒,就是这个道理。
DPT 即主分区表,占用 64 个字节 (0x1BE to 0x1FD),记录了磁盘的基本分区信息。主分区表分为四个分区项, 每项 16 字节, 分别记录了每个主分区的信息(因此最多可以有四个主分区)。
Boot Record ID 即引导区标记,占用两个字节 (0x1FE and 0x1FF), 对于合法引导区, 它等于 0xAA55, 这是判别引导区是否合法的标志.
Boot Sector 的具体结构如下图所示:
0000 |------------------------------------------------|
| |
| |
| Master Boot Record |
| |
| |
| 主引导记录(446字节) |
| |
| |
| |
01BD | |
01BE |------------------------------------------------|
| |
01CD | 分区信息 1(16字节) |
01CE |------------------------------------------------|
| |
01DD | 分区信息 2(16字节) |
01DE |------------------------------------------------|
| |
01ED | 分区信息 3(16字节) |
01EE |------------------------------------------------|
| |
01FD | 分区信息 4(16字节) |
|------------------------------------------------|
| 01FE | 01FF |
| 55 | AA |
|------------------------------------------------|
硬盘MBR主引导代码分析
一程序流程
(引导扇区是指硬盘相应分区的第一个扇区,是和操作系统有关的,操作系统的引导是由它来完成的;而MBR主引导程序并不负责引导操作系统,MBR是和操作系统无关的,他的任务是把控制权转交给操作系统的引导程序.)
1 将程序代码由0:7C00H移动到0:0600H(注,BIOS把MBR放在0:7C00H处)
2 搜索可引导分区,即80H标志
成功:goto 3
失败:跳入ROM BASIC
无效分区表:goto 5
3 读引导扇区
失败:goto 5
成功:goto 4
4 验证引导扇区最后是否为55AAH
失败:goto 5
成功:goto 6
5 打印错误进入无穷循环
6 跳到0:7C00H进行下一步启动工
- linux引导程序为什么要把自己加载到内存的7c00h这个特定的地方?
- BIOS选择07c00h加载引导程序的解释
- 引导程序为什么要org 07c00h
- 关于引导程序第一条指令为什么是org 07c00h,org到底是干嘛的
- 关于引导程序第一条指令为什么是org 07c00h,org到底是干嘛的
- 我要把struts 做的程序运行在iis5+tomcat5上,为什么一运行到jsp 页面时,一运行这个.do的页面时
- PandaBoard ES所用到的引导加载程序
- 把自己的程序变成服务[linux]
- 操作系统如何把程序从磁盘加载到内存并创建进程的?
- 为什么要org 07c00h?
- Linux的启动和关机的流程、引导加载程序
- Linux编写自己的程序,运行时为什么要加入 ./
- 把自己的应用程序加载到uClinux中运行
- 把自己的应用程序加载到uClinux中运行
- linux下把共享库(SO)加载到指定的内存地址
- linux下把共享库(SO)加载到指定的内存地址
- 可执行程序加载到内存的过程
- 可执行程序加载到内存的过程
- oracle数据库用户角色(ROLE)简单测试
- /*+ 提示信息*/ 常用hint oracle
- 黑马程序员—正则表达式详解
- Android官方文档---优化下载让网络访问更高效(二)
- C语言创建删不掉的文件夹
- linux引导程序为什么要把自己加载到内存的7c00h这个特定的地方?
- 设计模式--对享元模式的思考
- 运营商做互联网金融亮点不多 到底靠谱么?
- Passing Command Line Arguments to a Module
- Android官方文档---优化下载让网络访问更高效(三)
- Oracle中Hint深入理解(原创)
- CoreData第三方数据---MagicalRecord使用说明
- Android官方文档---优化下载让网络访问更高效(四)
- crm2011js子网格导航栏字段事件操作