stringtranslate.com

ntoskrnl.exe

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

Обзор

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

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

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

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


Поскольку не все функции экспортируются ядром, префиксы функций, оканчивающиеся на i или p (например, Mi, Obp, Iop), являются внутренними и не должны быть доступны пользователю. Эти функции содержат основной код и реализуют важные проверки, например на наличие уязвимостей, недостающих аргументов и обработку исключений.

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

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

Когда ядро ​​получает управление, оно получает указатель типа структуры от загрузчика . Назначение указателя содержит информацию об оборудовании, пути к файлу реестра 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, как и несколько других компонентов режима ядра. Эта область также содержит данные, используемые кодом режима ядра, такие как кучи режима ядра и кэш файловой системы.

Реестр

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

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

Драйверы

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

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

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

Примечания

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

Рекомендации

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

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

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