无忧启动论坛

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

[求助] 请指正一下把内存map为镜像的位置和大小计算对不对

[复制链接]
跳转到指定楼层
1#
发表于 2016-10-18 21:48:20 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
学习了grub4dos-help-2015-02-09.CHM中的GRUB4DOS 内存使用简析

自己解释了一下下面的语句
map --mem (md)0x6000+800 (fd0)

这句是用的扇区数量表示法,意思是从内存的12m开始的800个扇区map成软盘fd0,800个扇区大小就是400kb
请问上面的解释对不对

如果用绝对内存地址的写法,上面的语句又该怎样写呢


下面是grub4dos-help-2015-02-09.CHM中的GRUB4DOS 内存使用简析中的部分内容
-----------------------------------------------------------------------------------------
1、绝对算法示例:

以0x60000为例,

0x60000 = 393216B (/1024) = 384KB

2、扇区数量表示法示例:

以(md)0x3000+2为例,

0x3000×0x200 = 12288×512B = 6291456B (/1024) = 6144KB (/1024) = 6M

#即从内存6MB处开始,长度为1K的区域。

以(md)0x60000为例,

0x60000 = 393216×512B = 201326592B (/1024) = 196608KB (/1024) = 192M

2#
发表于 2016-10-18 22:17:03 | 只看该作者
本帖最后由 不知 于 2016-10-18 22:30 编辑

按楼主的提示,绝对算法没有设备名,那楼主的计算应该是对的。
绝对算法应该是用于write和read命令的,map能用扇区表示法就行了。

tmp.png (8.87 KB, 下载次数: 83)

tmp.png

tmp.png (35.8 KB, 下载次数: 79)

tmp.png

点评

谢谢回复 1、上面我对map --mem (md)0x6000+800 (fd0)的解释是对的吗 (扇区数量法 有设备名md) 2、map内存一般情况就用扇区数量表示法方便一些,是不是  详情 回复 发表于 2016-10-18 22:53
回复

使用道具 举报

3#
 楼主| 发表于 2016-10-18 22:53:36 | 只看该作者
不知 发表于 2016-10-18 22:17
按楼主的提示,绝对算法没有设备名,那楼主的计算应该是对的。
绝对算法应该是用于write和read命令的,map ...

谢谢回复

1、上面我对map --mem (md)0x6000+800 (fd0)的解释是对的吗  (扇区数量法 有设备名md)
2、map内存一般情况就用扇区数量表示法方便一些,是不是

回复

使用道具 举报

4#
发表于 2016-10-18 23:33:09 | 只看该作者
进来学习,我想看懂0PE的GRLDR要去那里学习下?

点评

0PE可以问pseudo 0PE专门有一个区 http://bbs.wuyou.net/forum.php?mod=forumdisplay&fid=82  详情 回复 发表于 2016-10-18 23:39
回复

使用道具 举报

5#
 楼主| 发表于 2016-10-18 23:39:18 | 只看该作者
eaglefly 发表于 2016-10-18 23:33
进来学习,我想看懂0PE的GRLDR要去那里学习下?

0PE可以问pseudo
0PE专门有一个区
http://bbs.wuyou.net/forum.php?mod=forumdisplay&fid=82
回复

使用道具 举报

6#
发表于 2016-10-19 09:37:43 | 只看该作者
搞电脑技术的,犯错也是经常的。说说我的理解吧。

我觉得一楼的理解是准确的。我需要补充说明的是,这里要注意 “源” 和 “目的地”。

map --mem 的时候,实际上是有个 “拷贝” 的概念在里面的。因此也就有 “源” 和 “目的” 的概念。

map --mem 要把 “源” 文件 “拷贝” 到某个内存地址处。

就拿一楼的例子来说,“源” 文件是 (md)0x6000+800,即,位于内存 12M 处的 400KB 数据块。

而 “目的” 地址则是由 map 命令自动计算出来的,通常位于内存顶部。

也就是说,例子中的 map --mem 命令会把 12M 处的 400KB 拷贝到靠近内存顶部附近的某个 “合适” 的位置,并在此位置建立虚拟盘。当然虚拟盘真正生效,还需要一条 map --hook 或 map --rehook 命令。

需要补充说明的是,一般来说 12M 处实际上是 grub4dos 保留内存,用户不可以写入此处。其实整个 32M 以内的扩展内存空间(即位于物理地址 1M 至 32M 之间的空间)都是 grub4dos 的保留空间,用户都不可以随便写入。由于上述 map --mem 命令是去读 12M 处的内存而不是写,因此这是允许的。但是,既然你不能写入此处,那么,你也就不能更改此处的内容,于是,你读到的数据(用作扇区数据),就可以认为是随机的数据,没有实际意义。因此所创建的 400KB 虚拟盘,也是一个 “未经格式化” 的虚拟盘。

点评

谢谢回复 原来map --mem (md)0x6000+800 (fd0)这样的命令有“源” 和 “目的地”的过程,这样理解它们就更明白一些了 grub4dos-help-2015-02-09.CHM中的GRUB4DOS 内存使用简析也讲过: "其它16MB以内的内存最好  详情 回复 发表于 2016-10-19 10:16
回复

使用道具 举报

7#
 楼主| 发表于 2016-10-19 10:16:35 | 只看该作者
