www.wikidata.de-de.nina.az
Dieser Artikel oder nachfolgende Abschnitt ist nicht hinreichend mit Belegen beispielsweise Einzelnachweisen ausgestattet Angaben ohne ausreichenden Beleg konnten demnachst entfernt werden Bitte hilf Wikipedia indem du die Angaben recherchierst und gute Belege einfugst Ein Software Interrupt ist ein expliziter Aufruf einer Unterfunktion meist einer Betriebssystem Funktion Er hat nichts mit einem Interrupt asynchrone Unterbrechung zu tun obwohl haufig der gleiche Sprungverteiler Interrupt Tabelle benutzt wird Solche Funktionsaufrufe werden von Programmen mit Hilfe von speziellen architekturabhangigen Befehlen aufgerufen Dazu muss die Nummer fur die benotigte Unterfunktion bekannt sein Diese Nummer wird als Index in einer Sprungtabelle meist Interrupt Vektor Tabelle verwendet die die Startadresse des Unterprogrammes enthalt Inhaltsverzeichnis 1 Mnemonics 2 Hintergrunde 3 Beispiel fur Aufruf Unix Intel i386 4 Behandlung vom Prozessor und Betriebssystem 5 Siehe auch 6 EinzelbelegeMnemonics BearbeitenUbliche Mnemonics sind BKPT Breakpoint bei Motorola 68000 1 INT xxh Interrupt bei Intel 8086 RST p Restart at p bei Zilog Z80 2 SC xxh System Call bei Zilog Z8000 TRAP xh Trap bei Motorola 68000 3 CALL 0005h CP M 80 der Intel 8080 hatte keinen speziellen Befehl dafur Hintergrunde BearbeitenUrsprunglich nur als bequemer und portabler Sprungverteiler MS DOS verwendet man vermied damit versionsabhangige Einsprunge direkt in den Betriebssystem Code z B JSR EDB9 haben diese Funktionsaufrufe bei modernen Betriebssystemen weitere Funktionen bekommen Mit diesen Befehlen sind Context und Task Wechsel moglich die sich mit klassischen Befehlen absichtlich nicht realisieren lassen So lasst sich der INT 21h unter MS DOS auch durch klassische Befehle ca 20 Stuck nachbilden allerdings nicht mehr der INT 80h der zum Aufruf von Betriebssystemfunktionen in Unix Binaries verwendet wird Diese Technik ermoglicht erst geschutzte Betriebssysteme da der Wechsel in den Kontext des Betriebssystems nur an genau definierten Stellen erfolgen kann Beispiel fur Aufruf Unix Intel i386 BearbeitenEs 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 0003 h Funktionnummer fur read int 80 h Interruptaufruf pop edx Zuvor gesicherte Inhalte werden in umgekehrter Reihenfolge vom Stack zuruck in die entsprechenden Register kopiert pop ecx pop ebx cmp eax 124 Werte von 0 0FFFFFF84h sind Ruckgabewerte 123 1 sind negierte Fehlernummern jbe noError neg eax Aus Ruckgabewerten 1 123 werden die Fehlernummern 1 123 mov errno eax Fehler in errno abspeichern mov eax 1 noError ret end procBehandlung vom Prozessor und Betriebssystem BearbeitenDer Befehl INT 80h bewirkt folgendes Da der Sprung uber ein Call Gate geht findet ein Wechsel des Prioritatslevel von 3 User auf 0 Kernel statt dann wird durch den Prozessor vom Userspace Stack auf den Kernelspace Stack umgeschaltet dann das Flagregister gerettet und schliesslich erfolgt ein Sprung zu einer vom Betriebssystem hinterlegten Adresse Die erste Aktion im Kernel ist das Abspeichern und Testen der Argumente Darf der Prozess den Speicherbereich zwischen Buffer und Buffer BufferLength 1 beschreiben wenn nein EFAULT Ist der FileHandle fur diesen Prozess gultig wenn nein EBADF Ist der Speicherbereich zwischen Buffer und Buffer BufferLength 1 im Hauptspeicher Ein ungenugender Test der Argumente war Anfang bis Mitte der 1990er Jahre noch ublich Das Aufrufen von Systemfunktionen mit rein zufalligen Werten reichte aus um Betriebssysteme zu crashen das Testprogramm crashme konnte das eindrucksvoll zeigen Heutzutage ist jedes Betriebssystem um Grossenordnungen resistenter gegen solche Angriffe Mit zufalligen Werten sind keine Angriffe mehr moglich dafur sind ausgefeilte Szenarien notwendig Am Ende hat der Kernel den Funktionsaufruf abgearbeitet und gibt mittels IRET die Kontrolle wieder an das Programm zuruck Der Rucksprung erfolgt wieder uber ein Call Gate Rucksprungadresse vom Stack holen Flagregister rekonstruieren Auf Userspace Stack zuruckschalten Prioritatslevel wieder auf 3 setzenSiehe auch BearbeitenSystemaufrufEinzelbelege Bearbeiten MOTOROLA M68000 FAMILY PROGRAMMER S REFERENCE MANUAL Motorola Inc 1992 Seite 4 53 https www nxp com files static archives doc ref manual M68000PRM pdf Rodnay Zaks PROGRAMMING THE Z80 Sybex Inc 1979 1981 ISBN 0 89588 094 6 Seiten 182 und 417 http www z80 info zip programming the z80 3rd edition pdf MOTOROLA M68000 FAMILY PROGRAMMER S REFERENCE MANUAL Motorola Inc 1992 Seite 4 188 https www nxp com files static archives doc ref manual M68000PRM pdf Abgerufen von https de wikipedia org w index php title Software Interrupt amp oldid 234585001