无忧启动论坛

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

DOS下查找磁盘里的grub.exe并运行,增加一个刷入BIOS的img

  [复制链接]
发表于 2015-1-13 20:31:54 | 显示全部楼层 |阅读模式
本帖最后由 2013abcdefg 于 2015-3-2 21:01 编辑

DOS下查找磁盘里的grub.exe并运行,文件大小13K
符件有源码

感谢TajuraTong和roytam1的支持与帮助!

相关教程请看老毛桃贴子< 硬盘无法启动,无光、软驱,没关系!不死系统让你电脑维护不耽误!>
http://bbs.wuyou.net/forum.php?m ... hlight=%B2%BB%CB%C0


grub.exe下载直达214#:
http://bbs.wuyou.net/forum.php?m ... &fromuid=472277






G2X方案界面

G2X方案界面

G3X方案界面

G3X方案界面

g.7z

7.69 KB, 下载次数: 70, 下载积分: 无忧币 -2

g.exe

G2X方案ROMOS.zip

355.76 KB, 下载次数: 59, 下载积分: 无忧币 -2

g2x方案img

G3X方案ROMOS (1).zip

359.64 KB, 下载次数: 86, 下载积分: 无忧币 -2

g3x方案

发表于 2015-1-28 11:56:46 | 显示全部楼层
本帖最后由 TajuraTong 于 2015-1-28 16:55 编辑
TajuraTong 发表于 2015-1-27 19:25
71comm.com之下,一切方便得多了,你可以跑跑其他软件试试

暂时看不出g2.com哪里出问题,在我的虚拟机 ...


之前说修改g2x.com,给dosset.bat自动填入盘符,想想,这样做太琐碎。
不如由g2x.com传回errorlevel更具弹性,因为别的程式或batch均可读取,再做处理。

好吧,g2x.com只做了小修改,发现file,并顺利执行则传回执行档案的盘符编号

比如键入g2x \71comm.com
若成功执行71comm.com且在A盘则传回1,B盘传回2.....Z盘传回26

压缩包里有新版的g2x.com,一个sdos.bat批次档和71comm.com
键入sdos.bat就可以了,不须任何参数。

运行流程:
sdos.bat第一次被载入,当前环境,还是freeDos那个弱爆command.com
不认得第一行的 if,直接无视跳到第2行,执行g2x  \71comm.com /K sdos.bat  XX:
/K 表示不返回,载入新的dos 7.1后由它执行sdos.bat XX:

sdos.bat第2次被载入,当前环境,已是威力相当的dos 7.1,有能力解释第一句了
因着参数"%1"=="XX:",于是跳到done,然后再次执行g2x  \71comm.com  /c echo  ..
/c 表示返回,这样才可以获取errorlevel。(freeDos下的command.com没有本事解释errorlevel)

根据errorlevel跳到相关的位置设定变nn,若errorlevel=26,nn=Z,errorlevel=25,nn=Y.....
然后再跳到去设定COMSPEC

set COMSPEC=%nn%:\71comm.com
prompt $p$g
cls
echo Dos 7.1 Loading...
(收工)


sdos.bat 的样子很丑陋,因为dos 7.1尽管比freedos强,但远没有windows的cmd.exe那样无所不能,
连&&也不支援,不能简化代码,只好将就。


用法:
把sdos.bat和g2x.com放进ROMD64KB.IMG,71comm.com放到任何盘里,
若71comm.com不在\,可自行修改sdos.bat,之前的dosset.bat可以丢了。
键入sdos.bat就是。
若不小心按了exit,会返回freedos,可以再键入sdos.bat跳回dos7.1


-------------------------------------------------------------
if "%1"=="XX:" goto done      (第1行)
g2x  \71comm.com  /K sdos.bat  XX:  (第2行)
:done
g2x  \71comm.com  /c echo  ..
if errorlevel 27 goto error
if errorlevel 26 goto Z
if errorlevel 25 goto Y
.
.
.
.
if errorlevel 1  goto A
.
.
.
:A
set nn=A
goto NX
.
.
.
:NX
set COMSPEC=%nn%:\71comm.com
prompt $p$g
cls
echo Dos 7.1 Loading...

-------------------------------------------------------------


g2x-dos.rar (42.71 KB, 下载次数: 32)
回复

使用道具 举报

发表于 2015-1-31 10:51:49 | 显示全部楼层
roytam1 发表于 2015-1-31 10:11
這個要在minicmd中實視,稍後時間我試試看

pwrmenu好像只是把command.com载入,没有传递参数,并不能执行batch,
即便传了,command.com不支持 /c 也没用。

minicmd.com似乎也没有 /c 的机制。

