操作系统真象还原 硬盘及分区表

首先区分MBR EBR OBR 

图中可以看出 硬盘开头有一个MBR称为主引导扇区 然后是几个主分区,最多是4个主分区。MBR中有个64字节大小的分区表,一共是4个表项

MBR的组成: 

446byte的引导程序 64byte的分区表 0x55aa魔数

 

对硬盘的操作主要是通过两种寄存器,一个通道上的Master和Slave盘都可以通过同一个寄存器进行操作 

Command Block Registers 和Control Block Registers

  

 

其中的device寄存器和status寄存器分别为:

所以在对硬盘进行操作时,可以通过对端口上寄存器的读写来进行 

第13章对硬盘进行分区表,在文件ide.h的开头就是定义了一批宏 分别为 

#define reg_data(channel) (channel->port_base + 0)
#define reg_error(channel) (channel->port_base + 1)
#define reg_sect_cnt(channel) (channel->port_base + 2)
#define reg_lba_l(channel) (channel->port_base + 3)
#define reg_lba_m(channel) (channel->port_base + 4)
#define reg_lba_h(channel) (channel->port_base + 5)
#define reg_dev(channel) (channel->port_base + 6)
#define reg_status(channel) (channel->port_base + 7)
#define reg_cmd(channel) (reg_status(channel))
#define reg_alt_status(channel) (channel->port_base + 0x206)
#define reg_ctl(channel) reg_alt_status(channel)

 

对应的就是Command Block Registers 这批寄存器 channel->port_base对应的分别是0x1f0和0x170

这样就可以直接通过inb outb 等函数对寄存器进行读写,从而控制硬盘

 

posted @ 2017-11-28 20:30  菜比170  阅读(402)  评论(0编辑  收藏  举报