MBR中的一点问题

zfqj 2003-09-11 02:12:48
0000:004F 884E10 mov [bp+10],cl
0000:0052 E84600 call 009B ;read DBR
0000:0055 732A jnb 0081

0000:0057 FE4610 inc byte ptr [bp+10]
0000:005A 807E040B cmp byte ptr [bp+04],0B ;FAT32
0000:005E 740B je 006B
0000:0060 807E040C cmp byte ptr [bp+04],0C ;FAT32
0000:0064 7405 je 006B
0000:0066 A0B607 mov al,[07B6]
0000:0069 75D2 jne 003D

0000:006B 80460206 add byte ptr [bp+02],06
0000:006F 83460806 add word ptr [bp+08],0006
0000:0073 83560A00 adc word ptr [bp+0A],0000
0000:0077 E82100 call 009B
0000:007A 7305 jnb 0081 ;successful
0000:007C A0B607 mov al,[07B6] ;error
0000:007F EBBC jmp 003D

0000:0081 813EFE7D55AA cmp word ptr [7DFE],AA55
0000:0087 740B je 0094
0000:0089 807E1000 cmp byte ptr [bp+10],00
0000:008D 74C8 je 0057
0000:008F A0B707 mov al,[07B7]
0000:0092 EBA9 jmp 003D

0000:0094 8BFC mov di,sp ;sp=7C00
0000:0096 1E push ds
0000:0097 57 push di ;di=7C00
0000:0098 8BF5 mov si,bp
0000:009A CB retf

从0000:006B那边3句不是很懂,为什么要把分区起始地址加6?求解答。
...全文
108 49 打赏 收藏 转发到动态 举报
写回复
用AI写文章
49 条回复
切换为时间正序
请发表友善的回复…
发表回复
zfqj 2003-09-17
  • 打赏
  • 举报
回复
不过我想XP安装自己的MBR应该只是为了更适合启动自己的系统吧,如果换成其他的MBR应该也能很好的启动系统。
W32API 2003-09-17
  • 打赏
  • 举报
回复
只安装 XP 系统的我就不清楚了。
之前,在 XP 刚出来的时候。
我有朋友安装了 2K 和 XP 的双系统,
在 2K 下没有访问 XP 系统盘的权限。。。也许会与这个有关。。。
Areslee 2003-09-17
  • 打赏
  • 举报
回复
?难道有什么从硬盘启动的OS可以不用MBR吗?
cnzhzy 2003-09-17
  • 打赏
  • 举报
回复
安装XP会修改MBR吗?如果XP安装在C分区呢?XP在计算机启动后加载时会用到MBR吗?
zfqj 2003-09-17
  • 打赏
  • 举报
回复
学习学习嘛!我想写一个图形界面的多系统启动,加上鼠标的操作,不知道需要掌握些什么资料.
Areslee 2003-09-17
  • 打赏
  • 举报
回复
也许吧
zfqj 2003-09-16
  • 打赏
  • 举报
回复
是不是安装系统的时候,操作系统会安装自己的MBR?
应该是的吧.
Areslee 2003-09-16
  • 打赏
  • 举报
回复
偶马上看看偶的MBR
偶的系统是C:98 E:2K I:XP
giantzz 2003-09-16
  • 打赏
  • 举报
回复
易水这回知道了吧,还说有病毒,不要把贴主吓到了。
只要你最后安的是XP,那么情况就差不多少.
to zfqj(风子清):
MBR好多呢,看的过来吗,看那么多有什么意义吗?根据自己的需要写就OK了.
zfqj 2003-09-16
  • 打赏
  • 举报
回复
HOHO,不知道各位有没有其他版本的MBR,发上来给我看看,好跟这个XP的
MBR比较一下,有利于我写多系统引导菜单.
xiaohedou 2003-09-16
  • 打赏
  • 举报
回复
汇编语言有这么多高手!
W32API 2003-09-16
  • 打赏
  • 举报
回复
不是说 XP 更改了 MBR 的嘛。。。
Areslee 2003-09-16
  • 打赏
  • 举报
回复
晕!我的MBR还真是这样的,看来有8成是XP干的好事
Areslee 2003-09-15
  • 打赏
  • 举报
