无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 15275|回复: 89

[求助] 问些wee菜单很怪的问题。

    [复制链接]
发表于 2019-10-24 21:39:47 | 显示全部楼层 |阅读模式
本帖最后由 求道者 于 2019-10-24 21:44 编辑

今天我打算调试PE
然后在虚拟机两个虚拟机里创建了共享的虚拟磁盘
因为要引导bootmgr而且位置不在根目录
所以用了wee
怪事就发生了
这是wee菜单
只有两行
  1. find --set-root /boot/bootmgr
  2. /boot/bootmgr
复制代码

用BOOTICE安装
结果
Screenshot_20191024_212003.jpg
这是什么鬼东西?
于是找了别的安装程序
chenall写的grub4dos批处理
http://chenall.net/post/grub4dos_instwee/
我还改了 不改用不了
18行的这个
  1. (hd%2)+1,0x1b0
复制代码
删了
  1. ,0x1b0
复制代码
改后能用……

但也一样,不能正常引导

下意识看了一下hex
发现7830位置成这样了
Screenshot_20191024_212807.png

这也……
难道
我改成
Screenshot_20191024_213356.png
保存
重启虚拟机
能用了……
………………
所以wee的配置文件到底是在从哪个地址开始的?
7840?
还是有什么标记字符?

还有就是grub4dos_instwee为何不能用?
grub4dos批处理又大改了吗?
发表于 2019-10-25 05:00:35 | 显示全部楼层
本帖最后由 hilsonma 于 2019-10-25 06:04 编辑

用bootice v1.3.3.2版本安装wee63.mbr,将默认菜单修改一下就可以了。

使用bootice v1.3.4 (x86)版本安装wee就会出现类似楼主所讲的问题。
这个问题只要用bootice v1.3.3.2版本修改wee菜单就可以解决。
在wee命令行下输入正确的菜单命令也可以启动。

例如:find --set-root /boot/bootmgr /boot/bootmgr
只要存在 \boot\bootmgr 就可以引导 \boot\bootmgr
然后bootmgr会使用\boot\bcd配置启动
只要存在\boot\bcd 且bcd设置正确就可以成功启动。

使用bootice v1.3.3.2内置的wee63.mbr (2013-08-28) 则wee菜单从7830开始
使用wee63.mbr (2016-01-30) 则wee菜单从7850开始
而楼主的图应是从7850开始的,所以前图 -sefind ...... 出错,后图 find ...... 正确。

wee01.jpg

评分

参与人数 1无忧币 +5 收起 理由
879792799 + 5 专家啊 厉害

查看全部评分

回复

使用道具 举报

发表于 2019-10-25 14:28:19 | 显示全部楼层
hilsonma 说得对。bootice 的某个版本(1.3.4) 好像有问题。用之前的版本(1.3.3.2)似乎正常。

bootice 的有问题的版本,似乎计算错了菜单的开始位置,导致启动失常。

不过,也有 workaround:

把菜单最开头的一句,重复写 2 遍,或写 3 遍,可能就躲过 bootice 的 bug 了。


回复

使用道具 举报

发表于 2019-10-25 15:12:13 | 显示全部楼层
使用chenall的weesetup (2013-09-25)的话,如果带-w参数使用外部 wee63.mbr (2016-01-30) 也会产生楼主所说的问题,如果使用weesetup内部自带wee63.mbr则没有问题。

点评

这么说来,有可能这是根本原因。猜测,假如 BOOTICE 的内部采用的是 weesetup ,那么,两者可能出现同样的毛病。  详情 回复 发表于 2019-10-25 15:30
回复

使用道具 举报

发表于 2019-10-25 15:30:41 | 显示全部楼层
hilsonma 发表于 2019-10-25 15:12
使用chenall的weesetup (2013-09-25)的话,如果带-w参数使用外部 wee63.mbr (2016-01-30) 也会产生楼主所说 ...

这么说来,有可能这是根本原因。猜测,假如 BOOTICE 的内部采用的是 weesetup ,那么,两者可能出现同样的毛病。
回复

使用道具 举报

发表于 2019-10-25 16:59:12 | 显示全部楼层
本帖最后由 hilsonma 于 2019-10-25 17:00 编辑

建议使用bootice v1.3.3.2 来安装其内置的wee63.mbr (2013-08-28) 到硬盘mbr.
并修改其内置的菜单为适合自己的内容。

起码其中这句 find --set-root --active command +1 要改掉。

因为此句有歧义
歧义一:
find --set-root --active
command +1
歧义二:
find --set-root --active command
+1
应该原本是要一,结果可能是二,所以可能会出错。