设想中新的gui - g2x可以执行bat(当然也要command支持),大概两三天后完成(要找时间写),暂时不用折腾pwrmenu了。

点评

很期待!现在minicmd.com 已经支持 /c了,原gui.exe可调用bat了,我现在的方案是用您的g2x.com以bat文件(类似ini文件)用的. 这样只要改bat文件就可以改多目录了! 谢谢  详情 回复 发表于 2015-1-31 16:29
回复

使用道具 举报

发表于 2015-1-30 09:44:36 | 显示全部楼层
減少並合併函數,以減少體積 (雖然FAT中的大小無法減少啦。)
minicmd.7z (70.74 KB, 下载次数: 38)

点评

对的,每次缩减须以磁区(512)的倍数为单位,否则实质意义不大。  详情 回复 发表于 2015-1-30 11:43
正想如何减少体积,您就做好了,谢谢!  详情 回复 发表于 2015-1-30 11:05
回复

使用道具 举报

发表于 2015-1-28 19:13:57 | 显示全部楼层
稍微改進了一下minicmd:
- 可以直接用 "dir/w" 不用加空格了
- if 不再產生空行了
- if 支持 NOT 關鍵字
- 換用aPack壓縮
minicmd.7z (19.01 KB, 下载次数: 17)
回复

使用道具 举报

 楼主| 发表于 2015-1-14 09:40:56 | 显示全部楼层
本来想做个Wee.exe但又没有能力去做,所以就做了个小工具,用grub.exe代替了grldr

点评

老兄,能不能搜文件夹?要不你研究下把xorboot输出的直接搜索img镜像启动的配置文件刷入bios,还可以支持文件夹,我觉得可以实现你看如何?嘿嘿,没办法,自己不会做  详情 回复 发表于 2015-1-20 20:54
回复

使用道具 举报

发表于 2015-1-16 11:19:52 | 显示全部楼层
可以直接查找 grldr 并运行吗?
回复

使用道具 举报

 楼主| 发表于 2015-1-17 23:19:40 | 显示全部楼层
grub.exe=grldr
回复

使用道具 举报

发表于 2015-1-20 20:54:48 来自手机 | 显示全部楼层
2013abcdefg 发表于 2015-1-14 09:40
本来想做个Wee.exe但又没有能力去做,所以就做了个小工具,用grub.exe代替了grldr

老兄,能不能搜文件夹?要不你研究下把xorboot输出的直接搜索img镜像启动的配置文件刷入bios,还可以支持文件夹,我觉得可以实现你看如何?嘿嘿,没办法,自己不会做
回复

使用道具 举报

 楼主| 发表于 2015-1-20 22:51:27 | 显示全部楼层
能搜文件夹

点评

若整个硬盘或usb上没有grub.exe,或grub.exe放在较后的位置,这程式会花长时间搜索,甚至死机。 有没有必要作文件夾搜寻?这个还需参详。 通常情况,grub.exe会放在根目录或 \boot\grub下 其实两句batch命令便  详情 回复 发表于 2015-1-23 10:38
回复

使用道具 举报

发表于 2015-1-21 07:14:20 来自手机 | 显示全部楼层
本帖最后由 765058729 于 2015-1-21 07:36 编辑

那可以玩玩了,谢谢
想起以前有分别有做好的63和127扇区wee模块,我找找看
回复

使用道具 举报

发表于 2015-1-23 10:38:36 | 显示全部楼层

若整个硬盘或usb上没有grub.exe,或grub.exe放在较后的位置,这程式会花长时间搜索,甚至死机。
有没有必要作文件夾搜寻?这个还需参详。

通常情况,grub.exe会放在根目录或 \boot\grub下
其实两句batch命令便可以了,当然也可以写个小汇编来实行,大概能小于500bytes
把下面的文字写入一个 xxx.bat,执行则可,前提是grub.exe须放在任何一个驱动器(包括硬盘、光盘和usb)的  \   或  \boot\grub下

@echo off
FOR %%A IN (C: D: E: F: G: H: I: J: K: L: M: N: O: P: Q: R: S: T: U: V: W: X: Y: Z: ) DO if exist %%A\grub.exe %%A\grub.exe %1 %2 %3 %4 %5 %6 %7  
FOR %%A IN (C: D: E: F: G: H: I: J: K: L: M: N: O: P: Q: R: S: T: U: V: W: X: Y: Z: ) DO if exist %%A\boot\grub\grub.exe %%A\boot\grub\grub.exe %1 %2 %3 %4  %5 %6 %7
回复

使用道具 举报

 楼主| 发表于 2015-1-23 12:59:42 | 显示全部楼层