回复
当然有问题,MBR是不需要检查DBR是什么文件系统的,DBR的第一个扇区不够用的话应该由DBR自己装入其他的部分。
FAT32的DBR的第二部分就在第6个扇区上
giantzz 2003-09-15
  • 打赏
  • 举报
回复
易水分析过贴主的那种情况吗?
这个MBR程序是在C区[主分区]装了98,D盘[逻辑盘]装了XP之后读取的
Areslee 2003-09-15
  • 打赏
  • 举报
回复
我好歹也分析过几个MBR,没见过与FS相关的
zfqj 2003-09-15
  • 打赏
  • 举报
回复
我上面说过了啊,是我直接读取硬盘零扇区得到的啊,然后我反编译一下啊.
我的电脑一直很正常啊,没见有什么病毒啊,启动也很正常啊.这段代码没问题吧.
Areslee 2003-09-15
  • 打赏
  • 举报
回复
不是,你这段代码从哪里来的,肯定来源有问题
zfqj 2003-09-15
  • 打赏
  • 举报
回复
FAT32的DBR的第二部分就在第6个扇区上
原来如此,这下有点明白。
易水:
是不是这个MBR先读取第一个扇区,成功的话就结束,不成功则判断如果是FAT32就尝试读取6扇区,这是不是为了增加启动系统可能性,使其能够在0扇区读取异常的情况下都能启动windows。
giantzz 2003-09-14
  • 打赏
  • 举报
