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

支持含有碎片的文件仿真

   火... [复制链接]
发表于 2015-2-11 18:03:17 | 显示全部楼层
用 map --in-situ 吧。用法大致是:map --in-situ (hd0)XXXXXX+YYYYYY (hd0) ; map --hook;

这条命令可以把一个扇区序列仿真为一个硬盘的第一分区,即 (hd0,0)。此时,你用 (hd0,0)/ NTLDR 就可以访问你的 FAT 文件系统下的 NTLDR 文件了。

用完之后,立即用 map (hd0) (hd0) 卸载仿真,然后用 map --rehook 使卸载生效。

当然另外一种方法,也可以用 partnew 命令来实现,你自己研究吧。reboot.pro 上有很多帖子都讨论过 partnew 的使用技巧。

点评

如果情况更极端一下,只知道bpb所在扇区呢  详情 回复 发表于 2015-2-11 18:25
回复

使用道具 举报

发表于 2015-2-11 18:05:58 | 显示全部楼层
不点 发表于 2015-2-11 17:51
由于保留扇区数只是一个 2 字节的整数,其最大值也不过只有 65535 而已,因此,你的 FAT 应该是磁盘上的 ...

或者更极端一点,只知道BPB所在扇区
回复

使用道具 举报

发表于 2015-2-11 18:25:43 来自手机 | 显示全部楼层
不点 发表于 2015-2-11 18:03
用 map --in-situ 吧。用法大致是:map --in-situ (hd0)XXXXXX+YYYYYY (hd0) ; map --hook;

这条命令可 ...

如果情况更极端一下,只知道bpb所在扇区呢

点评

自己多动手试验吧,理论掌握得再多,也需要在实践中检验,才能成为可靠的理论。只有自己亲自摸索,才能把理论变成自己的知识。自己在摸索的过程中,还能有新的发现,那就切实成为自己的知识了。  详情 回复 发表于 2015-2-11 20:36
回复

使用道具 举报

发表于 2015-2-11 20:36:15 | 显示全部楼层
sunsea 发表于 2015-2-11 18:25
如果情况更极端一下,只知道bpb所在扇区呢

自己多动手试验吧,理论掌握得再多,也需要在实践中检验,才能成为可靠的理论。只有自己亲自摸索,才能把理论变成自己的知识。自己在摸索的过程中,还能有新的发现,那就切实成为自己的知识了。

回复

使用道具 举报

发表于 2015-2-12 19:39:58 | 显示全部楼层
mdyblog 发表于 2015-2-12 18:05
C大请教:
我这个内置菜单怎么没有正常运行。

不太明白你的逻辑

(md)0x881+34 是如何得到的?

你没有使用类似dd之类的命令复制之前这个不应该有内容吧.

点评

4: 更奇怪的是。 ((md)0x200处 事后又放上了一份拷贝) 比较35个扇区, 就没有差错。 比较 后34个扇区, 反倒 有差错! 如图: [attachimg]209335[/attachimg]  详情 回复 发表于 2015-2-12 20:02
LZMA压缩 的 内置菜单。 自动解压到(md)0x880处. 前扣除前512字节,另外长度为34扇区, 所以 就是(md)0x881+34  详情 回复 发表于 2015-2-12 20:01
回复

使用道具 举报

发表于 2015-2-13 09:36:09 | 显示全部楼层
这个你的理解错误,有点想当然.

(md)0x880 处存放的是lzma菜单是没有错,但是这个是原始的而不是经过解压的,解压是自动的.所以你这样子肯定不行.

从(md)0x880开始才是完整的(你用cat/cmp时会自动解压)这时是正常的,若是从0x881开始的文件就不完整了,少了lzma的文件头当然就不会自动解压.

要实现你上面的功能正确的作法是

1.把内置菜单用lzma压一下
2.myapp你要不要压都无所谓
3.现在开始制作内置菜单.
把经过压缩的lzma文件用'\0'填充满一个扇区.再把myapp附加在菜单最后面.这样就生成了一个包含myapp的内置菜单了

