苏联潜行者在线:Grub4dos典型菜单文件示范解读 - 梦缘逸飞 – myefly.net

来源:百度文库 编辑:九乡新闻网 时间:2024/04/26 15:41:38
 

梦缘逸飞 – myefly.net

展现梦想的舞台不会谢幕

十月 31st, 2010

Grub4dos典型菜单文件示范解读

169 views, 启动相关, by sleepycow.
Grub4dos典型菜单文件示范解读terminal console
color white/blue blue/yellow light-red/blue light-green/black
default 0
timeout 3
debug off
# save darddrives_orig:当前磁盘数量保存到 0x6000B
dd if=(md)2+1 of=(md)0×300+1 bs=1 count=1 skip=0×75 seek=0xb
clear

# 一些变量参数信息
# 0×8280    boot_drive
# 0x82A4    0:auto gunzip,1:no auto gunzip
# 0×60100   0:local,1:PXE,2:ISCSI,3:ERROR
# 0×60008   4:/OEM_SCSI.IMG,3:/MINIPE/OEM_SRS.ZIP,2:/OEM_SRS.ZIP
# 0×60000   2,READ /SYSTEM.WIM
# 0×60004   2,READ /NET.WIM
# 0×60110   8bit,save root
# 0x6000B   harddrives_orig
# 0x603FB   MICROPE.ISO文件大小
# 0x603FF   MICROPE.ISO所在分区号
################################
#一些常用语句介绍
#   write 0×60100 3             写内存命令使得内存0×60100的值为3
#   cat –length=0 (disk)/file  cat –length=0 用于获取文件大小,也可以用于检测文件是否存在
#   fallback n  如果后面的语句中有一句执行失败就跳到菜单n
#   kernel  未加参数的kernel,这样扫许会出错,配合fallback n来实现转菜单。
#   fallback F同kernel也是一个固意出错的语句。
#   pause –wait=0 显示后面的信息,不等待,如果wait=2就是等待2秒,如果没有–wait参数就是一直等待。
#   checkrange xx command1 && command2    检测command1执行返回的值是否xx,如是是就执行command2
#   || 如果前面的命令返回了一个失败的值,就执行后面的语句。
#0
title [0] Micro Windows PE (autocheck)\n\r\n\t Micro Windows PE by chenall 2009.11.11 http://www.chenall.com
###########################################################
# GRUB4DOS 版本检测(通过一些新版的功能来检测),如果检测版本不符合就跳到第14个菜单。
fallback 14
# 关闭出错检测
errorcheck off
#(hd)是新版才有的功能,使用cat (hd)+1检测
cat (hd)+1
#如果返回值是23(Error while parsing number)就代表这个版本太低了,正常情况下应该返回21
checkrange 23 errnum && write 0×60100 3
#恢复
errorcheck on
#检测上面的结果,如果内存0×60100位置的值是3就说明版本不符合
#后面kernel不加参数,执行时会出错,配合前面的fall back(错误跳转)来实现菜单跳转
checkrange 3 read 0×60100 && kernel
###########################################################

 

###########################################################
#PXE启动检测
fallback 1
#判断启动磁盘号,如果是0X21代表它是从PXE启动的就跳。
checkrange 0×21 read 0×8280 && kernel
#
#iSCSI启动检测,在内存512K-1024K之间查找iSCSI启动标志
fallback 2
#\x69BFT=iBFT iBFT是ISCSI启动标志(并且按16字节对齐的)具体可以参考ISCSI启动规范。
cat –locate=\x69BFT –locate-align=16 (md)0×400+0×400 && kernel
#
fallback 3
#写一个值到内存位置0×60100
write 0×60100 0
pause –wait=0 Boot MicroPE From local by chenall 2009.11.11
#文件定位##############################
#检测当前root下是否有指定文件,有就跳到下一菜单
cat –length=0 /WXPE/WINPE.IMG && kernel
#如果上面没有找到就全盘查找,并设置为ROOT
find –set-root /WXPE/WINPE.IMG && kernel
#如果上面还是没有找到就找ISO文件
find –set-root /boot/MicroPE.ISO
#找到了ISO文件,加载这个ISO文件
pause –wait=0 Boot MicroPE With /boot/MicroPE.iso……
#先使用普通的方式映射(比较快),如果不行就加载到内存
map /BOOT/MICROPE.ISO (hd32) || map –mem /BOOT/MICROPE.ISO (hd32)
map –hook

