ntoskrnl.exe

Образ ядра Windows NT

ntoskrnl.exe(сокращение от Windows NT Operating System kernel executable ), также известный как образ ядра , содержит ядро ​​и исполнительные слои ядра Microsoft Windows NT и отвечает за абстракцию оборудования , обработку процессов и управление памятью . В дополнение к ядру и исполнительным слоям он содержит менеджер кэша , монитор ссылок безопасности, менеджер памяти, планировщик (Dispatcher) и синий экран смерти (проза и части кода). [1]

Обзор

x86-версии ntoskrnl.exeзависят от bootvid.dll, hal.dllи kdcom.dll(x64-варианты ntoskrnl.exeимеют эти DLL, встроенные в ядро ​​для повышения производительности). Однако это не собственное приложение , поэтому оно не линковано с ntdll.dll. Вместо этого ntoskrnl.exeимеет собственную точку входа " KiSystemStartup ", которая вызывает архитектурно -независимую функцию инициализации ядра. Поскольку для этого требуется статическая копия объектов среды выполнения C, исполняемый файл обычно имеет размер около 10 МБ.

В Windows XP и более ранних версиях исходный код установки Windows поставляет четыре файла образа ядра для поддержки однопроцессорных систем , симметричных многопроцессорных (SMP) систем, ЦП с PAE и ЦП без PAE. Программа установки Windows решает, является ли система однопроцессорной или многопроцессорной, затем устанавливает как PAE, так и не-PAE варианты образа ядра для определенного типа. В многопроцессорной системе программа установки устанавливает ntkrnlmp.exeи , ntkrpamp.exeно переименовывает их в ntoskrnl.exeи ntkrnlpa.exeсоответственно.

Начиная с Windows Vista, Microsoft начала унифицировать образы ядра, поскольку на рынке появились многоядерные процессоры , а PAE стал обязательным.

Имена файлов образа ядра
32-битная Windows
Имя файлаПоддерживает
СМП
Поддерживает
PAE
32-битное ядро
ntoskrnl.exeНетНет
ntkrnlmp.exeДаНет
ntkrnlpa.exeНетДа
ntkrpamp.exeДаДа
64-битное ядро ​​( редакции x64 )
Имя файлаПоддерживает
СМП
Поддерживает
57-битную VA
ntkrnlmp.exeДаНет
ntkrla57.exeДаДа


Архитектура ядра Windows структурирована таким образом, чтобы все было легко понять [ необходимо разъяснение ] . Функции и глобальные переменные используют так называемое форматирование Pascal Case со специальными (дополнительными) префиксами в своих именах для различения частей ядра.

Примером являются IoCreateDevice и ObReferenceObjectByHandle . Обе функции имеют разные имена префиксов для различения критических менеджеров в коде ядра: Io используется для функций менеджера ввода-вывода, а Ob — для функций менеджера объектов .

Существуют вариации этих префиксов для внутренних функций, которые не экспортируются ядром, например, добавление i после первой буквы (например, Kiдля «Kernel Internal») или добавление p к полному префиксу (например, Pspдля «Process Support Internal»).


В следующей таблице перечислены все префиксы.

Благоприятные префиксы NT
Экспортировать
префикс
Внутренний префиксЗначение
CcКкпКэш файловой системы [2]
CmКмпДиспетчер конфигурации, часть режима ядра реестра Windows
DbgДбгФункции отладки, такие как программная точка останова
DbgkДбгкНабор функций отладки, которые доступны в пользовательском режиме через ntdll.dll
ExЭкспИсполнительный компонент Windows, «внешний слой»ntoskrnl.exe
FsRtlFsRtlpБиблиотека времени выполнения файловой системы [3]
IoИопМенеджер ввода-вывода [4]
KeКиОсновные процедуры ядра [5]
КхОбработка прерываний , семафоры, спин-блокировки , многопоточность и функции, связанные с переключением контекста
КсПотоковая передача ядра
LdrЛдрпЗагрузчик исполняемых файлов PE для NT
LpcЛпцпЛокальный вызов процедур — внутренний, недокументированный, межпроцессный или механизм передачи сообщений между пользователем и ядром.
LsaЛсапМестный орган безопасности
MmМиУправление памятью
NlsНлсNls для поддержки родного языка (аналогично кодовым страницам).
ObОбпМенеджер объектов
PoПопPlug-and-play и управление питанием [6]
PsПСПУправление процессами и потоками (управление задачами)
RtlРтлпБиблиотека времени выполнения , т. е. множество служебных функций, которые могут использоваться собственными приложениями, но не требуют прямой поддержки ядра.
SeсенSecurity Manager, токен доступа для Win32 API
VfВиДрайвер-верификатор
Zw/NtNtили Zwсистемные вызовы, объявленные в ntdll.dllи ntoskrnl.exe. При вызове из ntdll.dllв пользовательском режиме эти группы почти одинаковы; они переходят в режим ядра и вызывают эквивалентную функцию в ntoskrnl.exeчерез SSDT . При вызове функций напрямую в ntoskrnl.exe(возможно только в режиме ядра) Zwварианты обеспечивают режим ядра, тогда как Ntварианты — нет. [7]

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

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

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

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

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

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

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

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

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

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

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

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

