1. 背景
本文主要介绍MBR的读取和解析,并提供了基于元神操作系统的实现代码。由于解析MBR的目的是定位到NTFS磁盘分区进行文件操作,所以只解析了MBR的分区表部分,至于MBR的其它部分,可以参考相关文档进行理解。
2. 方法
(1)调用元神操作系统的API读取MBR
使用API_READ_DISK_SECTOR来调用元神操作系统的API,代码如下所示:
use32
START:
pusha
call read_disk_mbr
popa
iret
include 'api_def.inc'
OS_API equ 0x00030C16
API_PARAM equ 0x03000000
SEG_BASE equ 0x00040000
cursor_x equ 0x02004B10
cursor_y equ 0x02004B12
sector_buff: times 512 db 0
read_disk_mbr:
pusha
mov edi, API_PARAM
mov dword [fs:edi], API_READ_DISK_SECTOR
mov dword [fs:edi+4], 2 ;2 parameters
mov dword [fs:edi+8], 0 ;parameter_1: sector no.
xor eax, eax
mov ax, ds
add eax, SEG_BASE
mov bh,byte [fs:eax+7]
mov bl,byte [fs:eax+4]
shl ebx,16
mov bx,word [fs:eax+2]
add ebx, sector_buff
mov dword [fs:edi+12], ebx ;parameter_2: start address of buffer
call pword [fs:OS_API]
mov eax, 512
movzx ebx, word [fs:cursor_y]
movzx ecx, word [fs:cursor_x]
mov esi, [fs:edi+1