MBR和DBR详细分析
之所以贴出来,是有些地方不明白,希望能于大家交流分析
我系统2K PRO SP4,C盘采用NTFS,用WinHex提取MBR和DBR,拿IDA分析的.关键在DBR几处不明白.
1.一点预备知识:
主引导扇区代码(MBR)
代码:
====================================================================================
MBR( Master Boot Record )主引导记录包含两部分的内容,前446字节为启动代码及数据,而
从446(0x1BE)开始则是分区表,分区表由四个分区项组成,每个分区项数据为16字节,记录了
启动时需要的分区参数。
在CPU上电之后,若由硬盘启动,则BIOS将硬盘的主引导记录(位于0柱面、0磁道、1扇区)读
入7C00处,然后将控制权交给主引导代码。主引导代码的任务包括:
(1) 扫描分区表,找到一个激活(可引导)分区
(2) 找到激活分区的起始扇区
(3) 将激活分区的引导扇区装载到内存7C00处
(4) 将控制权交给引导扇区代码
如果主引导代码无法完成上述任务,它将显示以下错误信息之一:
No active partition.
Invalid partition table.
Error loading operating system.
Missing operating system.
====================================================================================
FAT16分区尺寸与LBA
====================================================================================
LBA HeadsPerCylinder SectorsPerTrack Maximum Size for Boot Partition
Disabled 64 32 1GB
Enabled 255 63 4GB
为了适应超过8G的硬盘,Windows2000忽略了Start CHS和End CHS,而使用StartLBA和TotalSector
来确定分区在整个磁盘中的位置和大小。
====================================================================================
分区表项结构(16字节)
====================================================================================
typedef struct _PARTITION_ENTRY
{
UCHAR BootIndicator // 能否启动标志
UCHAR StartHead // 该分区起始磁头号
UCHAR StartSector // 起始柱面号高2位:6位起始扇区号
UCHAR StartCylinder // 起始柱面号低8位
UCHAR PartitionType // 分区类型
UCHAR EndHead // 该分区终止磁头号
UCHAR EndSector // 终止柱面号高2位:6位终止扇区号
UCHAR EndCylinder // 终止柱面号低8位
ULONG StartLBA // 起始扇区号
ULONG TotalSector // 分区尺寸(总扇区数)
}PARTITION_ENTRY,*PPARTITION_ENTRY
====================================================================================
主引导记录(MBR)结构
====================================================================================
typedef struct _MASTER_BOOT_RECORD
{
UCHAR BootCode[446]
PARTITION_ENTRY Partition[4]
USHORT Signature
}MASTER_BOOT_RECORD,*PMASTER_BOOT_RECORD
====================================================================================
2.MBR详细分析
代码:
code:7C00 code segment byte public 'CODE' use16
code:7C00 assume cs:code
code:7C00 &