无忧启动论坛

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

支持含有碎片的文件仿真

    [复制链接]
871#
发表于 2015-2-13 20:13:39 | 只看该作者
chenall 发表于 2015-2-13 13:42
我不明白这个 “运行当前程序的 命令行” 到底具体指的是什么,

我猜测是要获取到当前"正在运行的命令" ...

他要的大概是 当前正在运行的程序的命令行参数。

就是当一个外部程序被执行时,用户提供的命令行参数是什么,这个外部程序的作者,希望能够得到命令行参数,以便根据命令行参数的变化而采取不同的处理。
回复

使用道具 举报

872#
发表于 2015-2-13 21:46:29 | 只看该作者
本帖最后由 TajuraTong 于 2015-2-14 15:25 编辑

嗯...
回复

使用道具 举报

873#
发表于 2015-2-13 21:47:48 | 只看该作者
不明觉厉
回复

使用道具 举报

874#
发表于 2015-2-14 12:48:18 | 只看该作者
TajuraTong 发表于 2015-2-13 21:46
当前文件名称,有的dos版本会放在comline的参数上,即和comspec一样可以在psp区段读取。
psp区段一般放 ...

这是G4D不是DOS……
回复

使用道具 举报

875#
发表于 2015-2-15 08:51:39 | 只看该作者
请问 能加上  USB 和 U盘 的 驱动,
这样可以越过BIOS访问U盘。
这样 就不会有 BIOS访问能力限制。
就像 Linux一样自由地访问U盘。(精简的LInux也就300K)
回复

使用道具 举报

876#
发表于 2015-2-15 13:32:15 | 只看该作者
mdyblog 发表于 2015-2-15 08:51
请问 能加上  USB 和 U盘 的 驱动,
这样可以越过BIOS访问U盘。
这样 就不会有 BIOS访问能力限制。

有了,0.4.6a usb --init
回复

使用道具 举报

877#
发表于 2015-2-15 13:47:36 | 只看该作者
sunsea 发表于 2015-2-15 13:32
有了,0.4.6a usb --init

1) 这个能超越 BIOS的限制吗?
      这么问,是因为, 我所知道的是, 这个用来加速USB2.0.
      也不知道, 怎么用这个来  超越 BIOS的限制。

2) 目前的USB --init  , 好像支持USB2.0。 USB1.1 和  USB3.0都不支持。
回复

使用道具 举报

878#
发表于 2015-2-15 13:51:19 | 只看该作者
chenall 发表于 2015-2-13 13:42
我不明白这个 “运行当前程序的 命令行” 到底具体指的是什么,

我猜测是要获取到当前"正在运行的命令" ...

C大, 请教个问题。
usb --init
这个命令能用来超越 BIOS 的访问能力限制,自由地访问U盘/USU.SD/USB.手机卡 吗?
就是 可以访问整个磁盘。
目前BIOS 可能不能访问 磁盘后面, 这个能解决U盘的这个问题吗?

回复

使用道具 举报

879#
发表于 2015-2-15 14:43:04 | 只看该作者
mdyblog 发表于 2015-2-15 13:47
1) 这个能超越 BIOS的限制吗?
      这么问,是因为, 我所知道的是, 这个用来加速USB2.0.
       ...

可以,本人亲测可以突破CHS的8.4G限制,直接运行就可以了
回复

使用道具 举报

880#
发表于 2015-2-15 18:34:41 | 只看该作者
sunsea 发表于 2015-2-15 14:43
可以,本人亲测可以突破CHS的8.4G限制,直接运行就可以了

请问, 你怎么测试的? 我还为怎么测试犯愁勒!
现在的 机器 和U盘, 一般本来就没有这个限制。
只有很少的几率能碰到 有BIOS访问限制的盘和BIOS!
我这里, 目前没这个测试条件。 
回复

使用道具 举报

881#
发表于 2015-2-15 22:59:02 | 只看该作者
本帖最后由 mdyblog 于 2015-2-15 23:02 编辑

发现宝了!

原来G4D中还有藏着这种内存设备表示法:
(md,0x24000ac,0x1d78)
---   -------------   -------
md: 内存设备
0x24000ac: 起始地址, 字节单位
0x1d78: 长度, 字节单位


(md)xx+bb,c
好多了。

现在只要不多不少的2个数, 且没有512字节对齐一说;也没有 后面多于的字节一说!

这么好的东西,怎么不公开啊!
怎么不让大家用啊!

是不是还可以扩展到
(hd0,510,2)
那是多漂亮的事!


回复

使用道具 举报

882#
发表于 2015-2-16 17:57:51 | 只看该作者
本帖最后由 mdyblog 于 2015-2-16 18:13 编辑

