ntoskrnl.exe - ntoskrnl.exe
In Computing stellt ntoskrnl.exe (kurz für Windows NT Betriebssystem Kernel Executable ), auch bekannt als Kernel Image , die Kernel- und Ausführungsschichten des Microsoft Windows NT Kernelraums bereit und ist für verschiedene Systemdienste wie Hardwareabstraktion , Prozess- und Speicherverwaltung und ist damit ein grundlegender Bestandteil des Systems. Es enthält den Cache- Manager, die Exekutive, den Kernel, den Sicherheitsreferenzmonitor, den Speichermanager und den Scheduler (Dispatcher).
Überblick
Diese System-Binärdatei ist keine native Anwendung (insofern sie nicht mit verknüpft ist ntdll.dll
), sondern enthält einen eigenen Standard- Startpunkt , eine Funktion, die die architekturunabhängige Kernel-Initialisierungsfunktion aufruft . Während ntoskrnl.exe gegen nicht verbunden ist ntdll.dll
, wird es verknüpft gegen bootvid.dll
, hal.dll
und kdcom.dll
. Da es eine statische Kopie der C-Runtime-Objekte erfordert, von denen es abhängt, ist die ausführbare Datei normalerweise etwa 2 MB groß.
Insgesamt gibt es vier Kernel-Image-Dateien für jede Revision von Windows und zwei Kernel-Image-Dateien für jedes Windows-System. Multiprozessor- oder Uniprozessor- Dateien werden bei der Installation ausgewählt, und PAE- oder Nicht-PAE-Dateien werden durch die boot.ini- oder BCD-Option entsprechend den Prozessorfunktionen ausgewählt .
Dateiname | Unterstützt SMP |
Unterstützt PAE |
---|---|---|
ntoskrnl.exe
|
Nein | Nein |
ntkrnlmp.exe
|
Jawohl | Nein |
ntkrnlpa.exe
|
Nein | Jawohl |
ntkrpamp.exe
|
Jawohl | Jawohl |
Routinen in ntoskrnl verwenden Präfixe für ihre Namen, um anzugeben, in welcher Komponente von ntoskrnl sie definiert sind. In der folgenden Tabelle sind einige davon aufgeführt.
Präfix | Bedeutung |
---|---|
CC | Dateisystem-Cache |
Cm | Configuration Manager, die Kernelmodusseite der Windows-Registrierung |
Csr | Funktionen zur Kommunikation mit dem Win32-Subsystemprozess csrss.exe (csrss steht für Client/Server Runtime Subsystem) |
Dbg | Debugging-Hilfsfunktionen, wie z. B. ein Software-Breakpoint |
Ex | Windows-Executive, eine "äußere Schicht" von Ntoskrnl.exe |
Exp | Windows-Chef privat: Routinen innerhalb der Chefetage, die nicht für Anrufe außerhalb des Chefs exportiert werden (p = privat) |
FsRtl | Dateisystem-Laufzeitbibliothek |
Io | I/O-Manager |
Ke | Kernel-Routinen |
Ki | Routinen im Kernel, die nicht für den Aufruf von außerhalb des Kernels exportiert werden (i = intern) |
Ks | Kernel-Streaming |
Ldr | Loader-Funktionen für die Handhabung von PE-Dateien |
Lpc | Local Procedure Call , ein interner, undokumentierter, Interprozess- oder Benutzer-/Kernel-Nachrichtenweitergabemechanismus |
Lsa | Lokale Sicherheitsbehörde |
Mi | Speicherverwaltungsroutinen nicht für Aufruf außerhalb des Speichermanagers exportiert (i = intern) |
Mm | Speicherverwaltung |
nl | Nls für Native Language Support (ähnlich wie Codepages). |
Ob | Objektmanager |
Pfx | Pfx für die Handhabung von Präfixen. |
Po | Plug-and-Play und Energieverwaltung |
PS | Prozess- und Thread-Management |
Rtl | Laufzeitbibliothek. Dies umfasst viele Dienstprogrammfunktionen, die von nativen Anwendungen verwendet werden können, jedoch nicht direkt die Kernel-Unterstützung betreffen |
Rtlp | Interne Routinen der Laufzeitbibliothek, die nicht exportiert werden, bilden den Kernel. |
Se | Sicherheit |
Vf | Treiberüberprüfung |
Vi | Treiberüberprüfungsroutinen werden nicht für einen Aufruf außerhalb der Treiberüberprüfung exportiert |
Zw | Nt oder Zw sind Systemaufrufe, die in ntdll.dll und ntoskrnl.exe deklariert sind. Beim Aufruf von ntdll.dll im Benutzermodus sind diese Gruppen fast identisch; sie fallen in den Kernel-Modus und rufen die entsprechende Funktion in ntoskrnl.exe über das SSDT auf. Beim direkten Aufruf der Funktionen in ntoskrnl.exe (nur im Kernel-Modus möglich) stellen die Zw-Varianten den Kernel-Modus sicher, die Nt-Varianten dies nicht. |
Initialisierung
Wenn der Kernel die Kontrolle erhält, erhält er als Parameter einen Zeiger auf eine Struktur. Diese Struktur wird vom Bootloader übergeben und enthält Informationen über die Hardware, den Pfad zur Registrierungsdatei , Kernelparameter mit Booteinstellungen oder Optionen, die das Verhalten des Kernels ändern, Pfad der vom Bootloader geladenen Dateien ( SYSTEM
Registry hive , nls for Konvertierung der Zeichenkodierung und VGA-Schrift). Die Definition dieser Struktur kann mit dem Kernel-Debugger abgerufen oder aus der Microsoft-Symboldatenbank heruntergeladen werden.
In der x86-Architektur erhält der Kernel das System bereits im geschützten Modus, mit GDT , IDT und TSS bereit. Da es jedoch die Adresse jedes einzelnen nicht kennt, muss es sie einzeln laden, um die PCR- Struktur zu füllen .
Der Haupteintrittspunkt von ntoskrnl.exe führt eine systemabhängige Initialisierung durch, ruft dann eine systemunabhängige Initialisierung auf und tritt dann in eine Leerlaufschleife ein.
Unterbrechungsbehandlung
Moderne Betriebssysteme verwenden Interrupts anstelle von I/O-Port-Polling, um auf Informationen von Geräten zu warten.
In der x86-Architektur werden Interrupts über die Interrupt Dispatch Table (IDT) behandelt. Wenn ein Gerät einen Interrupt auslöst und das Interrupt-Flag (IF) im FLAGS-Register gesetzt ist, sucht die Hardware des Prozessors nach einem Interrupt-Handler im Tabelleneintrag, der der Interrupt-Nummer entspricht, in die wiederum von PIC- Chips aus IRQ übersetzt wurde. oder in moderneren Hardwares, APIC . Interrupt-Handler speichern normalerweise eine Teilmenge des Zustands von Registern, bevor sie sie verarbeiten, und stellen sie anschließend auf ihre ursprünglichen Werte zurück.
Die Interrupt-Tabelle enthält Handler für Hardware-Interrupts, Software-Interrupts und Ausnahmen. Bei einigen IA-32- Versionen des Kernels befindet sich ein Beispiel für einen solchen Software-Interrupt-Handler (von dem es viele gibt) in seinem IDT-Tabelleneintrag 2E 16 ( hexadezimal ; 46 in dezimal ), der in Assembler wie INT 2EH
für Systemaufrufe verwendet wird . In der realen Implementierung zeigt der Einstieg auf eine interne Unterroutine namens (gemäß den von Microsoft veröffentlichten Symbolinformationen ) KiSystemService
. Für neuere Versionen werden stattdessen unterschiedliche Mechanismen verwendet, die SYSENTER
Instruktionen und in x86-64- SYSCALL
Instruktionen verwenden.
Ein bemerkenswertes Merkmal der Interrupt-Behandlung von NT besteht darin, dass Interrupts normalerweise basierend auf ihrer Priorität (genannt "IRQL") bedingt maskiert werden, anstatt alle IRQs über das Interrupt-Flag zu deaktivieren. Dadurch können verschiedene Kernelkomponenten kritische Operationen ausführen, ohne notwendigerweise Dienste von Peripheriegeräten und anderen Geräten zu blockieren.
Speichermanager
Microsoft Windows unterteilt den virtuellen Adressraum in zwei Regionen. Der untere Teil, beginnend bei Null, wird für jeden Prozess separat instanziiert und ist sowohl im Benutzer- als auch im Kernelmodus zugänglich. Anwendungsprogramme werden in Prozessen ausgeführt und liefern Code, der im Benutzermodus ausgeführt wird. Der obere Teil ist nur aus dem Kernel-Modus zugänglich und wird mit einigen Ausnahmen nur einmal systemweit instanziiert. Ntoskrnl.exe ist dieser Region zugeordnet, ebenso wie mehrere andere Kernelmoduskomponenten. Dieser Bereich enthält auch Daten, die vom Kernelmodus-Code verwendet werden, wie z. B. die Kernelmodus-Heapspeicher und den Dateisystem-Cache.
Bogen | MmHöchsteBenutzeradresse | MmSystemRangeStart |
---|---|---|
x86 | 0x7fffffff |
0x80000000
|
ARM | 0x7fffffff |
0x80000000
|
x86-64 | 0x000007ff'ffffffff |
0xffff8000'00000000
|
Der gesamte Adressbereich des physischen Speichers (RAM) ist in viele kleine (normalerweise 4 KB) Blöcke unterteilt. Einige der Eigenschaften jedes Blocks werden in Strukturen gespeichert, die als Seitentabelleneinträge bezeichnet werden , die vom Betriebssystem verwaltet werden und auf die von der Hardware des Prozessors zugegriffen wird. Seitentabellen sind in einer Baumstruktur organisiert, und die physikalische Seitennummer der Tabelle der obersten Ebene wird im Steuerregister 3 (CR3) gespeichert.
Registrierung
Die Windows-Registrierung ist ein Repository für Konfigurations- und Einstellungsinformationen für das Betriebssystem und für andere Software, z. B. Anwendungen. Man kann es sich als ein für kleine Dateien optimiertes Dateisystem vorstellen. Der Zugriff erfolgt jedoch nicht über eine dateisystemähnliche Semantik, sondern über einen spezialisierten Satz von APIs, die im Kernelmodus implementiert und dem Benutzermodus ausgesetzt sind.
Die Registrierung wird auf der Festplatte als mehrere verschiedene Dateien gespeichert, die als "Hives" bezeichnet werden. Eine, die Systemstruktur, wird früh in der Startsequenz geladen und stellt zu diesem Zeitpunkt erforderliche Konfigurationsinformationen bereit. Zusätzliche Registrierungsstrukturen, die softwarespezifische und benutzerspezifische Daten bereitstellen, werden in späteren Phasen der Systeminitialisierung bzw. während der Benutzeranmeldung geladen.
Treiber
Die Liste der von der Diskette zu ladenden Treiber wird aus dem Services
Schlüssel des Schlüssels des aktuellen Kontrollsatzes in der SYSTEM
Registrierungsstruktur abgerufen . Dieser Schlüssel speichert Gerätetreiber, Kernelprozesse und Benutzerprozesse. Sie werden alle zusammen "Dienste" genannt und werden alle gemischt am selben Ort gespeichert.
Während der Initialisierung oder bei einer Treiberladeanforderung durchquert der Kernel diesen Baum auf der Suche nach Diensten, die als Kerneldienste gekennzeichnet sind.
Siehe auch
Anmerkungen
Verweise
Weiterlesen
- Tanenbaum, Andrew S. (2008). Moderne Betriebssysteme (3. Aufl.). Upper Saddle River, NJ: Pearson Prentice Hall . P. 829. ISBN 978-0136006633.
- Bruce Dang; Alexandre Gazet; Elias Bachaalany (2014). Praktisches Reverse Engineering: x86, x64, ARM, Windows Kernel, Reversing Tools und Obfuscation . Wiley . P. 384. ISBN 978-1118787311.