用这个内置菜单你就可以使用(md)0x881+xxx的方式来访问你的myapp程序.



点评

请教大一个问题  详情 回复 发表于 2015-2-13 12:07
非常感谢!  详情 回复 发表于 2015-2-13 11:53
回复

使用道具 举报

发表于 2015-2-13 11:53:47 | 显示全部楼层
chenall 发表于 2015-2-13 09:36
这个你的理解错误,有点想当然.

(md)0x880 处存放的是lzma菜单是没有错,但是这个是原始的而不是经过解压 ...

非常感谢!
回复

使用道具 举报

发表于 2015-2-13 12:07:14 | 显示全部楼层
本帖最后由 mdyblog 于 2015-2-13 12:10 编辑
chenall 发表于 2015-2-13 09:36
这个你的理解错误,有点想当然.

(md)0x880 处存放的是lzma菜单是没有错,但是这个是原始的而不是经过解压 ...


请教C大一个问题:
C中 怎么获得命令行参数, 当前文件名。
看到 get_cmdline_obsolete(struct get_cmdline_arg cmdline)


C中 怎么准备 get_cmdline_obsolete ()的参数?
int
get_cmdline_obsolete (struct get_cmdline_arg cmdline);

struct get_cmdline_arg
{
        unsigned char *cmdline;
        unsigned char *prompt;
        unsigned int maxlen;
        unsigned int echo_char;
        unsigned int readline;
} __attribute__ ((packed));
这个结构怎么准备,怎么填。
我就想获得 命令行参数, 当前文件名。


还看到 get_cmdline(void);
get_cmdline(void) 好像不能直接用。 用了直接重启了。

点评

