U盘启动以及int 13h扩展读取U盘内容

从U盘启动有三种方式:USB-HDD, USB-CDROM, USB-FDD,其中USB-FDD格式较老,同时兼容性存在一定问题,目前也仅仅针对USB-HDD以及USB-CDROM两种方式进行了研究。

 

一、从U盘启动

1、USB-HDD方式简介

USB-HDD方式是将U盘格式化成硬盘格式,具有与硬盘相同形式的MBR,只需要将启动引导代码写入USB-HDD格式U盘的MBR,同时在启动时,进入BIOS选择从USB-HDD启动,或者在硬盘启动序列中,将U盘置成主磁盘。

USB-HDD方式存在一定的问题,比如,选择USB-HDD启动后,U盘成了主磁盘,调用int 13h中断进行读写时,dl=80h对应的磁盘就是U盘,在引导原系统时存在一定问题,需要再进行启动盘切换。同时,如果用USB-HDD方式启动,进行系统安装时,也应当注意,C盘对应的是U盘,选择安装系统文件目录时需要注意。

2、USB-HDD格式U盘的制作流程

主要工具:选择hp U盘格式化工具,如HP USB Disk Storage Format Tool

U盘启动以及int 13h扩展读取U盘内容_第1张图片

如上图所示,运行工具,在Device处选择U盘,再选择Createa DOS startup disk -> using DOS system files located at:选择dos文件,点击Start,等待片刻即可。

3、USB-CDROM方式简介

USB-CDROM方式是比较主流,同时也是兼容性相对来说比较好的一种方式。USB-CDROM方式就是将U盘利用指定厂商的U盘量产工具,量产成CDROM形式,具有只读特性。启动时,选择USB-CDROM启动,或者,在光盘启动序列中,将U盘量产后的USB-CDROM置成优先选择即可。

 

4、USB-CDROM格式U盘制作流程

主要工具:ChipGenius用于查看U盘信息,包括USB设备ID、芯片厂商,芯片型号等重要信息;U盘量产工具,这个与U盘的芯片厂商有关,得使用与U盘主控相一致的量产工具,否则将造成不好后果。

U盘启动以及int 13h扩展读取U盘内容_第2张图片

找到对应U盘量产工具后,比如实验U盘为金士顿4GBU盘,主控芯片为群联,选择了群联量产工具v1.96.00,先打开ParamEdt-F1-v1.0.20.2.exe进行量产参数设置,在Mode选择时,选择21就是量产为两种模式的U盘。然后使用量产程序进行量产处理。

U盘启动以及int 13h扩展读取U盘内容_第3张图片

如果选择了处理前格式化U盘,则在进行量产时,需要在量产工具对U盘进行格式化后,重新插拔U盘,待系统识别后,点击确定开始量产,知道变绿方可结束,期间不要断开操作,以免发生异常。

 

二、U盘引导区代码以及U盘内容读写

1、编写启动引导代码时存在的问题

a)  当BIOS把第一扇区(或引导区)代码加载进内存0x7c00处时,不要认为cs=0x7c0,在实体机中,很多cs=0,而ip=0x7c00,容易出错

b)  加载原系统MBR时,由于从U盘启动,int 13h读时,不报错误,造成原MBR容错代码无效,需要向下传递dl=80h加载硬盘中系统。

c)  Call int13h_process与int 13h相比,栈平衡上存在差异,call int13h_process返回后,sp=sp+2,因此需要sub sp,2,或者返回时retf 2平衡栈空间。

2、启动时对HDD U盘进行读写

对U盘进行读写,需要支持int 13h扩展功能,具体如下:

    mov bx, 0x7c0

    mov ds, bx

    mov si, @DiskAddressPacket          ;ds:si<-- DiskAddressPacket

    mov ah, 0x42

    mov dl, 0x81                        ;dl<-- 磁盘号

    int 13h

其中,需要注意一点,当磁盘为硬盘,同时有多块硬盘时,dl并非从0x80开始连续递增,0x81也并不一定指向从硬盘。

三、调试方法

1、qemu + IDA调试

存在问题,qemu对u盘启动的支持存在一定问题,经试验USB-HDD格式时,qemu的BIOS加载的不是MBR,而是所谓的boot sector。

2、VMware+ IDA调试

VMware支持MBR的调试,可以与IDA一起使用,进行MBR之后的调试,具体设置方法见参考文献

3、bochs不支持U盘启动,所以没有用Bochs

 

参考文献

http://wiki.osdev.org/VMWare

Debugging Windows kernel under VMWare using IDA's ... -Hex-Rays

你可能感兴趣的:(USB)