无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: 2011yaya2007777
打印 上一主题 下一主题

[原创] GRUB4DOS for UEFI

    [复制链接]
3601#
发表于 6 天前 | 只看该作者
2011yaya2007777 发表于 2025-4-9 14:14
这句话是不是可以这样理解:
你通过U盘或者其他方式启动到出现菜单,其中菜单项包含”title NTBOOT 启动 ...

报 unaligned pointer 这种错误,个人感觉是严重错误。就是,程序含有 bug,居然能够让指针不对齐!32位的程序,应该是 4 字节对齐的。而 8e234252 不是 4 字节对齐。

产生这种错误,个人感觉,大概率是汇编代码有错。如果汇编代码是 grub2 之中的,那就是 grub2 本身含有 bug。相关的代码应该不是 yaya 写的,因为 yaya 自己对这条错误信息好像也并不熟悉(yaya 自己还需要查一下才知道)。

我在基于 grub legacy 做 grub4dos 的时候,就已经发现 grub legacy 里面的堆栈很糟糕。后来,我把堆栈重新设计和整理,基本上不会再有各种死机发生。

也就是说,有可能是堆栈溢出、堆栈冲突之类的错误。递归函数占用过多堆栈,也能导致堆栈溢出。我在 grub4dos 中,把 grub legacy 原有的递归函数统统转为非递归函数;把函数体中的大变量(比如 char str[512]; 之类的)都放到函数体之外(变成 static char str[512];);把函数体中的嵌套函数,也提取出来,放到函数体之外(前面也添加 static 指示符)。总之,尽一切可能,最大限度地节约堆栈的使用,减少死机发生。这个工作是很繁重的,不能留下任何一个死角,全部改造完成,工作量很庞大。当时我身体还不错,彻底完成了。

但愿 grub2 不会在这方面有问题。

点评

这个是grub2内存管理部分报的错误。 具体来说,是free了不该free的内存时就会报这个错。 比如 会报 unaligned pointer  详情 回复 发表于 6 天前
回复

使用道具 举报

3602#
发表于 6 天前 | 只看该作者
不点 发表于 2025-4-10 09:06
报 unaligned pointer 这种错误,个人感觉是严重错误。就是,程序含有 bug,居然能够让指针不对齐!32位 ...

这个是grub2内存管理部分报的错误。
具体来说,是free了不该free的内存时就会报这个错。
比如
  1. char* a = grub_malloc(2*sizeof(char));
  2. grub_free(&a[1]);
复制代码

会报 unaligned pointer


点评

明白了,是那些调用 grub_free 的代码,产生了错误。比如,把一个非法指针传给了 grub_free 函数。 那就要检查 grub_free 的调用。看看是不是咱们 grub4dos 的开发者在调用 grub_free 时犯了某个错误,被 grub2  详情 回复 发表于 6 天前
回复

使用道具 举报

3603#
发表于 6 天前 | 只看该作者
本帖最后由 minmax 于 2025-4-10 11:05 编辑
2011yaya2007777 发表于 2025-4-9 17:52
ntboot前面应当有路径。它肯定不在根目录。应该支持vhdx吧,没有测试过。实际上是调用微软的efi启动的。

有設定command --set-path=()/grub/WIM 可以正常起動,所以想知道 VHD 有額外啟動參數需要調用?
回复

使用道具 举报

3604#
发表于 6 天前 | 只看该作者
本帖最后由 不点 于 2025-4-11 07:51 编辑
wintoflash 发表于 2025-4-10 10:34
这个是grub2内存管理部分报的错误。
具体来说,是free了不该free的内存时就会报这个错。
比如

明白了,是那些调用 grub_free 的代码,产生了错误。比如,把一个非法指针传给了 grub_free 函数。

那就要检查 grub_free 的调用。看看是不是咱们 grub4dos 的开发者在调用 grub_free 时犯了某个错误,被 grub2 的调试(监控)代码检查出来了。

补充一下。个人感觉,无论如何,这是个严重错误。不管根源在哪里,都很严重。

比如说,咱们的开发者从未调用过 grub_free 函数,那么,这个错误就更深刻,差不多可说,一定是 grub2 本身产生的。那就要看堆栈是否有毛病,必要时,加大堆栈空间,或者挪动到一个更合理的位置。最后,就像我前面说的,查找递归函数,全部改写为非递归的;逐一检查函数体,把嵌套函数和大个头的变量移出函数体之外,减少堆栈的使用,最大限度保证安全。如果一个函数经常被调用,调用深度很深,那如果它占用很多堆栈,这就容易触发堆栈溢出。堆栈溢出时,指针就都是非法的了。

回复

使用道具 举报

3605#
 楼主| 发表于 4 天前 | 只看该作者
有設定command --set-path=()/grub/WIM 可以正常起動,所以想知道 VHD 有額外啟動參數需要調用?

你的参数正确。
find --set-root /VHDOS/LTSC2024.VHDX | set vhdd=
/path/ntboot %vhdd%/LTSC2024.VHDX winload=/Windows/System32/boot/winload.efi minint=1
boot

