|
|
发表于 2014-8-22 22:07:44
|
显示全部楼层
本帖最后由 2013gdh 于 2014-8-22 22:13 编辑
BUG报告: 64位版本处理bcd文件默认启动项时可能死掉
测试:
64位bootice(1.3.2.1 2013.12.10; 1.3.3.0 2014.07.24) 于 实体机win8.1 update (或者说update1)
32位bootice(1.3.2.1 2013.12.10; 1.3.3.0 2014.08.07; 1.3.3.0 8月6号下载的版本) 在 win 8.1 update / vm虚拟机 win XP sp3
修改对象:
系统位置(fat32格式的esp分区内) / 其它一个ntfs分区内的bcd文件, 文件名不定
问题:
高级编辑模式下可以看到该bcd文件的Window Boot Manager->DisplayOrder里起初有2个启动项但没有默认启动项. 用64位的bootice双击DisplayOrder后
在打开的窗口里任选一项, 点"默认项"后程序崩溃, 不调试强行终止程序后, 其它位置的bcd文件会被system锁定无法删除,
系统bcd倒是还可以重新运行bootice做编辑.
同样的操作, 在32位bootice里可以正确设置默认项, 但不经过点"确定"就立即生效了.
已测试多个版本的bootice, 修改二进制完全一致的多个位置/任意文件名的bcd文件, 问题在这个bcd文件中100%重现.
不过我以前用64位的bootice设置其它bcd文件的默认启动项时软件工作均正常; 对于问题bcd文件, 各版本64/32的bootice用"智能编辑模式"设置默认项时全部正常.
怀疑:
bootice设置新默认项前默认清除原默认项的"默认"属性, 但64位版本的不检查是否有原默认项, 于是内存访问越界.
32位版本的检查发现原来没有默认项则直接设置新默认项并立即生效.
备注:
出错的bcd文件之前是正常的, 我在高级编辑里删了好多项目, 包括默认项, 然后用bcdboot把当前系统加进去, 之后想设置默认结果就崩了.
vs2012调试出错的64位bootice, 报告"0x00007FF726C59AC6 处有未经处理的异常(在 BOOTICE.exe 中): 0xC000041D: 用户回调期间遇到未经处理的异常。。"
中断在00007FF726C59AC6 mov rax, qword ptr [rax+rsi+8]; 不过[rax+rsi+8]是0x0000007800eac940
截图:

出错的bcd文件在这儿: 附件 |
-
-
bcd.test.zip
5.78 KB, 下载次数: 10, 下载积分: 无忧币 -2
出错的bcd文件的压缩包, bcd文件的文件名随便改
|