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

SMM EntryPoint

Тема в разделе "WASM.BEGINNERS", создана пользователем HoShiMin, 27 дек 2018.

  1. HoShiMin

    HoShiMin Active Member

    Публикаций:
    0
    Регистрация:
    17 дек 2016
    Сообщения:
    284
    Адрес:
    Россия, Нижний Новгород
    Добрый день форумчанам.
    Интересует возможность исполнять код в обработчике SMI.

    Т.к. домашняя машинка на AMD, работаем по амдшным спекам.
    Код (C++):
    1.  
    2. UINT64 SmmBase = ReadMsr(SMBASE_MSR); // Получили 0xA0000
    3.  
    4. constexpr int SMM_SIZE = 65536;
    5. BYTE Buffer[SMM_SIZE] = {};
    6. ReadPhysicalMemory(SmmBase, Buffer, SMM_SIZE); // Прочитали память по физ. адресу 0xA0000
    7.  
    upload_2018-12-27_20-47-22.png

    По смещению 0x8000, судя по докам, должен быть "SMM Handler", и действительно, по этому
    смещению начинаются некие данные, но это совсем не 16-битный код, как ожидал.

    Дамп:
    upload_2018-12-27_20-45-24.png

    Что это такое?
     
    Последнее редактирование: 27 дек 2018
  2. Коцит

    Коцит Active Member

    Публикаций:
    0
    Регистрация:
    31 янв 2017
    Сообщения:
    133
    видимо база кривая, т.к. A0000h это видеобуфер.
    попробуй подставить интеловскую базу: 30000h.
    судя по докам, у них смещение 8000h такое-же, может и база совпадает.
    и у каждого из процессоров своя база. Вот из третьего тома Intel:

     
  3. HoShiMin

    HoShiMin Active Member

    Публикаций:
    0
    Регистрация:
    17 дек 2016
    Сообщения:
    284
    Адрес:
    Россия, Нижний Новгород
    Попробовал, буфер полностью забит нулями.
    Вряд ли это проблема с базой, ведь SMBASE, прочитанный через MSR, не может быть неверным.
    И сам факт, что в полученном дампе какие-то данные начинаются именно со смещения 0х8000, уже о чём-то говорит.

    На разных ресурсах пишут, что память защищена от записи (как и варианты обхода этой защиты через кэш). Может ли быть, что она защищена и от чтения?
    --- Сообщение объединено, 28 дек 2018 ---
    Upd: действительно, видеопамять. Записал туда 64 килобайта нулей, получилось это:
    upload_2018-12-28_20-36-29.png

    Тогда закономерный вопрос - а что же тогда за адрес в SMBASE, который читаем напрямую из MSR, и почему именно по смещению 0х8000 в этом блоке начинаются какие-то осмысленные данные (именно по этому смещению должен лежать настоящий SmmHandler)
     
    Последнее редактирование: 28 дек 2018
  4. Коцит

    Коцит Active Member

    Публикаций:
    0
    Регистрация:
    31 янв 2017
    Сообщения:
    133
    с рождения ibm, сегмент A000:0000h принадлежит видеобиосу.
    если вы читаете MSR из доса, то дос может легко SMM заточить под себя.

    во-всех регистрах, где есть приставка BASE, младший бит является битом достоверности адреса - он должен быть взведён (если адрес "правильный"), т.е. в вашем случае адрес должен быть A0001h, и младшую единицу вы должны сбрасывать сами.

    могу посоветовать утилиту 'PCIScope' с прицепом 'Read&Write' - первая сканит шину PCI, а вторая кажет из винды все физ.адреса - есть возможность сравнить выхлоп проги с реальными значениями в памяти. но в любом случае база SMM A0000h кривая - если не ошибаюсь, то SMM контроллёр тоже висит на шине pci, и её можно проверить утилитой PCIscope.
     
  5. Коцит

    Коцит Active Member

    Публикаций:
    0
    Регистрация:
    31 янв 2017
    Сообщения:
    133
    попалась статья на хакере "128Кб потусторонней памяти"
    оказывается фишка там есть..
    часть(1): https://xakep.ru/2008/07/29/44663/
    часть(2): https://xakep.ru/2008/08/05/44759/

    в обычном режиме A0000h как-и-положено - это видеобуфер,
    а при переходе в режим SMM, этот-же адрес используется как SMRAM.

    во второй части есть описание PCI-регистра управления доступом к SMRAM,
    который на моём интеле правильно отображает софтина "PCIScope".
    так-что A0000h это не ошибка - сорян..
     
    Mikl___ нравится это.
  6. HoShiMin

    HoShiMin Active Member

    Публикаций:
    0
    Регистрация:
    17 дек 2016
    Сообщения:
    284
    Адрес:
    Россия, Нижний Новгород
    Коцит, спасибо за инфу. Пока другие задачки, к SMM вернусь чуть попозже, о результатах потом отпишусь