/* MBR check */
disk = grub_disk_open(dev->disk->name);
if (!disk)
{
return ventoy_set_check_result(11, "Disk open failed");
}
grub_memset(mbr, 0, 512);
grub_disk_read(disk, 0, 0, 512, mbr);
grub_disk_close(disk);
if (grub_memcmp(g_check_mbr_data, mbr, 0x30) || grub_memcmp(g_check_mbr_data + 0x30, mbr + 0x190, 16))
{
return ventoy_set_check_result(12, "MBR check failed");
}
return ventoy_set_check_result(0, NULL);
}
在这个文件里,虽然不懂编程,根据字面意思应该是比较磁盘的mbr的前48个字节,还有前400-410字节吧?如果if括号中的返回值为真时,会返回错误代码12和字符串?盲猜………………
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_cmd.c
static grub_uint8_t g_check_mbr_data[] = {
0xEB, 0x63, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x56, 0x54, 0x00, 0x47, 0x65, 0x00, 0x48, 0x44, 0x00, 0x52, 0x64, 0x00, 0x20, 0x45, 0x72, 0x0D,
};
|