1.6 x86读取smbios信息
来源:互联网 发布:迅龙数据恢复软件注册 编辑:程序博客网 时间:2024/06/09 14:27
x86软件中需要读取当前的系统信息,区别出不同的系统类型,以实现不同的功能。如:A、B、C、D等等。前面也有通过桥片PCI DEVICE ID来判断的方法,但是这种方法碰到桥片相同但是系统功能不同方法就无能为力了。现有的代码已经实现,研究了一下原理,整理了一下相关资料。
1、SMBIOS概念
SMBIOS(System Management BIOS)是主板或系统制造者以标准格式显示产品管理信息所需遵循的统一规范。
简单的说SMBIOS是x86 bios遵循的一个标准,bios把一些硬件信息按照一定的标准格式保存在内存当中,应用软件可以通过读出这些数据来获取想要的信息。
2、SMBIOS读取方法
bios一般把smbios信息保存在物理内存000F0000h 至 000FFFFFh之间,BIOS内容可以通过文件”/dev/mem”读取。
- ⑴打开”dev/mem”文件
- ⑵通过mmap(),将文件的内容映射到进程的空间,并通过memcpy()将BIOS内容考到相应缓冲区。之所以不用文件的read(),而用mmap()的原因是后者能解决在IA-64机时read()所遇到的问题。
- ⑶通过SMBIOS的规范,读出内容。
3、SMBIOS信息解析
- ⑴首先通过找读出的一段数据内容中的锚字符”SM“找到smbios的entry point。
- ⑵再通过entry point中指定的地址和长度,找到对应smbios的信息表项,我们读系统名称信息的表项为其中的type2。
4、实例:
目前DMI有多个版本,大多为2.0、2.1、2.2,对于我们主板BIOS中所使用的DMI版本,可使用WINXX自带的DEBUG程序来测试。
在WINXX的MS-DOS模式下,键入DEUBG。c:\debug -s f000:0 ffff '_SM_'(SM必须大写) 回车f000:13e0 如果显示了一个地址, 则此 BIOS 支持至少 DMI 2.1. 如果没有, 再试试下面的c:\debug -s f000:0 ffff '_DMI_'(DMI必须大写) 回车f000:13e0 (如果显示了一个地址, 则此 BIOS 仅支持 DMI 2.0. 如果没有, 那么 连 DMI 2.0 都不支持)
确认 BIOS 支持 DMI 2.10 或 DMI 2.20, 进行以下操作:
c:\debug-d f000:13e0 回车(f000:13e0 是你上面的得到的结果,每个人不同哦)具体以你的主板BIOS为准。这里以技嘉6OXE F7版BIOS为便。请参考以下屏幕图片:02 02 意味着 DMI 2.2002 01 意味着 DMI 2.10
阅读全文
0 0
- 1.6 x86读取smbios信息
- SMBIOS信息概述 -- DMI
- SMBIOS信息概述 -- DMI
- SMBIOS信息概述 – DMI
- SMBIOS
- 从SMBIOS中获取硬件信息
- VC WMI应用获取SMBios中的信息
- 解析SMBIOS信息之WindowsAPI和WMIC
- Linux查看BIOS信息:dmidecode命令以及SMBIOS、DMI等
- x86 寄存器信息
- SMBIOS 转帖
- SMBIOS debug
- SMBIOS debug
- SMBIOS debug
- smbios学习
- 符合SMBIOS规范的计算机的系统信息获取方法[转]
- vmware 安装 osx 无法登录 appstore 的解决办法 (伪造smbios设备信息)
- SMBIOS 学习内容
- Mysql实现序列sequence
- vertica数据库中copy的用法
- U盘安装CentOS7全程笔记
- 整数中1出现的次数
- hibernate--one-to-many
- 1.6 x86读取smbios信息
- TYVJ 4865 天天和树 树的直径
- 自定义view圆形头像
- 统计学习方法(三)
- input验证,ie9光标左右移动问题
- oracle数据库索引
- android笔记201710
- KEIL编译器区分RW-data和ZI-data
- 升级由swift2.3->swift4.0