Jump to content

ntoskrnl.exe

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 для «Внутренней поддержки процесса»).


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

Благоприятные префиксы NT
Экспорт

Префикс

Внутренний префикс Значение
CcКПК Кэш файловой системы [2]
CmCmp Диспетчер конфигураций, часть реестра 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/NtNt или 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, как и несколько других компонентов режима ядра. Эта область также содержит данные, используемые кодом режима ядра, такие как кучи режима ядра и кэш файловой системы.

Макеты виртуального адресного пространства [9]
Арка МмСамый высокийадрес пользователя МмСистемаДиапазонНачало
х86 [а] 0x7fffffff0x80000000
РУКА
х86-64 0x000007ff'ffffffff0xffff8000'00000000

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

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

Драйверы

[ редактировать ]

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

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

См. также

[ редактировать ]

Примечания

[ редактировать ]
  1. ^ Настраивается через /userva или /3gb выключатель.

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

  1. ^ Руссинович, М: Советы и мелочи по внутреннему устройству системы , Информация о SysInternals
  2. ^ Корпорация Майкрософт (2009 г.). «Процедуры диспетчера кэша» . Корпорация Майкрософт . Проверено 13 июня 2009 г.
  3. ^ Корпорация Майкрософт (2009 г.). «Подпрограммы библиотеки времени выполнения файловой системы» . Корпорация Майкрософт . Проверено 13 июня 2009 г.
  4. ^ Корпорация Майкрософт (2009 г.). «Процедуры диспетчера ввода-вывода» . Корпорация Майкрософт . Проверено 13 июня 2009 г.
  5. ^ Корпорация Майкрософт (2009 г.). «Процедуры поддержки основной библиотеки ядра» . Корпорация Майкрософт . Проверено 13 июня 2009 г.
  6. ^ Корпорация Майкрософт (2009 г.). «Процедуры управления питанием» . Корпорация Майкрософт . Проверено 13 июня 2009 г.
  7. ^ NT Insider (27 августа 2003 г.). «Nt против Zw — устранение путаницы в нативном API» . ОСР онлайн . 10 (4). Ресурсы по открытым системам OSR . Проверено 16 сентября 2013 г.
  8. ^ "структура LOADER_PARAMETER_BLOCK" . www.nirsoft.net .
  9. ^ Перейти обратно: а б Практическое обратное проектирование с использованием X86, X64, Arm, ядра Windows и инструментов реверса . John Wiley & Sons Inc. 2014. ISBN  978-1118787311 .
  10. ^ СиСи Хамид (22 января 2008 г.). «Что такое IRQL и почему это важно? | Спросите в блоге Performance Team» . Корпорация Майкрософт . Проверено 11 ноября 2018 г.
  11. ^ Таненбаум, Эндрю С. (2008). Современные операционные системы (3-е изд.). Река Аппер-Сэддл, Нью-Джерси: Пирсон Прентис Холл. п. 829. ИСБН  978-0136006633 .

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

[ редактировать ]
  • Таненбаум, Эндрю С. (2008). Современные операционные системы (3-е изд.). Река Аппер-Сэддл, Нью-Джерси: Пирсон Прентис Холл . п. 829. ИСБН  978-0136006633 .
  • Брюс Данг; Александр Газе; Элиас Бачаалани (2014). Практическое обратное проектирование: x86, x64, ARM, ядро ​​Windows, инструменты реверса и обфускация . Уайли . п. 384. ИСБН  978-1118787311 .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 98d63dc04f960b8d04d4bbd32fd2168c__1722592560
URL1:https://arc.ask3.ru/arc/aa/98/8c/98d63dc04f960b8d04d4bbd32fd2168c.html
Заголовок, (Title) документа по адресу, URL1:
ntoskrnl.exe - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)