|
在回答这个问题之前,提醒一下网络上有如下的教程,可供深入了解 grub4dos 的内部变量和内部函数:
http://www.rmprepusb.com/tutorials/grub4dos/grub4dos-internal-variables-and-functions
回到正题。正如楼主所注意到的,在 fsys_pxe.c 中,定义了 pxe_mac 变量:
MAC_ADDR pxe_mac;
因此,它肯定在内存中。
但是,这个地址不是固定的,不同的编译器会把它放在不同的内存地址处,不同的 grub4dos 版本,也会产生不同的地址。
既然你懂得 C 语言,你肯定了解这个现象。
也就是说,用户无法直接获得 pxe_mac 的值。
楼主没讲清楚,你要这个 mac 值究竟有什么用?如果你的理由充分,开发者可以把它放在固定变量区,让用户能够直接访问它。
另外,这个变量虽然不在固定变量区,但是它在 int13 处理程序的空间上存有一个备份,叫做 saved_pxe_mac,可以在 asm.S 中找到它的定义。
就是说,只要你用 map 建立了虚拟盘,你就有办法找到这个 saved_pxe_mac,即使你脱离了 grub4dos 环境,也能获得 saved_pxe_mac 的值。
这是因为,int13 处理程序的空间是与操作系统无关的,任何变量,只要它处于 int13 的代码空间中,那么任何操作系统都能访问它。
在 asm.S 中,它的定义是这样的:
- . = int13_handler + 0x124
- VARIABLE(saved_pxe_mac)
-
- .byte 0, 0, 0, 0, 0, 0
复制代码
也就是说,它位于 int13 处理程序空间的固定偏移量 0x124 处,长度为 6 个字节。
你需要在你的操作系统中找到 int13 处理程序空间的开头,也就能够获得 pxe_mac 的值了。
|
|