印像中get_cmdline不能单独使用,它还有一个全局参数,需要先设置好再运行就行了. 参数的话你上面的那个就是了,看参数名字就能理解了. 一个比较重要的 cmdline指针指向要存放输入的字符,配合maxlen限定字符数(需要  详情 回复 发表于 2015-2-13 12:52
回复

使用道具 举报

发表于 2015-2-13 12:52:13 | 显示全部楼层
mdyblog 发表于 2015-2-13 12:07
请教C大一个问题:
C中 怎么获得命令行参数, 当前文件名。
看到 get_cmdline_obsolete(struct ge ...


印像中get_cmdline不能单独使用,它还有一个全局参数,需要先设置好再运行就行了.

参数的话你上面的那个就是了,看参数名字就能理解了.
一个比较重要的 cmdline指针指向要存放输入的字符,配合maxlen限定字符数(需要有足够大的空间)


关于函数的用法如果不清楚的话

我建议你还是看一下源码是如何实现的,还有如何使用的.这样会比我的解释更清楚.

事实上grub4dos有好多函数我都没有使用过,也不是很了解,我一般会先看一下该函数的原型,再参考一下源码里面的用法..更深一步可以看一下它的实现方法.

点评

怎么看 好像 不是 get_cmdline_obsolete() 我要的。 我要的 的是 运行当前程序的 命令行。 get_cmdline_obsolete() 好像是从命令行读取 用户的命令, 比如读取键盘输入的命令行! “运行当前程序的  详情 回复 发表于 2015-2-13 13:22
回复

使用道具 举报

发表于 2015-2-13 13:22:01 | 显示全部楼层
chenall 发表于 2015-2-13 12:52
印像中get_cmdline不能单独使用,它还有一个全局参数,需要先设置好再运行就行了.

参数的话你上面的那 ...


怎么看 get_cmdline_obsolete()   好像 不是  我要的。

我要的 的是 运行当前程序的 命令行。

get_cmdline_obsolete() 好像是从命令行读取 用户的命令, 比如读取键盘输入的命令行!

“运行当前程序的 命令行” 怎么获得? 其实 就要 %0--当前文件.

点评

当前文件名称,有的dos版本会放在comline的参数上,即和comspec一样可以在psp区段读取。 psp区段一般放在ds:2ch处,比较正式的获取方法是呼叫int 21h ah=62h,BX传回的便是psp区段。 psp:0放的是整个系统参列序列  详情 回复 发表于 2015-2-13 21:46
我不明白这个 “运行当前程序的 命令行” 到底具体指的是什么, 我猜测是要获取到当前"正在运行的命令",这个没有办法得到吧,除非你自己写一个外壳程序 类似于批处理之样的,因为所有的命令都是由你控制运行的,当  详情 回复 发表于 2015-2-13 13:42
回复

使用道具 举报

发表于 2015-2-13 13:42:21 | 显示全部楼层
mdyblog 发表于 2015-2-13 13:22
怎么看 get_cmdline_obsolete()   好像 不是  我要的。

我要的 的是 运行当前程序的 命令行。

我不明白这个 “运行当前程序的 命令行” 到底具体指的是什么,

我猜测是要获取到当前"正在运行的命令",这个没有办法得到吧,除非你自己写一个外壳程序

类似于批处理之样的,因为所有的命令都是由你控制运行的,当然就很容易获取到.

点评

C大, 请教个问题。 usb --init 这个命令能用来超越 BIOS 的访问能力限制,自由地访问U盘/USU.SD/USB.手机卡 吗? 就是 可以访问整个磁盘。 目前BIOS 可能不能访问 磁盘后面, 这个能解决U盘的这个问题吗?  详情 回复 发表于 2015-2-15 13:51
他要的大概是 当前正在运行的程序的命令行参数。 就是当一个外部程序被执行时,用户提供的命令行参数是什么,这个外部程序的作者,希望能够得到命令行参数,以便根据命令行参数的变化而采取不同的处理。  详情 回复 发表于 2015-2-13 20:13
回复

使用道具 举报

发表于 2015-2-13 20:13:39 | 显示全部楼层
chenall 发表于 2015-2-13 13:42
我不明白这个 “运行当前程序的 命令行” 到底具体指的是什么,

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

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

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

使用道具 举报

发表于 2015-2-13 21:46:29 | 显示全部楼层
本帖最后由 TajuraTong 于 2015-2-14 15:25 编辑

嗯...

点评

这是G4D不是DOS……  详情 回复 发表于 2015-2-14 12:48
回复

使用道具 举报

发表于 2015-2-13 21:47:48 | 显示全部楼层
不明觉厉
回复

使用道具 举报

发表于 2015-2-14 12:48:18 | 显示全部楼层
TajuraTong 发表于 2015-2-13 21:46
当前文件名称,有的dos版本会放在comline的参数上,即和comspec一样可以在psp区段读取。
psp区段一般放 ...

这是G4D不是DOS……
回复

使用道具 举报

发表于 2015-2-15 08:51:39 | 显示全部楼层
请问 能加上  USB 和 U盘 的 驱动,
这样可以越过BIOS访问U盘。
这样 就不会有 BIOS访问能力限制。
就像 Linux一样自由地访问U盘。(精简的LInux也就300K)

点评

有了,0.4.6a usb --init  详情 回复 发表于 2015-2-15 13:32
回复

使用道具 举报

发表于 2015-2-15 13:32:15 | 显示全部楼层
mdyblog 发表于 2015-2-15 08:51
请问 能加上  USB 和 U盘 的 驱动,
这样可以越过BIOS访问U盘。
这样 就不会有 BIOS访问能力限制。

有了,0.4.6a usb --init

点评

1) 这个能超越 BIOS的限制吗? 这么问,是因为, 我所知道的是, 这个用来加速USB2.0. 也不知道, 怎么用这个来 超越 BIOS的限制。 2) 目前的USB --init , 好像支持USB2.0。 USB1.1 和 USB3  详情 回复 发表于 2015-2-15 13:47
回复

使用道具 举报

发表于 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都不支持。

点评

