无忧启动论坛

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

试着解读 0PE 的专用菜单文件

[复制链接]
跳转到指定楼层
1#
发表于 2009-8-27 23:38:58 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
`
 
 
 
试着解读 0PE 的专用菜单文件 MENU.0PE

 
 
 
  这个菜单文件是从 〇peZip扩展版二合一090620.ISO 的 grldr 中提取出来的,根据自己的理解加了一些注释(理解不一定正确),还有很多看不懂的地方,希望 Pseudo 大侠指点迷津,也希望大家多发表自己的看法,让大家更深入的了解 0PE。
  
    看了一下 Grub4Dos 的 Readme 文件,知道了 Grub4Dos 的一些高级用法,把注释补充完整了,如有错误,恳请指正。

    关于 Grub4Dos 的高级用法,可以参考这个帖子,里面有很详细的说明:
    http://bbs.znpc.net/viewthread.php?tid=5587&extra=page%3D2&page=1
 
 
 
 
------------------------------------------------------------

; 注:字符串/0PE/0PE.ISO定位0PE.ISO.菜单<4KB

; 设置屏幕颜色
color white/blue blue/yellow light-red/blue 10

; pseudo 大侠发明的写法,指定一个不存在的配置文件“NoExist”
; 让 PXE 启动时不去搜索 PXE 服务器上的其他配置文件,加快启动速度。
pxe detect NotExist

; 关闭 Debug
debug off

; 取内存做变量使用,6000:0000开始的 1K 空间作为用户自己的变量区

; 存放出错标记 | ErrorFlag
write 0x60000 0

; 存放 PXE 启动标记 | PXEBoot
write 0x60064 0

; 存放选中的菜单项序号 | MenuNum
write 0x60068 0

; 存放 Debug 状态 | DebugFlag
write 0x60110 0

; 保存当前根分区号 | RootDriveID
write 0x60130 0

; 保存当前根驱动器 | RootDrive
write 0x60134 0

; 这个好象未使用
write 0x602A0 0

; 标记是 XP 还是 2003 | SysVer
write 0x60300 0

; 这里大概是判断 Grub4Dos 版本是否匹配(read 返回值 0 为假,非 0 为真)
cat --locate-align=1 (md)+1,1 || write 0x60000 1
read 0x60000 && Error:GRUB4DOS Version Mismatched! Press any key to reboot...
read 0x60000 && reboot

; 判断是否是 PXE 启动
checkrange 0x21 read 0x8280 && write 0x60064 1

; 默认第一个菜单
default 1
; 超时时间 5 秒
timeout 5



; 菜单0
title                      0PE for Windows XP/2003    by Pseudo 2009.6.20
; 空菜单
clear



; 菜单1
title                 [1] For XP, with SRS1.ZIP.\n   Main S&R&S Drivers Library.
; 设置菜单选择标记
write 0x60068 1
; 通过错误语句跳转到菜单 10
fallback 10
kernel



; 菜单2
title                 [2] For XP, with SRS2.ZIP.\n   Secondary S&R&S Drivers Library.
; 设置菜单选择标记
write 0x60068 2
; 通过错误语句跳转到菜单 10
fallback 10
kernel



; 菜单3
title                 [3] For XP, with F6.ZIP.\n   OEM S&R&S Drivers Floppy Disk Emulation (press F6/autodetect).
; 设置菜单选择标记
write 0x60068 3
; 通过错误语句跳转到菜单 10
fallback 10
kernel



; 空菜单,夹在其它菜单中间,则无效,放在第一个菜单之前,则会让 TimeOut 失效。
; 疑为作者笔误
title



; 菜单4
title                 [4] User Menu with F6.ZIP.\n   OEM S&R&S Drivers Floppy Disk Emulation (press F6/autodetect).
; 设置菜单选择标记
write 0x60068 4
; 通过错误语句跳转到菜单 10
fallback 10
kernel



; 菜单5
title                 [5] For 2K3, with SRS1.ZIP.\n   Main S&R&S Drivers Library.
; 设置菜单选择标记
write 0x60068 5
; 通过错误语句跳转到菜单 10
fallback 10
kernel



; 菜单6
title                 [6] For 2K3, with SRS2.ZIP.\n   Secondary S&R&S Drivers Library.
; 设置菜单选择标记
write 0x60068 6
; 通过错误语句跳转到菜单 10
fallback 10
kernel



; 菜单7
title                 [7] For 2K3, with F6.ZIP.\n   OEM S&R&S Drivers Floppy Disk Emulation (press F6/autodetect).
; 设置菜单选择标记
write 0x60068 7
; 通过错误语句跳转到菜单 10
fallback 10
kernel



; 菜单8
title                 [8] MS DOS 7.1
; 设置菜单选择标记
write 0x60068 8
; 通过错误语句跳转到菜单 10
fallback 10
kernel



; 菜单9
title                 [9] Grub4Dos Debug On/Off.\nTurn on/off debug status.
; 清屏
clear
; 关闭 Debug
debug off


; 如果 DebugFlag 为 0,则设置 DebugFlag 2
read 0x60110 || write 0x60110 2
; 如果 DebugFlag 为 1,则设置 DebugFlag 0
checkrange 1 read 0x60110 && write 0x60110 0
; 如果 DebugFlag 为非 0(比如为 2),则设置 DebugFlag 1
read 0x60110 && write 0x60110 1

; 根据 DebugFlag,设置提示信息
read 0x60110 || pause Debug is now off...
read 0x60110 && pause Debug is now on...
; 根据 DebugFlag,设置 Debug 状态
read 0x60110 || debug off
read 0x60110 && debug on
; 添加 Kernel 命令,使菜单生效,否则菜单不可选
kernel || clear



; 菜单10,处理选择的系统类型 SysVer
title

; 提示 root 位置,用于调试脚本
pause --wait=0 Boot drive:
debug on
root
debug off

; 恢复 Debug  状态
read 0x60110 && debug on

; 判断选择的菜单是否是 2003 系统 ( 菜单 5-7 )
checkrange 5:7 read 0x60068 && write 0x60300 1

; 如果不是 2003 系统,将跳转到 菜单 11
fallback 11
; 如果是 2003 系统,将跳转到菜单 12
read 0x60300 && fallback 12
; 开始跳转
fallback F



; 菜单11,处理 XP 系统,SysVer = 0
title


;
fallback 14

; 复位 ErrorFlag
write 0x60000 1

; 如果未找到 root 下面的 /0PE/BUFXP.GZ 则设置 ErrorFlag 为 0
ls /0PE/BUFXP.GZ || write 0x60000 0

; 如果是 PXE 启动,则设置 ErrorFlag 为 0
read 0x60064 && write 0x60000 0

; 如果 ErrorFlag 不为 0,则跳转到菜单 14
read 0x60000 && kernel

; 复位 ErrorFlag
write 0x60000 1

; 查找所有盘的 /0PE/BUFXP.GZ 文件,找不到则设置 ErrorFlag 为 0
find --set-root /0PE/BUFXP.GZ || write 0x60000 0

; 如果 ErrorFlag 不为 0 ,则跳转到菜单 14
read 0x60000 && kernel


;
fallback 13

; 复位 ErrorFlag
write 0x60000 1

; 如果未找到 root 下面的 /0PE/0PE.ISO 则设置 ErrorFlag 为 0
ls /0PE/0PE.ISO || write 0x60000 0

; 如果是 PXE 启动,则设置 ErrorFlag 为 0
read 0x60064 && write 0x60000 0

; 如果 ErrorFlag 不为 0,则跳转到菜单 13
read 0x60000 && kernel

; 复位 ErrorFlag
write 0x60000 1

; 查找所有盘的 /0PE/0PE.ISO 文件,找不到则设置 ErrorFlag 为 0
find --set-root /0PE/0PE.ISO || write 0x60000 0

; 如果 ErrorFlag 不为 0,则跳转到菜单 13
read 0x60000 && kernel


; 如果是 PXE 启动,则设置 root 为 PXE 服务器
read 0x60064 && rootnoverify (pd)

; 设置标志:不自动解压 gzip 格式的文件
write 0x82A4 1


;
fallback 14
; 如果 PXE 中存在 /0PE/BUFXP.GZ (判断文件大小是否为 0)则跳转到 菜单14
cat --length=0 /0PE/BUFXP.GZ && kernel

; 设置标志:自动解压 gzip 格式的文件
write 0x82A4 0


;
fallback 13

; 如果 PXE 中存在 /0PE/0PE.ISO 则跳转到 菜单13
cat --length=0 /0PE/0PE.ISO && kernel

; 判断选择的是否是用户自定义菜单,如果是,则设置 SysVer 为 1
checkrange 4 read 0x60068 && write 0x60300 1


;
fallback 12

; 如果是是用户自定义菜单,则跳转到菜单 12 继续处理
read 0x60300 && kernel

; 提示未找到 /0PE/BUFXP.GZ 和 /0PE/0PE.ISO
pause Error:/0PE/BUFXP.GZ and /0PE/0PE.ISO not found!



; 菜单12,处理 2003 系统,SysVer = 1,过程同 XP 系统
title

;
fallback 14

; 复位 ErrorFlag
write 0x60000 1

; 如果未找到 root 下面的 /0PE/BUF2K3.GZ 则设置 ErrorFlag 为 0
ls /0PE/BUF2K3.GZ || write 0x60000 0

; 如果是 PXE 启动,则设置 ErrorFlag 为 0
read 0x60064 && write 0x60000 0

; 如果 ErrorFlag 不为 0,则跳转到菜单 14
read 0x60000 && kernel

; 复位 ErrorFlag
write 0x60000 1

; 查找所有盘的 /0PE/BUF2K3.GZ 文件,找不到则设置 ErrorFlag 为 0
find --set-root /0PE/BUF2K3.GZ || write 0x60000 0

; 如果 ErrorFlag 不为 0,则跳转到菜单 14
read 0x60000 && kernel


;
fallback 13

; 复位 ErrorFlag
write 0x60000 1

; 如果未找到 root 下面的 /0PE/0PE.ISO 则设置 ErrorFlag 为 0
ls /0PE/0PE.ISO || write 0x60000 0

; 如果是 PXE 启动,则设置 ErrorFlag 为 0
read 0x60064 && write 0x60000 0

; 如果 ErrorFlag 不为 0,则跳转到菜单 13
read 0x60000 && kernel

; 复位 ErrorFlag
write 0x60000 1

; 查找所有盘的 /0PE/0PE.ISO 文件,找不到则设置 ErrorFlag 为 0
find --set-root /0PE/0PE.ISO || write 0x60000 0

; 如果 ErrorFlag 不为 0,则跳转到菜单 13
read 0x60000 && kernel

; 如果是 PXE 启动,则设置 root 为 PXE 服务器
read 0x60064 && rootnoverify (pd)

; 设置标志:不自动解压 gzip 格式的文件
write 0x82A4 1


;
fallback 14

; 如果 PXE 中存在 /0PE/BUF2K3.GZ 则跳转到菜单 14
cat --length=0 /0PE/BUF2K3.GZ && kernel

; 设置标志:自动解压 gzip 格式的文件
write 0x82A4 0


;
fallback 13

; 如果 PXE 中存在 /0PE/0PE.ISO 则跳转到菜单 13
cat --length=0 /0PE/0PE.ISO && kernel

; 提示未找到 /0PE/BUF2K3.GZ 和 /0PE/0PE.ISO
pause Error:/0PE/BUF2K3.GZ and /0PE/0PE.ISO not found!



; 菜单13,装载 0PE.ISO,然后跳转到 菜单14 继续启动
title

; 提示 root 位置,用于调试脚本
pause --wait=0 Current drive of 0PE.ISO:
debug on
root
debug off

; 恢复 Debug  状态
read 0x60110 && debug on

; 提示 装载0PE.ISO
pause --wait=0 Loading /0PE/0PE.ISO...

; 磁盘装载 0PE.ISO,如果不成功,则内存装载 0PE.ISO
map /0PE/0PE.ISO (0xff) || map --mem /0PE/0PE.ISO (0xff)

; 激活 map 的结果
map --hook

; 设置 root 为 0PE.ISO 的装载位置
rootnoverify (0xff)

; 跳转到 菜单14 继续处理
fallback 14 && kernel



; 菜单14,启动系统
title

; 设置标志:自动解压 gzip 格式的文件
write 0x82A4 0

; 保存当前根分区号,和当前根所在驱动器
dd if=(md) of=(md) bs=1 count=8 skip=0x829c seek=0x60130

; 提示 root 位置,用于调试脚本
pause --wait=0 Current drive of BUF*.GZ:
debug on
root
debug off

; 恢复 Debug  状态
read 0x60110 && debug on

; 根据 SysVer 提示并装载 XP 系统 Buf 到 (hd7)
read 0x60300 || pause --wait=0 Loading /0PE/BUFXP.GZ...
read 0x60300 || map --mem ()/0PE/BUFXP.GZ (hd7)

; 根据 SysVer 提示并装载 2003 系统 Buf 到 (hd7)
read 0x60300 && pause --wait=0 Loading /0PE/BUF2K3.GZ...
read 0x60300 && map --mem ()/0PE/BUF2K3.GZ (hd7)

; 激活 map 结果
map --hook

; 向 (hd7,0)/BAT/_ENV.BAT 中写入 set PEISO=/0PE/0PE.ISO\r\n,并继续从(hd7,0)/BAT/MENU.GZ 中的菜单启动
write --offset=200 (hd7,0)/BAT/_ENV.BAT set PEISO=/0PE/0PE.ISO\r\n && configfile (hd7,0)/BAT/MENU.GZ


------------------------------------------------------------
 
 
 
`


