无忧启动论坛

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

[求助] 把内存map成软盘的几种方法有什么不同

[复制链接]
跳转到指定楼层
1#
发表于 2016-10-15 23:00:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
把内存map成软盘的几种方法

一、
map --mem (md)0x6000+800 (fd0)
map --hook
dd if=(fd1) of=(fd0) count=1

二、
map --mem (md)+2880 (fd0)
map --hook
dd if=(fd1)+1 of=(fd0)+1

三、
map --mem (md)0x8000+1440 (fd0)
map --hook
dd if=(fd1) of=(fd0) count=1


(md)0x6000+800和 (md)0x8000+1440 是不是扇区数量表示法

3.5英寸容量是1.44MB的软盘一般情况下扇区总数是2880

上面三种map有什么不同
2#
发表于 2016-10-15 23:06:31 | 只看该作者
这种都是G4D扇区表示法,三种表示法映射出的软盘在内存中的位置和大小都不同。
回复

使用道具 举报

3#
发表于 2016-10-15 23:12:07 | 只看该作者
而且楼主的用法可能错误的,直接把内存映射成软盘是不需要加--mem参数,加了--mem参数相当于把内存的一些区块,复制到其它地方(G4D默认),这样前面的起始扇区号就意义不大了。

点评

谢谢回复 以上的菜单是我在论坛看到的 想起来了,直接把内存映射成软盘应该不存在碎片问题,应该可以不加--mem参数 "加了--mem参数相当于把内存的一些区块,复制到其它地方(G4D默认)",这个知识我还不了解  详情 回复 发表于 2016-10-15 23:19
回复

使用道具 举报

4#
 楼主| 发表于 2016-10-15 23:19:41 | 只看该作者
本帖最后由 yjqd 于 2016-10-15 23:22 编辑
不知 发表于 2016-10-15 23:12
而且楼主的用法可能错误的,直接把内存映射成软盘是不需要加--mem参数,加了--mem参数相当于把内存的一些区 ...


谢谢回复
以上的菜单是我在论坛看到的

想起来了,直接把内存映射成软盘应该不存在碎片问题,应该可以不加--mem参数
map在前,dd if=(fd1) of=(fd0) count=1在后,应该不会对fd0产生碎片吧

"加了--mem参数相当于把内存的一些区块,复制到其它地方(G4D默认)",这个知识我还不了解

点评

可能是我表达不准确,把前面的扇区看成是普通文件加载就行了。dd是复制命令,不会改变扇区的分布,只是改写扇区的内容,不会出现碎片。  详情 回复 发表于 2016-10-15 23:31
回复

使用道具 举报

5#
发表于 2016-10-15 23:31:08 来自手机 | 只看该作者
yjqd 发表于 2016-10-15 23:19
谢谢回复
以上的菜单是我在论坛看到的


可能是我表达不准确,把前面的扇区看成是普通文件加载就行了。dd是复制命令,不会改变扇区的分布,只是改写扇区的内容,不会出现碎片。

点评

另外问一个问题: 用map建立一个空白软盘或是用其它软件建立一个空白软盘,并且不向这个软盘写主引导,只是把所需的文件拷贝进去,文件拷贝进去后,软盘的第一扇区一定有文件的部分内容吗,也就是说拷贝进去的文件  详情 回复 发表于 2016-10-15 23:40
回复

使用道具 举报

6#
 楼主| 发表于 2016-10-15 23:40:20 | 只看该作者
不知 发表于 2016-10-15 23:31
可能是我表达不准确,把前面的扇区看成是普通文件加载就行了。dd是复制命令,不会改变扇区的分布,只是改 ...

另外问一个问题:
用map建立一个空白软盘或是用其它软件建立一个空白软盘,并且不向这个软盘写主引导,只是把所需的文件拷贝进去,文件拷贝进去后,软盘的第一扇区一定有文件的部分内容吗,也就是说拷贝进去的文件一定占据了第一扇区吗
回复

使用道具 举报

7#
发表于 2016-10-15 23:47:54 来自手机 | 只看该作者
dd是基于扇区的复制。要装文件应该还要格式化吧!

点评