可以,本人亲测可以突破CHS的8.4G限制,直接运行就可以了  详情 回复 发表于 2015-2-15 14:43
回复

使用道具 举报

发表于 2015-2-15 13:51:19 | 显示全部楼层
chenall 发表于 2015-2-13 13:42
我不明白这个 “运行当前程序的 命令行” 到底具体指的是什么,

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

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

回复

使用道具 举报

发表于 2015-2-15 14:43:04 | 显示全部楼层
mdyblog 发表于 2015-2-15 13:47
1) 这个能超越 BIOS的限制吗?
      这么问,是因为, 我所知道的是, 这个用来加速USB2.0.
       ...

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

点评

请问, 你怎么测试的? 我还为怎么测试犯愁勒! 现在的 机器 和U盘, 一般本来就没有这个限制。 只有很少的几率能碰到 有BIOS访问限制的盘和BIOS! 我这里, 目前没这个测试条件。   详情 回复 发表于 2015-2-15 18:34
请问, 你怎么测试的? 我还为怎么测试犯愁勒! 现在的 机器 和U盘, 一般本来就没有这个限制。 只有很少的几率能碰到 有BIOS访问限制的盘和BIOS!   详情 回复 发表于 2015-2-15 16:19
回复

使用道具 举报

发表于 2015-2-15 18:34:41 | 显示全部楼层
sunsea 发表于 2015-2-15 14:43
可以,本人亲测可以突破CHS的8.4G限制,直接运行就可以了

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

点评

我就是找了一个移动硬盘,往里面部署multimbr(32G),0PE,一堆合盘和一个USBXP,占了10G多,然后故意不放USBXP的ntldr,在最后把ntldr放进去,那台电脑把我的移动硬盘驱动器号分配为0x00,只能采用CHS访问,然后我  详情 回复 发表于 2015-2-17 13:10
回复

使用道具 举报

发表于 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)
那是多漂亮的事!


回复

使用道具 举报

发表于 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
00104.png
调试发现, 关键是 【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)

点评

理解错了吧 应该是 main.lst\NULf1.lst\NULf2.lst\NULf3.lst\NULf4.lst\NUL[cpio] 这样的形式 然后 %~m0/1对应的就是 f1.lst  详情 回复 发表于 2015-2-16 18:16
回复

使用道具 举报

发表于 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
回复

使用道具 举报

发表于 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
复制代码

效果:
00066.png
【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 为什么什么也没有,也没报错。

点评

1) 2) 你的cpio是怎么生成的 有没有经过压缩 或者你也可以附加一个没经过压缩的img或者iso文件作为数据文件 比每次生成cpio文件方便的多 3) 1. %~m0/1 指的是主批处理 mail.lst 后面的第一个  详情 回复 发表于 2015-2-17 09:45
回复

使用道具 举报

发表于 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
回复

使用道具 举报

发表于 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
这个是方便。

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

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

点评

那就不太清楚了 我都是用的iso和img。。。  详情 回复 发表于 2015-2-17 10:40
回复

使用道具 举报

发表于 2015-2-17 10:40:07 | 显示全部楼层
mdyblog 发表于 2015-2-17 10:08
1)
》》你的cpio是怎么生成的  有没有经过压缩  

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

使用道具 举报

发表于 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”。
似乎原理上可行,但是可能什么底层细节支持没有实现,或者没找到怎么使用这些底层的高层方法。


点评

chenall提供的尾续批处理,fbt新版提供了便捷操作功能  详情 回复 发表于 2015-2-18 10:17
代码逻辑那个还是你理解出问题了。。。 附加的子批处理只能用 %~m0/1 这种形式访问 没办法通过 ls 命令列出来 然后获取的%rdev%指向的是附加在最后的cpio数据文件 不会包含cpio文件前的子批处理文件 两者是不  详情 回复 发表于 2015-2-17 10:56
回复

使用道具 举报

发表于 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
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-9-10 18:39

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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