很抱歉,我没有下载你的映像。我觉得可以说得清楚的。 你是说,MBR 上既有分区表,也有 BPB 吧?这种情况只对 FAT 有效。如果是 NTFS,那么这个 BPB 所在的扇区,无法成为 NTFS 的第一扇区。 三重 mbr 以及后来的 multimbr,都是这样的结构,即,引导扇区同时含有 FAT 的 BPB 和 分区表。 你自己可以写一个引导程序,用来引导你的内核文件。但是难度比较高,因为 BPB 和 分区表同时存在,那么扇区的代码空间被压缩得很少了,通常是不够用来查找你的内核文件的。但你可以曲径通幽,分步骤实现。第一扇区有限的代码,可以用来直接加载某个固定的扇区序列(假定这个扇区序列是已知的)。这样,你就可以达到目的了。但这样做的代价是通用性降低,只能加载你所设定的扇区序列,别人用起来不方便。multimbr 的第一扇区就是这样设计的,你可以参考一下,没准可以有值得借鉴的地方。 |
sunsea 发表于 2015-2-11 16:31 可能是grldr检查不合法。(hd0)的0扇区应该是mbr,不是bpb,不能作为分区的开头。 实际放入一个img文件,用它的其实扇区和长度试试。我这都是纸上谈兵 |
这个要找高手问问了,但应该没有(fd0,0)吧?直接ls (fd0)/呢? |
sunsea 发表于 2015-2-11 14:39 这个可能就要用到高级功能了,是不是这个方法? map (hd0)xxxxxx+yyyyyy (0) 在"支持含有碎片的文件仿真"这个帖子里看到的。 |
sp_star 发表于 2015-2-11 14:36 好吧我是说在通常部署条件下(比如楼顶的测试用例)如何读到隐藏分区? |
hxwgz 发表于 2015-2-11 13:47 能用不实际写盘的方法解决吗? |
sunsea 发表于 2015-2-11 10:47 其实换一个思路就简单了。在ud扩展分区上放一个文件UD.IMG,可以占满整个ud分区。 只要map (ud)/UD.IMG (fd0)就可以了。 IMG文件本身就是一个分区,除了EFI启动,也能有其他用法吧。 |
hxwgz 发表于 2015-2-11 13:47 您家终于通网了啊,0.4.4都什么时候的了 |
本帖最后由 hxwgz 于 2015-2-11 14:03 编辑 在G4D(v0.4.4)下, test.img 作为文件 map --mem /test.img (fd0) ... chainloader (fd0)+1 ... 之后引导test.img中grldr(v0.4.5), root 变为 (fd0,0) 文件只有grldr dd if=(fd0) of (fd0) count=1 skip=1 find 后会发现多出(fd0,1),(fd0,0)的文件变为ntldr等文件,(fd0,1)只有文件grldr。 此时的(fd0)是存放文件的磁盘,分为两个分区. 如果将test.img文件写盘,启动后应引导grldr并进入(fdx)。此模式没作测试。 |
不点 发表于 2015-2-11 11:36 我的意思是这个隐藏分区从来就没有分区表项就mbr那的一个bpb |
不点 发表于 2015-2-11 10:11 0扇区,这个地方既是隐藏分区的一份复制的BPB(FAT16分区),他还有正常分区的分区表,具体可以看测试镜像 |
你能说得更详细一些,好让人明白你的大致意思吗? 我猜猜看,你是不是下面这个意思? MBR 上没有分区表,一开始就是文件系统的引导扇区,含有 BPB。 不过,既然没有分区表项,那么,隐藏不隐藏,就没意义了,因为隐藏标志是存在于分区表上的,既然没有分区表,也就无法说隐藏不隐藏的问题了。 换句话说,你的映像格式就是一个普通的软盘格式。从经典的角度来说,软盘就是不含分区表的,硬盘是含分区表的,这是软盘与硬盘的差别所在。当然,grub4dos 已经可以适应软盘含有分区表的情况,也能适应硬盘不含分区表的情况,所以,两者的界限已经模糊了。 但不要忘了,如果硬盘没有分区表,那么 DOS 是认不到硬盘的。同理,如果软盘有分区表,DOS 也认不得这个软盘。 主板 BIOS 在通电自检的时候,会把控制权传递给磁盘最开头的扇区,不管它是否含有分区表,也不管它是否含有 BPB。只要它的扇区结尾处是 55 AA 的引导扇区合法标志,即可执行控制的转移。 不含分区表的硬盘 MBR,从逻辑上讲肯定行得通,完全可以启动。但是不敢保证某些 OEM 制造商会永远支持这样的引导扇区布局。就连 BIOS 都要消失了,因此,什么都保证不了。 grub4dos 以及 wee,都在第二扇区上保留了一个扇区的空间,用于存放原先的 MBR,也可以存放任何一个分区的引导代码。但空间只有一个扇区,所以,放置 NTFS 的引导扇区是不行的,只够放置 FAT 的引导扇区。只要相应的引导扇区被加载在 0000:7C00 处,并且 DL 寄存器设置正确,那就可以引导了。这正是通电自检程序最后要执行的任务,即,它会把硬盘的引导扇区加载在 0000:7C00 处,并传递正确的 DL 盘号。所以,从原理上讲,引导是没问题的。 |
这个必须要有! |
Powered by Discuz! X3.3
© 2001-2017 Comsenz Inc.