[ 本帖最后由 stevenldj 于 2009-9-2 16:59 编辑 ]

评分

参与人数 1无忧币 +10 收起 理由
zhhsh + 10

查看全部评分

53#
发表于 2012-6-6 09:59:40 | 只看该作者
无比强大啊..膜拜一下..
回复

使用道具 举报

52#
发表于 2012-6-6 02:06:26 | 只看该作者
一直就想学习0PE~真是好资料啊~可惜暂时看不懂~
先标记了然后慢慢学习~
回复

使用道具 举报

51#
发表于 2011-7-8 10:57:25 | 只看该作者
路边,学习中。。做个记号飘过
回复

使用道具 举报

50#
发表于 2011-5-28 02:22:44 | 只看该作者
原帖由 四海皆狂龙 于 2010-1-13 05:58 发表
只想知道启动原理和过程,大概的就可以了,细节就不需要了。


这是才是最终的精髓,把0pe的启动原理跟过程搞明白了,在从启动到登陆界面的着整个过程的情况才是能最终解读0pe的所在,放假回家研究研究
回复

使用道具 举报

49#
发表于 2011-3-11 13:59:24 | 只看该作者
楼主加P大就是高手,小弟要的就是流程!
回复

使用道具 举报

48#
发表于 2011-3-4 22:11:27 | 只看该作者
原帖由 <i>stevenldj</i> 于 2009-8-27 23:38 发表
试着解读 0PE 的专用菜单文件 MENU.0PE
  这个菜单文件是从 〇peZip扩展版二合一090620.ISO 的 grldr 中提取出来的,根据自己的理解加了一些注释(理解不一定正确),还有很多看 ...