#可选语句,保存ISO文件所在分区号(用于进入PE后确定使用的ISO文件磁盘,因为有可能有多处存在)
cat –length=0 /BOOT/MICROPE.ISO && dd if=(md) of=(md) bs=1 count=4 skip=0×8290 seek=0x603FB
root (hd32)
cat –length=0 /MINIPE/EXT.ZIP
dd if=(md) of=(md) bs=1 count=1 skip=0x829e seek=0x603FF
kernel

#1
title
pause –wait=0 Boot MicroPE From PXE by chenall 2009.11.11
pause –wait=0 Loading WINPE.IMG ……
#如果内存小于120MB,直接读取(需要读两次),否则只需要读一次
checkrange 0x1E000:-1 read 0×8298 && write 0x82a4 1
map –mem=0xB000 /WXPE/WINPE.IMG (rd) || map –mem=0xB000 /MicroPE_PXE.ISO (rd)
write 0x82a4 0
write 0×60100 1
map –mem (rd)/WINPE.IMG (hd0) || map –mem (rd)+1 (hd0)
fallback 3
fallback F

#2
title
pause –wait=0 Bootting MicroPE From iSCSI ……
write 0×60100 2
fallback 3
fallback F

#3
title
pause –wait=0 Loading WINPE.IMG and EXT.ZIP ……
checkrange 0,2 read 0×60100 && map –mem /WXPE/WINPE.IMG (hd0)
cat –length=0 /MINIPE/EXT.ZIP || map –unmap=0xa0
map (hd0) (hd1) && pause –wait=0
map (hd1) (hd) && pause –wait=0
map –hook
#定位外置程序路径/MINIPE/EXT.ZIP,如果没有找到就启动失败
cat –length=0 /MINIPE/EXT.ZIP || find –set-root –ignore-floppies /MINIPE/EXT.ZIP
#保存当前ROOT
dd if=(md) of=(md) bs=1 count=8 skip=0x829c seek=0×60110
#查找OEM_SCSI.IMG和OEM_SRS.ZIP
errorcheck off
find –set-root –ignore-floppies –ignore-cd /OEM_SRS.ZIP || find –set-root –ignore-floppies –ignore-cd /MINIPE/OEM_SRS.ZIP
checkrange 0 errnum || find –set-root –ignore-floppies –ignore-cd /OEM_SCSI.IMG
errorcheck on
cat –length=0 /OEM_SCSI.IMG && write 0×60008 4
cat –length=0 /MINIPE/OEM_SRS.ZIP && write 0×60008 3
cat –length=0 /OEM_SRS.ZIP && write 0×60008 2
checkrange 2,3 read 0×60008 && dd if=(md) of=(md) bs=1 count=4 skip=0×8290 seek=0×60010
checkrange 2 read 0×60008 && map –mem /OEM_SRS.ZIP (fd1)
checkrange 3 read 0×60008 && map –mem /MINIPE/OEM_SRS.ZIP (fd1)
checkrange 4 read 0×60008 && map –mem /OEM_SCSI.IMG (fd1)
#还原ROOT
dd if=(md) of=(md) bs=1 count=8 skip=0×60110 seek=0x829c && root ()/MINIPE
map –mem (hd0,0)/EXT.IMG (fd2)
##如果外置程序所在磁盘的BIOS号是0-3或0×80-0×90,就把这个磁盘映射为(hd1)备用.
##checkrange 0 read 0x82a0 && map ()+1 (hd)
##checkrange 2 read 0×60100 && map ()+1 (hd1)
map –hook
#准备EXT.ZIP
cat –length=0 /EXT.ZIP
dd if=(md)0×41+1 of=(fd2)/_EXT.ZIP bs=1 count=4 skip=0×90
map –mem=0xB000 /EXT.ZIP (rd)
dd if=(rd)+1 of=(fd2)/_EXT.ZIP bs=1 seek=4
pause –wait=0 Modify configuration information
#以下语句用于修改CONFIG.SYS让它加载UNDI_DRV.EXE.默认不加载,使用PXE启动时通过修改特定字符让它加载.
checkrange 1 read 0×60100 && write (fd2)/config.sys devi

