无忧启动论坛

标题: 系统保留变量问题,不点、chenall、yaya请进 [打印本页]

作者: sratlf    时间: 2014-6-26 17:30
标题: 系统保留变量问题,不点、chenall、yaya请进
下面这几个保留变量还能用吗,能的话应该怎么使用

VAR13 - filesystem type
VAR28 - graphics cursor
VAR29 - menu border character?
VAR42 - current color BG-FG as byte
VAR43 - low 32-bits foreground
VAR44 - low 32-bits background
VAR45 - cmd line string
VAR46 - splashimage loaded

作者: 不点    时间: 2014-6-26 18:32
归为 “保留” 的变量,通常是废弃了的。开发者以后可能使用些变量所占据的空间,将其填充为新的变量。


作者: sratlf    时间: 2014-6-26 18:39
不点 发表于 2014-6-26 18:32
归为 “保留” 的变量,通常是废弃了的。开发者以后可能使用些变量所占据的空间,将其填充为新的变量。

那我就不“记录在案”了。。。
作者: chenall    时间: 2014-6-26 18:43
这些的话,用C语言访问会比较快.

#define next_partition_drive                ((*(unsigned long **)0x8304)[0])
#define next_partition_dest                ((*(unsigned long **)0x8304)[1])
#define next_partition_partition        ((*(unsigned long ***)0x8304)[2])
#define next_partition_type                ((*(unsigned long ***)0x8304)[3])
#define next_partition_start                ((*(unsigned long ***)0x8304)[4])
#define next_partition_len                ((*(unsigned long ***)0x8304)[5])
#define next_partition_offset                ((*(unsigned long ***)0x8304)[6])
#define next_partition_entry                ((*(unsigned long ***)0x8304)[7])
#define next_partition_ext_offset        ((*(unsigned long ***)0x8304)[8])
#define next_partition_buf                ((*(char ***)0x8304)[9])

用批处理访问的话,对C语言的指针足够了解的话也可以访问,记得之前我有写过类似的贴子.

访问方法
首先获取0x8304处的值(32位)比如是Y

那内存46*4+Y处的值就是VAR46的值了.

如果这是一个字符串,那也是一个指针指向字符串的起始位置.

直接用call Fn.0 0 ADDR可以看到内容.

作者: sratlf    时间: 2014-6-30 09:57
chenall 发表于 2014-6-26 18:43
这些的话,用C语言访问会比较快.

#define next_partition_drive                ((*(unsigned long **)0x8304)[0])

VAR13 - filesystem type  这个怎么使用  

calc 13<<2 + 0x8304 得到的结果是 0x30F598

read 0x30F598得到的结果是0x0...
作者: 不点    时间: 2014-6-30 12:55
保留变量,已经废弃了,目前没有被开发者填充为新变量,所以是 0 值。将来有可能被某个开发者用于某个新的变量。这就是 “保留” 的含义,是保留给开发者使用的,不是让用户使用的。

fsys_type 是废弃了的变量,只能由内核使用,目前不能让用户使用。

但 filesystem_type 不是保留变量,用户可以使用它。

进入 Linux 环境,用 cd 命令进入 stage2 目录,敲入

  1. grep    filesystem_type    *
复制代码


可以找到使用这个变量的那些语句。 以下是我找到的一些有用的结果:

  1. stage2/builtins.c:      //filesystem_type = 0;  /* MBR device */
  2. stage2/builtins.c:  filesystem_type = 0;        /* MBR device */
  3. stage2/builtins.c:  filesystem_type = -1;
  4. stage2/builtins.c:              filesystem_type == 1 ? "FAT12" :
  5. stage2/builtins.c:              filesystem_type == 2 ? "FAT16" :
  6. stage2/builtins.c:              filesystem_type == 3 ? "FAT32" :
  7. stage2/builtins.c:              filesystem_type == 4 ? "NTFS"  :
  8. stage2/builtins.c:              /*filesystem_type == 5 ?*/ "EXT2 GRLDR",
复制代码


这个结果提醒我,filesystem_type 这个变量是用来存放从 BPB 探测所获得的文件系统类型的。

当它是 0 时,表示它是一个 MBR 设备,即,该分区的第一扇区含有合法分区表。
当它是 1 时,表示这个分区是 FAT12。
当它是 2 时,表示这个分区是 FAT16。
当它是 3 时,表示这个分区是 FAT32。
当它是 4 时,表示这个分区是 NTFS。
当它是 5 时,表示这个分区是 Linux 的 ext2/3/4 文件系统格式。
当它是 -1 时,表示探测失败,既不含合法分区表,也不是上述 5 种文件系统格式。

yaya 有可能为 exFAT 格式分配一个号码,我不太确定,这要问 yaya 才行。

执行什么命令会引起这些探测呢?执行 map 命令时,会探测 img 文件的文件系统格式。

注意,即使你 map 一个 ISO 文件,也可能触发这个探测。探测的结果保留在 filesystem_type 变量中。目的是从 BPB 表以及分区表获得 CHS 几何参数信息。这个信息对于 ISO 的情形是无用的,但 map 总是要执行这个探测过程。它会把 ISO 文件当成一个普通的 IMG 来探测。对于 ISO 来说,探测失败也没关系,因为 ISO 不需要几何参数,它是用 LBA 的访问方式,不是用 CHS 的访问方式。

每次执行 map 命令,都会把对映像文件的探测结果保存在 filesystem_type 变量中。它保存着最后执行的 map 命令的探测结果。


作者: sratlf    时间: 2014-6-30 13:06
不点 发表于 2014-6-30 12:55
保留变量,已经废弃了,目前没有被开发者填充为新变量,所以是 0 值。将来有可能被某个开发者用于某个新的 ...

那我还是老老实实用原来的方法获取吧  以免哪天忽然失效。。。
作者: 2011yaya2007777    时间: 2014-6-30 14:16
本帖最后由 2011yaya2007777 于 2014-6-30 14:32 编辑

键入 grep    filesystem_type    *  后,再键入什么命令,可以让屏幕1屏1屏显示?不至于只能显示最后部分?

搜索了一下,知道了。
| less  可以用PgUp和PgDn来上下翻页。
| more 只能用回车来控制,一次回车向下一行。






欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3