请教C大:
从你的博客看到下面的文件,
http://chenall.net/post/grub4dos_initrdfs/
  1. set rdev=
  2. blocklist %~m0/1 | call :get_dev=
  3. ls %rdev%/
  4. cat %rdev%/file
  5. goto :eof
  6. :get_dev
  7. set rdev=%~d1
  8. goto :eof
复制代码


几乎没动:
  1. !BAT
  2. echo 测试多cpio文件
  3. #访问 %~m0/1中的 f1.lst f2.lst
  4. blocklist %~m0/1
  5. set rdev=
  6. blocklist %~m0/1 | call :get_dev=
  7. ls %rdev%/
  8. cat %rdev%/f1.lst
  9. goto :eof
  10. :get_dev
  11. set rdev=%~d1
  12. goto :eof
复制代码

不能访问第一个cpio中的file

调试发现, 关键是 【blocklist %~m0/1】没输出。
不知是哪儿出了问题。


m_cpio2.sh:
主文件为main.lst
后面2个cpio,中间均有一个\NUL间隔。
cpio[1]:  file  f1.lst f2.lst
cpio[2]:        f3.lst f4.lst

测试文件包.7z (959 Bytes, 下载次数: 1)
回复

使用道具 举报

883#
发表于 2015-2-16 18:16:48 | 只看该作者
本帖最后由 sratlf 于 2015-2-16 18:19 编辑
mdyblog 发表于 2015-2-16 17:57
请教C大:
从你的博客看到下面的文件,
http://chenall.net/post/grub4dos_initrdfs/


理解错了吧  应该是 main.lst\NULf1.lst\NULf2.lst\NULf3.lst\NULf4.lst\NUL[cpio] 这样的形式

然后 %~m0/1对应的就是 f1.lst

补充:cpio作为数据文件应该只有一个  放在最后  前面可以附加任意多个子批处理文件

点评

谢谢! 那么 1) 到底什么意思? 2)我又做个测试。 main.lst\NULf1.lst\NULf2.lst\NULf3.lst\NULf4.lst\NUL[cpio] [cpio]:file+fil2+fil3 效果: [attachimg]209699[/attachimg] 【blocklist %~m  详情 回复 发表于 2015-2-16 22:31
回复

使用道具 举报

884#
发表于 2015-2-16 22:31:14 | 只看该作者
sratlf 发表于 2015-2-16 18:16
理解错了吧  应该是 main.lst\NULf1.lst\NULf2.lst\NULf3.lst\NULf4.lst\NUL[cpio] 这样的形式

然后 ...

谢谢!
那么
1)  
  1. set rdev=
  2. blocklist %~m0/1 | call :get_dev=
  3. ls %rdev%/
  4. cat %rdev%/file
  5. goto :eof
  6. :get_dev
  7. set rdev=%~d1
  8. goto :eof
复制代码

到底什么意思?

2)我又做个测试。
main.lst\NULf1.lst\NULf2.lst\NULf3.lst\NULf4.lst\NUL[cpio]
[cpio]:file+fil2+fil3
  1. !BAT
  2. echo 测试多cpio文件
  3. #访问 %~m0/1中的 f1.lst f2.lst
  4. blocklist %~m0/1
  5. set rdev=
  6. blocklist %~m0/1 | call :get_dev=
  7. ls %rdev%/
  8. cat %rdev%/file
  9. goto :eof
  10. :get_dev
  11. set rdev=%~d1
  12. goto :eof
复制代码

效果:

【blocklist %~m0/1】 有东西了。
【ls %rdev%/】的输出是【0】
请教:(1)具体本例, %~m0/1到底指的谁?  f1.lst 还实际 【cpio】 ?还是【cpio/file】?
           (2) %rdev%/ 有时谁? ls %rdev%/ 为什么输出【0】
           (3) %rdev%/file 有时谁? cat  %rdev%/file 为什么什么也没有,也没报错。

回复

使用道具 举报

885#
发表于 2015-2-17 09:45:19 | 只看该作者
本帖最后由 sratlf 于 2015-2-17 09:52 编辑
mdyblog 发表于 2015-2-16 22:31
谢谢!
那么
1)  


1)
  1. ::清空变量rdev
  2. set rdev=
  3. ::获取扇区序列,传递给标签 :get_dev
  4. blocklist %~m0/1 | call :get_dev=
  5. ::列出附加的cpio数据文件内容
  6. ls %rdev%/
  7. ::对cpio数据文件里名为 file 的文件执行cat命令
  8. cat %rdev%/file
  9. ::结束
  10. goto :eof

  11. :get_dev
  12. ::将cpio数据文件所在的扇区序列赋值给变量rdev
  13. set rdev=%~d1
  14. ::结束
  15. goto :eof
