Подключение Диспетчера ядра Windows для системных вызовов - PullRequest
0 голосов
/ 28 октября 2018

Я пытаюсь перехватить SYSENTER функцию отправки из ядра, и в течение последних нескольких дней я изучал, что происходит, когда программа выполняет SYSENTER и хочет войти в ядро, тогда я понял IA32_SYSENTER_EIP и IA32_SYSENTER_ESP ответственны за установку ядра RIP и RSP после SYSENTER.

Вчера я прочитал Руководства Intel для разработчиков ПО по поводу SWAPGS:

Обмен SWAPGSтекущее значение базового регистра GS со значением, содержащимся в адресе MSR C0000102H (IA32_KERNEL_GS_BASE).Инструкция SWAPGS является привилегированной инструкцией, предназначенной для использования системным программным обеспечением.

При использовании SYSCALL для реализации системных вызовов в точке входа ОС отсутствует стек ядра.Также не существует простого метода для получения указателя на структуры ядра, из которого можно прочитать указатель стека ядра.Таким образом, ядро ​​не может сохранять регистры общего назначения или справочную память.

Из второго абзаца there is no kernel stack at the OS entry point кажется, что ядро ​​ОС выполняет SWAPGS, чтобы установить GS, а затем получить стек ядрауказатель, но, как я читал, в SYSENTER ядре RIP (EIP) и RSP (ESP) должны быть установлены из IA32_SYSENTER_EIP и IA32_SYSENTER_ESP, поэтому ядро ​​имеет свой указатель стека в IA32_SYSENTER_ESP!

MyВопросы:

  1. Если адрес стека ядра должен исходить от GS, тогда какова цель IA32_SYSENTER_ESP?
  2. В чем различия между AMD LSTAR (0xC0000082) и IA32_SYSENTER_EIP?Я спрашиваю об этом, потому что видел, что Windows установил 0xc0000082 на моем процессоре Intel.
  3. Есть ли какая-то особая проблема с перехватом ядра диспетчера SYSENTER? Это потому, что всякий раз, когда я ставлю точку останова в функции Windows, которая отвечает за диспетчеризацию вызовов SYSENTER (KiSystemCall64Shadow)) на удаленной машине отладки (не виртуальной машины), затем он вызывает BSOD с UNEXPECTED_KERNEL_MODE_TRAP.
...