本帖最后由 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: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:41 编辑 不点 发表于 2016-10-23 22:23 问一下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) ------------------------------------------------------------------------------------------------------------------ 怎样获取内存的总扇区数 |
直接用find --set-root makeactive --status把激活的主分区设为当前根,不管激活分区是哪个分区,这样就不用root每一个分区了 find --set-root makeactive --status if % @retval%==1 (hd0,2)/ghosid % @root % |
不点 发表于 2016-10-23 22:23 看了grub4dos-help-2015-02-09.CHM文档 内置变量四 @root ,用来保存当前root的驱动器号 内置变量六 内存变量 @retval (即 0x4cb00处值) ,获取命令的返回值或其他结果 我写了下列命令判断活动分区并用ghosid获取活动分区id makeactive --status % @root % if % @retval%==1 (hd0,2)/ghosid % @root % |
当前盘号,当前分区号,都是 grub4dos 变量。你不妨先看看置顶的教程。关于如何写文件,也可看置顶教程。 |
不点 发表于 2016-10-23 19:33 问一下,ghostid命令执行后,得到的ID值可用dd命令从内存写入指定文件中 那么makeactive --status执行后,比如显示: (hd0,0) is active 是否也能把(hd0,0)用dd命令从内存写入指定文件中 如果不能,那么怎样才能获得活动分区的设备号 |
红毛樱木 发表于 2016-10-21 18:20 你看看是不是这个: GRUB4DOS ghostid命令测试(01-15更新) http://bbs.wuyou.net/forum.php?m ... &fromuid=569633 |
Powered by Discuz! X3.3
© 2001-2017 Comsenz Inc.