发信人: jan1 (精灵), 信区: DOS
标 题: Re: MS-DOS引导程序剖析
发信站: BBS 水木清华站 (Thu Sep 11 19:48:24 1997)
【 在 cq (七支居士) 的大作中提到: 】
: 哪位行家顺手post上来, 不胜感激. 我看过的书上没有说明过.
以下为一个硬盘的分区结构,分为一个pri和一个ext, ext中包含一个logical
--
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·
(本文采用S-Term文章拷贝脚本拷贝)
==================================================
标 题: Re: MS-DOS引导程序剖析
发信站: BBS 水木清华站 (Thu Sep 11 19:48:24 1997)
【 在 cq (七支居士) 的大作中提到: 】
: 哪位行家顺手post上来, 不胜感激. 我看过的书上没有说明过.
以下为一个硬盘的分区结构,分为一个pri和一个ext, ext中包含一个logical
C:\>debug
-a100
1876:0100 mov ax,201
1876:0103 mov bx,7c00
1876:0106 mov cx,1 ; col 0, sector 1
1876:0109 mov dx,81 ; Second hard disk, head 0
1876:010C int 13
1876:010E int 3
1876:010F
-g=100
AX=0050 BX=7C00 CX=0001 DX=0081 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1876 ES=1876 SS=1876 CS=1876 IP=010E NV UP EI PL NZ NA PO NC
1876:010E CC INT 3
-d7d80
1876:7D80 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1876:7D90 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1876:7DA0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1876:7DB0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 01 ................
^^ dh for pri-partition
1876:7DC0 01 00 06 3F 60 F3 20 00-00 00 E0 9F 0F 00 00 00 ...?`. .........
^^^^^cx for pri-partition ^^ dh for ext-partition
1876:7DD0 41 F4 05 3F E0 F1 00 A0-0F 00 00 F0 0F 00 00 00 A..?............
^^^^^cx for ext-partition
1876:7DE0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1876:7DF0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA ..............U.
-a106
1876:0106 mov cx,f441 ;
1876:0109
-g=100 ; reading col:sec f441, head 0, this is ext-partition
AX=0050 BX=7C00 CX=F441 DX=0081 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1876 ES=1876 SS=1876 CS=1876 IP=010E NV UP EI PL NZ NA PO NC
1876:010E CC INT 3
-d7d80
1876:7D80 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1876:7D90 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1876:7DA0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1876:7DB0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 01 ................
^^ dh for logical driver
1876:7DC0 41 F4 06 3F E0 F1 20 00-00 00 E0 EF 0F 00 00 00 A..?.. .........
^^^^^cx for logical driver
1876:7DD0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1876:7DE0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1876:7DF0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA ..............U.
--
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·
(本文采用S-Term文章拷贝脚本拷贝)
==================================================
Gemini 解答
该帖展示了如何通过
DEBUG工具调用 BIOS 中断INT 13h读取硬盘主引导记录(MBR)及扩展分区表,以手动解析分区结构。以下是针对该技术内容的解读:1. 技术原理:MBR 与分区表结构
帖子通过
INT 13h, AH=02h(读取扇区)直接读取硬盘的第 0 柱面、0 磁头、1 扇区(即 MBR)。MBR 的最后 64 字节(偏移01BEh到01FDh)为分区表,每个分区项占 16 字节。
- 分区表项格式:
- 偏移
01BEh开始的 4 个项分别对应四个主分区。- 帖子中
7DC0h处读取的数据01 00 06 3F 60 F3 20 00 00 00 E0 9F 0F 00,解析如下:
06:分区类型(FAT16)。3F 60 F3:起始扇区(CHS 格式)。20 00 00 00:起始逻辑扇区号(LBA 格式,小端序)。E0 9F 0F 00:分区总扇区数。2. 扩展分区(Extended Partition)的链式结构
帖子演示了如何通过 MBR 中的扩展分区项找到第一个扩展分区的起始位置,并读取该位置的扇区。
- 链式逻辑:扩展分区表并非简单的数组,而是一个链表。每个扩展分区扇区(EBR)包含两个分区项:
- 当前逻辑驱动器的分区信息。
- 下一个扩展分区扇区的指针(如果存在)。
- 代码解读:作者通过
mov cx, f441修改读取位置,实际上是在跳转到扩展分区表的起始扇区。这种手动遍历是理解 DOS/Windows 早期磁盘管理机制(如fdisk如何识别逻辑盘符)的核心。3. 关键技术细节与局限性
- INT 13h 的限制:该代码使用传统的 CHS(柱面-磁头-扇区)寻址方式。在 1997 年的技术背景下,这适用于小容量硬盘。对于超过 8GB 的硬盘,CHS 寻址会溢出,必须使用
INT 13h, AH=42h(扩展读功能)配合 LBA 寻址。- DEBUG 环境:
DEBUG是 DOS 下的实模式调试器,直接操作物理内存和硬件中断。在现代 64 位 Windows 环境下,由于保护模式和权限隔离,直接调用INT 13h读取物理磁盘已被操作系统禁止,该方法仅在纯 DOS 环境下有效。- 字节序:帖子中提到的
CX寄存器值(如F441)在DEBUG显示中是按小端序(Little-Endian)处理的,这是 x86 架构的特性,在解析磁盘数据结构时必须时刻注意。4. 历史背景补充
在 90 年代末,文档获取渠道有限,通过
DEBUG直接查看磁盘扇区是系统工程师和底层开发者的“基本功”。这种方法虽然原始,但对于排查分区表损坏、引导记录丢失(如Invalid partition table错误)具有极高的诊断价值。结论:该帖提供的是一种手动解析磁盘分区表的教学演示,准确反映了 MBR 和 EBR 的物理布局。但在现代大容量硬盘和 UEFI 引导环境下,该方法已失效,现代分区管理应参考 GPT(GUID Partition Table)规范及 UEFI 引导流程。
本帖最近评分记录
(共 2 条)
点击查看详情
| 评分人 | 分数 | 时间 |
|---|---|---|
| zhouhuang | +1 | 2008-07-14 01:25 |
| zzz19760225 | +2 | 2017-10-17 16:03 |
ko20010214
=================================
大功告成,打个Kiss!
ko20010214@MSN.com
神州优雅Q300C
Intel CeleronM 370处理器 | 256MbDDR内存
40G硬盘 | USB2.0 | IEEE 1394
13.3 ' WXGA 宽屏(16:10) | COMBO光驱
10/100M网卡 | 四合一读卡器
=================================
大功告成,打个Kiss!
ko20010214@MSN.com
神州优雅Q300C
Intel CeleronM 370处理器 | 256MbDDR内存
40G硬盘 | USB2.0 | IEEE 1394
13.3 ' WXGA 宽屏(16:10) | COMBO光驱
10/100M网卡 | 四合一读卡器

精华I