点评

较早的 BOOTICE 版本,其内置的 wee63.mbr 中的程序代码,有可能不是最新的。 大家可以考虑下述方案是否可行: 用最新版的 BOOTICE 1.3.4 来安装,菜单采用默认的,不更动它(这是因为 bootice 有可能把你想定  详情 回复 发表于 2019-10-25 17:37
回复

使用道具 举报

发表于 2019-10-25 17:37:04 | 显示全部楼层
hilsonma 发表于 2019-10-25 16:59
建议使用bootice v1.3.3.2 来安装其内置的wee63.mbr (2013-08-28) 到硬盘mbr.
并修改其内置的菜单为适合自 ...

较早的 BOOTICE 版本,其内置的 wee63.mbr 中的程序代码,有可能不是最新的。

大家可以考虑下述方案是否可行:

用最新版的 BOOTICE 1.3.4 来安装,菜单采用默认的,不更动它(这是因为 bootice 有可能把你想定制的菜单内容,放在错误的偏移地址处,造成问题)。然后手动用 WinHex 之类的扇区编辑工具来编辑尾部的菜单,编辑成最新的菜单即可,也就是,chenall 网站上的那个 preset_menu_used。

点评

这就很怪了…… 用BOOTICE1.3.4安装 看起来就会多一点字节 我尝试过从7830开始填0 再者说 我当然用过WIMBOOT 但我只是用来提速 还原功能,我当没有 还原之后还是百八十年前的老系统 还要更新 有意思?  详情 回复 发表于 2019-10-25 18:50
回复

使用道具 举报

 楼主| 发表于 2019-10-25 18:50:56 | 显示全部楼层
本帖最后由 求道者 于 2019-10-25 19:47 编辑
不点 发表于 2019-10-25 17:37
较早的 BOOTICE 版本,其内置的 wee63.mbr 中的程序代码,有可能不是最新的。

大家可以考虑下述方案是 ...

这就很怪了……
用BOOTICE1.3.4安装
看起来就会多一点字节
我尝试过从7830开始填0
然后在7830写入配置
wee似乎就不工作了
但2楼贴出来的图片
似乎表明7810开始就没数据了
清空7830应该没问题啊
果然wee版本变了吗?
最新版本从7850开始写数据?
但BOOTICE1.3.4用默认菜单
似乎是从7840开始写配置
-e似乎是配置开始段的标记

Screenshot_20191025_193302.png
不点你不记得wee这个查找配置是怎么工作的了吗?
用BOOTICE1.3.3写入外部wee(2016-01-31)会得到这个
这应该是正确的吧

Screenshot_20191025_194249.png

chenall还在活动吗?
能修BUG吗?
回复

使用道具 举报

发表于 2019-10-25 20:00:12 | 显示全部楼层
你用 hex 编辑器打开 wee63.mbr,看看尾部的菜单起始于何处,就全清楚了。

点评

[attachimg]403712[/attachimg] 似乎wee63.mbr菜单以2D 65 20开头和结尾 似乎不用2D 65 20结尾也行 所以这个是标记开始?  详情 回复 发表于 2019-10-25 20:25
回复

使用道具 举报

 楼主| 发表于 2019-10-25 20:25:49 | 显示全部楼层
本帖最后由 求道者 于 2019-10-25 20:36 编辑
不点 发表于 2019-10-25 20:00
你用 hex 编辑器打开 wee63.mbr,看看尾部的菜单起始于何处,就全清楚了。

Screenshot_20191025_202301.png
似乎wee63.mbr菜单以2D 65 20开头和结尾
似乎不用2D 65 20结尾也行
所以这个是标记开始?

我删了菜单开头的2D 65 20似乎也能启动……
我进一步从7848写入了菜单
然后
Screenshot_20191025_203233.png
从784A开始写菜单就OK

回复

使用道具 举报

发表于 2019-10-25 20:43:20 | 显示全部楼层
这三个字节应该是个错误,应该删除。前后共有 6 个字节应该删除。

可能是由于编译环境不是 bash 而是其它shell 造成的。

当初发布的 wee63.mbr 应该没有这三个字节的。

点评

是不是其他的地方也有这种垃圾字节? 汇编程序这样不应该……  详情 回复 发表于 2019-10-25 20:44
回复

使用道具 举报

 楼主| 发表于 2019-10-25 20:44:58 | 显示全部楼层
不点 发表于 2019-10-25 20:43
这三个字节应该是个错误,应该删除。前后共有 6 个字节应该删除。

可能是由于编译环境不是 bash 而是其 ...

是不是其他的地方也有这种垃圾字节?
汇编程序这样不应该……

点评

汇编程序不会有这些垃圾字节。 菜单是 shell 处理后附加在尾部的。编译的时候,如果发行版的 shell 不是 bash,就可能出现这个错误。 要强制把 /bin/sh 弄成指向 bash 才行。  详情 回复 发表于 2019-10-25 20:55
回复

使用道具 举报

发表于 2019-10-25 20:46:24 | 显示全部楼层
有没有谁在 Linux 下编译一下看看?

点评

怎么弄? 我make一下试试 不一定有编译环境  详情 回复 发表于 2019-10-25 20:49
回复

使用道具 举报

 楼主| 发表于 2019-10-25 20:49:46 | 显示全部楼层
本帖最后由 求道者 于 2019-10-25 20:54 编辑
不点 发表于 2019-10-25 20:46
有没有谁在 Linux 下编译一下看看?

怎么弄?
我make一下试试
不一定有编译环境

  1. make
  2. gcc -m32 -mno-sse -g  -c asm.S -o ./asm.o
  3. gcc -m32 -mno-sse -g -Os -fno-stack-protector -fno-builtin -mpreferred-stack-boundary=2 -fno-strict-aliasing -fomit-frame-pointer -fno-exceptions -fno-asynchronous-unwind-tables -fno-unwind-tables -nostdinc -Wall -Wmissing-prototypes -Wunused -Wshadow -Wpointer-arith -Wundef  -c builtins.c -o ./builtins.o
  4. builtins.c: In function ‘map_func’:
  5. builtins.c:1210:8: warning: variable ‘p’ set but not used [-Wunused-but-set-variable]
  6.   char *p;
  7.         ^
  8. In file included from builtins.c:25:
  9. builtins.c: At top level:
  10. shared.h:389:29: warning: inline function ‘log2_tmp’ declared but never defined
  11. extern inline unsigned long log2_tmp (unsigned long word);
  12.                              ^~~~~~~~
  13. gcc -m32 -mno-sse -g -Os -fno-stack-protector -fno-builtin -mpreferred-stack-boundary=2 -fno-strict-aliasing -fomit-frame-pointer -fno-exceptions -fno-asynchronous-unwind-tables -fno-unwind-tables -nostdinc -Wall -Wmissing-prototypes -Wunused -Wshadow -Wpointer-arith -Wundef  -c disk_io.c -o ./disk_io.o
  14. In file included from disk_io.c:23:
  15. shared.h:389:29: warning: inline function ‘log2_tmp’ declared but never defined
  16. extern inline unsigned long log2_tmp (unsigned long word);
  17.                              ^~~~~~~~
  18. gcc -m32 -mno-sse -g -Os -fno-stack-protector -fno-builtin -mpreferred-stack-boundary=2 -fno-strict-aliasing -fomit-frame-pointer -fno-exceptions -fno-asynchronous-unwind-tables -fno-unwind-tables -nostdinc -Wall -Wmissing-prototypes -Wunused -Wshadow -Wpointer-arith -Wundef  -c fsys_ext2fs.c -o ./fsys_ext2fs.o
  19. fsys_ext2fs.c:38:1: error: static declaration of ‘log2_tmp’ follows non-static declaration
  20. log2_tmp (unsigned long word)
  21. ^~~~~~~~
  22. In file included from fsys_ext2fs.c:33:
  23. shared.h:389:29: note: previous declaration of ‘log2_tmp’ was here
  24. extern inline unsigned long log2_tmp (unsigned long word);
  25.                              ^~~~~~~~
  26. shared.h:389:29: warning: inline function ‘log2_tmp’ declared but never defined
  27. make: *** [Makefile:62:fsys_ext2fs.o] 错误 1
复制代码
报错
看起来是GCC版本问题
但README没写用哪个版本……
不点知道吗?

点评

这些错误,你应该可以帮忙排除。你自己写 c 程序,有错了,不是一样需要排除吗?  详情 回复 发表于 2019-10-25 20:59
回复

使用道具 举报

发表于 2019-10-25 20:55:02 | 显示全部楼层
求道者 发表于 2019-10-25 20:44
是不是其他的地方也有这种垃圾字节?
汇编程序这样不应该……

汇编程序不会有这些垃圾字节。

菜单是 shell 处理后附加在尾部的。编译的时候,如果发行版的 shell 不是 bash,就可能出现这个错误。

要强制把 /bin/sh 弄成指向 bash 才行。

点评

Makefile写死了 恐怕不是这样  详情 回复 发表于 2019-10-25 20:56
回复

使用道具 举报

 楼主| 发表于 2019-10-25 20:56:53 | 显示全部楼层
不点 发表于 2019-10-25 20:55
汇编程序不会有这些垃圾字节。

菜单是 shell 处理后附加在尾部的。编译的时候,如果发行版的 shell 不 ...
  1. SHELL=/bin/bash
  2. SRC_C := builtins.c disk_io.c fsys_ext2fs.c fsys_fat.c fsys_ntfs.c
  3. SRC_S := asm.S wee63start.S
  4. BUILDROOT := .
  5. LDFLAGS :=
复制代码

Makefile写死了
恐怕不是这样

点评

那应该不会出现垃圾字节。 你给出的编译结果可能比较早,那时还没有添加 SHELL=/bin/bash  详情 回复 发表于 2019-10-25 21:08
回复

使用道具 举报

发表于 2019-10-25 20:59:47 | 显示全部楼层
求道者 发表于 2019-10-25 20:49
怎么弄?
我make一下试试
不一定有编译环境

这些错误,你应该可以帮忙排除。你自己写 c 程序,有错了,不是一样需要排除吗?

点评

这不是等于把wee的编译环境迁移到新版的gcc吗?  详情 回复 发表于 2019-10-25 21:08
回复

使用道具 举报

发表于 2019-10-25 21:08:20 | 显示全部楼层
求道者 发表于 2019-10-25 20:56
Makefile写死了
恐怕不是这样

那应该不会出现垃圾字节。

你给出的编译结果可能比较早,那时还没有添加

SHELL=/bin/bash

点评

[分享] 自己动手,在WINDOWS系统中搭建GRUB4DOS编译环境[2014-06-25] chenall一直是在WINDOWS下编译的? 会出问题不奇怪  详情 回复 发表于 2019-10-25 21:16
回复

使用道具 举报

 楼主| 发表于 2019-10-25 21:08:40 | 显示全部楼层
本帖最后由 求道者 于 2019-10-25 21:11 编辑
不点 发表于 2019-10-25 20:59
这些错误,你应该可以帮忙排除。你自己写 c 程序,有错了,不是一样需要排除吗?


这不是等于把wee的编译环境迁移到新版的gcc吗?
这工作量有点大
回复

使用道具 举报

 楼主| 发表于 2019-10-25 21:16:35 | 显示全部楼层
不点 发表于 2019-10-25 21:08
那应该不会出现垃圾字节。

你给出的编译结果可能比较早,那时还没有添加

[分享] 自己动手,在WINDOWS系统中搭建GRUB4DOS编译环境[2014-06-25]
chenall一直是在WINDOWS下编译的?
会出问题不奇怪

点评

wee 的编译,不像 grub4dos 那样难。 wee 最好在 Linux 下编译。  详情 回复 发表于 2019-10-25 21:25
回复

使用道具 举报

发表于 2019-10-25 21:18:49 | 显示全部楼层
工作量应该不大。新版 gcc 检查严格罢了。都是无关紧要的错误。

点评

大概有一处报错 主要是警告 错误:对‘log2_tmp’的静态声明出现在非静态声明之后 说不定能搞好吧 先找个ubuntu的容器部署gcc4.5编译看看  详情 回复 发表于 2019-10-25 21:21
回复

使用道具 举报

 楼主| 发表于 2019-10-25 21:21:45 | 显示全部楼层
不点 发表于 2019-10-25 21:18
工作量应该不大。新版 gcc 检查严格罢了。都是无关紧要的错误。

大概有一处报错
主要是警告
错误:对‘log2_tmp’的静态声明出现在非静态声明之后
说不定能搞好吧
先找个ubuntu的容器部署gcc4.5编译看看
回复

使用道具 举报

发表于 2019-10-25 21:25:32 | 显示全部楼层
求道者 发表于 2019-10-25 21:16
[分享] 自己动手,在WINDOWS系统中搭建GRUB4DOS编译环境[2014-06-25]
chenall一直是在WINDOWS下编译的? ...

wee 的编译,不像 grub4dos 那样难。

wee 最好在 Linux 下编译。

点评

应该就是了 估计是编译环境引起的垃圾字节 或者gcc版本的问题…… [attachimg]403726[/attachimg] 这就没有 如果编译的能用 我就上传二进制文件吧  详情 回复 发表于 2019-10-25 21:59
总之出货了 gcc4.8下还是可以编译的 我用的archlinux貌似没有非常旧的gcclib 只有gcc4.5本身  详情 回复 发表于 2019-10-25 21:47
回复

使用道具 举报

 楼主| 发表于 2019-10-25 21:47:32 | 显示全部楼层
不点 发表于 2019-10-25 21:25
wee 的编译,不像 grub4dos 那样难。

wee 最好在 Linux 下编译。

总之出货了
gcc4.8下还是可以编译的
我用的archlinux貌似没有非常旧的gcclib
只有gcc4.5本身
回复

使用道具 举报

 楼主| 发表于 2019-10-25 21:59:42 | 显示全部楼层
不点 发表于 2019-10-25 21:25
wee 的编译,不像 grub4dos 那样难。

wee 最好在 Linux 下编译。

应该就是了
估计是编译环境引起的垃圾字节
或者gcc版本的问题……
Screenshot_20191025_215718.png
这就没有
如果编译的能用
我就上传二进制文件吧

回复

使用道具 举报

发表于 2019-10-25 22:02:42 | 显示全部楼层
好的,你上传,让大家都试试。

点评

下载后校验sha512值(大概7z不损坏的话不会有问题,建议以防万一)  详情 回复 发表于 2019-10-25 22:21
回复

使用道具 举报

发表于 2019-10-25 22:07:28 | 显示全部楼层
你编译的,好像比以前编译的体积大了几十个字节。不如以前编译的好。还是用以前编译的吧。只需把 6 个垃圾字节去掉便可。

点评

其实不是大了 是反而小了 [attachimg]403820[/attachimg] 如你所见我用4.8编译的二进制文件 菜单部分是从7828开始的16年C佬编译的菜单部分是从784A开始的 至于最后为什么体积反而大些 那显然是因为“preset_me  详情 回复 发表于 2019-10-27 03:11
也许是gcc4.8的问题 貌似提过一嘴 某些版本的gcc编译出来文件会变大…… Ubuntu 16.04貌似才有gcc4.5  详情 回复 发表于 2019-10-25 22:27
回复

使用道具 举报

 楼主| 发表于 2019-10-25 22:21:36 | 显示全部楼层
不点 发表于 2019-10-25 22:02
好的,你上传,让大家都试试。

wee.7z (35.57 KB, 下载次数: 87)
回复

使用道具 举报

 楼主| 发表于 2019-10-25 22:27:58 | 显示全部楼层
本帖最后由 求道者 于 2019-10-25 22:42 编辑
不点 发表于 2019-10-25 22:07
你编译的,好像比以前编译的体积大了几十个字节。不如以前编译的好。还是用以前编译的吧。只需把 6 个垃圾 ...

也许是gcc4.8的问题
貌似提过一嘴
wee需要在gcc 4.5的环境中编译,否则生成的文件太大超过了32KB。如果你不需要编译wee可以略过以下内容。


某些版本的gcc编译出来文件会变大……
Ubuntu 16.04貌似才有gcc4.5
按这个尿性来看
都不用迁移gcc……
怎么回事啊

哪天迁移到gcc9 试试?(兴许修复了体积过大的BUG)
说不定会更小
回复

使用道具 举报

 楼主| 发表于 2019-10-27 03:11:18 | 显示全部楼层
不点 发表于 2019-10-25 22:07
你编译的,好像比以前编译的体积大了几十个字节。不如以前编译的好。还是用以前编译的吧。只需把 6 个垃圾 ...


其实不是大了
是反而小了
Screenshot_20191027_025856.png
如你所见我用4.8编译的二进制文件
菜单部分是从7828开始的,16年C佬编译的菜单部分是从784A开始的
至于最后为什么体积反而大些
那显然是因为“preset_menu changed and fix Makefile issue”
更新菜单似乎就没编译……
不过虽然我浪费了挺长时间寻找合适的老系统安装gcc4.5
但也算有所收获
不知道是不是依赖环境的问题用gcc4.5编译后wee反而会大到7d2e
用gcc4.8编译体积更小可能是因为修复BUG 或者做了优化……
那么可以考虑迁移到gcc9了
感想就是gcc4.5实在太老了……
能裝的系统都够难找

Makefile还是不好,没弹性,换gcc版本还要用链接……
还有就是Docker救了我的命
最后发现了即开即用的gcc容器镜像
总算在现在搞完了……
明天试试gcc4.9或者gcc5 之类的编译wee
或者修了那个BUG 用gcc9

点评

好的,证据充分,你编译的,体积不是更大了,而是更小了。 从你贴出的 chenall 编译的结果来看,我不能确定这是否 chenall 发布的。从你的图片上,我发现了一个严重错误。你的图片第一行(就是 00007840 那行)有  详情 回复 发表于 2019-10-27 08:40
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-29 16:48

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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