Rechner zum Absturz bringen?
-
ich experementiere gerade ein wenig mit C rum...
ich versuch grad ein programm zu schreiben, dass in einer endlosschleife den Arbeistspeicher vollmüllt und
somit den Rechner zum Absturz bringt... (programmier normalerweise mit Java und dort geht das nicht)hat einer von euch eine Idee?
Gibt es in C Datenfelder, die man bis unendlich erweitern kann? (Listen???)
-
warum sollte der pc abstürzen.
windows wird lediglich irgendwann nein zu malloc sagen und das wars
-
na ja, ich hab mal gehört das Java sicher ist und der PC niemals abstürzt, weil Java nur einen bestimmten Prozentsatz an Arbeitsspeicher voll machen kann. bei C gibt es diese Begrenzung nicht, weswegen ich annahm, man könnte ein kleines witziges Programm schreiben, das absichtlich den PC zum Absturz bringt....
Merkt das Windows etwa rechtzeitig und verhindert das? Was heißt malloc?
-
Java Programme laufen auf einer virtuellen Maschine, deswegen kannst du über Java Programme an sich nicht an den "echten" Arbeitspeicher zugreifen. Mit C geht das schon, aber.... sofern deine Anwendung nicht im Kernel-Space läuft, bekommt sie nur so viel Speicher, wie der Kernel der Anwendung zuweist. Und wenn der Kernel dir keinen Speicher mehr gibt, dann kannst du selbst mit C nichts mehr machen.
malloc "sucht" nicht selbständig nach freiem Speicher sondern der Kernel gibt malloc die Adresse des Speichers, der frei ist. D.h. wenn der Betriebssystemkern keinen Speicher mehr zuweisen will, liefert malloc NULL zurück. Speichermanagment wird vom Kernel übernommen und nicht vom Userspace Programmen.
-
schade..
-
^^setz die thread-priority auf maximum und dann: while(1);
dann hilft nur noch der reset-knopf.
-
Rekursiv neue Prozesse erstellen kan nein System ach ganz schön ausbremsen
-
int main(int argc, char** argv) { while (1) system("rundosrun.exe"); // hier Name der generierten Exe oder anderem Programm angeben return 1; }
-
Bitte ein Bit schrieb:
int main(int argc, char** argv) { while (1) system("rundosrun.exe"); // hier Name der generierten Exe oder anderem Programm angeben return 1; }
^^ 'ne 10 jahre alte solaris-box (wenn man als normaler user angemeldet ist) juckt das nicht die bohne.
-
fricky schrieb:
Bitte ein Bit schrieb:
int main(int argc, char** argv) { while (1) system("rundosrun.exe"); // hier Name der generierten Exe oder anderem Programm angeben return 1; }
^^ 'ne 10 jahre alte solaris-box (wenn man als normaler user angemeldet ist) juckt das nicht die bohne.
Solaris kann auch keine *.exe Datein über den hier gezeigen Weg ausführen
-
BBB schrieb:
Solaris kann auch keine *.exe Datein über den hier gezeigen Weg ausführen
egal ob die 'exe' oder sonstwie heisst. wenn das 'x' bit der datei gesetzt ist, wird versucht sie auszuführen.
-
fricky schrieb:
BBB schrieb:
Solaris kann auch keine *.exe Datein über den hier gezeigen Weg ausführen
egal ob die 'exe' oder sonstwie heisst. wenn das 'x' bit der datei gesetzt ist, wird versucht sie auszuführen.
BBB schrieb:
Solaris kann auch keine *.exe Datein über den hier gezeigen Weg ausführen
Bääätsch! *Lange Nase zeig*
-
Wo ist das Problem?
cc foo.c -o rundosrun.exeUnd schon hat man ein Binary mit .exe am Ende, welches unter Slowaris funktioniert.
Oder cc foo.c -o rundosrun.bbhatteunrecht
oder cc foo.c -o run.dos.run
-
das klappt bei mir nicht.... aba dafür klappt das:
#include <stdio.h> int main (int argc, char *argv[]) { while(1){ printf("Selbstzertoerung eingeleitet. Taktrate \awird erhoeht\n"); } system("PAUSE"); return 0; }
voll witzig. Klappt das auch bei euch?
-
@juhhuuu: was hast du eigentlich vor, is dir langweilig?
schreib doch einfach in fremden speicherbereich rum:)
-
juhhuuu schrieb:
voll witzig. Klappt das auch bei euch?
ne, meinem System juckt es nicht die Bohne. Wieso sollte es auch, da ist ja keine anspruchsvolle Aufgabe zu erledigen. Und selbst wenn das System damit überfordert wäre, Zeichen in eine (virtuelle) Konsole zu schreiben, wenn man das System richtig konfiguriert und limits richtig gesetzt hat, sollte das kein Problem fürs System sein.
Such mal Bash- oder Perl-Bomben
$ :(){ :|:&};: # oder $ perl -e 'while() { fork(); }'
damit zwingst du viele Linuxe sofort in die Knie. Solaris oder BSDs haben kein Problem damit aber jeder guter Linux-Admin hat seine /etc/security/limits.conf angepasst und somit stellt das auch kein Problem dar
-
Er redet aber nicht von der Anzahl der Prozesse die aufgerufen werden, sondern vom Speicherverbrauch. Wenn ich nur 100 Prozesse zulasse, dann heisst das ja nicht das der Speicher nicht vollgeschrieben werden kann. Das ginge auch mit weniger. Es geht auch wenig Speicher mit vielen Prozessen.
Zum "Arbeiten" kann man jedes System zwingen, zum Absturz wird schon schwerer. Aber das müsste man mal probieren, wobei ich denke moderne Betriebssysteme sind dahingegen schon recht sicher. Aber wer weiß das schon.
-
supertux schrieb:
ne, meinem System juckt es nicht die Bohne. Wieso sollte es auch, da ist ja keine anspruchsvolle Aufgabe zu erledigen. Und selbst wenn das System damit überfordert wäre, Zeichen in eine (virtuelle) Konsole zu schreiben, wenn man das System richtig konfiguriert und limits richtig gesetzt hat, sollte das kein Problem fürs System sein.
Wahrscheinlich liegt das an deinem Linux. Also mein XP stürzt nicht direkt ab, da man ganz normal weiter
Programme aufrufen kann, aber das Programm lässt sich nicht mehr schließen und der ohrenbetäubende Lärm
ist doch etwas nervend. Runterfahren geht auch nicht...
-
juhhuuu schrieb:
Wahrscheinlich liegt das an deinem Linux.
gut möglich. Ein Strg-C Tastendruck beendet das Programm auch sofort, oder ein Klick auf die X Schaltfläche meiner Konsole.
juhhuuu schrieb:
ohrenbetäubende Lärm
ist doch etwas nervend. Runterfahren geht auch nicht...ohrenbetäubender Lärm? Was für ein ohrenbetäubender Lärm meinst du? Seit wann produziert printf denn Geräusche? Ach so, '\a', ich hab in meinem System das Modul für das externe Lautsprcher deaktivier