U盘启动以及int 13h扩展读取U盘内容
2012-11-12 21:43
190 查看
从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
如上图所示,运行工具,在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盘量产工具后,比如实验U盘为金士顿4GBU盘,主控芯片为群联,选择了群联量产工具v1.96.00,先打开ParamEdt-F1-v1.0.20.2.exe进行量产参数设置,在Mode选择时,选择21就是量产为两种模式的U盘。然后使用量产程序进行量产处理。
如果选择了处理前格式化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
一、从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
如上图所示,运行工具,在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盘量产工具后,比如实验U盘为金士顿4GBU盘,主控芯片为群联,选择了群联量产工具v1.96.00,先打开ParamEdt-F1-v1.0.20.2.exe进行量产参数设置,在Mode选择时,选择21就是量产为两种模式的U盘。然后使用量产程序进行量产处理。
如果选择了处理前格式化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
相关文章推荐
- U盘启动以及int 13h扩展读取U盘内容
- U盘启动并读取dx寄存器的值
- c#读取文件内容存放到int数组 array.txt
- Android项目实战--手机卫士18--读取用户的短信内容以及短信备份
- 多系统U盘启动盘的制作,成功启动win8PE,ubuntu,deepin2013,deepin2014,以及通过U盘启动电脑已装系统。
- Android读取SD/USB空间大小以及内容
- C和指针,char扩展int 以及EOF的问题!
- 扩展int 13H/调用规范 /大硬盘读写中断/FAT NTFS文件结构
- 通过短信***来讲解内容提供者,内容观察者,以及无界面后台运行服务,开机启动和杀死服务后重新启动
- 读取文件内容到int数组的函数处理方法
- c#读取文件内容存放到int数组 array.txt
- java学习笔记:使用zip api进行文件解压缩以及不解压直接读取指定文件内容
- 扩展Int 13H调用规范
- 通过短信窃听器来讲解内容提供者,内容观察者,以及无界面后台运行服务,开机启动和杀死服务后重新启动
- ubuntu server 版的 ISO文件,在 Ultra ISO 打开,内容不对,写入到 启动U盘,也不能引导系统
- java中的文件读取和文件写出:如何从一个文件中获取内容以及如何向一个文件中写入内容
- c# 读取文件内容存放到int数组 array.txt
- 中断INT 13H的扩展功能
- 读取项目中classpath下的路径以及一些扩展
- SSH开发框架中,实现系统启动加载类,读取数据库常用数据进入内存以及将数据放在application