无忧启动论坛

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

基于grub4dos的合盘,新突破,★11.14新增续尾法

  [复制链接]
跳转到指定楼层
1#
发表于 2009-11-13 15:11:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
=========================
09.11.13

pe区研究合盘的高手多,转一下。详见:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=142163&page=2#pid1829891

使用grub4dos-0.4.4-2009-11-13.zip的--replace功能,可以方便修改文件,如果介质不可写,可考虑载入内存后修改。其意义在于在一定程度上使grub4dos支持了变量功能。

至少就”合盘“而言,这是重要突破。合盘者得研究一下了。

原帖由 chenall 于 2009-11-12 23:35 发表
...
说明下为什么要加这个功能,主要是为了使用方便,像启动PE1.X时。还有需要使用变量的时候可以把文件先加载到内存然后替换掉。
比如要把几个PE1.X合在一起,按照以前的方式,需要多个启动文件(SETUPLDR.BIN)。
有了这个就不需要了,呵呵
只要一个SETUPLDR.BIN就通用(这个SETUPLDR.BIN需要没有自校验)。
一个例子(未测试,理论上可用)
title WXPE and WINNT.XPE
map --mem /WXPE/SETUPLDR.BIN (rd)
cat --locate=I386 --replace=WXPE (rd)+1
cat --locate=WINNT.SIF --replace=WINNT.XPE (rd)+1
chainloader (rd)+1
root ()

title TYPE and TYPE.XPE
map --mem /WXPE/SETUPLDR.BIN (rd)
cat --locate=I386 --replace=TYPE (rd)+1
cat --locate=WINNT.SIF --replace=TYPE.XPE (rd)+1
chainloader (rd)+1
root ()

=========================
09.11.14 《grldr续尾法》
为演示grub4dos的高级命令和程式菜单技术,这里提供一个新方法,我称之为《grldr续尾法》。

原理是在grldr的尾部续上一些东西,在grub4dos菜单中用高级命令甚至程式菜单去访问。这样可以减少文件数,甚至单文件化。并且便于藏入ud、置于网启服务器端等。

这是对老毛桃911pe改造后的结构:
H:\
│  grldr
│  
└─MINIPE
        OP.WIM
        WINPE.INI
        WINPE.IS_
注意启动相关文件只有一个grldr,原来setupldr.bin、ntdetect.com、winnt.xpe等都不见了(被封装到grldr尾部了)。WINPE.IS_(核心)、OP.WIM(外置)、WINPE.INI(配置)保持原版没动,其它东西精简掉了。这样清爽些吧。
即使合盘,也不难做到所有启动相关文件只有一个grldr。并且,grldr和核心WINPE.IS_可以轻易藏入ud、置于网启服务器端成为本地启动/网启两用等等。

这是grldr内置菜单:

  1. ;说明:
  2. ;1、使grldr内置菜单后体积是512的整数倍,例如体积为222720字节(即435扇区),不满时可通过增加本菜单注释内容凑满。
  3. ;2、复制原版启动光盘iso得到iso副本,对副本保留其中setupldr.bin、ntdetect.com、winnt.xpe、WINPE.IS_四个文件,删除其它文件。
  4. ;3、将副本中WINPE.IS_用同体积空白文件替换,目的是减少压缩后体积,WINPE.IS_实际长度为26655412。
  5. ;4、副本iso用gzip压缩后体积为208897,占409个扇区,
  6. ;5、将副本iso续于grldr尾部,得到最终的大体积grldr,作为最终iso的引导文件。
  7. debug off
  8. clear
  9. pause --wait=0 PE loader by Pseudo 2009.11.14
  10. pause --wait=0 Loading /MINIPE/WINPE.IS_...
  11. map --mem=0xB000 /GRLDR (rd)
  12. map --mem (rd)435+409,208897 (0xff)
  13. map --hook
  14. dd if=(cd)/MINIPE/WINPE.IS_ of=(0xff)/MINIPE/WINPE.IS_
  15. chainloader (0xff)
  16. ;这里随便写些注释使grldr内置菜单凑满435扇区...
  17. ;123456789012345678901234567890123456789012345678901234567890
  18. ;123456789012345678901234567890123456789012345678901234567890
  19. ;123456789012345678901234567890123456789012345678901234567890
  20. ;123456789012345678901234567890123456789012345678901234567890
  21. ;12345678901234567890123456
