求道者 发表于 2019-10-24 21:39:47

问些wee菜单很怪的问题。

本帖最后由 求道者 于 2019-10-24 21:44 编辑

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

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

但也一样,不能正常引导

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


这也……
难道
我改成

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

还有就是grub4dos_instwee为何不能用?
grub4dos批处理又大改了吗?

hilsonma 发表于 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 ...... 正确。

不点 发表于 2019-10-25 14:28:19

hilsonma 说得对。bootice 的某个版本(1.3.4) 好像有问题。用之前的版本(1.3.3.2)似乎正常。

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

不过,也有 workaround:

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


hilsonma 发表于 2019-10-25 15:12:13

使用chenall的weesetup (2013-09-25)的话,如果带-w参数使用外部 wee63.mbr (2016-01-30) 也会产生楼主所说的问题,如果使用weesetup内部自带wee63.mbr则没有问题。

不点 发表于 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 ,那么,两者可能出现同样的毛病。

hilsonma 发表于 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
应该原本是要一,结果可能是二,所以可能会出错。

不点 发表于 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。

求道者 发表于 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似乎是配置开始段的标记


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



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

不点 发表于 2019-10-25 20:00:12

你用 hex 编辑器打开 wee63.mbr,看看尾部的菜单起始于何处,就全清楚了。

求道者 发表于 2019-10-25 20:25:49

本帖最后由 求道者 于 2019-10-25 20:36 编辑

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

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

我删了菜单开头的2D 65 20似乎也能启动……
我进一步从7848写入了菜单
然后

从784A开始写菜单就OK

不点 发表于 2019-10-25 20:43:20

这三个字节应该是个错误,应该删除。前后共有 6 个字节应该删除。

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

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

求道者 发表于 2019-10-25 20:44:58

不点 发表于 2019-10-25 20:43
这三个字节应该是个错误,应该删除。前后共有 6 个字节应该删除。

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

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

不点 发表于 2019-10-25 20:46:24

有没有谁在 Linux 下编译一下看看?

求道者 发表于 2019-10-25 20:49:46

本帖最后由 求道者 于 2019-10-25 20:54 编辑

不点 发表于 2019-10-25 20:46
有没有谁在 Linux 下编译一下看看?
怎么弄?
我make一下试试
不一定有编译环境

make
gcc -m32 -mno-sse -g-c asm.S -o ./asm.o
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
builtins.c: In function ‘map_func’:
builtins.c:1210:8: warning: variable ‘p’ set but not used [-Wunused-but-set-variable]
char *p;
      ^
In file included from builtins.c:25:
builtins.c: At top level:
shared.h:389:29: warning: inline function ‘log2_tmp’ declared but never defined
extern inline unsigned long log2_tmp (unsigned long word);
                           ^~~~~~~~
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
In file included from disk_io.c:23:
shared.h:389:29: warning: inline function ‘log2_tmp’ declared but never defined
extern inline unsigned long log2_tmp (unsigned long word);
                           ^~~~~~~~
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
fsys_ext2fs.c:38:1: error: static declaration of ‘log2_tmp’ follows non-static declaration
log2_tmp (unsigned long word)
^~~~~~~~
In file included from fsys_ext2fs.c:33:
shared.h:389:29: note: previous declaration of ‘log2_tmp’ was here
extern inline unsigned long log2_tmp (unsigned long word);
                           ^~~~~~~~
shared.h:389:29: warning: inline function ‘log2_tmp’ declared but never defined
make: *** 错误 1报错
看起来是GCC版本问题
但README没写用哪个版本……
不点知道吗?

不点 发表于 2019-10-25 20:55:02

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

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

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

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

求道者 发表于 2019-10-25 20:56:53

不点 发表于 2019-10-25 20:55
汇编程序不会有这些垃圾字节。

菜单是 shell 处理后附加在尾部的。编译的时候,如果发行版的 shell 不 ...

SHELL=/bin/bash
SRC_C := builtins.c disk_io.c fsys_ext2fs.c fsys_fat.c fsys_ntfs.c
SRC_S := asm.S wee63start.S
BUILDROOT := .
LDFLAGS :=
Makefile写死了
恐怕不是这样

不点 发表于 2019-10-25 20:59:47

求道者 发表于 2019-10-25 20:49
怎么弄?
我make一下试试
不一定有编译环境


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

不点 发表于 2019-10-25 21:08:20

求道者 发表于 2019-10-25 20:56
Makefile写死了
恐怕不是这样

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

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

SHELL=/bin/bash

求道者 发表于 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编译环境
chenall一直是在WINDOWS下编译的?
会出问题不奇怪

不点 发表于 2019-10-25 21:18:49

工作量应该不大。新版 gcc 检查严格罢了。都是无关紧要的错误。

求道者 发表于 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编译环境
chenall一直是在WINDOWS下编译的? ...

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

wee 最好在 Linux 下编译。

求道者 发表于 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版本的问题……

这就没有
如果编译的能用
我就上传二进制文件吧

不点 发表于 2019-10-25 22:02:42

好的,你上传,让大家都试试。

不点 发表于 2019-10-25 22:07:28

你编译的,好像比以前编译的体积大了几十个字节。不如以前编译的好。还是用以前编译的吧。只需把 6 个垃圾字节去掉便可。

求道者 发表于 2019-10-25 22:21:36

不点 发表于 2019-10-25 22:02
好的,你上传,让大家都试试。


下载后校验sha512值(大概7z不损坏的话不会有问题,建议以防万一)
b8d2772c49cc62d878688bb69407abf34e6a1c4ae0de1beed223a7037bb84ed6894c25d3c4bea38f85a6da29905b8a47a637350d85ef9fa3ef255a1ccd07d193wee127.mbr
b93014b26ac6187ee7b1f3f26f6d93e1cb33c9efdb902e166604ad3d10eec1b1d73f3743b3d027a1befe36bf2e076e048f8b0db4ad4a2e3e00d72cd24a75211bwee63.mbr

求道者 发表于 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 个垃圾 ...

其实不是大了
是反而小了

如你所见我用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

页: [1] 2 3
查看完整版本: 问些wee菜单很怪的问题。