复制代码


2)
你的cpio是怎么生成的  有没有经过压缩  

或者你也可以附加一个没经过压缩的img或者iso文件作为数据文件  比每次生成cpio文件方便的多

3)
  1. %~m0/1 指的是主批处理 mail.lst 后面的第一个子批处理  也就是f1.lst  
  2. 变量 rdev 的值实际是cpio数据文件所在的扇区序列
      ls %rdev%/ 这个只是确定一下访问数据文件是否正常  这里输出0肯定就不是正常情况  
      需要再检查数据文件或者命令是否存在错误  你可以试下不用cpio  换成普通的iso文件  注意不要压缩
  3. %rdev%/file 这个只是个示例  表示的cpio数据文件里名为 file 的文件
      cat  %rdev%/file 这个就需要先确定grub4dos能成功访问cpio数据文件内容  为什么没报错我也不知道。。。


其实也不用这么复杂   你可以用  主批处理\NUL数据文件  这种最简单的形式   我在RUN里就是这么处理的

数据文件可以找个iso  然后把所有的子批处理文件以及必须的其他文件都放在iso里  

主批处理想访问附加的iso文件内容时可以直接用  %~m0/file 这种形式  不用再用 1) 里的方式获取数据文件所在的扇区序列

点评

1: file file2 file3 做成1.ISO,结果还是一样。 2: 那么上面的代码有逻辑问题: blocklist %~m0/1 | call :get_dev= :: %~m0/1 对应 f1.lst。得到的%rdev% 也应该是 f1.lst的目录(容器), :: 下面 [  详情 回复 发表于 2015-2-17 10:50
1) 》》你的cpio是怎么生成的 有没有经过压缩 其中x.lst就3行文本: 1.cpio 没有压缩。 2) %~m0/file 这个是方便。 我看到 博客的那个脚本, 很是好奇。似乎蕴含着什么很重要的东西。 象弄个  详情 回复 发表于 2015-2-17 10:08
回复

使用道具 举报

886#
发表于 2015-2-17 10:08:53 | 只看该作者

1)
》》你的cpio是怎么生成的  有没有经过压缩  
  1. cat x.lst| cpio -o -H newc >1.cpio
复制代码

其中x.lst就3行文本:
  1. file
  2. fil2
  3. fil3
复制代码

1.cpio 没有压缩。


2) %~m0/file
这个是方便。

我看到 博客的那个脚本, 很是好奇。似乎蕴含着什么很重要的东西。
象弄个究竟。
首先是发现一种新的 扇区序列表示法。

好钻研新技术。新技术会带来新的应用。

回复

使用道具 举报

887#
发表于 2015-2-17 10:40:07 | 只看该作者
mdyblog 发表于 2015-2-17 10:08
1)
》》你的cpio是怎么生成的  有没有经过压缩  

那就不太清楚了  我都是用的iso和img。。。
回复

使用道具 举报

888#
发表于 2015-2-17 10:50:34 | 只看该作者

1:
file file2 file3 做成1.ISO,结果还是一样。

2:
  1. 1. %~m0/1 指的是主批处理 mail.lst 后面的第一个子批处理  也就是f1.lst  
  2.   2. 变量 rdev 的值实际是cpio数据文件所在的扇区序列
  3.       ls %rdev%/ 这个只是确定一下访问数据文件是否正常  这里输出0肯定就不是正常情况  
  4.       需要再检查数据文件或者命令是否存在错误  你可以试下不用cpio  换成普通的iso文件  注意不要压缩
  5.   3. %rdev%/file 这个只是个示例  表示的cpio数据文件里名为 file 的文件
复制代码

那么上面的代码有逻辑问题:
blocklist %~m0/1 | call :get_dev=
::  %~m0/1 对应 f1.lst。得到的%rdev% 也应该是 f1.lst的目录(容器),
:: 下面 [ls %rdev%/]列出的 应该是  f1.lst 同级文件。
::  [cat %rdev%/file]访问的应该是   f1.lst 同级文件file.问题在这儿, file 和 f1.lst 不同级。
:: 1.iso或1.cpio 才是和 f1.lst 同级,  file是   1.iso或1.cpio  的子文件。
::  file 和 f1.lst 差辈了!!!

ls %rdev%/
::对cpio数据文件里名为 file 的文件执行cat命令
cat %rdev%/file
::结束
goto :eof