汇编不会写呵

点评

这个汇编也不复杂,照batch的思路便可,依次找寻每一个盘的\grub.exe 和 \boot\grub\grub.exe 找到则载入,找不到离开。 另外,你的程式并不传递变量,比如 g help之类,grub.exe 是不能接收到的。 这个小 com  详情 回复 发表于 2015-1-23 16:04
回复

使用道具 举报

发表于 2015-1-23 16:04:52 | 显示全部楼层

这个汇编也不复杂,照batch的思路便可,依次找寻每一个盘的\grub.exe 和 \boot\grub\grub.exe
找到则载入,找不到离开。
另外,你的程式并不传递变量,比如 g help之类,grub.exe 是不能接收到的。

这个小 com  和 batch 功能一样,比batch还小,只有312 bytes
G.rar (328 Bytes, 下载次数: 33)

点评

TajuraTong, 你的g.exe是集成有gui版本的,有查找ghost.exe, 你是生成两个.com程序的吗? 可以提供一下没有集成的版本吗?  详情 回复 发表于 2015-1-23 22:49
回复

使用道具 举报

 楼主| 发表于 2015-1-23 17:10:21 | 显示全部楼层
可否提供i源码学习一下?

点评

噢,对不起忘了源码! 尽管思路一样,batch和汇编仍有差别,因为batch面对的是command.com, command.com代做了许多麻烦事,汇编面对是int 21h,利用ah=4h int21h读取file属性, 读到则表示存在,马上执行,读  详情 回复 发表于 2015-1-23 17:41
回复

使用道具 举报

发表于 2015-1-23 17:41:16 | 显示全部楼层
本帖最后由 TajuraTong 于 2015-1-23 17:42 编辑
2013abcdefg 发表于 2015-1-23 17:10
可否提供i源码学习一下?


噢,对不起忘了源码!

尽管思路一样,batch和汇编仍有差别,因为batch面对的是command.com,
command.com代做了许多麻烦事,汇编面对是int 21h,利用ah=43h int21h读取file属性,
读到则表示存在,马上执行,读不到则不存在,盘符+1继续读,直到盘符到Z:为止。
找完 \grub.exe 后若无果则继续找  \boot\grub\grub.exe

比较麻烦的是,无论开启file或者读取file属性,只要盘符不存在或者碰到光盘(没有插片),
dos都会弹出错误讯息如:装置未就绪 或 Drive not ready之类的句子(batch好像没有这个烦), 
所以还要拦截int 23h和int 24h(错误处理中断),让自己的编码处理,其实就是不处理,消灭了错误讯息!
g-asm.rar (1017 Bytes, 下载次数: 16)

点评

谢谢提供!  发表于 2015-1-23 22:37
回复

使用道具 举报

 楼主| 发表于 2015-1-23 22:12:35 | 显示全部楼层
本帖最后由 2013abcdefg 于 2015-1-24 10:47 编辑

TajuraTong,如果加上查找根目录的ghost.exe,   

使用参数如   g.com /ghost   是查找根目录的ghost.exe并运行
                    g.com /grub    是查找根目录的grub.exe并运行

你的源码要怎么修改呢?请指教!谢谢
回复

使用道具 举报

 楼主| 发表于 2015-1-23 22:13:17 | 显示全部楼层
本帖最后由 2013abcdefg 于 2015-1-24 10:44 编辑

汇编运行很快
回复

使用道具 举报

 楼主| 发表于 2015-1-23 22:49:29 | 显示全部楼层
本帖最后由 2013abcdefg 于 2015-1-24 10:43 编辑
TajuraTong 发表于 2015-1-23 16:04
这个汇编也不复杂,照batch的思路便可,依次找寻每一个盘的\grub.exe 和 \boot\grub\grub.exe
找到则载 ...

TajuraTong, 你的g.exe很好, 如果我想再查找ghost怎么集成在源码里,使用参数?请指教!
回复

使用道具 举报

