首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SMBIOS -无效的结构表地址?

SMBIOS -无效的结构表地址?
EN

Stack Overflow用户
提问于 2019-05-29 13:30:40
回答 1查看 281关注 0票数 1

我目前正在开发一个旧的MS应用程序,它使用DMI来识别硬件。它在过去运行良好,但它似乎提供了更新系统(如Skylake)上的无效数据。正如规范中所述,我们正在扫描0xF0000-0xFFFF中的"SM“锚定串,这仍然是正常工作的。

但是现在看来,位于"Structure table adress“(存储在偏移量0x18h中)的数据是无效的(参见下面的转储)。像dmidecoe这样的工具传递正确的信息(但是,它在Windows上使用GetSystemFirmwareTable() )。我在这里做错了什么?

编辑(澄清情况)

在较旧的系统上,我得到预期的数据(转储是在FreeDOS的debug98实用程序中完成的)--以下来自IvyBridge系统(第3代):

代码语言:javascript
复制
-d F000:04C0
F000:04C0  5F 53 4D 5F 03 1F 02 07-77 00 00 00 00 00 00 00   _SM_....w.......
F000:04D0  5F 44 4D 49 5F E0 6E 04-10 BA 0E 00 17 00 27 00   _DMI_.n.......'.
F000:04E0  1E 66 60 68 00 F0 1F B8-90 D0 83 C0 0F 24 F0 A3   .f`h.........$..
F000:04F0  1D 03 B9 00 E0 2B C8 79-02 33 C9 89 0E 1F 03 33   .....+.y.3.....3
F000:0500  C0 66 2E 8B 1E 63 00 66-83 FB 00 74 0B 66 81 FB   .f...c.f...t.f..
F000:0510  00 00 0E 00 72 02 8B C3-A3 19 03 F7 D0 A3 1B 03   ....r...........
F000:0520  66 61 1F C3 00 1E 50 68-00 F0 1F 0B DB 74 28 F7   fa....Ph.....t(.
F000:0530  C3 80 00 74 1C 2E 80 3E-24 05 00 75 43 83 F9 3E   ...t...>$..uC..>
-d E000:BA10
E000:BA10  00 18 00 00 01 02 00 F0-03 7F 80 98 89 3F 01 00   .............?..
E000:BA20  00 00 03 0D 04 06 FF FF-41 6D 65 72 69 63 61 6E   ........American
E000:BA30  20 4D 65 67 61 74 72 65-6E 64 73 20 49 6E 63 2E    Megatrends Inc.
E000:BA40  00 42 51 37 37 52 31 31-31 00 30 37 2F 30 35 2F   .BQ77R111.07/05/
E000:BA50  32 30 31 33 00 00 01 1B-01 00 01 02 03 04 00 00   2013............
E000:BA60  01 26 60 24 00 05 00 06-00 07 00 08 00 09 06 05   .&`$............
E000:BA70  06 20 00 20 00 20 00 30-30 30 30 30 31 32 36 36   . . . .000001266
E000:BA80  30 32 34 00 20 00 20 00-00 02 0F 02 00 01 02 03   024. . .........

更新的系统-在本例中,一个基于Skylake的系统(第6代)数据不一样。在后面的SMI结构中,指向我的不是预期的数据(我是为了查看BIOS字符串而进行的,但它们并不存在):

代码语言:javascript
复制
-d f000:05e0
F000:05E0  5F 53 4D 5F F3 1F 03 00-8C 01 00 00 00 00 00 00   _SM_............
F000:05F0  5F 44 4D 49 5F 15 CE 07-00 90 1D 87 1A 00 30 00   _DMI_.........0.
F000:0600  5F 53 4D 33 5F 4A 18 03-00 00 01 00 CE 07 00 00   _SM3_J..........
F000:0610  00 90 1D 87 00 00 00 00-00 00 00 00 00 00 00 00   ................
F000:0620  1E 66 60 68 00 F0 1F B8-00 C6 83 C0 0F 24 F0 A3   .f`h.........$..
F000:0630  8E 03 B9 00 E0 2B C8 79-02 33 C9 89 0E 90 03 33   .....+.y.3.....3
F000:0640  C0 66 2E 8B 1E 63 00 66-83 FB 00 74 0B 66 81 FB   .f...c.f...t.f..
F000:0650  00 00 0E 00 72 02 8B C3-A3 8A 03 F7 D0 A3 8C 03   ....r...........
-d 871d:9000
871D:9000  76 06 D1 E9 73 08 8A 05-A4 88 44 FF 74 08 8B 05   v...s.....D.t...
871D:9010  A5 89 44 FE E2 F8 5F 5E-5D C2 04 00 55 8B EC 4C   ..D..._^]...U..L
871D:9020  4C 56 57 83 7E 04 02 73-2D 83 7E 04 02 74 03 E9   LVW.~..s-.~..t..
871D:9030  18 01 8B 46 06 03 06 AC-10 8B F8 50 FF 76 06 FF   ...F.......P.v..
871D:9040  16 AE 10 59 59 0B C0 7F-03 E9 FE 00 FF 76 06 57   ...YY........v.W
871D:9050  E8 9D FF E9 F4 00 8B 46-04 48 F7 2E AC 10 8B 56   .......F.H.....V
871D:9060  06 03 D0 8B FA 8B 46 04-D1 E8 F7 2E AC 10 8B 56   ......F........V
871D:9070  06 03 D0 8B F2 57 56 FF-16 AE 10 59 59 0B C0 7E   .....WV....YY..~
EN

回答 1

Stack Overflow用户

发布于 2019-06-02 18:54:56

正如Michael指出的,SMBIOS结构位于物理地址0x871d9000 (从偏移量f 000:0610或从'_SM3_‘锚定字符串中的偏移量x10中看到)。

这是一个小问题,但可能很重要,这取决于您的软件是如何构建的。请记住,这是一个符合SMBIOS3.0的结构(根据"_SM3_“锚定字符串),结构表地址可以在上任何64位地址上。为了确保您的软件在所有系统中工作,您应该在出现时使用_SM3_结构表地址,并使您的软件能够使用大实模式或其他机制读取任何64位物理地址。当_SM3_结构不存在时,然后恢复到原来的软件流。

至于为什么您刚才看到这一点,这是您第一次遇到超过1MB物理地址的数据结构吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56361819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档