ntboot支持vhdx有点问题。
你测试一下这个。

ntboot.rar

964.37 KB, 下载次数: 3, 下载积分: 无忧币 -2

点评

可以開機進 WIN 但是 M$ WINDOWS 方塊 LOGO 變小 無法正確進到桌面 不要顯示這個比較快也減少問題  详情 回复 发表于 3 天前
回复

使用道具 举报

3606#
发表于 3 天前 | 只看该作者
本帖最后由 minmax 于 2025-4-15 09:25 编辑
2011yaya2007777 发表于 2025-4-12 17:09
你的参数正确。
find --set-root /VHDOS/LTSC2024.VHDX | set vhdd=
/path/ntboot %vhdd%/LTSC2024.VHD ...

ntboot.rar
可以開機進 WIN
NTBOOT 這個外部命令 無法用 makemod.exe 打包
Err read file ntboot,a000



回复

使用道具 举报

3607#
发表于 前天 08:10 | 只看该作者

向开发者致敬!
回复

使用道具 举报

3608#
发表于 昨天 08:55 | 只看该作者
新技术层出不穷,疲于适用,前一个还没弄明白,又惶忙捡起下一个

点评

不,不,不, 你应该庆幸,你不曾被旧技术套牢。 如果你昨天好不容易终于学精了某个旧技术,今天发现,世界变了,旧技术已经淘汰,你作何感想? 你应该庆幸,你跳过了旧技术,直接来到新技术。  详情 回复 发表于 昨天 09:37
回复

使用道具 举报

3609#
发表于 昨天 09:37 | 只看该作者
2010happly 发表于 2025-4-15 08:55
新技术层出不穷,疲于适用,前一个还没弄明白,又惶忙捡起下一个

不,不,不,

你应该庆幸,你不曾被旧技术套牢。

如果你昨天好不容易终于学精了某个旧技术,今天发现,世界变了,旧技术已经淘汰,你作何感想?

你应该庆幸,你跳过了旧技术,直接来到新技术。

回复

使用道具 举报

3610#
 楼主| 发表于 2 小时前 | 只看该作者
报 unaligned pointer 这种错误,个人感觉是严重错误。就是,程序含有 bug,居然能够让指针不对齐!32位的程序,应该是 4 字节对齐的。而 8e234252 不是 4 字节对齐。

这个问题终于搞清楚了。

据minmax发给我的消息中讲:
“出現選單就報以下錯,執行的話也是 aligned pointer 8e234252”
是因為引入了一行很舊的指令行(不顯示版本),
call Fn.0 0x40000 "!BAT\necho -P:0000 $[0000]\t\t\t\t\t\t\t\t\t\0" && initscript (md)0x200+1
拿掉就好了

这是错误地沿用了G4D的菜单。因为G4E不能随便使用内存,必须使用函数分配。否则会破坏已有数据。
比如:
grub_free(abc);
而abc指针正好在 0x40000范围,比如指针值是0x678900,被污染后成了8e234252、

点评

有一说一,感觉对这种以前的trick类的这种用硬编码地址啊、非公开内容啊啥的东西,应该至少在g4e中要么予以直接移除,要么直接文档化、命令化,要不然全是屎山、或者引起难以排查的bug。既然开了新分支,就应该尽量  详情 回复 发表于 14 分钟前
太好了!又丰富了知识宝库。 好的,这就排除了对于 “grub2 代码造成堆栈错误”的怀疑。 所以,大家(广大用户们)应该尽快从 grub4dos for BIOS 中走出来,尽量早点摆脱。 应该以 g4e 为主。  详情 回复 发表于 半小时前
厉害!知其然更知其所以然  详情 回复 发表于 1 小时前
回复

使用道具 举报

3611#
发表于 1 小时前 | 只看该作者
2011yaya2007777 发表于 2025-4-16 10:30
这个问题终于搞清楚了。

据minmax发给我的消息中讲:

厉害!知其然更知其所以然
回复

使用道具 举报

3612#
发表于 半小时前 | 只看该作者
2011yaya2007777 发表于 2025-4-16 10:30
这个问题终于搞清楚了。

据minmax发给我的消息中讲:

太好了!又丰富了知识宝库。

好的,这就排除了对于 “grub2 代码造成堆栈错误”的怀疑。

所以,大家(广大用户们)应该尽快从 grub4dos for BIOS 中走出来,尽量早点摆脱。

应该以 g4e 为主。
回复

使用道具 举报

3613#
发表于 28 分钟前 | 只看该作者
赞一个!
回复

使用道具 举报

3614#
发表于 14 分钟前 | 只看该作者
2011yaya2007777 发表于 2025-4-16 10:30
这个问题终于搞清楚了。

据minmax发给我的消息中讲:

有一说一,感觉对这种以前的trick类的这种用硬编码地址啊、非公开内容啊啥的东西,应该至少在g4e中要么予以直接移除,要么直接文档化、命令化,要不然全是屎山、或者引起难以排查的bug。既然开了新分支,就应该尽量一切从新开始。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-4-16 13:13

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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