:get_dev
::将cpio数据文件所在的扇区序列赋值给变量rdev
set rdev=%~d1
::结束
goto :eof
---------------------
感觉目前实现了2种:
1) 多个普通文件依次平铺,依数字序号,用 %~m0/1  %~m0/2 ... %~m0/n 来访问后面的文件。
2) 主文件+1个CPIO/ISO等包。  依子文件名,用 %~m0/file1   %~m0/file2 ...来访问包中的文件。
后者似乎用到内置的map,   %~m0/ 对应一个文件系统(ISO/CPIO)


至于从C大的脚本体会出的:“多个脚本+CPIO”或“多个CPIO”。
似乎原理上可行,但是可能什么底层细节支持没有实现,或者没找到怎么使用这些底层的高层方法。


回复

使用道具 举报

889#
发表于 2015-2-17 10:56:25 | 只看该作者
mdyblog 发表于 2015-2-17 10:50
1:
file file2 file3 做成1.ISO,结果还是一样。

代码逻辑那个还是你理解出问题了。。。 附加的子批处理只能用  %~m0/1 这种形式访问  没办法通过 ls 命令列出来

然后获取的%rdev%指向的是附加在最后的cpio数据文件  不会包含cpio文件前的子批处理文件  两者是不互通的

点评

》》代码逻辑那个还是你理解出问题了。。。 附加的子批处理只能用 %~m0/1 这种形式访问 没办法通过 ls 命令列出来 然后获取的%rdev%指向的是附加在最后的cpio数据文件 不会包含cpio文件前的子批处理文件 两者  详情 回复 发表于 2015-2-17 11:12
回复

使用道具 举报

890#
发表于 2015-2-17 11:12:27 | 只看该作者
本帖最后由 mdyblog 于 2015-2-17 11:42 编辑
sratlf 发表于 2015-2-17 10:56
代码逻辑那个还是你理解出问题了。。。 附加的子批处理只能用  %~m0/1 这种形式访问  没办法通过 ls 命令 ...


》》代码逻辑那个还是你理解出问题了。。。 附加的子批处理只能用  %~m0/1 这种形式访问  没办法通过 ls 命令列出来

然后获取的%rdev%指向的是附加在最后的cpio数据文件  不会包含cpio文件前的子批处理文件  两者是不互通的
-----------------------------------
你是说,
对:main.lst\NULf1.lst\NULf2.lst\NULf3.lst\NULf4.lst\NUL1.CPIO
1) %~m0/1 的确 对应 fl.lst
2) 但是 blocklist %~m0/1 | call :get_dev= 后得到的 %rdev% 却对应1.CPIO.
    这样  %rdev%/file 就是1.CPIO的file.
是这个意思吗?
回复

使用道具 举报

891#
发表于 2015-2-17 12:12:12 | 只看该作者
mdyblog 发表于 2015-2-17 11:12
》》代码逻辑那个还是你理解出问题了。。。 附加的子批处理只能用  %~m0/1 这种形式访问  没办法通过 l ...

c大些的说明有点问题  可能代码后来调整过了但是说明没更新

1,
原文:访问方式: %~m0/1是第一个文件,%~m0/2是第二个文件,以此类推.并且可以直接运行
更正:访问方式: %~m0/0是第一个文件,%~m0/1是第二个文件,以此类推.并且可以直接运行

2,
下面这行批处理命令没有详细的说明
blocklist %~m0/1 | call :get_dev=

测试后的准确解释应该为
%~m0/1 中的 1 指的是附加的第二个文件  只是个示例
实际使用时这个数值应该按自己的实际情况更改为对应的cpio数据文件的序号  

附件的是个测试文件  结构是 mail.lst\NULf1.lst\NULf2.lst\NULf3.lst\NULf4.lst\NULimg.img

f1.lst 对应的是 %~m0/0  f2.lst 对应的是 %~m0/1  相应的 img.img 对应的是 %~m0/4

主批处理里就应该使用 blocklist %~m0/4 | call :get_dev= 才能获取到 img.img 所在的扇区序列



test.zip (798 Bytes, 下载次数: 1)

点评