原来还真有0pe菜单的注释
回复

使用道具 举报

47#
发表于 2011-3-4 20:59:20 | 只看该作者
我总觉得这样繁琐的程式菜单,太复杂,维护很难,就算有什么新方法新思路想改进,修改起来也挺麻烦的,一不留神就出错。
回复

使用道具 举报

46#
发表于 2010-12-25 01:16:05 | 只看该作者
都是牛人,路边,做个记号飘过
回复

使用道具 举报

45#
发表于 2010-12-24 02:31:35 | 只看该作者
原帖由 古豆 于 2010-12-22 11:57 发表



虽然无比崇敬pseudo,但觉得这位↑仁兄说到我心里了……

本来也是想修改下0PE,去除些自己不想要的菜单和IMG,但是,动了点什么后……无法启动了,哈哈

是啊,P大总说灵活,可DIY,但是它的内核菜单批处理都不怎么敢动,我想把那四五个文件夹合并到一个里都不敢,还有那个boot目录很不爽,我从来都不允许这样的可能和系统文件夹相同名称的文件夹出现在根目录里,但我不敢随便移啊,对于传统PE,移起来很简单。哎


还有英文提示完全可以改成中文,不是看不懂,而是很得慢、累,而且这让很多人感到害怕,难道0PE不是主要是中国人在用吗?而且,在菜单代码里,用中文的话,一眼就能看出哪些是代码哪些不是,全用英文就不明显了。如果是为了国际化,我觉得不如干脆分开,英文的是英文的,中文的是中文的,比如中发英文版,加中文包,或反过来,人家老外看到即有中文又有英文可能也不爽吧?而且据说有些老外电脑上没中文字体的,那不乱码了……
回复