复制代码
附件是模板,使用UltraISO工具,用老毛桃911原版(MD5:9354b013057548d1282451008309b7e9  BootCD.ISO)里的WINPE.IS_,OP.WIM替换模板里的同名文件即可使用。
直接刻盘、量产为usb-cdrom。或用bootice装grub4dos到U盘mbr,然后把iso中文件放入u盘即可。
——sorry,好像写死了(cd)/MINIPE/WINPE.IS_,只能刻盘、量产为usb-cdrom,如果放入u盘、硬盘得自己相应修改一下这里的(cd)。参见#52楼

附件只是演示原理,故只针对老毛桃911原版,有兴趣者可以参考此法原理DIY自己的PE,有关数值对应关系已经给出,相应变动即可。后面有时间我可以提供更通用的模板。

整个改造过程不动刀子,没有改动原版文件内容,比较忠实于原版,只是做引导文件单一化处理。
许多pe都可以这么处理。

[ 本帖最后由 pseudo 于 2009-11-16 17:34 编辑 ]

grldr911.rar

295.55 KB, 下载次数: 516, 下载积分: 无忧币 -2

评分

参与人数 2无忧币 +10 收起 理由
879792799 + 5 很给力!
gues1688 + 5 很给力!

查看全部评分

2#
发表于 2009-11-13 15:27:49 | 只看该作者
呵呵,我现在已经可以把WINNT.SIF文件放到比较长的目录下了,例子
CSPE\KERNEL\WINNT.SIF
这样启动PE1.X就不会看起来很乱了。^_^

我下次PE更新准备把这个和MENU.LST合并成一个文件来使用。嘿嘿。
这样这个WINNT.SIF即是GRUB4DOS的菜单文件,还是SETUPLDR.BIN需要的WINNT.SIF。

当然了文件名可能会是其它的,不一定是WINNT.SIF.

只要有去了校验的SETUPLDR.BIN,直接使用GRUB4DOS就可以实现了。

[ 本帖最后由 chenall 于 2009-11-13 15:30 编辑 ]
回复

使用道具 举报

3#
发表于 2009-11-13 15:43:13 | 只看该作者

回复 #2 chenall 的帖子

回复一下,楼主别见怪!

chenall大师:
你将“把WINNT.SIF文件放到比较长的目录下了,例子
CSPE\KERNEL\WINNT.SIF”
能详细说一下吗?

如果把WINNT.SIF放在SETUPLDR.BIN里就好了,这很难?!
回复

使用道具 举报

4#
发表于 2009-11-13 16:18:55 | 只看该作者
原帖由 天涯海角1216 于 2009-11-13 15:43 发表
回复一下,楼主别见怪!

chenall大师:
你将“把WINNT.SIF文件放到比较长的目录下了,例子
CSPE\KERNEL\WINNT.SIF”
能详细说一下吗?

如果把WINNT.SIF放在SETUPLDR.BIN里就好了,这很难?!


"把WINNT.SIF文件放到比较长的目录下了" 就是楼主给的帖子的地方说的方法,感觉作用类似链接文件
回复

使用道具 举报

5#
 楼主| 发表于 2009-11-13 16:41:22 | 只看该作者
原帖由 天涯海角1216 于 2009-11-13 15:43 发表
回复一下,楼主别见怪!

chenall大师:
你将“把WINNT.SIF文件放到比较长的目录下了,例子
CSPE\KERNEL\WINNT.SIF”
能详细说一下吗?

如果把WINNT.SIF放在SETUPLDR.BIN里就好了,这很难?!

既然大家回复了,我干脆把内容贴过来,大家就在这里讨论算了。

按传统思路修改SETUPLDR.BIN,把WINNT.SIF内容放在里面没必要,思路可以开点。