回复
那个看到过,谢谢
加载更多回复(29)
什么是MBR和主引导引导扇区?什么是主分区、扩展分区、逻辑分区?什么是活动分区、引导分区、系统分区、启动分区?一下子罗列这么多概念,恐怕很多人都搞不清它们的区别和联系吧。网上虽然不少解释,但很多是模棱两可甚至是错误的,反而越弄越糊涂。猫猫煞费苦心的把这一大串概念研究了很长时间,试图搞明白,为了以后查阅方便,于是把对这些概念的理解总结了一下。而要想分清这些概念,真要费一点脑筋啊! 一、MBR和主引导扇区 首先简要介绍MBR和主引导扇区的关系。 主引导扇区是硬盘0号柱面,0号磁头的第一个扇区,大小为512字节。(注:硬盘可以用柱面、磁头和扇区定位) MBR,占用主引导扇区的前446字节,紧随其后的64字节是分区表DPT,最后还剩两个字节则恒为55AA,表示结束符号。(下图,演示了它们的位置关系) 然后,具体说一说MBR和分区表。 MBR,全称为Master Boot Record,即硬盘的主引导记录。MBR,共446字节,一般在操作系统安装时写入,但它并不属于操作系统。MBR就是一段引导程序,用于检测磁盘的分区合法性和加载操作系统,它的重要作用就是识别活动分区,并引导操作系统。 分区表DPT,共64字节,记录了硬盘有多少分区以及分区的各种属性。由于一个分区的信息要占用16字节,所以分区表只能定义4个分区,这就是为什么我们说硬盘一般最多只能分为4个主分区(这里说“一般”是对基本磁盘而言,而对于动态磁盘则无此限制,但大部分都在使用基本磁盘,可以暂不考虑 )。 计算机开机后BIOS加电自检,一切正常后,找到第一个启动设备(一般就是硬盘),然后从这个启动设备的主引导扇区读取MBRMBR这段引导程序识别活动分区,引导操作系统。 二、主分区、扩展分区、逻辑分区 正如前面所讲,主分区是由主引导扇区64字节的分区表所定义的,最多只能有4个。但为了满足更多分区的需求,变产生了扩展分区。形式上,如果拥有扩展分区,就必须牺牲一个主分区,而且最多有一个扩展分区,也就是说:主分区+扩展分区<=4 and 扩展分区<=1。因此扩展分区也可以看成一种特殊的主分区。 但扩展分区并不可以直接使用,扩展分区又必须以逻辑分区的形式出现,可以这样认为:扩展分区包含着若干逻辑分区,而且至少包含一个。 扩展分区的逻辑分区是以链式存在的。即每一个逻辑分区都记录着下一个逻辑分区的位置信息,依次串联。事实上每一个逻辑分区都有一个和主引导扇区类似的引导扇区,引导扇区里有类似的分区表。该分区表记录了该分区的信息和一个指针,指向下一个逻辑分区的引导扇区。 因此,逻辑分区是借鉴了主分区的方法,相当于在一个主分区下面建立了若干级“主分区”。从上面的描述,猫猫推测,逻辑分区是建立在操作系统级别,由操作系统识别的。另一个可以预测的现象是:一旦某一个逻辑分区损害,跟在它后面的所有逻辑分区都将丢失,而前面的逻辑分区去可以保留。这也是链式结果的特点。 三、活动分区、系统分区、启动分区、引导分区 这四个术语和前面三个不同,前面三个是讲述分区的“物理”形成。而这四个术语描述了分区的功能,并且更易混淆。 首先,根据Windows XP随机帮助文档看,引导分区就是启动分区,两者是同一概念,所以下面就只讨论活动分区、系统分区和启动分区。 系统分区和启动分区比较。 这是两个极易混淆的概念,因为两者的含义似乎和它们的名字正好颠倒了。Windows帮助文件的术语表里是这样解释他们的:”系统分区,包含加载 Windows(例如,Ntldr、Osloader、Boot.ini、Ntdetect.com)所需的硬件特定文件的分区。系统分区可以(但不是必须)与启动分区相同。启动分区,包含 Windows 操作系统及其支持文件的分区。启动分区可以(但不是必须)与系统分区相同。“ 看起来是很糊涂,但说的简单些就是:系统分区包含Ntldr、Osloader、Boot.ini、Ntdetect.com等文件,而启动分区包含Windows和system32文件。所以,真正包含操作系统内核文件的分区是启动分区,包含操作系统引导文件的确实系统分区,这是要特别注意的一点。 有些人就疑问了,我的Ntldr、Osloader、Boot.ini、Ntdetect.com和Windows、system32文件都在C盘,那是怎么回事?这很容易解释,你的C盘既是系统分区也是启动分区,只安装一个操作系统的计算机大都属于这种情况 ,所以微软在括号里说“但不是必须”。 其实系统分区时针对引导来说的,而启动分区时针对操作系统来说的。像我的电脑C盘先安装了Vista,后来D盘安装了XP,现在C盘是系统分区;至于哪个是启动分区,就要看我用那个系统了,进Vista,C盘就是启动分区,进XP,D盘就是启动分区。(再强调,启动分区包含Windows内核文件,而系统分区才包含操作系统引导文件,不然会越看越糊涂的。) 最后要搞明白的是活动分区,这一点,比较麻烦。 Windows帮助文档里的定义是:”活动分区,基于 x86 计算机的启动分区。活动分区必须是基本磁盘上的主要分区。如果只使用 Windows,则活动分区可以与系统卷相同。“补充说明有:活动分区必须是主分区,一块硬盘上只可以有一个活动分区。其他主分区可以被标记为活动分区。 而从主引导扇区处看,活动分区仅仅是在分区表,16个字节的最前面含有80标志的分区信息所定义的分区。 但猫猫对Windows帮助文档的定义不敢苟同(也许是我错了,但是我思来想去,只有这样可以解释通)。首先,我们知道活动分区是通过主引导扇区的分区表标记的,所以理论上,每个主分区都可以被标记为活动(只是不当的标记会导致系统无法启动)。Windows帮助文档说活动分区,是基于x86的计算机的启动分区,那不就是说是Windows文件所在分区。可是对于双系统来说,这种说法显然不对,因为双系统的启动分区是依据被启动的系统而定的。所以,我假定微软也把系统分区和启动分区的概念搞混淆了。 所以,结果变为,活动分区是基于x86计算机的系统分区。换句话说,活动分区是一种系统分区。在这种情况下,一个主分区是不是系统分区似乎并不具有价值,只有被标记为活动的主分区才有价值。因为,只有标记为活动分区,这个系统分区的Windows启动支持文件才会被加载,然后通过这些引导存储在启动分区的Windows内核文件,完全Windows的启动。 所以,Windows可以被安装在逻辑分区内(我发现我的电脑就是这样的),但必须在活动分区的启动支持文件里加上对这个逻辑分区里Windows的引导信息。具体到XP,就是boot.ini文件添加上对双系统的引导,而这个boot,ini文件必须在启动分区。而我了一个实验,在XP下面通过启动和故障恢复对话框修改boot.ini文件,发现修改的并非XP所在的分区的boot.ini,而是Vista所在分区的boot.ini。(我在主分区C盘安装了Vista,逻辑分区D盘安装了XP)。同时,我通过软件废除Vista的新式引导方式,恢复xp的boot.ini式引导方式(此时,C盘Vista已无法引导),发现分别修改C盘和D盘的boot.ini,只有C盘的boot.ini才有效。再次印证了我的假设。 另外,如果两个系统都安装在主分区,则可以通过标记各自的安装分区为活动分区,而启动不同的操作系统。 参考资料: Linux引导过程内幕:http://www.ibm.com/developerworks/cn/linux/l-linuxboot/ 维基百科-主引导扇区:http://zh.wikipedia.org/wiki/%E4%B8%BB%E5%BC%95%E5%AF%BC%E6%89%87%E5%8C%BA 硬盘主引导记录详解(汇编代码详解):http://www.cnblogs.com/woodfish1988/archive/2007/11/25/971482.html Windows XP随机帮助文档(Windows帮助文档是一个很好的东西,有些人优化系统竟然把它删了,真是太不应该了。 呵呵,本文地址,猫猫的园地:http://blog.mm-share.cn/post/Partition-Comparison.html 写了这么多,希望对大家有所帮助。若有不足之处,望方家指正!另外,还有基本磁盘、动态磁盘,卷和分区的区别等待问题,还要进一步研究。
相信许多liunxer初次听到“GRUB4DOS”这个名字,第一感觉就是:这个对我没用,因为我不用DOS,即使用也不会去通过它启动GRUB。先别急,再问一句:您是否用过grldr呢?是否用过MaxDos、一键 ghost、矮人DOS工具盘?如果答案是肯定的,那您已经在用GRUB4DOS了。 是它的名字给人们造成了误解,这也是历史遗留问题——一开始仅仅是“for dos”,而后来开发越来越深入,“FOR DOS”已远不能涵盖其全部。于是它的名字就成了一个障碍,新接触的人往往望名生意,以为它是专给DOS用的,便不去关注——我本人就是如此,很久之后才重新发现它,所以写下这篇文字,希望更多人能够了解并使用这一优秀作品,享受它带来的可靠与便捷。 首先搞清楚与 GNU GRUB 的关系。 GNU GRUB 分为 GNU GRUB Lagecy 和 GNU GRUB2 两代。GNU GRUB Lagecy 其实就是原来的 GNU GRUB 0.xx ,最新版是 2005 年发布的 GNU GRUB 0.97 。目前已停止开发,并改名为 GNU GRUB Lagecy 。GNU GRUB2 是第二代 GRUB,它将取代原来的 GNU GRUB (例如0.9x版),但目前还处于开发阶段,尚未发布正式版。 而 GRUB4DOS 则是对 GNU GRUB Lagecy 的二次开发。该项目最早由 不点 在2003年发起,目前主要由他、bean 和另外几位国人维护,很多人贡献了代码,再加上广大网友热心帮助,使得 GRUB4DOS 不断完善。在当前 新的 GRUB2 没有到位、老的 GNU GRUB Lagecy 又有许多不完善 的情况下,GRUB4DOS 受到越来越多人的欢迎。 GRUB4DOS 在保留 GNU GRUB 0.97 原有功能的基础上,做了很多改进,简单归纳如下: 1、A20代码 和 bug修正 对A20的处理历来就是一个棘手问题。当初IBM引入这一设计,本意是为了让以往那些BUGGY软件能够运行,结果造成后世无穷无尽的隐患。当然不能全怪 IBM,真正应当责怪的是那些不遵守IBM标准的硬件厂商,它们生产的系统无法用常规的几种方法来控制A20,使得软件开发者可能在很多意想不到的地方碰上A20这个妖魔,除了造成死机之外,还导致执行效率的极度降低。在微软的XMS规范就明确写着,A20的控制在有些机器上是非常耗时的一个操作。 GNU GRUB 0.97的A20代码很明确是有问题的,这在GNU GRUB邮件列表档案就有提到。很多用户报告在使用gnu grub 0.97时键盘失去响应。grub开发组在grub2对A20代码打了补丁,以解决这些问题,但是这个补丁并没有打到我们目前广泛使用的0.97版上。为此GRUB4DOS用取自Linux内核的A20代码替换了原代码,并参考其他一些开源代码做了很多改进,基本上解决了这一问题。 A20只是改造的一个方面,在GRUB4DOS的开发过程修复的GNU GRUB 0.97的bug还有很多,有些在Changelog并没有提到。到目前为止,已经把那些严重的BUG排解殆尽了,应该可以比较平滑地使用GRUB4DOS了。 2、磁盘仿真(虚拟磁盘) 这是GRUB4DOS的一大特色功能,开发者下了不少功夫。这一功能是将 软盘镜像或硬盘镜像甚至某个硬盘分区 虚拟成 软驱或硬盘,进而运行其的操作系统(DOS、win98),类似于以前流行的“虚拟软驱”(vfloppy),但功能要强得多。 用SYSLINUX的memdisk也可实现虚拟磁盘。比较而言,GRUB4DOS功能更强,限制更少,用法更灵活,同时对bios的要求也要高那么一点点,在一些BIOS有缺陷的机子上可能会出问题(不过不用太担心,实践表明这种情况极其罕见)。 3、多种方式进入grub环境 1)通过dos 在dos下运行grub.exe即可进入纯粹的grub环境,并部分地支持退回到DOS。也可把grub.exe作为 CONFIG.SYS 里的设备驱动文件而运行。 2)通过Windows启动菜单 这是被广泛使用的一种用法。MaxDos、一键ghost硬盘版、矮人DOS工具盘之类的软件就是以这种方式启动grldr,再通过磁盘仿真虚拟出一个软驱,进而启动DOS的。 3)将GRUB4DOS引导代码写入硬盘MBR,开机直接进入grub环境 乍一看这不算什么改进——GNU GRUB本来就可以这样引导,但实际上在这里 GRUB4DOS 有相当大的革新。 GNU GRUB 的安装方法是: root (xxx,x) setup (xxx) 第一句是指定一个分区,该分区须存放有/boot/stage1和/boot/stage2文件,第二句是将引导代码写入硬盘MBR。这样安装的 GRUB,其MBR引导代码被设置为从固定的分区加载stage2。假如我们某一天因为某些原因,需要删除或格式化该分区,或者做一些会引起该分区序号变化的操作(比如用 pqmagic 在该分区前添加或删除分区),就需要预先重装一次grub,重新指定存放stage2文件的分区,否则将无法引导。这一点上 GNU GRUB 显得不够灵活。 而 GRUB4DOS 采取了新的策略:其MBR引导代码并非固定地指向某个分区,而是搜索所有分区,查找并加载 grldr,只要某分区上存有一份 grldr,就能启动。而且安装时可以将原微软的MBR备份,启动时如果找不到grldr,便自动加载备份的MBR。显然这种方式更加灵活、稳健,所以 GRUB4DOS 虽然保留了 GNU GRUB 的全部命令和功能(包括 setup 命令),但不推荐使用传统的安装方式。 当然 GRUB4DOS 方式也不是十全十美,因为其引导代码还不能识别所有的文件系统,目前支持仅 NTFS/FAT12/FAT16/FAT32/EXT2/EXT3(也不少了 ,以后将支持更多的格式),所以可能需要专门设一个分区来存放 grldr 。不过在我看来这是值得的,一点小麻烦换来了更多的方便和稳定。 4、图片背景支持 可用 640x480@14位色 的图片做背景。图片制作请参考这里: http://bbs.znpc.net/viewthread.php?tid= ... a=page%3D4 5、文支持 GRUB4DOS 发布有文版,大大方便了文用户。 6、光驱支持 该功能使得用户可以再GRUB环境下访问光驱,并可由光驱启动,很实用。Os:GNU/Debian Linux 5.0 Lenny -AMD Athlon(tm) 64 Processor 3000+ -NVIDIA GeForce 7300 GT -512M*2 DDR Memory -ST SATA 250G

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