无忧启动论坛

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

[求助] 求解grldr内置菜单中0x82b9含义

[复制链接]
跳转到指定楼层
1#
发表于 2021-8-4 16:17:46 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 201287zr 于 2021-8-4 16:21 编辑

最近正在学习grub4dos,看到grldr内置菜单中有这么一句不知什么作用:

if "%@root%"=="(ud)" && calc *0x82A0=*0x82b9&0xff


其中查了grub4dos中readme.txt以及搜了下论坛关于0x82B9的解释,并没有任何发现,不知道0x82b9是什么?

下面是README_GRUB4DOS_CN.txt中找到的其它固定位置内部变量的定义,但未见到0x82b9,只有0x82b8

******************************************************************************
***               在固定位置访问一些内部变量                               ***
******************************************************************************

地址            长度            说明
=========    ========    ==============================================
0000:8208    4字节(即双字) 启动分区号 install_partition (the boot partition)
0000:8280    4字节(即双字) 启动驱动器号(boot_drive)
0000:8284    4字节(即双字) pxe 客户端 ip (即本地ip)
0000:8288    4字节(即双字) pxe 服务器 ip
0000:828C    4字节(即双字) pxe 网关 ip
0000:8290    8字节(即四字) 最后访问的文件的大小(是执行"cat --length=0"后的文件大小)
0000:8298    4字节(即双字) 从 1M 开始的连续内存块的大小(以 KB 为单位)
0000:829C    4字节(即双字) 当前根分区号(current root partition)
0000:82A0    4字节(即双字) 当前根所在的驱动器(current root drive)
0000:82A4    4字节(即双字) 解压标志 (gzip非自动解压),非0时不自动解压
0000:82A8    8字节(即四字) 最后访问的分区的起始扇区号
0000:82B0    8字节(即四字) 最后访问的分区的扇区总数
0000:82B8    4字节(即双字) UD分区:磁头数,每磁道扇区数,真正驱动器号,最大每磁道扇区数(低位)
0000:8278    4字节(即双字)  GRUB4DOS编译的日期十进制数.
0000:82c0    8字节(即四字) 从 4G 开始的连续内存块的大小(以 KB 为单位)
=======

