无忧启动论坛

 找回密码
 注册
搜索

有兴趣的朋友一起来学习chenall的GRUB4DOS ghostid命令

查看数: 5825 | 评论数: 11 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2016-10-21 16:05

正文摘要:

本帖最后由 yjqd 于 2016-10-21 16:43 编辑 有兴趣的朋友一起来学习chenall的GRUB4DOS ghostid命令 对GRUB4DOS ghostid我还没摸到火门呢 GRUB4DOS ghostid主要是不是用来确定源分区和目标分区的

回复

yjqd 发表于 2016-10-26 08:59:23
本帖最后由 yjqd 于 2016-10-26 09:06 编辑

不管你在同一分区执行了多少次ghostid,也不管你在几个分区执行了ghostid,它获取的分区ID都是在内存偏移0x4FF00处,换算成10进制是327424字节处,再换算成扇区327424/512=639.5,也就是639个扇区加半个扇区

怎样用cat读取ghostid获取的分区ID

cat --hex (md)0x4FF00+1
这是不能读取到ghostid获取的分区ID的
,因为(md)0x4FF00+1是扇区表示法,0x4FF00转换成10进制是327424,(md)0x4FF00+1表示内存327424扇区开始处的1个扇区,应该用前面得到的分区ID在内存639.5扇区处,也可把639扇区换成16进制为0x27F,cat命令如下:

cat --hex (md)0x27F+1

或者写成:

cat --hex --skip=0x100 (md)0x27F+1

(md)0x27F+1表示从639个扇区开始的1个扇区,由于分区ID在内存639.5扇区处,可以用skip跳过0.5也就是半个扇区256个字节
0x100换算成10进制等于256,cat的skip参数指的是跳过的字节数,也就是跳过256个字节,这样分区ID会显示在屏幕右方的第一行

或者写成:

cat --hex --skip=0x4FF00 (md)+640
cat --hex --skip=0x4FF00 (md)+0x280


(md)+640和(md)+0x280都是表示从0扇区开始的640个扇区

0x4FF00是现成的数字,如果cat命令中有内存的全部扇区表示法,你就可以不用任何换算就可写出这种方式的cat命令
不点 发表于 2016-10-25 14:38:06
本帖最后由 不点 于 2016-10-25 14:45 编辑

一般来说,@retval 为 “0” 或 “非0”,表示成功或失败(究竟 0 代表成功还是失败,恐怕也是不统一的)。但究竟是怎样的情况,还要看所执行的命令是哪个。具体究竟是怎样,还要看源代码,或者问问 chenall。

128 可能是指 0x80,表示的是 BIOS 第一个硬盘的号码。

(md) 设备确实也有个 “最大扇区号” 或 “总扇区数”。但是,由于各种主板的内存布局很不统一,所以,这里很可能只计算了第一个连续内存块,其它内存块都没统计上。

cat 命令好像无法表示出 (md) 的全部扇区。

但是,可以用 (rd) 来解决。(rd)+1 永远表示 (rd) 上的全部字节(就是说,甚至可以精确到字节,即,能够考虑到不足一个扇区的那些 “零头”)。

cat --hex (rd)+1 就可以了。不过,你需要事先定义 (rd) 的起始地址和长度。map --rd-base=... 和 map --rd-size=...  可以用来定义 (rd) 的起始地址和长度。

关于主板 BIOS 的内存布局,你可以搜索 Internet 查阅相关信息,或搜索 “int15, E820”。

grub4dos 的 displaymem 命令,可以显示出主板 BIOS 的内存布局。由于内存布局的复杂性(因主板的不同而不同),因此无法直接获取内存的 “总扇区数”。

yjqd 发表于 2016-10-25 12:40:10
本帖最后由 yjqd 于 2016-10-25 12:41 编辑
不点 发表于 2016-10-23 22:23
当前盘号,当前分区号,都是 grub4dos 变量。你不妨先看看置顶的教程。关于如何写文件,也可看置顶教程。


问一下grub4dos-help-2015-02-09.CHM文档中变量@retval