Макеты виртуального адресного пространства [9]
АркаMmHighestUserAddressMmSystemRangeStart
x86 [а]0x7fffffff0x80000000
РУКА
x86-640x000007ff'ffffffff(до Windows 8.1 Update 2)
0x00007fff'ffffffff(начиная с Windows 8.1 Update 3)
0xffff8000'00000000

Реестр

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

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

Драйверы

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

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

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

Примечания

  1. ^ Настраивается с помощью переключателя /uservaили /3gb.

increaseuservaКак упоминалось в книге «Внутреннее устройство Windows», 7-е издание, для этой функции требуются параметр загрузки и соответствующий заголовок в исполняемом образе.

Ссылки

  1. ^ Руссинович, М.: Советы и мелочи по внутренним системам систем, SysInternals Information
  2. ^ Корпорация Microsoft (2009). "Процедуры диспетчера кэша". Корпорация Microsoft . Получено 13 июня 2009 г.
  3. ^ Корпорация Microsoft (2009). "Процедуры библиотеки времени выполнения файловой системы". Корпорация Microsoft . Получено 13 июня 2009 г.
  4. ^ Корпорация Microsoft (2009). "Процедуры диспетчера ввода-вывода". Корпорация Microsoft . Получено 13 июня 2009 г.
  5. ^ Корпорация Microsoft (2009). "Процедуры поддержки библиотеки ядра ядра". Корпорация Microsoft . Получено 13 июня 2009 г.
  6. ^ Корпорация Microsoft (2009). "Процедуры диспетчера питания". Корпорация Microsoft . Получено 13 июня 2009 г.
  7. The NT Insider (27 августа 2003 г.). «Nt против Zw — устранение путаницы в собственном API». OSR Online . 10 (4). Ресурсы OSR Open Systems . Получено 16.09.2013 .
  8. ^ "struct LOADER_PARAMETER_BLOCK". www.nirsoft.net .
  9. ^ ab Практическое обратное проектирование с использованием X86, X64, Arm, ядра Windows и инструментов обратного проектирования . John Wiley & Sons Inc. 2014. ISBN 978-1118787311.
  10. ^ CC Hameed (22 января 2008 г.). «Что такое IRQL и почему он важен? | Задайте вопрос в блоге Performance Team». Microsoft Corporation . Получено 11 ноября 2018 г.
  11. ^ Таненбаум, Эндрю С. (2008). Современные операционные системы (3-е изд.). Upper Saddle River, NJ: Pearson Prentice Hall. стр. 829. ISBN 978-0136006633.

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

  • Таненбаум, Эндрю С. (2008). Современные операционные системы (3-е изд.). Аппер Сэдл Ривер, Нью-Джерси: Pearson Prentice Hall . стр. 829. ISBN 978-0136006633.
  • Брюс Данг; Александр Газет; Элиас Бачаалани (2014). Практическая обратная инженерия: x86, x64, ARM, ядро ​​Windows, инструменты обратной разработки и запутывание . Wiley . стр. 384. ISBN 978-1118787311.
  • Внутри ядра Windows Vista (журнал TechNet)
  • структура LOADER_PARAMETER_BLOCK
  • Разработка драйверов. Часть 1: Введение в драйверы
Retrieved from "https://en.wikipedia.org/w/index.php?title=Ntoskrnl.exe&oldid=1265217890"