正如chenall说的,WINNT.SIF可以放在meunu.lst里。其实随便放哪个目录(目录长度不限),或那个映像里,或嵌入某文件(包括SETUPLDR.BIN)里都可以。甚至藏入ud里、放在远程网启服务器端都是可以的。文件取什么名,名多长也没多少限制。

grub4dos的高级命令、程式菜单可以实现很强的功能。

感觉现在一些pe,尤其是一些合盘的pe,与启动相关的目录、文件多了点,有精简余地。
0PE将启动文件打扫干净,什么SETUPLDR.BIN、NTDETECT.COM等都看不到了,启动相关文件只有一个grldr。
即便是常见结构如老毛桃的911的pe,也可以基于grub4dos精简目录、文件,以求清爽。

我提出过一些理念,供大家参考:

提倡一种理念:
统一全内置版、全外置版
统一本地启动版、pxe网启版
统一U盘版(USB-CDROM、USB-HDD、USB-ZIP、ud、U+版)、移动硬盘版、硬盘版、光盘版
统一xp-pe、2003-pe,高度共享
统一维护版、上网版、娱乐版、全能版,统一骨头版、小版、完整版:体积、功能丰俭由人,组件化、外置化,自由扩展、随意剪裁(只增删不修改)、无缝衔接
统一引导文件,用于引导的文件、目录尽量少,盘上目录清爽,单独存在的文件一般都是可删除组件,否则尽量打包合并
各种版本全部合一(内核、外置全方位尽量合一),一个版本顶多个。

[ 本帖最后由 pseudo 于 2009-11-13 17:04 编辑 ]
回复

使用道具 举报

6#
发表于 2009-11-13 16:57:41 | 只看该作者
启动文件还是不改路径和文件名最好,折腾的乱七八糟过一段时间只怕连改的人也不明白哪是哪了*.*
回复

使用道具 举报

7#
发表于 2009-11-13 17:14:34 | 只看该作者
#3
这个好像很难。
至于放到长目录,最多应该可以有28个字符。但需要对应的修改WINNT.SIF里面的内容。
因为借用了里面的OsLoadOptions字符。
在0x2a432位置直接用write写入即可。

#6
这就是不改启动文件的方法,启动原文件都是原版的。修改的内容都在GRUB4DOS菜单里面,比以前的方案直观。

[ 本帖最后由 chenall 于 2009-11-13 17:27 编辑 ]
回复

使用道具 举报

8#
发表于 2009-11-13 17:36:58 | 只看该作者
原来是先挂到内存读取,又可以replace内存中的目录及文件名,G4D发展得越来越变态了。
回复

使用道具 举报

9#
发表于 2009-11-13 18:13:48 | 只看该作者
一个使用的例子
所有的启动文件都在CSPE\KERNEL\目录下
一个SETUPLDR.BIN(论坛上下的合并NTDETECT.COM的版本)
一个CSPE.IMG
一个Loader.cfg
一个menu.cfg

其中Loader.cfg内容
[SetupData]
BootDevice="ramdisk(0)"
BootPath="\WXPE\SYSTEM32\"
Loader.CFG="/minint /fastdetect /rdpath=CSPE\KERNEL\CSPE.IMG"

menu.cfg内容
title cspe
#先加载SETUPLDR.BIN到内存。
map --mem=0xB000 ()/CSPE/KERNEL/SETUPLDR.BIN (rd)
#修改winnt.sif路径
write --offset=0x2a432 (rd)+1 CSPE\\KERNEL\\LOADER.CFG\0
chainloader (rd)+1
root ()

这样就可以启动了,还可以把MENU.CFG和LOADER.CFG合并成一个文件(但这需要一些技巧,否则会出错的)
合并的方法,先把MENU.CFG的回车换成MAC的(也就是只有CR)并在前面加一个";"
然后
copy /y loader.cfg+menu.cfg

说明一下
write --offset=0x2a432 (rd)+1 CSPE\\KERNEL\\LOADER.CFG\0
从这个路径的第十三个字符也就是从"L”开始是属于以前OsLoadOptions的位置,
所以WINNT.SIF里面的OsLoadOptions要相应的改变,后面\0结束。(最长不得超过28个字符,否则就不好改了)

