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 они определены. В следующей таблице перечислены некоторые из них.
Приставка | Имея в виду |
---|---|
Копия | Кеш файловой системы |
См | 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.