我的意思是: dd if=(fd1) of=(fd0) count=1 中没有skip,那么就是复制fd1的第一扇区到fd0,如果fd1的第一扇区为空,那么fd0得到的也是空扇区  详情 回复 发表于 2016-10-15 23:57
回复

使用道具 举报

8#
 楼主| 发表于 2016-10-15 23:57:07 | 只看该作者
不知 发表于 2016-10-15 23:47
dd是基于扇区的复制。要装文件应该还要格式化吧!

我的意思是:
dd if=(fd1) of=(fd0) count=1 中没有skip,那么就是复制fd1的第一扇区到fd0,如果fd1的第一扇区为空,那么fd0得到的也是空扇区

点评

是吧。  详情 回复 发表于 2016-10-16 00:17
回复

使用道具 举报

9#
发表于 2016-10-16 00:17:34 来自手机 | 只看该作者
yjqd 发表于 2016-10-15 23:57
我的意思是:
dd if=(fd1) of=(fd0) count=1 中没有skip,那么就是复制fd1的第一扇区到fd0,如果fd1的第 ...

是吧。
回复

使用道具 举报

10#
发表于 2016-10-16 12:48:02 | 只看该作者
map --mem (fd1)+1 (fd0)
map --hook
这样?

点评

那fd0只有一个扇区了。  详情 回复 发表于 2016-10-18 13:13
谢谢回复 本帖中后面的问题我只是顺便问一下,如果fd1的第一扇区为空,那么fd0得到的也是空扇区,这样有什么用  详情 回复 发表于 2016-10-16 12:58
回复

使用道具 举报

11#
 楼主| 发表于 2016-10-16 12:58:49 | 只看该作者
pseudo 发表于 2016-10-16 12:48
map --mem (fd1)+1 (fd0)
map --hook
这样?

谢谢回复

本帖中后面的问题我只是顺便问一下,如果fd1的第一扇区为空,那么fd0得到的也是空扇区,这样有什么用
回复

使用道具 举报

12#
发表于 2016-10-16 14:03:21 | 只看该作者
有这样的应用情景:
仿真F6驱动软盘设为fd1而不是fd0有特殊作用,
只有fd1没有fd0则fd1可能不被识别,为此得弄个fd0,
这个fd0可以马虎点,有盘、有一般的首扇区像个软盘就够了,
首扇区就复制fd1的吧。
fd1放有驱动,首扇区不会空。

回复

使用道具 举报

13#
发表于 2016-10-18 13:13:50 来自手机 | 只看该作者
pseudo 发表于 2016-10-16 12:48
map --mem (fd1)+1 (fd0)
map --hook
这样?

那fd0只有一个扇区了。

点评

