首页
社区
课程
招聘
u盘引导MBR编写 如何直接读取u盘扇区
发表于: 2010-11-5 19:36 12830

u盘引导MBR编写 如何直接读取u盘扇区

2010-11-5 19:36
12830
u盘系统 MBR的一段代码
        mov eax,0x201
        mov ecx,02h              ;读第二扇区的原始MBR引导开机
        mov edx,0x80
        mov ebx,0x7c00         
        int 0x13
想读取u盘的第二个扇区到内存0x7c00 这么写肯定不对 把0x80改成01 02什么的试过很多次 没一次好使 这个代码是读取硬盘的试过好用 我想知道读取u盘应该怎么写 google好几天了无果 希望大家指点一下

具体的参考Cryin的文章
http://bbs.pediy.com/showthread.php?t=121797
我就是想把它的这个代码弄到u盘系统上去

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 338
活跃值: (103)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
2
嘎嘎 咋给我扣了100KX啊
2010-11-5 19:37
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
楼猪,别忘了加电启动是实模式,16位代码,只有ax,没有eax,你这样写肯定不对。
2010-11-5 19:41
0
雪    币: 2109
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
http://en.wikibooks.org/wiki/X86_Assembly/Bootloaders
The DL register will contain the drive number that is
being booted from which can be used if you want to read more
data from elsewhere on the drive.

所以 mbr 要把 DX (u盘号码) 先存起来.
要读资料的时候再放回去.
2010-11-5 19:57
0
雪    币: 1489
活跃值: (993)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
收藏了,谢谢
2010-11-5 20:05
0
雪    币: 338
活跃值: (103)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
6
自己顶一下
2010-11-5 22:47
0
雪    币: 338
活跃值: (103)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
7
        mov es,dx
        mov eax,0x201
        mov ecx,02h              ;读第二扇区的原始MBR引导开机
        mov edx,0x80
        mov ebx,0x7
忘记写第一行了  我原来不知道啥意思就没黏贴上 这样是原来的代码
就是在MBR里想读取u盘的第二扇区 就不好使
2010-11-5 22:56
0
雪    币: 2109
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
把 mov edx,0x80 这一行移除
在读取之前, 不要用 dx 即可.
(BIOS 会把 u盘 的代号放进 DX, 所以不用更动)
2010-11-5 23:51
0
雪    币: 338
活跃值: (103)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
9
谢谢楼上的朋友 不过我反复试过了 还是不行 而且我还在硬盘下什么都没执行的情况下 直接打印了DX 也不是80
2010-11-8 14:49
0
雪    币: 33
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
找了半天没找到 原来是结贴了..

问题解决了么?
2010-11-10 17:25
0
雪    币: 338
活跃值: (103)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
11
没解决 只能自己写MBR了
2010-11-10 21:58
0
雪    币: 33
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
我觉得应该不是MBR程序的问题  可能是USB启动盘的格式引起读取失败的

起初我也以为是int13的参数dl有问题,但是我在程序开始保存dl后(bios在运行mbr前会把磁盘信息存到dl),调用int 13时取出来仍然不行

后来我想到,usb启动盘在某些机器上因为写入格式不同会引起一些问题,我就逐步测试了每种格式

在我的机器上,测试结果是这样的

制作usb启动盘软件                  写入格式              正常引导           加密引导            
DiskGenius3.2.2010                 USB-FDD             失败                 失败
                                    USB-HDD             成功                 失败
                                    USB-ZIP              成功                 成功

UltraISO9.3.5.2716                  USB-HDD            成功                 失败
                                    USB-ZIP              成功                 成功
                                    USB-HDD+          成功                 成功
                                    USB-ZIP+            成功                 失败

其中USB-ZIP+加密引导失败是因为FAT BPB数据写在第一扇区,修改成加密MBR后造成U盘文件系统破坏,无法搜索U盘里的GRUB启动文件。实际上读取第二扇区的备份MBR还是成功的。

完全成功的只有USB-ZIP和USB-HDD+。
原MBR复制到第2扇区,第1扇区写入加密MBR,并复制原MBR的磁盘分区表到第一扇区,顺利进入GRUB引导菜单。
测试的时候加密MBR我没有做任何修改,U盘扇区复制和写入我图方便直接用的winhex。

虽然迟了点,但希望仍有所帮助。
2010-11-11 10:40
0
游客
登录 | 注册 方可回帖
返回
//