Abstürze in ASM
-
Was passiert eigentlich bei/vor einem Absturz (in Assembler)? Greift da das Betriebssystem auf einen falschen Speicherbereich zu oder wird innerhalb einer Prozedur ein Register mehr gepusht als gepopt wird?
-
Definiere Absturz
-
Wenn der Computer auf nix mehr reagiert?
-
Nun das kann ziemlich viele Gründe haben
Die einfachsten sind z.B. eine Endlosschleife im Kernelcode oder eine Deadlock-Situation (Ding A wartet auf beendigung von Ding B, Ding B wartet auf Beendigung von Ding A z.B.).
Des weiteren können Hardwareprobleme auch gerne für Abstürze sorgen (wie in mienem rechner immer ;), wenn ein Bit kippt irgendwo.Ansonsten wirds interessant. Ein Absturz unter Windows NT/XP wird ja wenigstens noch immer gut dokumentiert Da gibts z.B. dass ein Page fault auftritt, also die Anfrage eine Seite in den Speicher zu laden (z.B. von der Swapdatei), obwohl der Speicherbereich garnicht ausgelagert wurde. Ansonsten gibts halt viele Möglichkeiten...am besten sein System zum absturz bringen und vorher das OS anweisen, nen Dump zu machen
-
Original erstellt von Norondion:
Was passiert eigentlich bei/vor einem Absturz (in Assembler)? Greift da das Betriebssystem auf einen falschen Speicherbereich zu oder wird innerhalb einer Prozedur ein Register mehr gepusht als gepopt wird?in der regel greift nicht das os auf eine falschen speicherbereich zu sondern das programm
und ein absturz kann so ziemlich alles sein...
schreiben in fremde/inexistente speicherbereiche, unberechtigte portzugriffe, fehlerhafte deskriptoren, fehler in der hardware...
-
Original erstellt von japro:
**in der regel greift nicht das os auf eine falschen speicherbereich zu sondern das programm
**Na Moment mal Also ein vernpünüftiges ProtectedMode-OS kickt das Programm dann ausm System mit ner Meldung und hängt dann nicht ^^
-
Das heißt, unter einem vernünftigen Betriebssystem sollte ein Anwenderprogramm keine Abstürze verursachen können?
-
Wenn du Absturz als hängen des Rechners bezeichnest, ja. Bzw. jein. Hänger können von allen Teilen des OS verursacht werden, also auch Treiber, d.h. das OS kann noch so gut sein, wnen ein Treiber im Kernelmodus mist baut ist alles fürn Eimer
-
Oder wenn ein Programm unendlich oft neue threads erstellt, und jeder Thread eine Endlosschleife mit MessageBox() darin ausführt...
-
LOL in der Tat eine nette Möglichkeit Aber ein vernünftiges OS sollt trotzdem noch zulassen, dass man den Prozess kicken kann
-
Ausserdem muss der Rechner nich immer abgestürzt sein.
Du kannst auch einfach sachen irgendwo falsch hingeschrieben haben und damit div. Hardware ausgeschaltet haben!
(Ich hab z.B. mal über "debug" unter Win 98 n falsches byte ans Keyboard gesendet, und das wartete auf ein weiteres Byte, das ich aber nicht eingeben konnte, da das KB auf das Byte wartete und solange die TastenMatrix ausgeschaltet hatteApropros gutes PMode OS:
Ein Absturz unter Windows NT/XP wird ja wenigstens noch immer gut dokumentiert
glaubst aber nur du!
Ich hab gestern erst so mit TEdit (OWL) rumgespielt (das kann man in der Sektion "andere Compiler" nachlesen), wobei ich feststellte das mein WinNT 4.0 (Build 1381: Service Pack 6, RC 1.5)
bei dem übermäßigen einfügen via Insert(), schnell sämtliche PMode Grundsätze vergisst und wild Speicher überschreibt und hängt!mfg
-bg-
-
das is ganz einfach. unter win9x geht es z.B. mit 3 Byte:
StartLabel:
CLI
Jmp Short StartLabelUnd schon wars das. Oder "Start->Ausführen->C:\NUL\NUL" da verabschiedet sich win9x auch mit ein paar bluescreens... *g*
-
Einen Absturz unter Win9X geht auch mit einer Instruktion.
Macht mal ein Programm, das NUR ein POP ESP ausführt
-
und wo war da jetzt der krasse Absturz? Das gibt 'ne Exception und fertig...
Nene, da muss man sich schon etwas mehr anstrengen, um win9x richtig zum Absturz zu bringen.
Dieses 4 Byte Grosse Programm, das einmal cli ausfuehrt und dann in eine endlosschleife springt ist dagegen schon besser, da bleibt nur reset
-
Wenns schön sein soll, kann man auch die API Funktion WriteProcessMemory() (oder so ähnlich) nutzen, und dann einmeal wild den Speicher aller Programme neu "gestalten" das ist sicher auch lustig.
[ich liebe es derartig konstruktive Beitäge zum entwickeln eines effizienten und sicheren Programmierstils zu leisten *g*]
-
@Nobuo_T: Also bei mir klappte das mit dem POP ESP ganz gut.
Da kamen unter Win9X nur noch Bluescreens und man war gezwungen
den Rechner neu zu starten. Wie gesagt: das Programm sollte
Standalone ASM sein und NUR ein POP ESP ausführen.
Logischerweise sollte es auch für Windows und nicht für DOS sein.