|
我来试着分析一下。
zhaohj 说:
文件大小=0x3706800,按每扇区512字节计算=0x1b834扇区数;按每扇区2048字节=0x6e0d扇区数
cat --hex (0xff)0x6e0c+1
显示结果正常。
文件大小不是 4K 的整数倍。注意,4K = 0x1000。因此,拷贝到内存之后,可能向上浮动,补全到 4K 对齐。因此,在内存中,大小按 0x1b838 个 512 小扇区计算,即 0x3707000 字节。
实际上最后多出了 4 个 512 字节小扇区,也就等于多出一个 2048 字节的大扇区。多出的这个扇区,当然是无效的扇区,即,不使用的扇区。它的内容全是 00 ,那是正常的,没问题。
以上各位的测试,没有发现 grub4dos 有任何错误(或者说没有发现 bug)。
那么,错误就在别的软件上了。例如,winvblock 有 bug。
猜测,当 ISO 处于硬盘不同位置时,winvblock 或者 firadisk 有 bug,导致不能正确访问 ISO 里的文件。bug 很可能随着起始扇区的数值的不同而有不同的表现。比如说,如果在硬盘上 ISO 的起始扇区号是 4 的整数倍,也就是 2048 字节对齐,则计算大扇区很容易。如果 ISO 在硬盘上的起始扇区号不是 4 的整数倍,那么软件在访问大扇区的时候,以某种方式发生了错误,即 bug。这只是一种猜测,究竟什么地方搞错了,那很难说。但我们总归可以确定,那是 winvblock 这类驱动程序的 bug。这种 bug 究竟是怎么表现的,具体的技术原因是什么,现在并不十分清楚。但 bug 属于它,却是比较清楚的,因为 grub4dos 没有问题,已经证明过了。如果从 grub4dos 内部访问 ISO 中的任何文件,都没问题,那就证明了 grub4dos 没问题。而且这是严格的证明。既然是证明,那就可以排除 grub4dos 的问题了。那么,就一定是别的问题了,例如 Windows 本身的 API 的问题,或者是 winvblock 的驱动程序的问题。如果我们相信 Windows API 不会有问题,那么就可以确定是 winvblock 的问题了。
[ 本帖最后由 不点 于 2012-2-21 18:49 编辑 ] |
|