In einem Systemaufruf auf Kerneldaten zugreifen

Ein Systemaufruf kann auf Daten zugreifen, auf die der aufrufende Thread nicht zugreifen kann, weil Systemaufrufe in der Kernelschutzdomäne ausgeführt werden.

Im Folgenden sind die allgemeinen Kategorien von Kerneldaten aufgeführt:

  • Die Struktur UBlock oder U-Block (Benutzerblockdaten):

    Systemaufrufe sollten die Kernel-Services verwenden, um Daten zu lesen oder zu ändern, die traditionell in den UBlock -oder UThread -Strukturen gefunden werden. Der Systemaufrufhandler verwendet beispielsweise den Wert des Threadsut_errorFeld, um die threadspezifische Variable Fehlernummer zu aktualisieren, bevor zum Benutzermodus zurückgekehrt wird. Dieses Feld kann mithilfe der Kernel-Services Getufehler und Setuerror gelesen oder festgelegt werden. Die aktuelle Prozess-ID kann mit dem Getpid -Kernel-Service abgerufen werden und die aktuelle Thread-ID mit dem Thread_selbst -Kernel-Service.

  • Globaler Speicher:

    Systemaufrufe können auch auf globalen Speicher wie Kernel-und Kerneldatenregionen zugreifen. Diese Regionen enthalten den Code und die statischen Daten für den Systemaufruf sowie den Rest des Kernels.

  • Der Stack für einen Systemaufruf:

    Eine Systemaufrufroutine wird in einem geschützten Stack ausgeführt, der einem aufrufenden Thread zugeordnet ist. Dadurch kann ein Systemaufruf ordnungsgemäß ausgeführt werden, auch wenn der Stackzeiger auf den aufrufenden Thread ungültig ist. Außerdem können privilegierte Daten im Stack gespeichert werden, ohne dass die Gefahr besteht, dass die Daten dem aufrufenden Thread zugänglich gemacht werden.

Achtung: Falsche Änderung von Feldern in Kernel-oder Benutzerblockstrukturen kann zu unvorhersehbaren Ergebnissen oder Systemabstürzen führen.