#设置DOS变量(1.PXE;2.iSCSI;0.本地)
checkrange 2 read 0×60100 && write –offset=0×0 (hd0,0)/_SETENVI.BAT \r\nset boot=2\r\n
checkrange 1 read 0×60100 && write –offset=0×0 (hd0,0)/_SETENVI.BAT \r\nset boot=1\r\n
checkrange 0 read 0×60100 && write –offset=0×0 (hd0,0)/_SETENVI.BAT \r\nset boot=0\r\n

checkrange 4 read 0×60008 && write –offset=0×40 (hd0,0)/_SETENVI.BAT \r\nset srs=OEM1\r\n
#如果DEBUG开启显示DOS的启动菜单以方便错误处理
checkrange 2 debug && write –offset=0×14 (fd2)/msdos.sys 1
checkrange 2 debug && write –offset=0×10 (hd0,0)/_SETENVI.BAT \r\nset debug=1\r\n
checkrange 0 read 0×60100 && fallback 4
checkrange 0xa0:0xff read 0x82a0 && fallback 15
checkrange 0 read 0×60100 && kernel
#把PXE启动的IP地址信息传到DOS下
dd if=(md)0×41+1 of=(fd2)/IP.BIN bs=1 count=12 skip=0×84
cat –length=0 (hd0,0)/WXPE/SYSTEM/SYSTEM.WIM || write 0×60000 2
cat –length=0 (hd0,0)/WXPE/NET/NET.WIM || write 0×60004 2
fallback 4
fallback F

#4 模块化跳转
title
fallback 5
checkrange 2 read 0×60000 && kernel
fallback 6
checkrange 2 read 0×60004 && kernel
fallback 13
checkrange 4 read 0×60008 && kernel
fallback 12
checkrange 2,3 read 0×60008 && kernel
fallback 7
map –mem=0xB000 /SRS.ZIP (rd) && kernel
fallback 11
map –mem=0xB000 /F6.ZIP (rd) && kernel
fallback 13
fallback F

#5 system.wim部份
title
write 0×60000 0
pause –wait=0 Loading SYSTEM.WIM……
map –mem=0xB000 /SYSTEM.WIM (rd)
cat –length=0 (rd)+1
pause –wait=0 Writing SYSTEM.WIM to (hd0,0)/system.bin ……
#写system.wim的长度信息到(hd0,0)/system.bin
dd if=(md)0×41+1 of=(hd0,0)/system.bin bs=1 count=4 skip=0×90
#写SYSTEM.WIM文件内容到(hd0,0)/system.bin(从第4个字节开始写),如果写入成功就设置一个变量
dd if=(rd)+1 of=(hd0,0)/system.bin bs=1 seek=4 && write –offset=0×20 (hd0,0)/_SETENVI.BAT \r\nset system=1\r\n
fallback 4
fallback F

#6 net.wim部份,语句功能请参考上面
title
write 0×60004 0
pause –wait=0 Loading @0#net.wim……
map –mem=0xB000 /AUTORUNS/@0#NET.WIM (rd)
cat –length=0 (rd)+1
pause –wait=0 Writing @0#net.wim to (hd0,0)/net.bin……
dd if=(md)0×41+1 of=(hd0,0)/net.bin bs=1 count=4 skip=0×90
dd if=(rd)+1 of=(hd0,0)/net.bin bs=1 seek=4 && write –offset=0×30 (hd0,0)/_SETENVI.BAT \r\nset net=1\r\n
fallback 4
fallback F

#7 检查是否存在外置驱动包,如果有的话自动加载.(SRS.ZIP)
title
fallback 8
pause –wait=0 Loading SRS.ZIP……
cat –length=0 (rd)+1
dd if=(md)0×41+1 of=(fd2)/_SRS.ZIP bs=1 count=4 skip=0×90
dd if=(rd)+1 of=(fd2)/_SRS.ZIP bs=1 seek=4
write –offset=0×40 (hd0,0)/_SETENVI.BAT \r\nset srs=SRS\r\n
fallback F

#8
title
#如果内存大于500MB就设置一个变量(用于自动把镜像转到128MB).需开启高级功能才生效
checkrange 512 read 0×60108 && write –offset=0×50 (hd0,0)/_SETENVI.BAT \r\nset to128=1\r\n
dd if=(md)0×300+2 of=(hd0,0)/_SETENVI.BAT bs=1 count=5 skip=0x3FB seek=0x7FB && pause –wait=0
map (fd2) (fd0)
map –unmap=2
map –rehook

