1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

MEMTEST.EFI

Тема в разделе "WASM.WIN32", создана пользователем Entropy, 11 сен 2020.

  1. Entropy

    Entropy Member

    Публикаций:
    0
    Регистрация:
    23 авг 2020
    Сообщения:
    113
    Приветствую,тут под моё внимание попала одна виндовая прога под названием memtest.efi это прога для теста RAM,так вот возникают такие вопросы к каким сервисам или апи даннная прога обращается ?,что нужно что бы разработать такую же прогу ? задачу она будет решать совсем другую, не тест RAM.Я гуглил на тему разработки таких приложений мне так найти и не удалось ничего.
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.407
    Адрес:
    Fryazino
    *.efi это формат загрузочных файлов и модулей UEFI.
    Статей на эту тему мало. Вот к примеру
    https://habr.com/ru/post/274463/

    АПИ описан в спецификации
    https://www.uefi.org/sites/default/files/resources/UEFI Spec 2_6.pdf
    Первые версии попроще будут.
    https://www.intel.com/content/dam/www/public/us/en/zip/efi-110.zip

    Лучше смотреть исходный код биосов и загрузчиков.
    https://github.com/fpmurphy/UEFI-Utilities
    https://github.com/linuxboot/linuxboot
    https://github.com/pbatard/uefi-ntfs/blob/master/boot.c
     
  3. njeen

    njeen Active Member

    Публикаций:
    0
    Регистрация:
    26 мар 2017
    Сообщения:
    129
    Адрес:
    Ташлинск
    краткое вступление
    http://x86asm.net/articles/uefi-programming-first-steps/index.html

    Как писать - можно сразу на fasm'е . Если на C - нужен developement kit. Как сейчас не знаю - года 4 назад были самые используемые публичные это edk2 и Gnu efi. Первый заточен под студию, второй - под ГНУтое.
    Что в программе можно сделать - в функции main передаются параметры. Один из двух - это указатель на структуру EFI_SYSTEM_TABLE - что-то вроде рантайма + всяких структур. Через неё дергаются другие функции, работают с другими модулями и т.д. Про это надо читать соотв. доки по efi. Вообще, бОльшая часть кодинга под efi - чтение документации.

    Как это проверять.
    Если просто запустить приложение - из efi биоса загрузить EFI Shell (у вмвари есть вроде даже встроенная), из которой запустить приложение.
    А поотлаживать - на эмуляторе. Есть виндовый псевдоэмулятор ( но как-то имхо, не очень).
    Есть вариант встроить в efi биос vmware - выдрать из exe'шника её 'родной' биос виртуалки, добавить свое поделие чем-то вроде uefitool (тут надо понимать что и куда, а это читать оф. доки по efi) и дебажить по wmware gdb stub + Ida - реально почти как на реальном биосе ведет себя.
    Или qemu с ovmf bios .

    В реальный efi биос, скорее всего, просто встроить не получится - часто какая-то защита, нужно отключать.
     
  4. Entropy

    Entropy Member

    Публикаций:
    0
    Регистрация:
    23 авг 2020
    Сообщения:
    113
    njeen, memtest.efi я уже пробовал запускать в efi shell,он не запускается,и вообще структура memtest.efi и того PE файла что генерит edk2 очень сильно отличается,к примеру тот PE файл что генерит edk2 у него поле ImageBase = 0,винда с нулевым ImageBase файл не запустит,и у меня возникает такое предположение что memtest.efi ни какого абсолютно отношения к UEFI не имеет,то есть это чисто виндовая прога.Я даже на реальной машине с UEFI пробовал запустить memtest.efi
     
  5. Entropy

    Entropy Member

    Публикаций:
    0
    Регистрация:
    23 авг 2020
    Сообщения:
    113
    Если кто не понял,то я имел ввиду средство диагностики памяти Windows
     
  6. njeen

    njeen Active Member

    Публикаций:
    0
    Регистрация:
    26 мар 2017
    Сообщения:
    129
    Адрес:
    Ташлинск
    Если все еще интересно.
    Данные приложения boot application, вроде memtest, действительно не запускаются обычным образом.
    Подсистема установлена у них в 0x10.
    Но это efi приложения, только ожидающие в entry point другие параметры, которые скомпоновал виндовый boot manager. То есть, на точке входа такое приложение первым параметром ожидает указатель на структуру BOOT_APPLICATION_PARAMETER_BLOCK . Из нее можно получить стандартные efi'шные как-то так:
    Код (Text):
    1.  
    2.     BL_FIRMWARE_DESCRIPTOR* fwdesc =
    3.         (BL_FIRMWARE_DESCRIPTOR*)(((UINTN)BootAppParameters) + BootAppParameters->FirmwareParametersOffset);
    4.     EFI_HANDLE ImageHandle = fwdesc->ImageHandle;
    5. EFI_SYSTEM_TABLE* SystemTable = fwdesc->SystemTable;
    6.  
    Только в них как-то странно обстоят дела с выводом на экран - его при попытке вывести, например, строку не видно вообще. И запустить это приложение надо не просто так - либо подписать чем-то, либо отключить подпись для этого пункта загрузки.
    Например, так
    bcdedit.exe /set {MY_GUID} loadoptions DDISABLE_INTEGRITY_CHECKS
    где MY_GUID - гуид корректно добавленной записи типа boot application в windows boot manager.
    У меня пока вышло только заставить запуститься без ругательств со стороны windows boot manager'а.

    Например, вот товарищ сделал такое boot application приложение, только под ARM'овый виндофон https://github.com/imbushuo/boot-shim.git . Там сделано вне edk2, и подписывает к тому же.
    И дискуссия про это http://reboot.pro/index.php?showtopic=17655&page=3 .

    Где еще можно об этом узнать - товарищ Ионеску заикался про какие-то свои курсы, как писать такие приложения, но в доступе нигде не нахожу. Также он вносит вклад в reactos - может, там какие-то следы есть.
     
  7. Entropy

    Entropy Member

    Публикаций:
    0
    Регистрация:
    23 авг 2020
    Сообщения:
    113
    njeen, я об этом с самого начала и толковал,к тому же у этого memtest предположительно имеются хардварные привелегии,глянул туда дизасмом обнаружил команды для отключения кэша процессора
     
  8. KPG

    KPG Member

    Публикаций:
    0
    Регистрация:
    13 янв 2021
    Сообщения:
    47
    Не совсем понял про какую версию Memtest.efi речь, но сам запускал такое приложение под Uefi на Atom буке.
    (входит, вроде, в сборку Strelec)
    Всё красиво выглядит в графике UEFI, но из проявившихся "шероховатостей" - медленное перемещение мыша (клавишами быстрее)
     
  9. Entropy

    Entropy Member

    Публикаций:
    0
    Регистрация:
    23 авг 2020
    Сообщения:
    113
    речь идёт об этом C:\Windows\Boot\EFI\memtest.efi
    --- Сообщение объединено, 27 апр 2021 ---
    файл по пути C:\Windows\Boot\EFI\memtest.efi, в дизассемблере IDA Version 7.0.191002 Freeware
    --- Сообщение объединено, 27 апр 2021 ---
    Windows 7 x64
     

    Вложения:

    • dis.PNG
      dis.PNG
      Размер файла:
      79,7 КБ
      Просмотров:
      27
  10. Entropy

    Entropy Member

    Публикаций:
    0
    Регистрация:
    23 авг 2020
    Сообщения:
    113
    Значица предоставляем себе возможность для запуска Windows boot приложений,за средство диагностики памяти отвечает загрузочная запись {memdiag},путём её модификации предоставим себе такую возможность,модифицировать будем следующим образом:

    1.Определяем раздел где находится приложение

    Код (Text):
    1.  
    2. bcdedit /set {memdiag} device PARTITION=C:
    2.Указываем путь к приложению с подсистемой 0x10

    Код (Text):
    1. bcdedit /set {memdiag} path \Windows\Boot\EFI\memtest.efi
    3.Вносим однократную запись в менеджер загрузок {bootmgr},эта запись будет использована всего 1 раз

    Код (Text):
    1. bcdedit /bootsequence {bootmgr} {memdiag}
    --- Сообщение объединено, 30 апр 2021 ---
    после того как внесли однократную запись перезагружаемся и должно запуститься это приложение,в заголовке должна быть правильная контрольная сумма
     
    q2e74 нравится это.
  11. njeen

    njeen Active Member

    Публикаций:
    0
    Регистрация:
    26 мар 2017
    Сообщения:
    129
    Адрес:
    Ташлинск
    Не выводились сообщения в моем тестовом boot application приложении вот почему. Потому, что boot application запускаются в protected mode, а работа с efi функционалом возможна только в real mode. И , например, чтобы вывести строку в консоль, они переключаются в real mode, дергают efi функции , затем возвращаются обратно.

    Моя догадка была правильной - тов. Ионеску сделал приложение в составе реактоси - аналог bootmgr. Можно даже изучать. https://doxygen.reactos.org/dir_e979f1c4d9aec725da11c29584d02043.html
     
  12. Entropy

    Entropy Member

    Публикаций:
    0
    Регистрация:
    23 авг 2020
    Сообщения:
    113
    но есть системы где efi нет,тогда в этом случаи какое будет у них поведение ?
    --- Сообщение объединено, 2 май 2021 в 12:22 ---
    Мне всё таки удалось запустить boot application,но для этого его пришлось подписать тестовым сертификатом,и проделать вот это

    Код (Text):
    1. bcdedit /set {bootmgr} TESTSIGNING 1
    ну а далее это приложение я расположил в C:\Windows\Boot\EFI\

    разумеется я его назвал memtest.efi
     
    Последнее редактирование: 2 май 2021 в 12:22