使用道具 举报

44#
发表于 2010-12-24 02:23:04 | 只看该作者

回复 #4 pseudo 的帖子

P大发个教程授我们以渔啊!你的菜单到底在和谁对话啊!grldr吗?

P大是仙,stevenldj 是神,膜拜!
回复

使用道具 举报

43#
发表于 2010-12-22 11:57:31 | 只看该作者
原帖由 fukystone 于 2010-5-17 16:28 发表
其实pseudo大侠如果真的想推广0pe的话,搞什么英文版是无所谓的,只要你能把0pe的菜单和批处理详细注释一下,那么转用0pe的人会多很多,我想0pe最大的弱点就在于基本不能diy,看起来功能很全,菜单什么都包括了 ...



虽然无比崇敬pseudo,但觉得这位↑仁兄说到我心里了……

本来也是想修改下0PE,去除些自己不想要的菜单和IMG,但是,动了点什么后……无法启动了,哈哈
回复

使用道具 举报

42#
发表于 2010-12-22 11:52:57 | 只看该作者
终于找到解说员了……、、、可是……即使这样,我也看不太懂,天啊
回复

使用道具 举报

41#
发表于 2010-9-21 20:23:38 | 只看该作者
看到这个程式的内容,比起我20年前用APPLE Ⅱ机学习的basic语言复杂得多。回想当年真的好有兴趣学习机器语言。毕业后抛开书本N年了,而且又不从事相关工作。现在看到P大的程式,让我大开眼界。
回复

