无忧启动论坛

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

[求助] how to get pxe mac by memory

[复制链接]
跳转到指定楼层
1#
发表于 2016-2-2 00:55:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 babyshin 于 2016-2-2 11:26 编辑

pxe 指令尾行会列印mac address
查了一下是源码中的这段

  1.       grub_printf ("\nmac : ");
  2.       for (i = 0; i < pxe_mac_len; i++)
  3.         {
  4.           pc = buf;
  5.           pc = pxe_outhex (pc, pxe_mac[i]);
  6.           *pc = 0;
  7.           grub_printf ("%s%c", buf, ((i == pxe_mac_len - 1) ? '\n' : '-'));
  8.         }
复制代码


似乎可以从记忆体位址中取得mac阵列
请问各位高手: pxe_mac详细的记忆体位址为何?
推荐
发表于 2016-2-2 09:35:54 | 只看该作者
目前没有办法,但是可以通过批处理脚本来获取,比如以下脚本

  1. pxe > (md)0x200+1
  2. cat --locate=mac (md)0x200+1 | set k=
  3. set /a k=0x%k%+6
  4. cat --skip=%k% (md)0x200+1 | set mac=
  5. echo %mac%
复制代码

点评

Many thanks for your help!  发表于 2016-2-2 12:22
百度几十页居然下载到你的GRUB4DOS作者?请问GRLDR有没有办法取得主板UUID不是帮助中的硬盘UUID  发表于 2016-2-2 10:01
回复

使用道具 举报

推荐
发表于 2016-2-2 09:34:20 | 只看该作者
在回答这个问题之前,提醒一下网络上有如下的教程,可供深入了解 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 中,它的定义是这样的:


  1.         . = int13_handler + 0x124

  2. VARIABLE(saved_pxe_mac)
  3.         
  4.         .byte        0, 0, 0, 0, 0, 0
复制代码


也就是说,它位于 int13 处理程序空间的固定偏移量 0x124 处,长度为 6 个字节。

你需要在你的操作系统中找到 int13 处理程序空间的开头,也就能够获得 pxe_mac 的值了。

点评

我有track到这段, 无奈技术不够, 我不知如何找出  发表于 2016-2-2 11:25
请问GRLDR有没有办法取得主板UUID不是帮助中的硬盘UUID  发表于 2016-2-2 10:03
回复

使用道具 举报

4#
 楼主| 发表于 2016-2-2 11:23:12 | 只看该作者
我是做pxe量产的,

其中有一个很重要的一环: 如何纪录本机端的硬体讯息

uuid的数据来源不稳定(某些主板会是一串0), mac address就会是很好的依据了

点评

楼上 chenall 已经告诉了获得 mac 地址的方法,应该可以满足你的需要了。  详情 回复 发表于 2016-2-2 11:43
回复

使用道具 举报

5#
发表于 2016-2-2 11:43:17 | 只看该作者
babyshin 发表于 2016-2-2 11:23
我是做pxe量产的,

其中有一个很重要的一环: 如何纪录本机端的硬体讯息

楼上 chenall 已经告诉了获得 mac 地址的方法,应该可以满足你的需要了。

点评

Yes ^^  发表于 2016-2-2 12:22
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-30 08:43

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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