ntoskrnl.exe - ntoskrnl.exe

При вычислении ntoskrnl.exe (сокращение от исполняемого файла ядра операционной системы Windows NT ), также известный как образ ядра , предоставляет ядро ​​и исполнительные уровни пространства ядра Microsoft Windows NT и отвечает за различные системные службы, такие как абстракция оборудования , процесс и управление памятью , что делает его фундаментальной частью системы. Он содержит диспетчер кеша , исполнительную систему, ядро, контрольный монитор безопасности, диспетчер памяти и планировщик (диспетчер).

Обзор

Этот системный двоичный файл не является собственным приложением (в том смысле, что он не связан с ним ntdll.dll), вместо этого он содержит стандартную «начальную» точку входа , функцию, которая вызывает архитектурно- независимую функцию инициализации ядра. Хотя ntoskrnl.exe не связан ntdll.dll, он связан с bootvid.dll, hal.dllи kdcom.dll. Поскольку для этого требуется статическая копия объектов среды выполнения C, от которых он зависит, размер исполняемого файла обычно составляет около 2 МБ.

Всего существует четыре файла образа ядра для каждой версии Windows и два файла образа ядра для каждой системы Windows. Многопроцессорные или однопроцессорные файлы выбираются во время установки, а файлы PAE или не-PAE выбираются с помощью boot.ini или опции BCD в соответствии с функциями процессора .

Имена файлов образа ядра
Имя файла Поддерживает
SMP
Поддерживает
PAE
ntoskrnl.exe Нет Нет
ntkrnlmp.exe да Нет
ntkrnlpa.exe Нет да
ntkrpamp.exe да да

Подпрограммы в ntoskrnl используют префиксы в своих именах, чтобы указать, в каком компоненте ntoskrnl они определены. В следующей таблице перечислены некоторые из них.

Префиксы функций NT
Приставка Имея в виду
Копия Кеш файловой системы
См Configuration Manager, часть реестра Windows, относящаяся к режиму ядра.
CSR функции, используемые для взаимодействия с процессом подсистемы Win32, csrss.exe (csrss означает подсистему времени выполнения клиент / сервер)
Dbg вспомогательные функции отладки, такие как точка останова программного обеспечения
Бывший Исполнительная система Windows, "внешний слой" Ntoskrnl.exe
Опыт Частный исполнитель Windows: подпрограммы в пределах исполнительного уровня, которые не экспортируются для вызова за пределы исполнительного (p = частный)
FsRtl библиотека времени выполнения файловой системы
Ио Менеджер ввода / вывода
Ke основные процедуры ядра
Ki подпрограммы в ядре, которые не экспортируются для вызова извне ядра (я = внутренний)
Ks потоковая передача ядра
Ldr функции загрузчика для работы с PE-файлами
Lpc Локальный вызов процедур , внутренний, недокументированный, межпроцессный механизм или механизм передачи сообщений пользователя / ядра
Lsa Местный орган безопасности
Ми подпрограммы управления памятью не экспортируются для вызова вне диспетчера памяти (i = внутренняя)
Мм управление памятью
Nls Nls для поддержки родного языка (аналогично кодовым страницам).
Обь Диспетчер объектов
Pfx Pfx для обработки префиксов.
По Plug-and-play и управление питанием
Ps Управление процессами и потоками
RTL Библиотека времени исполнения. Это включает в себя множество служебных функций, которые могут использоваться собственными приложениями, но не связаны напрямую с поддержкой ядра.
Rtlp Внутренние процедуры библиотеки времени выполнения, которые не экспортируются из ядра.
Se безопасность
Vf Средство проверки драйверов
Vi Подпрограммы проверки драйверов не экспортируются для вызова вне средства проверки драйверов
Zw Nt или Zw - это системные вызовы, объявленные в ntdll.dll и ntoskrnl.exe. При вызове из ntdll.dll в пользовательском режиме эти группы почти одинаковы; они переходят в режим ядра и вызывают эквивалентную функцию в ntoskrnl.exe через SSDT. При вызове функций непосредственно в ntoskrnl.exe (возможно только в режиме ядра) варианты Zw обеспечивают режим ядра, а варианты Nt - нет.

Инициализация

Когда ядро ​​получает управление, оно получает указатель на структуру в качестве параметра. Эта структура передается загрузчиком и содержит информацию об оборудовании, путь к файлу реестра, параметры ядра, содержащие настройки загрузки или параметры, которые изменяют поведение ядра, путь к файлам, загружаемым загрузчиком ( SYSTEM куст реестра , nls для преобразование кодировки символов и шрифт vga). Определение этой структуры можно получить, используя отладчик ядра или загрузив его из базы данных символов Microsoft.

В архитектуре x86 ядро получает систему уже в защищенном режиме с готовыми GDT , IDT и TSS . Но поскольку он не знает адреса каждого из них, он должен загружать их один за другим, чтобы заполнить структуру PCR .