使用道具 举报

40#
发表于 2010-9-20 20:49:28 | 只看该作者
P大应考虑让更多高手加入发展0PE
回复

使用道具 举报

39#
发表于 2010-5-17 16:28:29 | 只看该作者
其实pseudo大侠如果真的想推广0pe的话,搞什么英文版是无所谓的,只要你能把0pe的菜单和批处理详细注释一下,那么转用0pe的人会多很多,我想0pe最大的弱点就在于基本不能diy,看起来功能很全,菜单什么都包括了,可惜对大多数人来说也就用那么几项吧?其他都是摆设。p大以为弄个menu就算diy了,但是你统计过有几个人用这个了吗?我觉得大多数人的diy是希望能自己修改核心,增删菜单等等。
编过程的人都知道,看别人没有注释的程序是最累的事,比自己写还要累的多。如果少还好说,象0pe这样的菜单和批处理其实也算是“程序”,所以我对楼主是很佩服的,能硬着头皮看到这个份上实在是有毅力,但想想这个工作如果是p大做的话,除了费了点时间外,恐怕一点难度也没有吧?
回复

使用道具 举报

38#
发表于 2010-4-30 14:21:58 | 只看该作者

回复 #38 借我一生 的帖子

可以这样DIY:http://bbs.wuyou.net/forum.php?m ... p;page=1#pid1923171
菜单/BOOT/GRUB/MENU.LST很简单,很容易增删菜单项。