不点 发表于 2016-10-19 09:37
搞电脑技术的,犯错也是经常的。说说我的理解吧。

我觉得一楼的理解是准确的。我需要补充说明的是,这里 ...

谢谢回复

原来map --mem (md)0x6000+800 (fd0)这样的命令有“源” 和 “目的地”的过程,这样理解它们就更明白一些了
grub4dos-help-2015-02-09.CHM中的GRUB4DOS 内存使用简析也讲过:
"其它16MB以内的内存最好不要随意使用,很多有特殊的用途。保守一些的话,尽量使用64M以上的内存空间做临时文件用。"

幸好,这两天学习了下dos涉及内存的分类,不然对扩展内存的概念还是云里雾里
-----------------------------------------------------------------------------------------------------------------------------------
grub4dos-help-2015-02-09.CHM中的GRUB4DOS 内存使用简析中有如下内容
map --mem=0xb000 /COOLG/IMG/TOOLS.WIM (rd)
#    将当前设备/COOLG/IMG/目录下的TOOLS.WIM文件映射到内存22M开始的位置 ,使用(rd)设备是为了加快加载速度
#    本例中使用了0xb000,转换为10进制为45056,这个值的意思是共45056个扇区,每扇区大小为512B,

以0x6000为例,把它转换成10进制后结果是24576,其实这个值就是0到0x6000的总字节数,为什么扇区数量表示法要把这个总字节数当作总扇区数再乘以512

-----------------------------------------------------------------------------------------------------------------------------------
“因此所创建的 400KB 虚拟盘,也是一个 “未经格式化” 的虚拟盘”
需要格式化它么,那么有办法格式化它么

另外问一个GRUB4DOS 之外的问题,安装xp按F6加载驱动时的软盘可以不是1.44M大小的,比如 400KB 虚拟盘,这在实际安装中也用到过它

点评

注意 map 命令通常都是使用 512 字节的扇区块作为计算单位的。不是使用单个 “字节” 作为计算单位的。 0x6000 不是指的 “字节数”,而是指的 “512 字节块的个数”。 未格式化的盘,可以用 chenall 开发的 f  详情 回复 发表于 2016-10-19 10:31
回复

使用道具 举报

8#
发表于 2016-10-19 10:31:27 | 只看该作者
yjqd 发表于 2016-10-19 10:16
谢谢回复

原来map --mem (md)0x6000+800 (fd0)这样的命令有“源” 和 “目的地”的过程,这样理解它们 ...

注意 map 命令通常都是使用 512 字节的扇区块作为计算单位的。不是使用单个 “字节” 作为计算单位的。

0x6000 不是指的 “字节数”,而是指的 “512 字节块的个数”。

未格式化的盘,可以用 chenall 开发的 fat 命令进行格式化,格式化的结果是 FAT 系列的格式(即,FAT12、FAT16、FAT32),不支持格式化为 NTFS 格式。

根据你的描述,我猜,XP 的安装程序可能是支持任意大小的软盘吧。

点评

昨天一下午愣是没弄明白,“ 本例中使用了0xb000,转换为10进制为45056,这个值的意思是共45056个扇区,每扇区大小为512B” 0xb000所处扇区是88,也就是有88个扇区,怎么又说成是45056个扇区 原来在grub4dos中  详情 回复 发表于 2016-10-19 10:54
回复

使用道具 举报

9#
 楼主| 发表于 2016-10-19 10:54:05 | 只看该作者
不点 发表于 2016-10-19 10:31
注意 map 命令通常都是使用 512 字节的扇区块作为计算单位的。不是使用单个 “字节” 作为计算单位的。
...



昨天一下午愣是没弄明白,“ 本例中使用了0xb000,转换为10进制为45056,这个值的意思是共45056个扇区,每扇区大小为512B”
而0xb000所处扇区是88,也就是有88个扇区,怎么又说成是45056个扇区

原来在grub4dos中的0x6000 不是指的 “字节数”,而是指的 “512 字节块的个数”。定义不一样了


回复

使用道具 举报

10#
发表于 2016-10-19 11:08:09 | 只看该作者
注意:这里涉及到的概念很微妙:
map --mem=0xb000 /COOLG/IMG/TOOLS.WIM (rd)
#    将当前设备/COOLG/IMG/目录下的TOOLS.WIM文件映射到内存22M开始的位置 ,使用(rd)设备是为了加快加载速度


有以下要点需要注意:

1、这条 map 命令并未创建虚拟盘,仅仅是把文件 /COOLG/IMG/TOOLS.WIM 复制到内存地址 0xB000 × 0x200 = 22MB 处,并让 (rd) 设备指向此处。因而 (rd)+1 就代表 tools.wim 的全部扇区数据(在内存中的那份拷贝)。

2、这条 map 命令将会写入内存地址 22M 处。这是错误的!在以前的老版本 grub4dos 中,写入 22M 处是允许的。但新版不允许写入 22M 处,只能写入 32M 以上(建议写入 64M 以上)的内存空间。

3、既然这条命令不是创建虚拟盘,那么,也就不需要 map --hook 的命令了。

回复

使用道具 举报

11#
发表于 2016-10-19 11:50:27 | 只看该作者
学习了。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-26 19:32

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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