发表于 2015-1-24 12:14:35 | 显示全部楼层
你想找grub.exe 还是 ghost.exe,其实只要改一下file地址便可以了。
我更改了g.asm的设定,改成g2.asm,新的g2.com把档案路径移到程式最末,你可以任意添加多条路径,比如
A:\dos\ghost.exe
A:\pe\ghost.exe
其中,[A:\] 和 程式名称如   [ghost.exe',0]  是必须的,新的搜查方式是会逐条路径逐个盘符搜查。
直到没有新路径为止。

为什么不搜索文件夹?其实我也用汇编写了,但速度太慢,每部机子情况不同,没必要浪费时间。

这程式是com 制式,必须将exe ->com,压缩包里包含了exe to com 的工具和g2.asm源码
你可以任意 [修改] 或 [添加]  g2.asm 里最末的路径和执行档案名称,编译成exe后再用exe2bin工具转为com

exe to com使用方法
dos 之下键入
loadfix exe2bin XXX.exe  XXX.com

其中xxx是执行档名称

exe2com.rar (8.34 KB, 下载次数: 31)
回复

使用道具 举报

 楼主| 发表于 2015-1-24 12:51:08 | 显示全部楼层
本帖最后由 2013abcdefg 于 2015-1-24 13:00 编辑

我是想实现这样的效果
使用参数如   g.com /ghost   是查找根目录的ghost.exe并运行
                    g.com /grub    是查找根目录的grub.exe并运行

我现在的方案是用你的源码生成了两个COM文件,一个是查找grub,一个是查找ghost(已经改file地址).
本想是想只要一个com文件就可以,用参数来实现,但发现汇编的参数搞都我晕了,所以...想请指点一下

两个COM文件分别是:  (本意是想实现两个文件的合体)

ghost.com.zip

413 Bytes, 下载次数: 11, 下载积分: 无忧币 -2

查找ghost

grub.com.zip

411 Bytes, 下载次数: 9, 下载积分: 无忧币 -2

查找grub

点评

用参数方式查找也很简单,我的程式改一下就可以了,不过今天特忙,有空再给你看看吧,dos程式的参数,即 xxx.exe  [参数1] [参数2] 参数都会放在cs: 区块80h的位置,80h是参数的bytes数(包括空白),82h开始才是真  详情 回复 发表于 2015-1-24 13:29
回复

使用道具 举报

发表于 2015-1-24 13:29:45 | 显示全部楼层
2013abcdefg 发表于 2015-1-24 12:51
我是想实现这样的效果
使用参数如   g.com /ghost   是查找根目录的ghost.exe并运行
                    ...

用参数方式查找也很简单,我的程式改一下就可以了,不过今天特忙,有空再给你看看吧,dos程式的参数,即 xxx.exe  [参数1]  [参数2]
参数都会放在cs: 区块80h的位置,80h是参数的bytes数(包括空白),82h开始才是真正的参数,汇编要自己处理,不像c那么简单就是
回复

使用道具 举报

 楼主| 发表于 2015-1-24 14:02:37 | 显示全部楼层
好的,你忙,先谢了!
回复

使用道具 举报

 楼主| 发表于 2015-1-24 17:30:53 | 显示全部楼层
找到一份但不知道怎么结合, 处理字符串和比较相对C好像都很麻烦
        CODE  SEGMENT
              ASSUME    CS:CODE,DS:CODE
              ORG       100H

        MAIN  PROC      FAR
      START:  MOV       SI,80H      ; 指向psp的80h处
              LODSB                 ; 获取参数长度,记录在 al 中
              XOR       AH,AH
            ADD       SI,AX       ; SI指向参数末尾
              MOV       BYTE PTR [SI],0DH       ; 回车
              MOV       BYTE PTR [SI+1],0AH     ; 换行
              MOV       BYTE PTR [SI+2],24H     ;'$'

              MOV       DX,82H      ; 命令行参数首地址
              MOV       AH,09H     ;显示参数
              INT       21H

              MOV       AH,4CH
              INT       21H

              RET
        MAIN  ENDP
        CODE  ENDS
              END       MAIN
回复

使用道具 举报

 楼主| 发表于 2015-1-24 21:01:34 | 显示全部楼层
TajuraTong, 其实你的程式还可以做得更通用性, 把文件名作为参数变量,直接查找XXX.EXE 并运行. 如: g.com  grub.exe   就是查找grub.exe并运行, g.com [xxx.exe] 这种格式就可以了.  目录其它的可以做成ini文件(用户可加可减). 这是个人的一点想法, 主要还是取决于你.

点评

分析 /grub 或者 /ghost 之类的参数,弹性比较少,不如直接给出位置和程式。 这个版本加入参数分析,但不须指定/grub或/ghost 用法: g2x [程式完整路径] (不用给出盘符) 例如1: g2x \grub.exe (程式  详情 回复 发表于 2015-1-24 22:37
回复

使用道具 举报

发表于 2015-1-24 22:37:03 | 显示全部楼层
2013abcdefg 发表于 2015-1-24 21:01
TajuraTong, 其实你的程式还可以做得更通用性, 把文件名作为参数变量,直接查找XXX.EXE 并运行. 如: g.com   ...

分析 /grub 或者 /ghost 之类的参数,弹性比较少,不如直接给出位置和程式。

这个版本加入参数分析,但不须指定/grub或/ghost

用法: g2x [程式完整路径]     (不用给出盘符)

例如1: g2x \grub.exe   (程式会由A:\grub.exe开始搜,到Z:\grub.exe,只要找到则执行。
例如2: g2x \boot\pe\ghost.exe   (程式会由A:\boot\pe\grub.exe开始,到Z:\boot\pe\grub.exe,只要找到则执行        。
没有参数或者找不到程式则直接结束。

这版本也可以传递参数:
  g2x \boot\pe\ghost.exe xxxxx yyyyy zzzzz
      跟
  ghost.exe xxxxx yyyyy zzzzz  等价,三个参数依次传递。


刚抽空写好了这个版本才看到你的回复,哈哈,忽忙写的,没有怎么测试,看看有没有bug吧

g2x.rar (2.67 KB, 下载次数: 22)
回复

使用道具 举报

 楼主| 发表于 2015-1-24 23:08:17 | 显示全部楼层
本帖最后由 2013abcdefg 于 2015-1-24 23:34 编辑

好的,谢谢,你的效率很高. 我测试再看有什么.


又用IMG测试了一下, A:盘里有ghost.exe
运行 g2x \ghost.exe 没有反应

直接运行是可以的

无反应

无反应

直接ghost.exe是可以的

直接ghost.exe是可以的

点评

暂时看不出那里出错,这版本加了错误讯息,会显示什幺出错。你可以试在实机测试一下。 运行的program必须为com或exe,程式没有做检查,若是bat或cmd或其他,运行结果将是灾难。  详情 回复 发表于 2015-1-25 08:56
回复

使用道具 举报

发表于 2015-1-25 08:56:14 | 显示全部楼层
2013abcdefg 发表于 2015-1-24 23:08
好的,谢谢,你的效率很高. 我测试再看有什么.

暂时看不出那里出错,这版本加了错误讯息,会显示什幺出错。你可以试在实机测试一下。
运行的program必须为com或exe,程式没有做检查,若是bat或cmd或其他,运行结果将是灾难。
g2x.rar (2.47 KB, 下载次数: 17)
回复

使用道具 举报

 楼主| 发表于 2015-1-25 09:20:00 | 显示全部楼层
已经实机测试了,结果和它是一样的
sshot-1.png

ROMD64KB.zip

57.2 KB, 下载次数: 8, 下载积分: 无忧币 -2

我用的img

回复

使用道具 举报

 楼主| 发表于 2015-1-25 09:20:48 | 显示全部楼层
本帖最后由 2013abcdefg 于 2015-1-25 09:25 编辑

在windows下测试是正常的
用MSDOS的IMG是正常的,可能我上面的IMG有问题吧

msdos.zip

122.84 KB, 下载次数: 12, 下载积分: 无忧币 -2

点评

刚才想了想,要运行bat和cmd一点也不难,不过要修改一下程式,等有空再说 今天也很忙,回头再看看你的msdos吧  详情 回复 发表于 2015-1-25 10:38
回复

使用道具 举报

发表于 2015-1-25 10:38:46 | 显示全部楼层
2013abcdefg 发表于 2015-1-25 09:20
在windows下测试是正常的
用MSDOS的IMG是正常的,可能我上面的IMG有问题吧

刚才想了想,要运行bat和cmd一点也不难,不过要修改一下程式,等有空再说
今天也很忙,回头再看看你的msdos吧
回复

使用道具 举报

 楼主| 发表于 2015-1-25 13:55:49 | 显示全部楼层
本帖最后由 2013abcdefg 于 2015-1-25 14:06 编辑

ROMD64KB.zip, 这个是freedos的,我是用这个刷入网卡ROM的, 经测试发现,你的第一版的g.com, 完全正常.

从第二版g2.COM到后面的g2x.com,都不能在这个ROMD64KB.IMG里运行正常!
真的希望您的带参数版本能在我的网卡ROMD64KB.img里正常运行!
做不做都 可以 ,已经很感谢了!

ROMD64KB.zip

57.2 KB, 下载次数: 14, 下载积分: 无忧币 -2

我的网IMG

点评

freeDos分折参数的方式可能和别的dos有分别,暂时没空研究. 但你可以在加入参数的时候多加一个空白或以上,即 g2x \ghost.exe  详情 回复 发表于 2015-1-25 17:38
回复

使用道具 举报

发表于 2015-1-25 14:11:20 | 显示全部楼层
不错 这个也可以啊
回复

使用道具 举报

发表于 2015-1-25 14:39:37 来自手机 | 显示全部楼层
有没有备份网卡ROM的工具?
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-22 09:13

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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