Основная точка входа ntoskrnl.exe выполняет некоторую системно-зависимую инициализацию, затем вызывает системно-независимую инициализацию, а затем входит в цикл ожидания.

Обработка прерываний

Современные операционные системы используют прерывания вместо опроса портов ввода-вывода для ожидания информации от устройств.

В архитектуре x86 прерывания обрабатываются с помощью таблицы диспетчеризации прерываний (IDT). Когда устройство вызывает прерывание и на флаг прерывания (IF) в регистре флагов установлено, аппаратные внешний вид процессора для прерывания обработчика в записи таблицы , соответствующей прерывания номер , на который , в свою очередь , был переведен с IRQ по ПОС чипов, или в более современном оборудовании APIC . Обработчики прерываний обычно сохраняют некоторое подмножество состояний регистров перед обработкой и восстанавливают их до исходных значений по завершении.

Таблица прерываний содержит обработчики аппаратных прерываний, программных прерываний и исключений. Для некоторых версий ядра IA-32 одним из примеров такого обработчика программных прерываний (которых много) является запись 2E 16 таблицы IDT ( шестнадцатеричная ; 46 в десятичной ), используемая на языке ассемблера как INT 2EHдля системных вызовов . В реальной реализации точки входа на внутреннюю подпрограмму по имени (в соответствии с символьной информации , опубликованной Microsoft) KiSystemService. Для более новых версий вместо этого используются другие механизмы, использующие SYSENTER инструкции и инструкции x86-64 SYSCALL .

Одна примечательная особенность обработки прерываний NT заключается в том, что прерывания обычно условно маскируются на основе их приоритета (называемого «IRQL»), вместо того, чтобы отключать все IRQ с помощью флага прерывания. Это позволяет различным компонентам ядра выполнять критические операции, не обязательно блокируя службы периферийных устройств и других устройств.

Менеджер памяти

Microsoft Windows делит виртуальное адресное пространство на две области. Нижняя часть, начиная с нуля, создается отдельно для каждого процесса и доступна как из режима пользователя, так и из режима ядра. Прикладные программы выполняются в процессах и предоставляют код, работающий в пользовательском режиме. Верхняя часть доступна только из режима ядра и, за некоторыми исключениями, создается только один раз в масштабе всей системы. Ntoskrnl.exe отображается в этой области, как и несколько других компонентов режима ядра. Эта область также содержит данные, используемые кодом режима ядра, такие как кучи режима ядра и кеш файловой системы.

Начало и конец сегментов по праву доступа
Арка MmHighestUserAddress MmSystemRangeStart
x86 0x7fffffff 0x80000000
РУКА 0x7fffffff 0x80000000
x86-64 0x000007ff'ffffffff 0xffff8000'00000000

Весь диапазон адресов физической памяти (ОЗУ) разбит на множество небольших (обычно 4 КБ) блоков. Некоторые свойства каждого блока хранятся в структурах, называемых записями таблицы страниц , которые управляются ОС и доступны для аппаратного обеспечения процессора. Таблицы страниц организованы в древовидную структуру, а физический номер страницы таблицы верхнего уровня хранится в регистре управления 3 (CR3).

Реестр

Реестр Windows - это хранилище информации о конфигурации и настройках операционной системы и другого программного обеспечения, например приложений. Его можно рассматривать как файловую систему, оптимизированную для небольших файлов. Однако доступ к нему осуществляется не через семантику, подобную файловой системе, а через специализированный набор API, реализованных в режиме ядра и доступных для пользовательского режима.

Реестр хранится на диске в виде нескольких разных файлов, называемых «кустами». Один из них, куст System, загружается в начале последовательности загрузки и предоставляет информацию о конфигурации, необходимую на тот момент. Дополнительные кусты реестра, содержащие данные, относящиеся к программному обеспечению и пользователю, загружаются на более поздних этапах инициализации системы и при входе пользователя в систему соответственно.

Драйверы

Список драйверов, которые должны быть загружены с диска, извлекается из Servicesключа ключа текущего набора элементов управления в SYSTEMкусте реестра. В этом ключе хранятся драйверы устройств, процессы ядра и пользовательские процессы. Все они вместе называются «услугами» и все хранятся в одном месте.

Во время инициализации или при запросе загрузки драйвера ядро ​​просматривает это дерево в поисках служб, помеченных как службы ядра.

Смотрите также

Примечания

использованная литература

дальнейшее чтение

  • Таненбаум, Эндрю С. (2008). Современные операционные системы (3-е изд.). Река Аппер Сэдл, штат Нью-Джерси: Pearson Prentice Hall . п. 829. ISBN 978-0136006633.
  • Брюс Данг; Александр Газет; Элиас Бачаалани (2014). Практический обратный инжиниринг: x86, x64, ARM, ядро ​​Windows, инструменты реверсирования и обфускация . Вайли . п. 384. ISBN 978-1118787311.

внешние ссылки