|
大大您好啊
我想我大概找到问题了 虽然不知道其中的原理 但是从实验结果上说 应该就是这地方有问题了
由于我在写一个pe的写入工具, 是高端隐藏的, 就涉及到U盘的分区操作, 而分区有包括了 mbr中分区表的填写 其中分区表中 有一个标志位----分区的结束柱头位置 也就是偏移量是0x 1C3 的位置 , 这地方, 刚开始看资料说是 以前用于确定 分区结束位置的 现在不需要用到的 所以 我就把这个位置 强制写为FF FF FF, 但是刚刚无意中跟系统的对比, 发现 系统在这个标志位上, 填写的是FE FF FF, 我想出错的地方应该就是这里, grub4dos引导程序 应该是需要这个参数来寻找分区的,
为了进一步验证猜想, 我就手动用winhex, 把这个FF FF FF改为FE FF FF, 结果 还真是可以进入pe菜单, 并且又试了多分区, 经过多轮测试发现, 只要这个标志位是FF FF FF, 就会引导失败, 其中第一个FF 只要设置为其他值 ,就可以顺利进入菜单..这也是为什么 随机失败引导的一部分原因, 因为我的工具, 在处理分区大小和位置时候, 假如分区大小是在0 - FF FF FF之间的, 就填写正确参数, 假如是大于FF FF FF 的 就直接填写为FF FF FF, 而FF FF FF 是会让grub4dos运行失败的, 所以 就出现了有时候 成功 , 有时候失败了,, 关键都是分区的大小和位置决定了成功与否
而且又发现, 系统在格式化时候, 无论是右键格式化 还是 直接命令format, 都不会修改mbr的 , 只会修改当前U盘显示分区的pbr 和 后面相关的扇区,, 我想 这就是哪怕是格式化后还是失败的原因 因为系统格式化根本改不了mbr中这个FF FF FF的错误标志位, 虽然系统能工作, 但是对于需要用到这个标志位工作的grub4dos来说(我猜), 就会导致它引导失败了
所以, 具体原因是不大清楚的, 虽然手头上有最新的g4d代码, 也搜索到了 出现这个错误提示的 函数位置, 不过 要看懂也是有难度的, 但是 不管了, 知道怎么解决就已经很开心了,, 毕竟这问题 实在是困扰我好几天了, 太感动了.........T_T T_T T_T T_T T_T T_T T_T T_T |
|