无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 247|回复: 4

G4D启动另一版本G4D的兼容性问题

  [复制链接]
发表于 昨天 16:54 | 显示全部楼层 |阅读模式
问题提出:
在帖子《SISO-Legacy BIOS-Grub4dos-grldr使用心得与分享》中,2010XwX提到有的G4D版本无法加载启动金狐的 win2003PE.iso。

问题重现:
通过G4D启动U盘,然后在菜单中启动WIN2003PE.ISO。
ISO使用另一个版本的G4D作为启动文件(它内置菜单及小中文字库,并且压缩),启动uqi2003pe.gz软盘镜象。

问题分析:
G4D代码好久没有关注了,生疏了,尤其是汇编代码,理解费事,调试也费事。
折腾好久,终于搞清楚问题的起因。

第一个G4D启动后,如果有磁盘仿真,会在BIOS挂载G4D的int13驱动。
第二个G4D启动后,会在BIOS探测是否挂载了G4D的int13驱动。
如果挂载了G4D的int13驱动,则从BIOS复制其头部信息到第二个G4D的int13驱动头部,覆盖原来的内容。
这些信息包含int13中断及int15中断原始入口,第一个G4D的磁盘仿真数据。

问题的产生就在于此。这些被覆盖的内容,包含int13中的的3字节跳转指令。
不同版本的G4D,这个跳转长度可能不同,也就是跳转指令可能不同。
如果第二个G4D的int13中的跳转指令被覆盖,则会跳转到错误地址,产生莫名其妙的问题。

问题修正:
grub4dos-0.4.6a-2026-01-13版本已经修正。

新版兼容性:
1. 新版G4D作为第二个G4D启动,兼容任意版本的第一个G4D启动。
2. 新版G4D作为第一个G4D启动,兼容第二个G4D启动范围:grub4dos-0.4.6a-2021-11-19及以前版本。
3. 如果将grub4dos-0.4.6a-2025-11-25版本作为第一个G4D启动,则兼容第二个G4D启动范围:grub4dos-0.4.6a-2023-06-23及以后版本。
4. 如果第一与第二个G4D版本相同,则无兼容问题。
5. 可以通过G4D->grub2(或者Ventoy.VHD)->G4D的方式启动,是比较麻烦一点。
   其原理是grub2启动第二个G4D时,破坏了第一个G4D在BIOS挂载G4D的int13驱动,因此第二个G4D探测不到BIOS挂载的G4D驱动。

查看G4D版本:
1. 通过文件管理器查看grldr(或者grub.exe)日期。
2. 有些grldr存放在隐藏分区,或者是作为ISO的启动文件,通过文件管理器看不到。
   当出现菜单时按'c'键进入命令行,查看屏幕顶部信息,然后按'ESC'键返回菜单。

修改G4D方法:
如果第二个G4D含有特殊菜单,则不能简单替换。
使用WinHex或者其他工具打开新旧G4D,从尾部找到 "B0 02 1A CE",再跳过12字节的00,就是菜单位置。
然后复制旧G4D的尾部菜单到新G4D的尾部菜单位置。

发表于 昨天 17:06 | 显示全部楼层
竟然还在更新...


二○二六年一月十三日
回复

使用道具 举报

发表于 昨天 19:44 | 显示全部楼层
看看
回复

使用道具 举报

发表于 昨天 21:21 | 显示全部楼层
学习一下
回复

使用道具 举报

发表于 昨天 21:30 | 显示全部楼层
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2026-1-14 01:31

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表