usbzip+引导技术分析.docx

上传人:b****6 文档编号:8352636 上传时间:2023-01-30 格式:DOCX 页数:6 大小:19.17KB
下载 相关 举报
usbzip+引导技术分析.docx_第1页
第1页 / 共6页
usbzip+引导技术分析.docx_第2页
第2页 / 共6页
usbzip+引导技术分析.docx_第3页
第3页 / 共6页
usbzip+引导技术分析.docx_第4页
第4页 / 共6页
usbzip+引导技术分析.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

usbzip+引导技术分析.docx

《usbzip+引导技术分析.docx》由会员分享,可在线阅读,更多相关《usbzip+引导技术分析.docx(6页珍藏版)》请在冰豆网上搜索。

usbzip+引导技术分析.docx

usbzip+引导技术分析

usbzip+引导技术分析

通过对ultroiso的usbzip+启动方式的分析,现分享心得如下:

  一.usbzip简介

  ZIP一种软驱,在U盘广泛普及的今天很少用了,但是U盘也需要格式,象量产出的usb-cdrom光盘格式,格式化出的hdd硬盘格式,当然还有zip软盘格式.

  zip是一个软盘,他的结构是hdd的一个子集,很象hdd硬盘的一个卷,但没有mbr,不能分区,形式和硬盘其中的一个分区fat32分区完全一样.

  二、usbzip+原理

  usbzip+的目标是兼容usbzip和usbhdd两种格式,他的技术核心是启动扇区同时拥有硬盘分区和卷bpb表,这样他看起来即是一个硬盘,又是一个软盘,

  目的就是欺骗bios,试图(只是试图)让bios把他当软盘和硬盘都可以引导。

这个设计是很棒的,但是实际测试效果却不太好。

因为bios版本种类太多,不是个个bios都会上当的。

  注:

BPB是Bios  Paramater  Block的缩写,在分区的第一个扇区,保存着卷的资料,有大量信息。

  usbzip+的核心技术就是hdd硬盘分区表和软盘(卷)bpb表双格式,其他没有对zip增强什么。

  

  三、usbzip+和usbhdd+的区别(二者完全不同)

  usbzip+兼容zip和hdd,但usbhdd+反过来并不兼容zip,他们是完全不同的技术。

  usbhdd+是对usbhdd的加强,他是一个c/h/s(磁头/道/扇区)老的硬盘访问方式和lba扩展访问方式的隐身中转者(拦截int13),让老的读盘程序不知不觉的使用了新的读盘技术,并没有试图去兼容zip(不过如果有的bios只检验了引导区的55aa标志,usbhdd+还是有可能以zip方式启动的,  不过这时usbhdd也可以)

  而usbzip+是在引导区格式上下功夫,兼容usbhdd,算是不同领域、各显其能。

  

  四、usbzip+的来源

  usbzip+在ultroiso中出现很晚,其实grub早就实现了这个双格式。

很久前软盘流行的时候,grub由于比较大,不能安装在软盘,是一个缺点.

grub就在设计上支持分区表和bpb双格式,目的是把软盘格式化硬盘分区的结构,以安装体积较大的grub,正好和现在的zip+技术不谋而合(但是在windows版本的安装程序Grubinst中并没有实现这个安装功能),usbzip+的始作佣应该是Grub。

  五、我们什么时候需要usbzip+

  从核心技术来看,zip+远没有hdd+精彩,而zip+的启动率也远没有hdd/hdd+高。

但是某台机器需要U盘引导,但是只支持zip的情况下,就要用到usbzip,

当你不想把usbhdd闪存重新格式化,就可以用ultroiso便捷启动写入usbzip+的MBR,以尝试兼容性启动。

  附:

分析代码

seg000:

7C00                jmp    shortloc_7C5E

;按照分区引导代码的约定,下面是bpb表,存放着分区卷的各种数据.可以参考msfat12/16/32说明查看,同时可以看到熟悉的mswin4.1标志

seg000:

7C00  EB5C904D5357494E  342E310002024100  隲怣SWIN4.1.A.

seg000:

7C10  0200020000F8FB00  3F00FF0000000000  ....?

.....

seg000:

7C20  C1F70100000129C2  5FBE904E4F204E41  流..)耞緪NONA

seg000:

7C30  4D45202020204641  5431362020200000  ME    FAT16  ..

seg000:

7C40  0000000000000000  0000000000000000  ................