checkrange 2 debug && pause Press any key to continue . . .
pause –wait=0 Booting… && chainloader (fd0)/io.sys

#9
title [9] SET DEBUG mode\n\r\n\tTrun on/off debug level
write 0×60104 0
checkrange 2 debug && write 0×60104 2
checkrange 2 read 0×60104 && debug off
checkrange 0 read 0×60104 && debug on
clear
checkrange 2 debug && pause Debug is now on …
checkrange 0 debug && pause Debug is now off …

#10
title [10] Enable advanced mode (test)
write 0x6010c 888
checkrange 0x7d000:-1 read 0×8298 && write 0×60108 512
pause Advanced Mode is enabled

#11
title
fallback 8
pause –wait=0 Loading F6.ZIP……
cat –length=0 (rd)+1
dd if=(md)0×41+1 of=(fd2)/_SRS.ZIP bs=1 count=4 skip=0×90
dd if=(rd)+1 of=(fd2)/_SRS.ZIP bs=1 seek=4
write –offset=0×40 (hd0,0)/_SETENVI.BAT \r\nset srs=F6\r\n
map –mem (fd2)/bat/F6.gz (fd1)
map –hook
fallback F

#12
title
fallback 8
pause –wait=0 Loading OEM_SRS.ZIP……
dd if=(md)0×300+2 of=(fd2)/_SRS.ZIP bs=1 count=4 skip=0×10
dd if=(fd1) of=(fd2)/_SRS.ZIP bs=1 seek=4
write –offset=0×40 (hd0,0)/_SETENVI.BAT \r\nset srs=OEM\r\n
map –mem (fd2)/bat/F6.gz (fd1)
map –hook
fallback F

#13
title
fallback 8
checkrange 1,2 read 0×60100 && kernel
map (fd2) (fd0)
map –unmap=2
map –rehook && configfile (fd0)/menu.lst
fallback F

#14
title
pause –wait=0 Error!
pause GRUB4DOS Version mismatched!

#15
title
#如果虚拟光驱中,设置一个变量,使得启动时优先使用光驱或ISO上的外置程序.
fallback 4
write –offset=0×60 (hd0,0)/_SETENVI.BAT \r\nset CDROMEX_=1\r\n
read 0x603fb && kernel
#获取虚拟ISO文件的大小.
map () (hd30)
map –hook
cat –length=0 (hd30)+1
checkrange 0xfb0400 read 0x82b0 && kernel
dd if=(md) of=(md) bs=1 count=4 skip=0x82b0 seek=0×60110
dd if=(md) of=(md) bs=1 count=4 skip=0×8290 seek=0×60114
dd if=(md)0×300+2 of=(hd0,0)/_SETENVI.BAT bs=1 count=8 skip=0×110 seek=0x7F0
map (hd30) (hd30)
map –hook
fallback F

Back Top

  • 目录

    • iOS&Android&WP7 (8)
    • Linux 相关 (12)
    • 原创专区 (10)
    • 启动相关 (7)
    • 数据库相关 (3)
    • 网络新闻 (1)
    • 网页制作 (5)
    • 计算机技巧 (6)
    • 音视频技术 (3)
  • Lasts

    • Chromium DL [Chromium下载器]
    • Autoit 调用迅雷的函数
    • 关于 Ghost后出现黑屏+光标情况的分析和解决
    • PNY 巴黎双子盘 16G [慧荣SM3254AE J0317主控] 量产成功
    • linux下使用命令行 修改IP、DNS、路由设置
  • 标签集

    一键还原 代码 分页代码 制定IP 基础 孤立用户 密码破解 无损压缩 无线互联,共享上网 有损压缩 梦缘逸飞 漂浮窗 爱睡觉的奶牛 禁用 种子隐藏 移动硬盘启动 系统安装辅助 系统维护工具盘 网页代码 网页飘窗 联想B720 自动升级 苹果 越狱 返回多条记录 音频格式 abobe updater access ASP B720量产 Backup copy命令 Driver dvd fbinst grub grub4dos iphone4 ntldr SQL sqlite u盘安装 video_ts vob Winpe

©2010 梦缘逸飞 – myefly.net ·Powered by WordPress 3.0.1.
SleepyCOW Redesigned by 翼飞网络.