非常感谢。 一切的症结: 序号差一个了。 我试过 %~m0/5 , 就是没试过 %~m0/4 上面程序改成 %~m0/4 就好了。 1.cpio 1.img 都成功。 就1.iso 不成功。 我用UltraISO做的1.iso 换成iso,能那个成吗? [att  详情 回复 发表于 2015-2-17 12:52
回复

使用道具 举报

892#
发表于 2015-2-17 12:52:06 | 只看该作者
sratlf 发表于 2015-2-17 12:12
c大些的说明有点问题  可能代码后来调整过了但是说明没更新

1,


非常感谢。
一切的症结: 序号差一个了。
我试过 %~m0/5 , 就是没试过 %~m0/4
上面程序改成 %~m0/4 就好了。

1.cpio 1.img 都成功。
就1.iso 不成功。 我用UltraISO做的1.iso
换成iso,你那能成功吗?

回复

使用道具 举报

893#
发表于 2015-2-17 13:10:05 | 只看该作者
本帖最后由 sunsea 于 2015-2-17 13:11 编辑
mdyblog 发表于 2015-2-15 18:34
请问, 你怎么测试的? 我还为怎么测试犯愁勒!
现在的 机器 和U盘, 一般本来就没有这个限制。
只有 ...


我就是找了一个移动硬盘,往里面部署multimbr(32G),0PE,一堆合盘和一个USBXP,占了10G多,然后故意不放USBXP的ntldr,在最后把ntldr放进去,那台电脑把我的移动硬盘驱动器号分配为0x00,只能采用CHS访问,然后我加了个usb --init就顺利启动,不加就提示找不到ntldr
回复

使用道具 举报

894#
发表于 2015-2-17 13:20:45 | 只看该作者
mdyblog 发表于 2015-2-17 12:52
非常感谢。
一切的症结: 序号差一个了。
我试过 %~m0/5 , 就是没试过 %~m0/4

iso的没问题   不过我是用mkisofs生成的  没有用ultraiso

  1. set loader=-o iso.ISO -V "test" boot
  2. mkisofs.exe -J -joliet-long -hide-joliet boot.catalog -l -relaxed-filenames -gbk4dos-filenames -gbk4win-filenames %loader%
复制代码

点评

还这是UI不行。 mkiso生产的iso。 用UI编辑下, 就不行了。  详情 回复 发表于 2015-2-17 15:25
回复

使用道具 举报

895#
发表于 2015-2-17 14:54:00 | 只看该作者
sunsea 发表于 2015-2-17 13:10
我就是找了一个移动硬盘,往里面部署multimbr(32G),0PE,一堆合盘和一个USBXP,占了10G多,然后故意 ...

1: 你是说,没加 usb --init 就不能正常启动, 加了就能正常启动,是吗?


2:移动硬盘本身是支持LBA的。也就是说硬件接口本身有这个能力。
你这里 是“认”成fdd 0x00, 从用CHS访问。
但是 usb --init ,会不会有把它变回hdd,从而能用硬件的LBA接口。

现在,怎确认是 用的硬件本身的LBA访问接口,还是usb -init直接通过 sici总线命令、U盘协议直接访问?

看来还得问问C大了。



回复

使用道具 举报

896#
发表于 2015-2-17 14:56:12 | 只看该作者
本帖最后由 mdyblog 于 2015-2-17 17:44 编辑

请问,  usb --init 后,  用的硬件本身的LBA/CHS访问接口,还是 直接通过 sici总线命令、U盘协议直接访问?
后者直接越过BIOS的驱动支持,从而克服BIOS访问限制。
回复

使用道具 举报

897#
发表于 2015-2-17 15:25:58 | 只看该作者
sratlf 发表于 2015-2-17 13:20
iso的没问题   不过我是用mkisofs生成的  没有用ultraiso

还这是UI不行。
mkiso生产的iso。 用UI编辑下, 就不行了。
回复

使用道具 举报

898#
发表于 2015-2-17 17:34:55 | 只看该作者
mdyblog 发表于 2015-2-17 14:54
1: 你是说,没加 usb --init 就不能正常启动, 加了就能正常启动,是吗?

1:是的
2:所有USB存储设备内部寻址都是LBA,其他我不知道
回复

使用道具 举报

899#
发表于 2015-2-18 10:17:14 | 只看该作者
mdyblog 发表于 2015-2-17 10:50
1:
file file2 file3 做成1.ISO,结果还是一样。

chenall提供的尾续批处理,fbt新版提供了便捷操作功能
回复

使用道具 举报

900#
发表于 2015-2-18 10:30:58 | 只看该作者
本帖最后由 chenall 于 2015-2-18 10:32 编辑

@mdyblog,@sratlf

是我的疏忽
0是第一个附加的文件(忘了更新了,早期的版本0是批处理本身后面发现这个没有什么用处,而且批处理在运行的时候已经不是原样的,获取到也没有用.就改了)

回头我更新一下文章内容.

当然了只是提供了一种方案,实际上并不推荐使用,,要完全理解明白这些用法至少需要对grub4dos的文件表示方法还有blocklist等命令比较熟悉.只要熟悉了这些内部命令理解起来是很容易的,不理解的话不建议使用,
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-22 20:59

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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