seg000:

7C50  0000000000000000  00005553422BFA31  ..........USB+?

;bpb表结束

seg000:

7C5E

seg000:

7C5Eloc_7C5E:

                              ;CODEXREF:

seg000:

7C00j

seg000:

7C5E                cli                    ;关中断

seg000:

7C5F                xor    ax,ax

seg000:

7C61                mov    ds,ax

seg000:

7C63                mov    es,ax

seg000:

7C65                mov    ss,ax

seg000:

7C67                mov    sp,7C00h

seg000:

7C6A                sti

seg000:

7C6B                cld

seg000:

7C6C                mov    si,sp

seg000:

7C6E                mov    di,600h

seg000:

7C71                mov    cx,100h

seg000:

7C74                repmovsw

seg000:

7C76                jmp    farptr0:

67Bh;传送自身全部200字节去600处,把此处空间留给分区引导代码

-------------------------------

seg000:

067B                mov    ds:

byte_65D,dl;备份bios参数,dl代表驱动器类型

seg000:

067F                mov    si,787h        ;调用显示子程序显示启动信息

seg000:

0682                call    sub_72D

seg000:

0685                test    dl,80h        ;00H~7FH:

软盘;80H~0FFH:

硬盘

seg000:

0688                jz      shortloc_6A8  ;是硬盘则转6a8

seg000:

068A                mov    ah,8          ;否则取磁盘参数

seg000:

068C                stc

seg000:

068D                int    13h            ;DISK-DISK-GETCURRENTDRIVEPARAMETERS(XT,AT,XT286,CONV,PS)

seg000:

068D                                        ;DL=drivenumber

seg000:

068D                                        ;Return:

CFsetonerror,AH=statuscode,BL=drivetype

seg000:

068D                                        ;DL=numberofconsecutivedrives

seg000:

068D                                        ;DH=maximumvalueforheadnumber,ES:

DI->driveparameter

seg000:

068F                jb      shortloc_6A8  ;这段是zip方式启动的处理

seg000:

0691                and    ah,ah

seg000:

0693                jnz    shortloc_6A8

seg000:

0695                mov    al,dh

seg000:

0697                inc    al

seg000:

0699                jz      shortloc_6A8

seg000:

069B                and    cx,3Fh

seg000:

069F                jz      shortloc_6A8

seg000:

06A1                mov    ds:

word_61A,ax

seg000:

06A4                mov    ds:

word_618,cx

seg000:

06A8

seg000:

06A8loc_6A8:

                                ;CODEXREF:

seg000:

0688j

seg000:

06A8                                        ;seg000:

068Fj...

seg000:

06A8                mov    si,7BEh        ;si指向分区表

seg000:

06AB                xor    ax,ax          ;ax清0

seg000:

06AD                mov    cx,4          ;分区表项计数器

seg000:

06B0

seg000:

06B0loc_6B0:

                                ;CODEXREF:

seg000:

06BCj

seg000:

06B0                test    byteptr[si],80h;是活动分区吗

seg000:

06B3                jz      shortloc_6B8      ;是转6b8

seg000:

06B5                inc    ax                ;不是,计数器+1,继续查

seg000:

06B6                mov    bp,si            

seg000:

06B8

seg000:

06B8loc_6B8:

                                ;CODEXREF:

seg000:

06B3j

seg000:

06B8                add    si,10h        ;指向下一个分区项

seg000:

06BC                loop    loc_6B0        ;循环查

seg000:

06BE                dec    ax              ;ax-1=0的话,只有一个活动分区,正常,转6c3

seg000:

06BF                jz      shortloc_6C3  ;否则报告biosboot异常

seg000:

06C1                int    18h            ;TRANSFERTOROMBASIC

seg000:

06C1                                        ;causestransfertoROM-basedBASIC(IBM-PC)

seg000:

06C1                                        ;oftenrebootsacompatible;oftenhasnoeffectatall

seg000:

06C3

seg000:

06C3loc_6C3:

                                ;CODEXREF:

seg000:

06BFj

;查测扩展int13功能是否存在    AH=41h;    BX=55AAh;    DL=驱动器号

seg000:

06C3                mov    dl,ds:

byte_65D

seg000:

06C7                mov    ah,41h;'A'

seg000:

06C9                mov    bx,55AAh

seg000:

06CC                int    13h            ;DISK-

seg000:

06CE                jb      shortloc_6E1  