然后我实际操作查看了下0x82b9的值,但显示的是一个较大的数,如下图所示:*0x82b9=335051532(16进制为0x1FF3F80
那么*0x82b9&0xff得到的值应该是0x80,也就是*0x82A0=0x80,代表当前根驱动设备是hd0。
但0x82B9代表的整个含义是什么呢?是每次低位都是0x80吗?,高位又代表什么含义呢?



不知chenall大神、不点大师、yaya大佬,可否指点一二,能否在更新说明中完善一下相关含义说明呢?
望各位论坛大哥指点一下。


2#
发表于 2021-8-4 16:49:31 来自手机 | 只看该作者
0x82b9是ud启动时的盘符。bios识别为硬盘时,为0x80 。识别为软盘时,为0。

点评

感谢yaya大佬 回复。“ud启动时的盘符”是什么意思?以上面的为例,*0x82b9=335051532(16进制为0x1FF3F80),那高位0x1FF3F有没有具体含义呢(代表什么)?  详情 回复 发表于 2021-8-4 17:01
回复

使用道具 举报

3#
发表于 2021-8-4 16:56:29 | 只看该作者
依你的讯息,
用直觉猜的.

0000:82B8    4字节(即双字) UD分区:磁头数,每磁道扇区数,真正驱动器号,最大每磁道扇区数(低位)
0000:82A0    4字节(即双字) 当前根所在的驱动器(current root drive)

*0x82A0=*0x82b9&0xff
当前根所在的驱动器=0x80=hd0

82B8 4字节
表示:
82B8 磁头数
82B9 每磁道扇区数
82BA 真正驱动器号
82BB 最大每磁道扇区数(低位)


点评

这样理解好像不对,以上面为例,*0x82b9=0x1FF3F80,我又试了下*0x82b8=0x1FF3F803F 对比发现,0x80代表的应是“真正驱动器号”,那高位的0x1FF3F,应分别代表“磁头数”、“每磁道扇区数”,但发现0x82B8是4字节,  详情 回复 发表于 2021-8-4 17:33
回复

使用道具 举报

4#
 楼主| 发表于 2021-8-4 17:01:30 | 只看该作者
2011yaya2007777 发表于 2021-8-4 16:49
0x82b9是ud启动时的盘符。bios识别为硬盘时,为0x80 。识别为软盘时,为0。

感谢yaya大佬 回复。ud启动时的盘符是什么意思?以上面的为例,*0x82b9=335051532(16进制为0x1FF3F80),那高位0x1FF3F有没有具体含义呢(代表什么)?
回复

使用道具 举报

5#
 楼主| 发表于 2021-8-4 17:23:13 | 只看该作者
plusv 发表于 2021-8-4 16:56
依你的讯息,
用直觉猜的.

这样理解好像不对,以上面为例,*0x82b9=0x1FF3F80,我又试了下*0x82b8=0x1FF3F803F
对比发现,0x80代表的应是“真正驱动器号”,那高位的0x1FF3F,应分别代表“磁头数”、“每磁道扇区数”,但发现0x82B8是4字节,实际操作中得出的0x1FF3F803F明显是5个字节,对比后得出0x1FF3F803F:3F代表“每磁道扇区数”、“FF是磁头数”?那高位的0x1是什么鬼?

点评

我是依你的讯息解读的. 如果 格式 是 4 字节就不会得到 5 字节, 你要依格式取得每个字节的意思. 另外 *0x82b9=0x1FF3F80 *0x82b8=0x1FF3F803F *0x82b8=3F *0x82b9=80  详情 回复 发表于 2021-8-4 17:32
回复

使用道具 举报

6#
 楼主| 发表于 2021-8-4 17:30:07 | 只看该作者
plusv 发表于 2021-8-4 16:56
依你的讯息,
用直觉猜的.

这样理解好像不对,以上面为例,*0x82b9=0x1FF3F80,我又试了下*0x82b8=0x1FF3F803F
对比发现,0x80代表的应是“真正驱动器号”,那高位的0x1FF3F,应分别代表“磁头数”、“每磁道扇区数”,但发现0x82B8是4字节,实际操作中得出的0x1FF3F803F明显是5个字节,对比后得出0x1FF3F803F:3F代表“每磁道扇区数”、“FF是磁头数”?那高位的0x1是什么鬼?
回复

使用道具 举报

7#
发表于 2021-8-4 17:32:50 | 只看该作者
201287zr 发表于 2021-8-4 17:23
这样理解好像不对,以上面为例,*0x82b9=0x1FF3F80,我又试了下*0x82b8=0x1FF3F803F
对比发现,0x80代表 ...

我是依你的讯息解读的.

如果 格式 是 4 字节就不会得到 5 字节,
你要依格式取得每个字节的意思.

另外
*0x82b9=0x1FF3F80
*0x82b8=0x1FF3F803F
*0x82b8=3F
*0x82b9=80
回复

使用道具 举报

8#
 楼主| 发表于 2021-8-4 17:33:04 | 只看该作者
本帖最后由 201287zr 于 2021-8-4 17:39 编辑
plusv 发表于 2021-8-4 16:56
依你的讯息,
用直觉猜的.

这样理解好像不对,以上面为例,*0x82b9=0x1FF3F80,我又试了下*0x82b8=0x1FF3F803F
对比发现,0x80代表的应是“真正驱动器号”,那高位的0x1FF3F,应分别代表“磁头数”、“每磁道扇区数”,但发现0x82B8是4字节,实际操作中得出的0x1FF3F803F明显是5个字节,对比后得出0x1FF3F803F:3F代表“最大每磁道扇区数”、“每磁道扇区数”?那高位的0x1FF是什么鬼?0x1代表的是磁头数,还多个字节出来,还是0x82b8不是4个字节?搞不懂
综上分析,我觉得0x82b9,如实际值为0x1FF3F803F,代表的意思可能是“0x1磁头数、0x3F每磁道扇区数、0x80真正驱动器号、0x3F最大每磁道扇区数(低位)”,但多出来的字节FF不知怎么理解。

点评

>我觉得0x82b9,如实际值为0x1FF3F803F 你不可这样解读, 你要解读 1 个字节. 0x82b9=3F.  详情 回复 发表于 2021-8-4 17:36
回复

使用道具 举报

9#
发表于 2021-8-4 17:36:51 | 只看该作者
本帖最后由 plusv 于 2021-8-4 17:45 编辑
201287zr 发表于 2021-8-4 17:33
这样理解好像不对,以上面为例,*0x82b9=0x1FF3F80,我又试了下*0x82b8=0x1FF3F803F
对比发现,0x80代表 ...

>我觉得0x82b9,如实际值为0x1FF3F803F

你不可这样解读,
你要解读 1 个字节.

0x82b9=3F.

PS:
>"我觉得0x82b9,如实际值为0x1FF3F803F"
意义是
0x82b8=?? 磁头数
0x82b9=3F 每磁道扇区数
0x82ba=80 真正驱动器号
0x82bb=3F 最大每磁道扇区数(低位)
0x82bc=FF
0x82bd=01


点评

谢谢指点,我再实际操作了下,是这样的: calc *0x82b8=0x1FF3F803F calc *0x82b9=0x1FF3F80 calc *0x82ba=0x1FF3F calc *0x82bb=0x1FF calc *0x82bc=0x1 只能看出具体含意的脉络,大概的意思该是差不多了,但  详情 回复 发表于 2021-8-4 17:57
回复

使用道具 举报

10#
 楼主| 发表于 2021-8-4 17:57:42 | 只看该作者
plusv 发表于 2021-8-4 17:36
>我觉得0x82b9,如实际值为0x1FF3F803F

你不可这样解读,

谢谢指点,我再实际操作了下,是这样的:
calc *0x82b8=0x1FF3F803F
calc *0x82b9=0x1FF3F80
calc *0x82ba=0x1FF3F
calc *0x82bb=0x1FF
calc *0x82bc=0x1
只能看出具体含意的脉络,大概的意思该是差不多了,但0x1FF特别是0xFF的指向不明,一般磁头数为1是合理的,不会是255。FF应有特殊含义吧,而5个地址的字节数不一样,是程序内存就是这样吗?没有固定字节大小吗?我不懂编程,不知道是不是bug。

点评

我很久没用 Grub4Dos 了, 如果有类似 Debug 的 Dump 语法就很容易懂了. [attachimg]484450[/attachimg]  详情 回复 发表于 2021-8-4 18:06
回复

使用道具 举报

11#
发表于 2021-8-4 18:06:38 | 只看该作者
201287zr 发表于 2021-8-4 17:57
谢谢指点,我再实际操作了下,是这样的:
calc *0x82b8=0x1FF3F803F
calc *0x82b9=0x1FF3F80

我很久没用 Grub4Dos 了,

如果有类似 Debug 的 Dump 语法就很容易懂了.


回复

使用道具 举报

12#
发表于 2021-8-5 08:30:13 | 只看该作者
就是 和 0xff 进行“按位与”运算
看结果为多少
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-26 05:56

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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