无忧启动论坛
标题:
how to get pxe mac by memory
[打印本页]
作者:
babyshin
时间:
2016-2-2 00:55
标题:
how to get pxe mac by memory
本帖最后由 babyshin 于 2016-2-2 11:26 编辑
pxe 指令尾行会列印mac address
查了一下是源码中的这段
grub_printf ("\nmac : ");
for (i = 0; i < pxe_mac_len; i++)
{
pc = buf;
pc = pxe_outhex (pc, pxe_mac[i]);
*pc = 0;
grub_printf ("%s%c", buf, ((i == pxe_mac_len - 1) ? '\n' : '-'));
}
复制代码
似乎可以从记忆体位址中取得mac阵列
请问各位高手: pxe_mac详细的记忆体位址为何?
作者:
不点
时间:
2016-2-2 09:34
在回答这个问题之前,提醒一下网络上有如下的教程,可供深入了解 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 的值了。
作者:
chenall
时间:
2016-2-2 09:35
目前没有办法,但是可以通过批处理脚本来获取,比如以下脚本
pxe > (md)0x200+1
cat --locate=mac (md)0x200+1 | set k=
set /a k=0x%k%+6
cat --skip=%k% (md)0x200+1 | set mac=
echo %mac%
复制代码
作者:
babyshin
时间:
2016-2-2 11:23
我是做pxe量产的,
其中有一个很重要的一环: 如何纪录本机端的硬体讯息
uuid的数据来源不稳定(某些主板会是一串0), mac address就会是很好的依据了
作者:
不点
时间:
2016-2-2 11:43
babyshin 发表于 2016-2-2 11:23
我是做pxe量产的,
其中有一个很重要的一环: 如何纪录本机端的硬体讯息
楼上 chenall 已经告诉了获得 mac 地址的方法,应该可以满足你的需要了。
欢迎光临 无忧启动论坛 (http://wuyou.net./)
Powered by Discuz! X3.3