无忧启动论坛

标题: 提醒 chenall 有人对最新补丁有评论 [打印本页]

作者: 不点    时间: 2014-8-11 19:44
标题: 提醒 chenall 有人对最新补丁有评论
https://github.com/chenall/grub4dos/commit/1ea9fe73774c8b5d0c154f5d66cd8df057b29d92

只是提醒一下。

作者: chenall    时间: 2014-8-12 15:01
谢谢提醒,顺便问一下.

看asm.S的代码.EXT_C(main) + 0x70之前还有许多空白的地方,比如如下

        . = EXT_C(main) + 0x34

        .word        0x14C        /* CPU type for i386 and compatibles */
        .word        1        /* there is 1 section */

        . = EXT_C(main) + 0x44

        .word        0x00        /* size of optional header */
        .word        3        /* flags: "no relocation" and "valid executable" */
        .word        0x722E        /* section name for resources */
        .word        0x7273
        .word        0x63

        /* Utilities may use this to locate the bss starting address,
         * where the "bootlace" signature is placed and preset-menu
         * follows.
         */

        . = EXT_C(main) + 0x6C  #; bss starting address

0x38-0x44,0x50-0x6C之前看起来都是没有使用到的,我想在这里增加一个变量好像不行,设置了一个变量启动后看了一下值为0,不知为何?现在要增加内存变量只有0x100之后有一点空间了.

作者: 不点    时间: 2014-8-12 21:44
要知道,这段空间是为 config_file 变量保留的。每次使用 configfile 命令加载某个 menu.lst 文件,这个文件的全路径名就保存在这里。因此,这里的数据都会被覆盖掉,即,直到偏移 6F 处的值都将成为 config_file 变量的空间。这段空间只用于启动前被其他软件为了某种目的而使用,比如说,检测 grldr 的文件格式,或者向 grldr 的 asm.S 的启动代码传递某种数据。asm.S 在把控制传递给 C 语言代码之前,会把这里的数据清空。之所以要清空它们,就是想提醒后来的开发者,不要错误地使用了这个空间,因为这个空间会被 configfile 命令使用。

尽量不要增加变量。特殊情况需要增加变量的,可以在 3M 以上的空间中增加变量。为什么要节约低端内存而使用 3M 以上的内存呢?那是因为,低端内存是 BIOS 可访问的内存,很宝贵。如果我们要增加的变量不需要 BIOS 以及其他 16 位的软件去使用它,那么我们最好把它放在扩展内存中,节约常规内存的变量空间。

这里需要说明,grub4dos 的 32 位保护模式代码空间,占用了内存地址 0x308200 以上的一些空间,而 0x308200 之下的空间,则是数据空间。其中一部分空间已经被占用,例如 0x300000 处的中断描述符表就占用了几个 KB 的空间。

在 check_64bit_and_PAE() 函数中,把 CPU 的信息保存在 0x308000 处的 32 个字节中。在 grub4dos 之下运行的用户程序可以检测这里的 CPU 信息,从而判断出 grub4dos 当前是否正运行于虚拟机(vmware)之下。

从 0x308020 到 0x3081FF 这段空间,暂时没有使用。你将来最好把它用于保存大块头的变量,比如占用 16 字节或 32 字节或 64 字节的变量。小的 4 字节或 8 字节变量,最好不要放在这里,而是放在低于 0x308000 的地址空间。

0x307FF8 处的 4 字节被 use_preset_menu 变量占用。
0x307FFC 处的 4 字节被 preset_menu 变量占用。

你新增的变量,可以放在 0x307FF4 处,新增的下一个变量可以放在 0x307FF0 处,……,一直到 0x307000 都可以安排你的新增变量。所以,空间大得很,足够用了。



作者: chenall    时间: 2014-8-13 08:28
谢谢,明白了.顺便收藏记录一下.




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