seg000:

06D0                cmp    bx,0AA55h      ;如果BX=AA55h则存在

seg000:

06D4                jnz    shortloc_6E1  ;不存在转6e1

seg000:

06D6                test    cl,1          ;cl是返回的每磁道扇区数

seg000:

06D9                jz      shortloc_6E1  ;为1转6e1

seg000:

06DB                mov    ax,4200h      ;这里是用lba方式读盘

seg000:

06DE                mov    ds:

word_782,ax;[782]存成0042

seg000:

06E1

seg000:

06E1loc_6E1:

                                ;CODEXREF:

seg000:

06CEj

seg000:

06E1                                        ;seg000:

06D4j...

seg000:

06E1                call    loc_73C        ;73c是读分区引导公用子程序,

                                                    ;由于zip是软盘方式,不一定支持lbaint13,不支持的话刚才跳过2条指令

seg000:

06E4                jb      shortloc_725  ;读盘失败,进行死循环

seg000:

06E6                mov    ax,ds:

7DFEh    ;

seg000:

06E9                cmp    ax,0AA55h      ;判断是不是正常分区标志

seg000:

06EC                jnz    shortloc_725  ;没有标志55aa,死循环

seg000:

06EE                mov    ax,ds:

word_61A;传递一些bpb参数给读出来的分区扇区bpb表中

seg000:

06F1                mov    ds:

7C1Ah,ax

seg000:

06F4                mov    ax,ds:

word_618

seg000:

06F7                mov    ds:

7C18h,ax

seg000:

06FA                mov    dl,ds:

byte_65D

seg000:

06FE                mov    si,7C24h

seg000:

0701                cmp    byteptrds:

7C10h,0

seg000:

0706                jz      shortloc_713

seg000:

0708                cmp    wordptrds:

7C16h,0

seg000:

070E                jnz    shortloc_713

seg000:

0710                mov    si,7C40h

seg000:

0713

seg000:

0713loc_713:

                                ;CODEXREF:

seg000:

0706j

seg000:

0713                                        ;seg000:

070Ej

seg000:

0713                mov    [si],dl

seg000:

0715                or      byteptrds:

word_782+1,1

seg000:

071A                call    loc_73C

seg000:

071D                mov    si,bp

seg000:

071F                cli

seg000:

0720                jmp    farptr0:

7C00h  ;放出控制权

seg000:

0725;---------------------------------------------------------------------------

seg000:

0725

seg000:

0725loc_725:

                                ;CODEXREF:

seg000:

06E4j

seg000:

0725                                        ;seg000:

06ECj

seg000:

0725                mov    si,7AAh

seg000:

0728                call    sub_72D

seg000:

072B

seg000:

072Bloc_72B:

                                ;CODEXREF:

seg000:

loc_72Bj

seg000:

072B                jmp    shortloc_72B

seg000:

072D

seg000:

072D;===============SUBROUTINE=======================================

seg000:

072D                                          ;显示功能子程序

seg000:

072D

seg000:

072Dsub_72D        procnear              ;CODEXREF:

seg000:

0682p

seg000:

072D                                        ;seg000:

0728p...

seg000:

072D                lodsb

seg000:

072E                and    al,al

seg000:

0730                jz      shortlocret_73B;al如果为零,不显示返回

seg000:

0732                mov    ah,0Eh

seg000:

0734                mov    bx,7

seg000:

0737                int    10h            ;-VIDEO-WRITECHARACTERANDADVANCECURSOR(TTYWRITE)

seg000:

0737                                        ;AL=character,BH=displaypage(alphamodes)

seg000:

0737                                        ;BL=foregroundcolor(graphicsmodes)

seg000:

0739                jmp    shortsub_72D

seg000:

073B;---------------------------------------------------------------------------

seg000:

073B

seg000:

073Blocret_73B:

                            ;CODEXREF:

sub_72D+3j

seg000:

073B                retn

seg000:

073Bsub_72D        endp

seg000:

073B

seg000:

073C;---------------------------------------------------------------------------

seg000:

073C                                        ;由于zip/hdd兼容方式的局限,有可能是不支持的lba读盘的,

                                                    ;这里把读盘子程序独立出来,作为公用

seg000:

073Cloc_73C:

                                ;CODEXREF:

seg000:

loc_6E1p

seg000:

073C                                        ;seg000:

071Ap

seg000:

073C              

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1