Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.131.238] |
|
Страницы: (3) 1 2 [3] все ( Перейти к последнему сообщению ) |
Сообщ.
#31
,
|
|
|
Меня ещё смущает текст в спецификации SMBIOS:
Цитата On non-UEFI systems, the 32-bit SMBIOS Entry Point structure, can be located by application software by searching for the anchor-string on paragraph (16-byte) boundaries within the physical memory address range 000F0000h to 000FFFFFh. This entry point encapsulates an intermediate anchor string that is used by some existing DMI browsers. On UEFI-based systems, the SMBIOS Entry Point structure can be located by looking in the EFI Configuration Table for the SMBIOS GUID (SMBIOS_TABLE_GUID, {EB9D2D31-2D88-11D3-9A16-785 0090273FC14D}) and using the associated pointer. See section 4.6 of the UEFI Specification for details. See section 2.3 of the UEFI Specification for how to report the containing memory type. Не совсем понятно: в UEFI-системах можно искать и так, и так? Потому что у меня UEFI, и сигнатура '_SM_' есть в диапазоне 0xF0000..0xFFFF0. А вот слова "also" в тексте "On UEFI-based systems, the SMBIOS Entry Point structure can be located" я что-то не вижу. И ещё интересует момент: может ли эта таблица SMBIOS (где хранятся структуры с информацией типа BIOS Information, строки разные) находиться вне диапазона физ. адресов 0xF0000..0xFFFF0 ? Может, встречаются такие случаи? |
Сообщ.
#32
,
|
|
|
Jin X,
Цитата >> $DEBUG: CF=1, EAX=0, EBP=101, NTSTATUS=0 (hex), GetLastError=487 (dec) SMBIOS table read error Press a key to exit... Добавлено Цитата Jin X @ Не совсем понятно: в UEFI-системах можно искать и так, и так? UEFI эмулирует биос, поэтому вполне возможно.. Добавлено Цитата Jin X @ И ещё интересует момент: может ли эта таблица SMBIOS находиться вне диапазона физ. адресов 0xF0000..0xFFFF0 ? думаю, что только ниже первого мега. точка входа указывается в заголовке, после сигнатуры _SM_ и лично мне не встречался адрес выше 1М |
Сообщ.
#33
,
|
|
|
Цитата core-i7 @ MapViewOfFile выдаёт ошибку "Attempt to access invalid address."EBP=101, ..., GetLastError=487 (dec) Не понимаю, чего там инвалидного? Сейчас попробуем читать не весь мегабайт, а 0xC0000..0xFFFFF. Попробуйте ещё раз. Если будет опять ошибка, попробуйте запустить от админа (если там есть такая функция). Цитата core-i7 @ Про ниже 1 МБ логично (и я почти уверен, что так всегда).думаю, что только ниже первого мега. Я сейчас посмотрел что происходит в VMware, там адрес таблицы – 0xE0010, так что, видимо, с 0xC0000 нужно начинать... Прикреплённый файлEDDSupportCheckDEBUG2.zip (4,55 Кбайт, скачиваний: 164) Добавлено Кстати, а у вас вот эта прога нормально работает? http://www.delphiplus.org/articles/api/mem_read/index.html Попробуйте прочитать адреса 0, 0xC0000, 0xF0000, 0xFF000. |
Сообщ.
#34
,
|
|
|
Jin X, NtOpenSection выдаёт на экспорт файл 'ntoskrnl.exe'
у меня он экспортирует только WzOpenSection, а Nt в списке нет. видимо в этом проблема.. система XP-SP3 Добавлено Цитата Jin X @ Попробуйте ещё раз. эта работает вроде.. Цитата >> $DEBUG: CF=0, EAX=1125, EBP=105, NTSTATUS=0 (hex), LastError=127 (dec) SMBIOS table is read (size = 1125 bytes)! SMBIOS version 2.4 Table is saved to file! >> $DEBUG: CF=0, EAX=2139855488, EBP=202, NTSTATUS=0 (hex), LastError=0 (dec) BIOS Characteristics = 000000017F8B9A80 (hex) EDD is supported! Press a key to exit... Добавлено Цитата Jin X @ Кстати, а у вас вот эта прога нормально работает? да.. нормально читает |
Сообщ.
#35
,
|
|
|
Цитата core-i7 @ В общем, почему-то MapViewOfFile не даёт доступа к физ. адресам 0-0x100000, но даёт к 0xC0000-0x100000. В общем-то, нам больше и не надо.да.. нормально читает Цитата core-i7 @ Работает на всём диапазоне?эта работает вроде.. Можете проверить диапазон первого МБ с интервалом 0x10000 ? Проверил ещё в 2000 – всё нормально, а NT выдаёт ошибку 0xC000000D (STATUS_INVALID_PARAMETER). Прога mem_read.exe там тоже не работает. В общем, сделал очередную версию с учётом исправлений. Прикреплённый файлEDDSupportCheck.zip (8,95 Кбайт, скачиваний: 158) |
Сообщ.
#36
,
|
|
|
дебуг версия из последнего архива:
Цитата >> $DEBUG: CF=0, EAX=1125, EBP=105, NTSTATUS=0 (hex), LastError=127 (dec) SMBIOS table is read (size = 1125 bytes)! SMBIOS version 2.4 Table is saved to file! >> $DEBUG: CF=0, EAX=2139855488, EBP=202, NTSTATUS=0 (hex), LastError=0 (dec) BIOS Characteristics = 000000017F8B9A80 (hex) EDD is supported! Press a key to exit... ..и релиз: Цитата SMBIOS table is read (size = 1125 bytes)! SMBIOS version 2.4 Table is saved to file! BIOS Characteristics = 000000017F8B9A80 (hex) EDD is supported! Press a key to exit... если-бы мне приспичило, то я бы сделал конечно проще.. прописал-бы в тело программы батник, который сгенерит текстовый файл средствами WMI. В нём таже-самая инфа, что и получаем чз нативной API. Останется распарсить текст в бинарник, и просканить биты. Вот пример.. format PE console include 'win32ax.inc' ;------------------------- .data rawName db 'smbios.txt',0 batName db 'run.bat', 0 batFile db 'wmic.exe /Output:smbios.txt /Namespace:\\root\WMI Path MSSmBios_RawSMBiosTables Get /Format:LIST' batSize dd $ - batFile ;------------------------- .code start: ;-- создать BAT-файл (получим 'run.bat' для запуска WMI) invoke _lcreat, batName, 0 push eax invoke _lwrite, eax, batFile, [batSize] pop eax invoke _lclose, eax ;-- запустить батник на исполнение (получим таблицу SMBIOS.TXT) invoke WinExec, batName, 0 invoke ExitProcess,0 .end start если компилить в лом, то для эксперимента можно оформить эту строку в батник, и посмотреть на результат: wmic.exe /Output:smbios.raw /Namespace:\\root\WMI Path MSSmBios_RawSMBiosTables Get /Format:LIST Добавлено Цитата Jin X @ В общем, почему-то MapViewOfFile не даёт доступа к физ. адресам 0-0x100000, но даёт к 0xC0000-0x100000. так в доках вроде сказано: -"Только первый мегабайт" |
Сообщ.
#37
,
|
|
|
Тоже вариант
Интересно бы реализацию использования WMI на асме глянуть. Я вот этим не занимался ни разу... |
Сообщ.
#38
,
|
|
|
думаю API-шпион 'Kerberos' сможет тебе в этом помочь.. (хотя не проверял).
Добавлено WMI чем удобный - он точно кроссплатформенный |
Сообщ.
#39
,
|
|
|
Кстати...
Цитата Jin X @ В проге mem_read. Можете проверить диапазон первого МБ с интервалом 0x10000 ? |
Сообщ.
#40
,
|
|
|
Сообщ.
#41
,
|
|
|
Цитата core-i7 @ До мега (0 - тоже, 0x10000, 0x20000...).0x10000 надо, или выше мега? Мне интересно, почему мой предыдущий код, который берёт область от 0 до 0x100000 ошибку выдаёт? Что не может взять? Может, просто первые 64 Кб или ещё что-то... Добавлено Хотя вполне возможно, что граничные области нормально будут читаться, а где-то внутри - нет. Добавлено Со скринами можно не заморачиваться... |
Сообщ.
#42
,
|
|
|
она читает от 0x9000 и по самые помидоры (в зависимости от установленной)
Добавлено 8FFF уже не читает |
Сообщ.
#43
,
|
|
|
core-i7, понял, спасибо.
|