是不是有些命令执行后,如果执行失败,@retval值为0,如果执行成功,@retval值为1
------------------------------------------------------------------------------------------------------------------
执行下面命令后:
root (hd0,2)      (hd0,2) 为ntfs分区
root
echo %@@retval%
显示结果为128,  128指的是什么
------------------------------------------------------------------------------------------------------------------
在 map 命令中,(...)+1 的表示法是可以表示设备 (...) 上的 全部扇区”

在cat命令中中内存的全部扇区怎样表示,比如下面 (md)后该怎样写
cat --hex  (md)
------------------------------------------------------------------------------------------------------------------
怎样获取内存的总扇区数
yjqd 发表于 2016-10-25 09:03:38
直接用find --set-root makeactive --status把激活的主分区设为当前根,不管激活分区是哪个分区,这样就不用root每一个分区了

find --set-root makeactive --status
if  % @retval%==1  (hd0,2)/ghosid  % @root %
yjqd 发表于 2016-10-24 21:56:38
不点 发表于 2016-10-23 22:23
当前盘号,当前分区号,都是 grub4dos 变量。你不妨先看看置顶的教程。关于如何写文件,也可看置顶教程。

看了grub4dos-help-2015-02-09.CHM文档

内置变量四
@root ,用来保存当前root的驱动器号

内置变量六
内存变量 @retval (即 0x4cb00处值) ,获取命令的返回值或其他结果


我写了下列命令判断活动分区并用ghosid获取活动分区id

makeactive  --status  % @root %

if  % @retval%==1  (hd0,2)/ghosid  % @root %
不点 发表于 2016-10-23 22:23:02
当前盘号,当前分区号,都是 grub4dos 变量。你不妨先看看置顶的教程。关于如何写文件,也可看置顶教程。

点评

问一下grub4dos-help-2015-02-09.CHM文档中变量@retval 是不是有些命令执行后,如果执行失败,@retval值为0,如果执行成功,@retval值为1---------------------------------------------------------------------  详情 回复 发表于 2016-10-25 12:40
看了grub4dos-help-2015-02-09.CHM文档 内置变量四 @root ,用来保存当前root的驱动器号 内置变量六 内存变量 @retval (即 0x4cb00处值) ,获取命令的返回值或其他结果 我写了下列命令判断活动分区并用gh  详情 回复 发表于 2016-10-24 21:56
yjqd 发表于 2016-10-23 22:15:32
不点 发表于 2016-10-23 19:33
我猜那是正常的。那个黑方块可能是 ghostid 弄出来的一个换行符,不影响程序的逻辑结构。

问一下,ghostid命令执行后,得到的ID值可用dd命令从内存写入指定文件中

那么makeactive --status执行后,比如显示:

(hd0,0) is active

是否也能把(hd0,0)用dd命令从内存写入指定文件中


如果不能,那么怎样才能获得活动分区的设备号
不点 发表于 2016-10-23 19:33:48
我猜那是正常的。那个黑方块可能是 ghostid 弄出来的一个换行符,不影响程序的逻辑结构。

点评

问一下,ghostid命令执行后,得到的ID值可用dd命令从内存写入指定文件中 那么makeactive --status执行后,比如显示: (hd0,0) is active 是否也能把(hd0,0)用dd命令从内存写入指定文件中 如果不能,那么  详情 回复 发表于 2016-10-23 22:15
yjqd 发表于 2016-10-21 21:55:25
红毛樱木 发表于 2016-10-21 18:20
ghostid是外部命令吗?在chenall.net上没搜索到信息。。。

你看看是不是这个:
GRUB4DOS ghostid命令测试(01-15更新)
http://bbs.wuyou.net/forum.php?m ... &fromuid=569633
红毛樱木 发表于 2016-10-21 18:20:55
ghostid是外部命令吗?在chenall.net上没搜索到信息。。。

点评

你看看是不是这个: GRUB4DOS ghostid命令测试(01-15更新) http://bbs.wuyou.net/forum.php?mod=viewthread&tid=158419&fromuid=569633  详情 回复 发表于 2016-10-21 21:55

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

闽公网安备 35020302032614号

GMT+8, 2025-8-3 21:13

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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