如果汉字显示乱码,须更新grub4dos、unifont等。

可用新的v1.1a版的0PE.GZ及MENU.0PE取代原来v1.0.9的0PE_SRS.GZ及MENU.0PE。
0PE.GZ等价于的0PE_SRS.GZ+0PE_XP.ZIP,除了F6模块功能外,还是一个零体积版PE。
回复

使用道具 举报

37#
发表于 2010-4-30 13:58:57 | 只看该作者
某次下过一次0PE,想按照自已习惯改动一下。
解开直接傻眼。。。
留个脚印,待慢慢消化后再看有什么能力弄。
PS:0PE结构清爽,但特殊的菜单设计吓退不少喜欢按自已的喜好改动的人吧,我想。
diy容易,使用者众(改个logo弄个专用发布的人除外)
pseudo 莫怪,我没别的意思。
回复

使用道具 举报

36#
发表于 2010-4-29 23:04:51 | 只看该作者
搞这么复杂的菜单干什么?实用的有多少?匪夷所思。
回复

使用道具 举报

35#
发表于 2010-4-5 23:32:49 | 只看该作者
原来还想YY一下0PE来着,看完这个贴子,我决定洗洗睡了。
[一个有10年编程经验的人飘过]
回复

使用道具 举报

34#
发表于 2010-4-5 19:03:59 | 只看该作者
天啊,无忧果然是藏龙卧虎.
回复

使用道具 举报

33#
发表于 2010-4-5 17:40:46 | 只看该作者
原帖由 ahuan 于 2010-4-5 17:31 发表
不会编程,也不会批处理。。。只会依样画葫芦。。。的我。
理解不过来。

只需依这个菜单样
/BOOT/GRUB/MENU.LST画葫芦就行了。
回复

使用道具 举报

32#
发表于 2010-4-5 17:31:59 | 只看该作者
不会编程,也不会批处理。。。只会依样画葫芦。。。的我。
理解不过来。
回复

使用道具 举报

31#
发表于 2010-3-18 18:13:34 | 只看该作者
灰常强大,灰常牛,灰常强大的牛,大牛

做个记号,回头慢慢研读,争取一个星期内读通
回复

使用道具 举报

30#
发表于 2010-3-16 18:20:07 | 只看该作者
。。。。。有没有简单的 先研究研究啊。。 功能是强大。。这也太复杂了啊。。
回复

使用道具 举报

29#
发表于 2010-1-13 05:58:25 | 只看该作者
只想知道启动原理和过程,大概的就可以了,细节就不需要了。
回复

使用道具 举报

28#
发表于 2010-1-11 21:02:06 | 只看该作者
Chenall 与 Pseudo的菜单都是高级用法,够学的
回复

使用道具 举报

27#
发表于 2010-1-11 19:51:36 | 只看该作者
严重支持!.最好请 pseudo大师 写一个具体流程..
回复

使用道具 举报

26#
发表于 2010-1-10 12:17:16 | 只看该作者
2010年,什么最重要,技术。什么人最重要,掌握技术的人!。
回复

使用道具 举报

25#
发表于 2010-1-9 09:26:25 | 只看该作者
从前真的不知道GRUB这么牛,如果菜单写的好的话可以发挥如此强大的功能..
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-7-27 18:03

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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