顺便再提供其它的修改
修改默认I386目录名

#修改默认目录名
write --offset=0x2A4FB (rd)+1 WXPE

修改默认的TXTSETUP.SIF文件名
write --offset=0x2A502 (rd)+1 TXTSETUP.CFG

嘿嘿,这样子处理后这个菜单就是启动这个PE专用的了,并而和SETUPLDR.BIN没有多大关系(只要是同一版本的就行了),以后要修改路径也方便。不用再对SETUPLDR.BIN开刀了。

注意如果写入的字符超长,第13个字符不可以为\0。一般情况下最好不要超过原来的WINNT.SIF+2 即11个字符。

[ 本帖最后由 chenall 于 2009-11-14 17:34 编辑 ]
回复

使用道具 举报

10#
发表于 2009-11-13 19:11:02 | 只看该作者
学习了非常好的东西。
回复

使用道具 举报

11#
发表于 2009-11-13 20:08:50 | 只看该作者

回复 #10 chenall 的帖子

也照你样子来试试
非常感激
回复

使用道具 举报

12#
发表于 2009-11-13 20:54:24 | 只看该作者
对以g4d作引导的可以大大地精简启动文件,还是比较有用的。但一种启动方式是不够的。以前我碰到一台机子,syslinux作一启时能够U启,但用g4d就启不了,报告给不点,说他的g4d似乎没有linux的兼容性;哪知道没过三天又碰到一台机子,情况却是相反的linux不行而g4d可以。究竟哪个的兼容性好,真的很难说,没办法只有搞双启了。。。。。
回复

使用道具 举报

13#
发表于 2009-11-13 20:58:56 | 只看该作者

回复 #13 hhh333 的帖子

我顺便也说一下 我的MSI 845E主板,U启只能用SYSLINUX,G4D的话开机自检不能通过,不知道是不是不点大所说的BIOS封杀G4D?
回复

使用道具 举报

14#
发表于 2009-11-13 21:10:51 | 只看该作者

回复 #10 chenall 的帖子

到底是大师级!!!
巧妙,谢谢!
学习了!!!

建议加精,让更多的人学会!

[ 本帖最后由 天涯海角1216 于 2009-11-13 21:12 编辑 ]
回复

使用道具 举报

15#
发表于 2009-11-13 21:18:14 | 只看该作者
原帖由 chenall 于 2009-11-13 18:13 发表
一个使用的例子
所有的启动文件都在CSPE\KERNEL\目录下
一个SETUPLDR.BIN(论坛上下的合并NTDETECT.COM的版本)
一个CSPE.IMG
一个Loader.cfg
一个menu.cfg

其中Loader.cfg内容
[SetupData]
BootDevic ...



嗯,这个修改方案巧妙,不用整天替换来替换去了。
回复

使用道具 举报

16#
发表于 2009-11-13 21:25:36 | 只看该作者
原帖由 玄天 于 2009-11-13 03:57 发表
启动文件还是不改路径和文件名最好,折腾的乱七八糟过一段时间只怕连改的人也不明白哪是哪了*.*

我完全赞同你的看法。现在国內流行的PE很多都把启动路径和文件名换成非标准模式,这样做的“好”处是结构清爽和让人难以修改作者的成品,但绝对不利于技术交流和推广,更不利于走岀世界!
回复

使用道具 举报

17#
发表于 2009-11-13 21:27:44 | 只看该作者
大师级的人物毕竟不同凡响,受教了。
回复

使用道具 举报

18#
发表于 2009-11-14 16:08:05 | 只看该作者
原帖由 chenall 于 2009-11-13 18:13 发表
menu.cfg内容
title cspe
#先加载SETUPLDR.BIN到内存。
map --mem=0xB000 ()/CSPE/KERNEL/SETUPLDR.BIN (rd)
#修改winnt.sif路径
write --offset=0x2a432 (rd)+1 CSPE\\KERNEL\\LOADER.CFG\0
chainloader (rd)+1
root ()

