无忧启动论坛
标题:
[简易脚本]带SRS的可输入式启动器[玩具]
[打印本页]
作者:
sunsea
时间:
2012-4-22 20:13
标题:
[简易脚本]带SRS的可输入式启动器[玩具]
不说了,上代码:
!BAT
debug off
checkrange 20111001:-1 read 0x8278 || echo Err.version && exit 1
cat (md)0x20001+1 | set string1=
call :jump %string1%
:jump
checkrange 1 read 0x603FE && command %~p0/F6IMG %~p0/SRS || echo No SRS!
goto :R%~x1
:R.img
:R.lzma
:R.gz
:R.ima
debug 1
checkrange 1 read 0x603FD || map %1 (fd0) || map --mem %1 (fd0)
checkrange 0 read 0x603FD && set file=%1 && goto :hd
if not exist (fd1)/TXTSETUP.SIF map --mem %~p0/WVBlock.IMG (fd1)
map --hook
chainloader (fd0)
rootnoverify (fd0)
boot
:R.iso
debug 1
map %1 (0xFF) || map --mem %1 (0xFF)
if not exist (fd1)/TXTSETUP.SIF map --mem %~p0/WVBlock.IMG (fd1)
map --hook
chainloader (0xFF)
root (0xFF)
boot
:hd
command %~p0/movehd
map %file% (hd0) || map --mem %file% (hd0)
if not exist (fd1)/TXTSETUP.SIF map --mem %~p0/WVBlock.IMG (fd1)
map --hook
chainloader (hd0)+1
rootnoverify (hd0,0) || rootnoverify (hd0)
boot
复制代码
(md)0x20001+1处为文件地址,不得超过512字节;0x603FE处为1表示加载SRS;0x603FD处为1指示是否为硬盘镜像
加载SRS需要文件目录里有F6IMG
实例:
http://115.com/file/bej1uwak#
简易实例.rar
调用ksrun
当然,只是玩具级别,请各位大大批评指正,谢谢!
补上movehd的代码,移植自zhaohj的代码,感谢!需和本程序在一起
!BAT
set /a hd=*0x475&0xff+0x7f
:: 内存地址0x475的低2字节保存的是物理磁盘数,使用 "*0x475&0xff" 即可得到磁盘数,
:: 将这个结果与0x7f相加后即为最后一块磁盘的驱动器号,并将这个值赋给变量 hd ,
:: 以含有两块物理磁盘为例(hd0) (hd1),执行本行命令后变量 hd 值为129 (16进制的 0x81),
:: 此时 hd0 为 128 (0x80) 号设备, hd1 为 129 (0x81) 号设备
checkrange 0x7f calc %hd% && exit
:: 若变量 hd 的值大于0x7f,说明存在物理磁盘,否则不存在物理磁盘,退出本脚本
:move
:: 标签名,方便循环处理
set /A hd1=%hd%+1
:: 将变量 hd 的值加一后赋给新变量 hd1,此时值为 0x82
map (%hd%) (%hd1%)
:: 将最后一块磁盘向后移,初始时 hd0 为 0x80号设备, hd1 为 0x81号设备,
:: 此时 hd0 为 0x80 号设备, hd1 为 0x82 号设备
set /A hd=%hd%-1
:: 将变量 hd 的值减一后重新赋给变量 hd,准备处理下一块磁盘
checkrange 0x7f calc %hd% || goto :move
:: 判断是否已处理完最后一块磁盘,没有的话返回到 :move 标签继续后移磁盘,
:: 本例中需执行两次后移磁盘操作,执行完毕后hd0为 0x81 号设备,hd1为 0x82 号设备,
:: 并保留原hd0设备号 (0x80) 不变以便供全外置内核PE使用
map --hook
:: 使仿真生效
exit
:: 退出批处理脚本
复制代码
[
本帖最后由 2011czmxbb52 于 2012-4-22 20:33 编辑
]
作者:
天使的魔翼
时间:
2012-4-23 09:56
这已不算是玩具了,已经初具模块的雏形。
希望LZ进一步制作出更加完美功能的工具,从而使G4D更加强大。
作者:
sunsea
时间:
2012-4-23 12:01
第二版,加上普通链式引导的代码:
!BAT
debug off
checkrange 20111001:-1 read 0x8278 || echo Err.version && exit 1
checkrange 524:-1 calc *0x413 & 0xffff || map --int15nolow=1 && pause Warnning: less memory
cat (md)0x20001+1 | set string1=
call :jump %string1%
:jump
checkrange 1 read 0x603FE && command %~dp0/F6IMG %~dp0/SRS || echo No SRS!
if /i "%~x1"=="" set file=%1 && call :chainload %file%
goto :R%~x1
:R.img
:R.lzma
:R.gz
:R.ima
debug 1
checkrange 1 read 0x603FD || map %1 (fd0) || map --mem %1 (fd0)
checkrange 0 read 0x603FD && set file=%1 && goto :hd
if not exist (fd1)/TXTSETUP.SIF map --mem %~p0/WVBlock.IMG (fd1)
map --hook
chainloader (fd0)
rootnoverify (fd0)
boot
:R.iso
debug 1
map %1 (0xFF) || map --mem %1 (0xFF)
if not exist (fd1)/TXTSETUP.SIF map --mem %~ dp0/WVBlock.IMG (fd1)
map --hook
chainloader (0xFF)
root (0xFF)
boot
:hd
command %~dp0/movehd
map %file% (hd0) || map --mem %file% (hd0)
if not exist (fd1)/TXTSETUP.SIF map --mem %~dp0/WVBlock.IMG (fd1)
map --hook
chainloader (hd0)+1
rootnoverify (hd0,0) || rootnoverify (hd0)
boot
:R.BIN
:chainload
checkrange 0x21 read 0x8280 || chainloader --force %1 ! chainloader --raw %1
root %~d1
boot
复制代码
[
本帖最后由 2011czmxbb52 于 2012-4-23 12:18 编辑
]
作者:
天使的魔翼
时间:
2012-4-23 14:10
慢慢的有点意思了,我想问一下,几时有成品出来???
还有,是否考虑直接使用NTBOOT加载?
作者:
sunsea
时间:
2012-4-23 16:57
搞了一个单文件版,下载地址:
http://115.com/file/bejd4dce#
ksrun.zip
以后一个文件通用
用法:
write (md)0x20001+1 ()/ISO/66369.ISO
#这行指定文件路径
write 0x603FE 1
#这行指定加载SRS
command ()/boot/grub/ksrun
#运行程序
复制代码
作者:
天使的魔翼
时间:
2012-5-4 16:04
标题:
回复 #5 2011czmxbb52 的帖子
这个模块,有点小问题,我在测试中发现不能返回G4D运行环境中,而且选择SRS错误后,不能正常返回。
欢迎光临 无忧启动论坛 (http://wuyou.net./)
Powered by Discuz! X3.3