Software-InterruptEin Software-Interrupt ist ein expliziter Aufruf einer Unterfunktion (meist einer Betriebssystem-Funktion).[1] Er hat nichts mit einem Interrupt (asynchrone Unterbrechung) zu tun, obwohl häufig der gleiche Sprungverteiler (Interrupt-Tabelle) benutzt wird. Solche Funktionsaufrufe werden von Programmen mit Hilfe von speziellen architekturabhängigen Befehlen aufgerufen. Dazu muss die Nummer für die benötigte Unterfunktion bekannt sein. Diese Nummer wird als Index in einer Sprungtabelle (meist Interrupt-Vektor-Tabelle) verwendet, die die Startadresse des Unterprogrammes enthält. MnemonicsÜbliche Mnemonics sind:
HintergründeUrsprünglich nur als bequemer und portabler Sprungverteiler (MS-DOS) verwendet – man vermied damit versionsabhängige Einsprünge direkt in den Betriebssystem-Code (z. B. Diese Technik ermöglicht erst geschützte Betriebssysteme, da der Wechsel in den Kontext des Betriebssystems nur an genau definierten Stellen erfolgen kann. Beispiel für Aufruf (Unix, Intel i386)Es soll die POSIX-Funktion read (Lesen von Daten von einem Filehandle in den Speicher) implementiert werden: read ( int FileHandle, void* Buffer, unsigned int BufferLength ) ;
Die (Minimal-)Implementierung (in der libc) sieht dann so aus: ; Intel-Syntax: Instruktion Ziel Quelle
read proc
push ebx ; Sichern des Inhalts des Registers ebx auf den Stack
push ecx ; Sichern des Inhalts des Registers ecx auf den Stack
push edx ; Sichern des Inhalts des Registers edx auf den Stack
mov ebx, [esp+16] ; FileHandle
mov ecx, [esp+20] ; Buffer
mov edx, [esp+24] ; BufferLength
mov eax, 0003h ; Funktionnummer für read
int 80h ; Interruptaufruf
pop edx ; Zuvor gesicherte Inhalte werden in umgekehrter Reihenfolge vom Stack
; zurück in die entsprechenden Register kopiert
pop ecx
pop ebx
cmp eax, -124 ; Werte von 0...0FFFFFF84h sind Rückgabewerte, -123...-1 sind (negierte) Fehlernummern
jbe .noError
neg eax ; Aus Rückgabewerten -1...-123 werden die Fehlernummern 1...123
mov __errno, eax ; Fehler in errno abspeichern
mov eax, -1
.noError:
ret
end proc
Behandlung vom Prozessor und BetriebssystemDer Befehl
Die erste Aktion im Kernel ist das Abspeichern und Testen der Argumente:
Ein ungenügender Test der Argumente war Anfang bis Mitte der 1990er Jahre noch üblich. Das Aufrufen von Systemfunktionen mit rein zufälligen Werten reichte aus, um Betriebssysteme zu „crashen“, das Testprogramm crashme konnte das eindrucksvoll zeigen. Heutzutage ist jedes Betriebssystem um Größenordnungen resistenter gegen solche Angriffe. Mit zufälligen Werten sind keine Angriffe mehr möglich, dafür sind ausgefeilte Szenarien notwendig. Am Ende hat der Kernel den Funktionsaufruf abgearbeitet und gibt mittels
Siehe auchEinzelbelege
|
Portal di Ensiklopedia Dunia