Programm zum Absturz programmieren?
Ich bin ein großer Fan von Five Nights at Freddy's. Ein Computerspiel, in dem das Erscheinen von Golden Freddy das Spiel nicht beendet sondern abstürzen lässt. Nun hab ich mich gefragt, wie es möglich ist, ein Programm gezielt zum Absturz zu bringen. Gibt es dafür spezielle Störcodes, die hineingeschrieben werden müssen, oder kann man durch irgendwelche Schleifen oder so das Programm überlasten, sodass es den Dienst versagt? Oder (falls sich jemandem mit dem Spiel konkret auskennt) sieht es in dem Fall nur so aus, als ob das Spiel abstürzt wobei es in Wahrheit nur ein speziell gestalteter Bildschirm ist?
2 Antworten
Ich denke, dass man im Code ganz einfach einen Befehl zum Beenden einbauen kann. So wie es auch funktioniert, wenn man im Menü den Beenden Button drückt, nur eben das anstatt dem Knopf etwas anderes, hier der goldene Freddy, den Befehl auslöst.
Etwas, das dem Menü "Beenden" entspricht, lässt sich leicht einbauen.
Aber mit einem entsprechenden Systemaufruf kann man das Programm auch sofort beenden, auf die brutale Art. Dieser Aufruf ist auch vom Programm selbst möglich.
Es gibt unendlich viele einfache Möglichkeiten, ein Programm zum Absturz zu bringen.
Beispiel in C / C++:
*(int*)0 = 123;
Oder so:
free(123);
Plattformspezifisch auf *ix-Systemen:
kill(getpid(), SIGILL);
Oder allgemein:
int x = (int)(sqrt(2) - 1.0);
int y = 123 / x;
Und so weiter, und so fort ... es gibt noch TAUSEND mal mehr Möglichkeiten! Irgendwie kann man immer jede Form von Fehler provozieren, und für Software-Tests ist das manchmal sogar bewusst erwünscht.
Die Beispiele, welche ich oben aufgelistet habe, sollte jeder Programmierer nachvollziehen können. Dabei sollte jedes Programm abstürzen.
Man kann auch noch schwerere Fehler im Betriebssystem auslösen, sodass du eine Kernelpanic oder einen Bluescreen bekommst.
Schönen Tag noch, und viel Spaß mit deinem neu erworbenen Wissen! :)
Ja, dann dürfte es so ein schwerer Fehler sein, denn nachdem, was ich gesehen habe, kommt dann so ein Bluescreen. Man muss das Spiel dann jedenfalls neu starten.