我使用 grub4dos-0.4.4-2009-11-12 版本,
及 繁體 peldr 作測試.

write --offset=0x2a432 (rd)+1 12\\RXPE.SIF\0
啟動成功.

write --offset=0x2a432 (rd)+1 12\\RXPE.SIF\0\0
啟動失敗. 當寫入第十三個字元便失敗了. (覆蓋原有 OsLoadOptions 的第一個字元)

想問是否一定要使用, 你的 SETUPLDR.BIN (合併版本)
才可最多寫 28 字元, 而仍可啟動 WinPE 成功呢?
回复

使用道具 举报

19#
发表于 2009-11-14 17:28:46 | 只看该作者
注意看一下我的原贴,后面的
"
从这个路径的第十三个字符也就是从"L”开始是属于以前OsLoadOptions的位置,
所以WINNT.SIF里面的OsLoadOptions要相应的改变,后面\0结束。(最长不得超过28个字符,否则就不好改了)
"
需要对应的改WINNT.SIF里面的OsLoadOptions为新的字符才行的。
回复

使用道具 举报

20#
发表于 2009-11-14 17:32:33 | 只看该作者
忘了说一点第十三个字符不可以为\0,否则就没办法用了。

比如你覆盖了0s字符为f,
如下使用
write --offset=0x2a432 (rd)+1 1234\\RXPE.SIF\0
那winnt.sif里面的
OsLoadOptions=需要改成f=

这些如果不清楚最好不要乱改。
回复

使用道具 举报

21#
 楼主| 发表于 2009-11-14 18:34:35 | 只看该作者
为演示grub4dos的高级命令和程式菜单技术,这里提供一个新方法,我称之为《grldr续尾法》。见#1楼。
回复

使用道具 举报

22#
发表于 2009-11-14 19:06:46 | 只看该作者
原帖由 chenall 于 2009-11-14 17:32 发表
忘了说一点第十三个字符不可以为\0,否则就没办法用了。

比如你覆盖了0s字符为f,
如下使用
write --offset=0x2a432 (rd)+1 1234\\RXPE.SIF\0
那winnt.sif里面的
OsLoadOptions=需要改成f=

这些如果不 ...

相信我明白了, 也成功啟動了.

因為 1234\\RXPE.SIF\0 第十三個字元開始, 是 OsLoadOptions 所屬範圍,
"1234\\RXPE.SIF\0" 這字串中, 第十三個字元 是 "F", 而第十四個字元 是 \0
所以 Winnt.sif 內之
OsLoadOptions=
需要改成
F=

謝謝!
回复

使用道具 举报

23#
发表于 2009-11-14 19:50:55 | 只看该作者
如果没有看明白的朋友可以去我的搏客看一下,我今天写的文章
对这些的图文解释,了解了这些想改其它东西比如I386要改长一点也行了。
http://www.chenall.com/blog/2009/11/SETUPLDR.html
回复

使用道具 举报

24#
发表于 2009-11-14 20:32:32 | 只看该作者
P&C二大师之技,炉火纯青,让人叹服!
回复

使用道具 举报

25#
发表于 2009-11-14 21:19:37 | 只看该作者
真正搞技术的的地方.先顶再学习.
回复

使用道具 举报

26#
发表于 2009-11-14 21:29:19 | 只看该作者
楼主思维独特,创新探究,学习了!
回复

使用道具 举报

27#
发表于 2009-11-14 21:52:39 | 只看该作者
大师独创


追尾法
回复

使用道具 举报

28#
发表于 2009-11-14 22:32:19 | 只看该作者
请教,gzip压缩最好用什么压缩器?
回复

使用道具 举报

29#
发表于 2009-11-14 23:11:30 | 只看该作者
懒得折腾,直接用grub启动iso合盘更方便吧:)
回复

使用道具 举报

30#
 楼主| 发表于 2009-11-14 23:14:07 | 只看该作者

回复 #28 lwz 的帖子

回复 #28 lwz 的帖子
“追尾法”确实好听些,呵呵

回复 #29 zxw 的帖子
7-zip就行
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-12-1 04:34

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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