На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
Страницы: (3) 1 2 [3]  все  ( Перейти к последнему сообщению )  
> Как проверить поддержку расширенного режима работы с int 13h из-под Windows?
    Меня ещё смущает текст в спецификации 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 ?
    Может, встречаются такие случаи?
    vpmultishiftqb vscatterpf0dps vfmsubadd132pd vgatherpf1dps vpclmulhqlqdq vcmptrue_ussd vaeskeygenassist
      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М
      Бог знает суть. Подробности нашёптывает дьявол.
        Цитата core-i7 @
        EBP=101, ..., GetLastError=487 (dec)
        MapViewOfFile выдаёт ошибку "Attempt to access invalid address."
        Не понимаю, чего там инвалидного?
        Сейчас попробуем читать не весь мегабайт, а 0xC0000..0xFFFFF.
        Попробуйте ещё раз. Если будет опять ошибка, попробуйте запустить от админа (если там есть такая функция).

        Цитата core-i7 @
        думаю, что только ниже первого мега.
        Про ниже 1 МБ логично (и я почти уверен, что так всегда).
        Я сейчас посмотрел что происходит в VMware, там адрес таблицы – 0xE0010, так что, видимо, с 0xC0000 нужно начинать...
        Прикреплённый файлПрикреплённый файлEDDSupportCheckDEBUG2.zip (4,55 Кбайт, скачиваний: 27)

        Добавлено
        Кстати, а у вас вот эта прога нормально работает?
        http://www.delphiplus.org/articles/api/mem_read/index.html
        Попробуйте прочитать адреса 0, 0xC0000, 0xF0000, 0xFF000.
        vpmultishiftqb vscatterpf0dps vfmsubadd132pd vgatherpf1dps vpclmulhqlqdq vcmptrue_ussd vaeskeygenassist
          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 @
          Кстати, а у вас вот эта прога нормально работает?

          да.. нормально читает
          Сообщение отредактировано: core-i7 -
          Бог знает суть. Подробности нашёптывает дьявол.
            Цитата core-i7 @
            да.. нормально читает
            В общем, почему-то MapViewOfFile не даёт доступа к физ. адресам 0-0x100000, но даёт к 0xC0000-0x100000. В общем-то, нам больше и не надо.

            Цитата core-i7 @
            эта работает вроде..
            Работает на всём диапазоне?
            Можете проверить диапазон первого МБ с интервалом 0x10000 ? :)

            Проверил ещё в 2000 – всё нормально, а NT выдаёт ошибку 0xC000000D (STATUS_INVALID_PARAMETER). Прога mem_read.exe там тоже не работает.

            В общем, сделал очередную версию с учётом исправлений.
            Прикреплённый файлПрикреплённый файлEDDSupportCheck.zip (8,95 Кбайт, скачиваний: 27)
            Сообщение отредактировано: Jin X -
            vpmultishiftqb vscatterpf0dps vfmsubadd132pd vgatherpf1dps vpclmulhqlqdq vcmptrue_ussd vaeskeygenassist
              дебуг версия из последнего архива:
              Цитата
              >> $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. Останется распарсить текст в бинарник, и просканить биты. Вот пример..
              ExpandedWrap disabled
                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.

              так в доках вроде сказано: -"Только первый мегабайт"
              Сообщение отредактировано: core-i7 -
              Бог знает суть. Подробности нашёптывает дьявол.
                Тоже вариант :)
                Интересно бы реализацию использования WMI на асме глянуть.
                Я вот этим не занимался ни разу...
                vpmultishiftqb vscatterpf0dps vfmsubadd132pd vgatherpf1dps vpclmulhqlqdq vcmptrue_ussd vaeskeygenassist
                  думаю API-шпион 'Kerberos' сможет тебе в этом помочь.. (хотя не проверял).

                  Добавлено
                  WMI чем удобный - он точно кроссплатформенный
                  Бог знает суть. Подробности нашёптывает дьявол.
                    Кстати...
                    Цитата Jin X @
                    Можете проверить диапазон первого МБ с интервалом 0x10000 ?
                    В проге mem_read.
                    vpmultishiftqb vscatterpf0dps vfmsubadd132pd vgatherpf1dps vpclmulhqlqdq vcmptrue_ussd vaeskeygenassist
                      Jin X, 0x10000 надо, или выше мега?
                      user posted image

                      Добавлено
                      так она и выше метра бурится без проблем!
                      кстати там оказывается начинается ещё одна-крутая таблица - ACPI

                      user posted image
                      Бог знает суть. Подробности нашёптывает дьявол.
                        Цитата core-i7 @
                        0x10000 надо, или выше мега?
                        До мега (0 - тоже, 0x10000, 0x20000...).
                        Мне интересно, почему мой предыдущий код, который берёт область от 0 до 0x100000 ошибку выдаёт? Что не может взять? Может, просто первые 64 Кб или ещё что-то...

                        Добавлено
                        Хотя вполне возможно, что граничные области нормально будут читаться, а где-то внутри - нет.

                        Добавлено
                        Со скринами можно не заморачиваться...
                        vpmultishiftqb vscatterpf0dps vfmsubadd132pd vgatherpf1dps vpclmulhqlqdq vcmptrue_ussd vaeskeygenassist
                          она читает от 0x9000 и по самые помидоры (в зависимости от установленной)

                          Добавлено
                          8FFF уже не читает
                          Бог знает суть. Подробности нашёптывает дьявол.
                            core-i7, понял, спасибо.
                            vpmultishiftqb vscatterpf0dps vfmsubadd132pd vgatherpf1dps vpclmulhqlqdq vcmptrue_ussd vaeskeygenassist
                            1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                            0 пользователей:
                            Страницы: (3) 1 2 [3]  все


                            Рейтинг@Mail.ru
                            [ Script Execution time: 0,1398 ]   [ 17 queries used ]   [ Generated: 25.08.19, 09:20 GMT ]