注意在 map 命令中,(fd1)+1 代表 (fd1) 上的全部扇区,而不仅仅是其第一扇区。 因此,上述命令得到的虚拟盘 (fd0) 将具有与 (fd1) 同样的大小。 如果我没记错的话,下面这两条命令是等价的(至少在一些场合是  详情 回复 发表于 2016-10-19 10:47
回复

使用道具 举报

14#
发表于 2016-10-19 10:03:19 | 只看该作者
先说说一楼给出的三条命令:

一、map --mem (md)0x6000+800 (fd0)

二、map --mem (md)+2880 (fd0)

三、map --mem (md)0x8000+1440 (fd0)

第一条命令的 “源” 文件位于物理内存 12M 处,长度是 400KB
第二条命令的 “源” 文件位于物理内存 0M 处(即起始于中断向量表),长度是 1.44M
第三条命令的 “源” 文件位于物理内存 16M 处,长度是 720KB

这些源文件,虽然起始地址不同,但共同点是,它们都位于 grub4dos 的保留内存区,即,都位于用户不可以修改的区域。所以,它们没有什么本质差别。也就是说,上述命令所创建的虚拟盘,仅仅只有大小的不同(这还能算是有点差别),别的都一样,没什么差别了。它们所创建的虚拟软盘,都是 “未格式化” 的软盘。
回复

使用道具 举报

15#
发表于 2016-10-19 10:20:31 | 只看该作者
再来看看两条 dd 命令的差别:

dd if=(fd1) of=(fd0) count=1

dd if=(fd1)+1 of=(fd0)+1

第一条命令,源文件是 (fd1) 上的全部扇区,目的地文件是 (fd0) 上的全部扇区。但是,由于指定了 count 的值为 1,因此,只复制一个扇区就结束了。

第二条命令会有两种含义。我认为我们应该避免使用(像这样的)能够产生歧义的命令。分歧点在于,究竟 (...)+1 是什么含义?

我们知道,在 map 命令中,(...)+1 的表示法是可以表示设备 (...) 上的 “全部扇区” 的。

但在 map 命令之外使用 (...)+1,则有可能出现歧义。假如开发者沿用 map 的做法,会把 (...)+1 继续解释成 “该设备上的全部扇区”。假如开发者不沿用 map 命令的做法,则有可能解释成 “该设备上的第一扇区”。

因此,为了稳妥起见,应该使用第一种表示法。如果你想复制多个扇区,那就调整 count 的值。如果你想复制全部扇区,那就使用 dd if=(fd1) of=(fd0) ,即,不指定 count 的值。

点评

谢谢回复 之前为了学习dd命令,下载了dd for windows,用u盘来练习过dd的用法许多次 ------------------------------------ 看来在grub4dos中用dd if=(fd1) of=(fd0) count=  详情 回复 发表于 2016-10-19 10:41
回复

使用道具 举报

16#
 楼主| 发表于 2016-10-19 10:41:06 | 只看该作者
不点 发表于 2016-10-19 10:20
再来看看两条 dd 命令的差别:

dd if=(fd1) of=(fd0) count=1

谢谢回复
之前为了学习dd命令,下载了dd for windows,用u盘来练习过dd的用法许多次
------------------------------------
看来在grub4dos中用dd if=(fd1) of=(fd0) count=1更兼顾其它方面一些

回复

使用道具 举报

17#
发表于 2016-10-19 10:47:57 | 只看该作者
不知 发表于 2016-10-18 13:13
那fd0只有一个扇区了。

注意在 map 命令中,(fd1)+1 代表 (fd1) 上的全部扇区,而不仅仅是其第一扇区。

因此,上述命令得到的虚拟盘 (fd0) 将具有与 (fd1) 同样的大小。

如果我没记错的话,下面这两条命令是等价的(至少在一些场合是等价的):

map --mem (fd1)+1 (fd0)
map --mem (fd1) (fd0)

当然,也许会有不等价的时候。万一第二条命令不能达到你的目的,你可以用第一条命令。

点评

学习了。  详情 回复 发表于 2016-10-19 11:47
回复

使用道具 举报

18#
发表于 2016-10-19 11:47:14 | 只看该作者
不点 发表于 2016-10-19 10:47
注意在 map 命令中,(fd1)+1 代表 (fd1) 上的全部扇区,而不仅仅是其第一扇区。

因此,上述命令得到的 ...

学习了。
回复

使用道具 举报

19#
发表于 2016-10-24 13:54:08 | 只看该作者
"这些源文件,虽然起始地址不同,但共同点是,它们都位于 grub4dos 的保留内存区,即,都位于用户不可以修改的区域。所以,它们没有什么本质差别。也就是说,上述命令所创建的虚拟盘,仅仅只有大小的不同(这还能算是有点差别),别的都一样,没什么差别了。它们所创建的虚拟软盘,都是 “未格式化” 的软盘。"

----如果源文件在其它位置,尤其是在用户可以修改的区域,那么这种可能性增大:
源/目的文件开头有些字节恰巧是压缩文件标志,在复制文件时压缩的源文件可能被意外自动展开,而往压缩文件写入可能被禁止。
源文件开头有些字节恰巧符合某些特征,让创建的虚拟软盘被当成已格式化的。
总之,一定场合下还要细看文件内容。
回复

使用道具 举报

20#
发表于 2016-10-31 15:54:24 | 只看该作者
好贴子哦,大家不顶说不过去












实习就业网为您带来精彩的招聘体验www.shsxjy.com
回复

使用道具 举报

21#
发表于 2017-3-4 12:48:33 | 只看该作者
map --mem (md)0x6000+800 (fd0)
回复

使用道具 举报

22#
发表于 2020-2-4 21:05:35 来自手机 | 只看该作者
高手讨论,路过凑下热闹。
回复

使用道具 举报

23#
发表于 2020-3-3 12:28:10 | 只看该作者
学习了
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-11 06:34

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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