ntoskrnl.exe
Эта статья нуждается в дополнительных цитатах для проверки . ( апрель 2014 г. ) |
ntoskrnl.exe (сокращение от Windows NT операционной системы ядра исполняемого файла ), также известный как образ ядра , содержит ядро и исполнительные уровни ядра Microsoft Windows NT и отвечает за абстракцию оборудования , обработку процессов и управление памятью . Помимо уровня ядра и исполнительного уровня, он содержит диспетчер кэша , монитор безопасности, диспетчер памяти, планировщик (диспетчер) и синий экран смерти (текст и части кода). [1]
Обзор
[ редактировать ]Версии ntoskrnl.exe для x86 зависят от bootvid.dll
, hal.dll
и kdcom.dll
(В 64-разрядных вариантах 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 | |||
Имя файла | Поддерживает МЛАДШАЯ СРЕДНЯЯ ШКОЛА | Поддерживает САЙТ | |
---|---|---|---|
32-битное ядро | |||
ntoskrnl.exe | Нет | Нет | |
ntkrnlmp.exe | Да | Нет | |
ntkrnlpa.exe | Нет | Да | |
ntkrpamp.exe | Да | Да | |
64-битное ядро ( версии x64 ) | |||
Имя файла | Поддерживает МЛАДШАЯ СРЕДНЯЯ ШКОЛА | Поддерживает 57 bit VA | |
ntkrnlmp.exe | Да | Нет | |
ntkrla57.exe | Да | Да |
Архитектура ядра Windows структурирована таким образом, чтобы все было легко понять. Функции и глобальные переменные используют так называемое форматирование Pascal Case со специальными (дополнительными) префиксами в своих именах для различения частей ядра.
Примером являются IoCreateDevice и ObReferenceObjectByHandle . Обе функции имеют разные префиксные имена, позволяющие различать критически важные менеджеры в коде ядра: Io используется для диспетчера ввода-вывода функций , а Ob для диспетчера объектов функций .
Существуют вариации этих префиксов для внутренних функций, которые не экспортируются ядром, например, добавление i после первой буквы (например, Ki
для «Внутреннее ядро») или добавление p к полному префиксу (например, Psp
для «Внутренней поддержки процесса»).
В следующей таблице перечислены все префиксы.
Экспорт Префикс | Внутренний префикс | Значение |
---|---|---|
Cc | КПК | Кэш файловой системы [2] |
Cm | Cmp | Диспетчер конфигураций, часть реестра Windows, работающая в режиме ядра. |
Dbg | ДБГ | Функции помощи при отладке, такие как точка останова программного обеспечения. |
Dbgk | Дбгк | Набор функций отладки, которые доступны в пользовательском режиме через ntdll.dll. |
Ex | Опыт | Исполнительная система Windows, «внешний уровень» Ntoskrnl.exe. |
FsRtl | Фсртлп | Библиотека времени выполнения файловой системы [3] |
Io | ИОП | Менеджер ввода-вывода [4] |
Ke | К | Основные процедуры ядра [5] |
Кх | обработкой прерываний , семафорами, спин-блокировками , многопоточностью и переключением контекста. Функции, связанные с | |
Кс | Потоковая передача ядра | |
Ldr | Лдрп | NT исполняемых файлов PE Загрузчик |
Lpc | Лпкп | Вызов локальной процедуры , внутренний, недокументированный механизм передачи сообщений между процессами или пользователем/ядром. |
Lsa | Лсап | Местный орган безопасности |
Mm | Мне | Управление памятью |
Nls | НЛС | Nls для поддержки родного языка (аналогично кодовым страницам). |
Ob | ОБП | Менеджер объектов |
Po | Поп | Plug-and-play и управление питанием [6] |
Ps | Псп | Управление процессами и потоками (управление задачами) |
Rtl | ртлп | Библиотека времени выполнения , т. е. множество служебных функций, которые могут использоваться собственными приложениями, но не связаны напрямую с поддержкой ядра. |
Se | Сентябрь | Менеджер безопасности, токен доступа для Win32 API |
Vf | Мы | Проверка драйверов |
Zw/Nt | Nt или Zw объявлены ли системные вызовы в ntdll.dll и ntoskrnl.exe . При звонке из ntdll.dll в пользовательском режиме эти группы практически одинаковы; они переходят в режим ядра и вызывают эквивалентную функцию в ntoskrnl.exe через SSDT . При вызове функций непосредственно в ntoskrnl.exe (возможно только в режиме ядра), Zw варианты обеспечивают режим ядра, тогда как Nt вариантов нет. [7] |
Инициализация
[ редактировать ]Когда ядро получает управление, оно получает указатель типа структуры от загрузчика . Назначение указателя содержит информацию об оборудовании, путь к файлу реестра Windows, параметры ядра, содержащие настройки загрузки или параметры, изменяющие поведение ядра, путь к файлам, загружаемым загрузчиком ( SYSTEM
Улей реестра , nls
для преобразования кодировки символов и vga
шрифт). [8] Определение этой структуры можно получить с помощью отладчика ядра или загрузив его из базы данных символов Microsoft. [9] [ нужна страница ]
В архитектуре x86 ядро получает систему уже в защищенном режиме, с готовыми GDT , IDT и TSS . [ нужны дальнейшие объяснения ] Но поскольку он не знает адреса каждого из них, ему приходится загружать их один за другим, чтобы заполнить структуру PCR . [ жаргон ]
Основная точка входа ntoskrnl.exe выполняет некоторую системно-зависимую инициализацию, затем вызывает независимую от системы инициализацию и затем входит в цикл ожидания. [ противоречивый ]
Обработка прерываний
[ редактировать ]Современные операционные системы используют прерывания вместо опроса портов ввода-вывода для ожидания информации от устройств.
В архитектуре x86 прерывания обрабатываются с помощью таблицы диспетчеризации прерываний (IDT). Когда устройство запускает прерывание и флаг прерывания (IF) в регистре FLAGS установлен, аппаратное обеспечение процессора ищет обработчик прерывания в записи таблицы, соответствующей номеру прерывания, который, в свою очередь, был преобразован из 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, как и несколько других компонентов режима ядра. Эта область также содержит данные, используемые кодом режима ядра, такие как кучи режима ядра и кэш файловой системы.
Арка | МмСамый высокийадрес пользователя | МмСистемаДиапазонНачало |
---|---|---|
х86 [а] | 0x7fffffff | 0x80000000 |
РУКА | ||
х86-64 | 0x000007ff'ffffffff | 0xffff8000'00000000 |
Реестр
[ редактировать ]Реестр Windows — это хранилище информации о конфигурации и настройках операционной системы и другого программного обеспечения, например приложений. Его можно рассматривать как файловую систему, оптимизированную для небольших файлов. [11] Однако доступ к нему осуществляется не через семантику файловой системы, а через специализированный набор API, реализованный в режиме ядра и доступный для пользовательского режима.
Реестр хранится на диске в виде нескольких файлов, называемых «ульями». Один из них, системный куст, загружается в начале последовательности загрузки и предоставляет информацию о конфигурации, необходимую в этот момент. Дополнительные кусты реестра, предоставляющие данные, специфичные для программного обеспечения и пользователя, загружаются на более поздних этапах инициализации системы и во время входа пользователя в систему соответственно.
Драйверы
[ редактировать ]Список драйверов, которые будут загружены с диска, извлекается из Services
ключ текущего набора управления ключ в SYSTEM
куст реестра. В этом ключе хранятся драйверы устройств, процессы ядра и пользовательские процессы. Все они вместе называются «сервисами» и хранятся в одном и том же месте.
Во время инициализации или по запросу загрузки драйвера ядро просматривает это дерево в поисках служб, помеченных как службы ядра.
См. также
[ редактировать ]Примечания
[ редактировать ]- ^ Настраивается через
/userva
или/3gb
выключатель.
Как упоминалось в 7-м издании книги «Внутреннее устройство Windows» , опция во время загрузки increaseuserva
и для этой функции требуется соответствующий заголовок в исполняемом образе.
Ссылки
[ редактировать ]- ^ Руссинович, М: Советы и мелочи по внутреннему устройству системы , Информация о SysInternals
- ^ Корпорация Майкрософт (2009 г.). «Процедуры диспетчера кэша» . Корпорация Майкрософт . Проверено 13 июня 2009 г.
- ^ Корпорация Майкрософт (2009 г.). «Подпрограммы библиотеки времени выполнения файловой системы» . Корпорация Майкрософт . Проверено 13 июня 2009 г.
- ^ Корпорация Майкрософт (2009 г.). «Процедуры диспетчера ввода-вывода» . Корпорация Майкрософт . Проверено 13 июня 2009 г.
- ^ Корпорация Майкрософт (2009 г.). «Процедуры поддержки основной библиотеки ядра» . Корпорация Майкрософт . Проверено 13 июня 2009 г.
- ^ Корпорация Майкрософт (2009 г.). «Процедуры управления питанием» . Корпорация Майкрософт . Проверено 13 июня 2009 г.
- ^ NT Insider (27 августа 2003 г.). «Nt против Zw — устранение путаницы в нативном API» . ОСР онлайн . 10 (4). Ресурсы по открытым системам OSR . Проверено 16 сентября 2013 г.
- ^ "структура LOADER_PARAMETER_BLOCK" . www.nirsoft.net .
- ^ Перейти обратно: а б Практическое обратное проектирование с использованием X86, X64, Arm, ядра Windows и инструментов реверса . John Wiley & Sons Inc. 2014. ISBN 978-1118787311 .
- ^ СиСи Хамид (22 января 2008 г.). «Что такое IRQL и почему это важно? | Спросите в блоге Performance Team» . Корпорация Майкрософт . Проверено 11 ноября 2018 г.
- ^ Таненбаум, Эндрю С. (2008). Современные операционные системы (3-е изд.). Река Аппер-Сэддл, Нью-Джерси: Пирсон Прентис Холл. п. 829. ИСБН 978-0136006633 .
Дальнейшее чтение
[ редактировать ]- Таненбаум, Эндрю С. (2008). Современные операционные системы (3-е изд.). Река Аппер-Сэддл, Нью-Джерси: Пирсон Прентис Холл . п. 829. ИСБН 978-0136006633 .
- Брюс Данг; Александр Газе; Элиас Бачаалани (2014). Практическое обратное проектирование: x86, x64, ARM, ядро Windows, инструменты реверса и обфускация . Уайли . п. 384. ИСБН 978-1118787311 .