SMBIOS - неверный адрес таблицы структуры? - PullRequest
1 голос
/ 29 мая 2019

В настоящее время я работаю над старым приложением MS-DOS, которое использует DMI для идентификации оборудования.В прошлом он работал нормально, но, похоже, предоставляет неверные данные на более новых системах (например, Skylake).Как указано в спецификации, мы сканируем 0xF0000-0xFFFFF для строки привязки " SM ", это все еще работает, как и ожидалось.

Но теперь кажется, что данные, расположенные по адресу «Адрес таблицы структуры» (хранятся со смещением 0x18h в), являются недопустимыми (см. Дампы ниже).Такие инструменты, как dmidecoe, предоставляют правильную информацию (однако в Windows используется GetSystemFirmwareTable ()).Что я здесь не так делаю?

РЕДАКТИРОВАТЬ (прояснить ситуацию)

В более старой системе я получаю ожидаемые данные (дамп выполняется в утилите debug98 FreeDOS) - следующеепроисходят из системы IvyBridge (3-го поколения):

-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, но их там нет):

-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..~

1 Ответ

1 голос
/ 02 июня 2019

Ваши структуры SMBIOS расположены по физическому адресу 0x871d9000 (как видно из смещения f000: 0610 или смещения x10 от строки привязки '_SM3_'), как указывает Майкл Петч.

Это второстепенный вопрос, но он может быть важным в зависимости от того, как построено ваше программное обеспечение.Имейте в виду, что это структура, соответствующая SMBIOS 3.0 (согласно строке привязки "_SM3_"), и что адрес таблицы структуры может быть на любом 64-битном адресе.Чтобы гарантировать, что ваше программное обеспечение работает во всех системах, вы должны использовать адрес таблицы структуры _SM3_, когда он присутствует, и разрешить вашему программному обеспечению считывать любые 64-битные физические адреса, используя режим большой реальности или другой механизм.Если структура _SM3_ отсутствует, вернитесь к старому потоку программного обеспечения.

Что касается того, почему вы только сейчас это видите, это первый раз, когда вы столкнулись со структурой данных, размер которой превышает 1 МБ?физический адрес?

...