Supportnet / Forum / Anwendungen(Java,C++...)
Hilfe! Ich hab nen Nerv-Code geschrieben! =)
Frage
Hallo
Ich hab einen code gschriben. Der sollte iegntlich eine Eingabe annehmen, diese ausgeben und das gleiche wieder von vorne. Aber, ihr kennt mich, damit es komplizierter wird, habe ich erstmal ne Funktion definiert und - jetzt kommt das beste - EINE ENDLOSSCHLEIFE (juhuu):
[code]#include <iostream>
using namespace std;
void iii()
{
int h;
cin >> h;
cout << h;
}
int main()
{
iii();
int i = 0;
while (i == 0)
{
iii();
}
}
[/code]Aber leider leider macht das was ganz anderes:
der zeigt mir immer dauernd, es werden mehr, eine Abfolge von:
[code]-858993460-[/code]Leute, was hab ich falsch gemacht?
mfg
TByte
Antwort 1 von TByte
Mir is grad was aufgefallen:
wenn ich ganze Zahlen eingebe, funktioniert er wie er soll, ud wenn ich über 65535 oder Buchstaben oder so eingebe, dann macht der sowas.
mfg
TByte
wenn ich ganze Zahlen eingebe, funktioniert er wie er soll, ud wenn ich über 65535 oder Buchstaben oder so eingebe, dann macht der sowas.
mfg
TByte
Antwort 2 von Elefunty
was anderse als ne endlosschleife kann das doch nicht werden!
immerhin ist mit
das wird mit
jedoch wird i nie verändert!
also bleibt i immer 0 und while macht was es soll und treibt das programm in ne endlosschleife und den programmierer zur verzweiflung ;)
weißt du eigentlich was 65535 bzw 65536 für zahlen sind?
rechne mal 2 hoch irgendwas...
2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536 usw.
das sind dann 2 hoch 16. dh. es tritt iwie n speicher overflow glaub ich auf
http://de.wikipedia.org/wiki/Integer_(Datentyp)
ach oder moment mal, mir fällt grad ein... meinst du ne endlosschleife, die nix tut und nur quasi hängt? da war irgendwas mit irgendwelchen bufferspeichern...
das mit den buchstaben und kommazahlen ist klar, da man das ja in ein int speichert, und das halt nur für ganzzahlige Eingaben geeignet ist.
vllt kompilier ich das morgen mal, dann kann ich vllt besseres sagen
Ele
P.S. es gibt auch Code Tags...
immerhin ist mit
int i =0; i zu 0 definiert worden.das wird mit
while (i==0) immer wieder geprüft.jedoch wird i nie verändert!
also bleibt i immer 0 und while macht was es soll und treibt das programm in ne endlosschleife und den programmierer zur verzweiflung ;)
weißt du eigentlich was 65535 bzw 65536 für zahlen sind?
rechne mal 2 hoch irgendwas...
2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536 usw.
das sind dann 2 hoch 16. dh. es tritt iwie n speicher overflow glaub ich auf
http://de.wikipedia.org/wiki/Integer_(Datentyp)
ach oder moment mal, mir fällt grad ein... meinst du ne endlosschleife, die nix tut und nur quasi hängt? da war irgendwas mit irgendwelchen bufferspeichern...
das mit den buchstaben und kommazahlen ist klar, da man das ja in ein int speichert, und das halt nur für ganzzahlige Eingaben geeignet ist.
vllt kompilier ich das morgen mal, dann kann ich vllt besseres sagen
Ele
P.S. es gibt auch Code Tags...
Antwort 3 von Elefunty
ich habs ma kompiliert:
buchstabe ->Keine Eingabe möglich, wiederholt die letzte eingabe (Endlosschleife)
Eingabe>2147483648, nicht 65535 s.o.
das liegt daran, dass der compiler verschiedene breiten als int interpretiert. bei dir z.B. 16Bit = int, bei mir 32 Bit= int. Weil ein bit fürs vorzeichen draufgeht, hat man noch 15, bzw 31...
sonst müsst man unsigned benutzen!
Ich hab deinen Code mal Korrigiert...
Hoffe ich konnte helfen.
Bis neulich
Ele
buchstabe ->Keine Eingabe möglich, wiederholt die letzte eingabe (Endlosschleife)
Eingabe>2147483648, nicht 65535 s.o.
das liegt daran, dass der compiler verschiedene breiten als int interpretiert. bei dir z.B. 16Bit = int, bei mir 32 Bit= int. Weil ein bit fürs vorzeichen draufgeht, hat man noch 15, bzw 31...
sonst müsst man unsigned benutzen!
Ich hab deinen Code mal Korrigiert...
#include <iostream> //halt iostream include
using namespace std; //std-namespace...
long long int iii() //die funktion: hier nicht als void, da sie h zurückgibt
{
long long int h=1;
/*aus int wird long long int, damit hat man dann 128 bit...
das reicht dann von -9.223.372.036.854.775.807 bis 9.223.372.036.854.775.807
oder falls man unsigned long long int nimmt, halt von 0 bis 18.446.744.073.709.551.615
*/
if(!(cin >> h)){ //hier wird geprüft, ob die eingabe korrekt war, also in einen Ganzzahlspeicher passt
cin.clear(); //wenn nicht -> lösche den Fehlerspeicher
cin.ignore( numeric_limits<int>::max( ),'\n');} //und leere den Pufferspeicher
else cout << h<<endl; //wenn doch->gebe aus!
return h; //gebe h zurück
}
int main()
{
//Eingabewertgrenzen anzeigen:
cout<<"Maximaler eingabewert: "<<LLONG_MAX<<endl<<"Minimaler Eingabewert: "<<LLONG_MIN<<endl;
while (iii()); /*das hier ist für dich vielleichtn bisschen tricky
und zwar:
wiederhole iii() so lange, bis es 0 zurückgibt,
währenddessen, tue nichts, da der eigentliche zweck ja
schon in der bedingung ausgeführt wird! Sobald 0
zurückgegeben wird, wird die schleife verlassen und das programm beendet
*/
}
Hoffe ich konnte helfen.
Bis neulich
Ele
Antwort 4 von Elefunty
mist, layout gesprengt...
sry
ich wusste nich, dass in code tags die zeilen nicht umgebrochen werden...
wär vielleichtn mod so nett und könnte das richten? danke!
Ele
sry
ich wusste nich, dass in code tags die zeilen nicht umgebrochen werden...
wär vielleichtn mod so nett und könnte das richten? danke!
Ele
Antwort 5 von TByte
So, ok.
Vielen Dank für deine Bemühungen, Elefunty.
Dass die Zahl 65535 besonders ist, weiß ich doch! Oder denkst du ich hab alle Zahlen ausprobiert bis ich 65535 erreciht habe? Nein, ich hab nachgedacht (8.Weltwunder, TByte denkt =) ) und bin zu dem Schluss gekommen, dass es am Integer liegt.
Trotzdem danke, jetzt macht das Programm wenigstens das, was es machen solll...
Werds gleich mal compilen.
Trotzdem, warum kommt dann auf einmal bei mir -858993460- ?
Ist das irgendwie von meinen Rechner?
mfg
TByte
Vielen Dank für deine Bemühungen, Elefunty.
Dass die Zahl 65535 besonders ist, weiß ich doch! Oder denkst du ich hab alle Zahlen ausprobiert bis ich 65535 erreciht habe? Nein, ich hab nachgedacht (8.Weltwunder, TByte denkt =) ) und bin zu dem Schluss gekommen, dass es am Integer liegt.
Trotzdem danke, jetzt macht das Programm wenigstens das, was es machen solll...
Werds gleich mal compilen.
Trotzdem, warum kommt dann auf einmal bei mir -858993460- ?
Ist das irgendwie von meinen Rechner?
mfg
TByte
Antwort 6 von omg
Ich will jetzt nichts falsches sagen, aber was über den Eingabestrom reinkommt, das sind Zeichen und keine Integer.
Die eingegebene Zahl, z.B. 1, entspricht nicht einem Wert von 1, sondern zum Beispiel 31.
Was du machst, ist einfach die internen Codes für die eingegebenen Zahlen in deine Ganzzahlvariable zu schreiben.
Mit einer einzelnen Zahl könnte das klappen, aber da durch den Stream ja mehrere Zeichen kommen(je nachdem was du eingibst) läuft das Teil über. Normalerweise nimmst du hierfür einen Char Array.
Oder ist das wieder so ein .... Experiment xD
Die eingegebene Zahl, z.B. 1, entspricht nicht einem Wert von 1, sondern zum Beispiel 31.
Was du machst, ist einfach die internen Codes für die eingegebenen Zahlen in deine Ganzzahlvariable zu schreiben.
Mit einer einzelnen Zahl könnte das klappen, aber da durch den Stream ja mehrere Zeichen kommen(je nachdem was du eingibst) läuft das Teil über. Normalerweise nimmst du hierfür einen Char Array.
Oder ist das wieder so ein .... Experiment xD
Antwort 7 von Jaja
Zitat:
Trotzdem, warum kommt dann auf einmal bei mir -858993460- ?
Ist das irgendwie von meinen Rechner?
Trotzdem, warum kommt dann auf einmal bei mir -858993460- ?
Ist das irgendwie von meinen Rechner?
in diesem falle nicht. ist die zahl größer als der datentyp zulässt, fängt das ganze wieder bei 0 an und der übertrag geht verloren.
einen s.g. buffer overflow - der leider allzuoft nicht vom programmierer verhindert wird und deshalb für exploits aller art taugt kannst du "nur" über zeiger erreichen, vielleicht auch übers casten von datentypen oder beim casten eines zeigers (sehr effektiv um mist zu bauen)..
Antwort 8 von TByte
Hallo
@omg:
Ja, und eben diese interne Zahlen (ASCII sind ja auch nur versteckte Zahlen anstatt Buchstaben) dürfen nicht größer als 65535 sein.
@Jaja:
Super, danke für die anleitung zum Mistbauen =) Hab eh nochn schrottrechner seid gestern rumliegne, mit dem werd ichs mal probieren.=) Aber ansonst ist mir immer noch nicht klar geworden, warum dieses -858993460- kommt! Du hast ja etwas von Übertrag gesagt. Ist das etwa eine zusammensetzung von Überträgen?
mfg
TByte
@omg:
Ja, und eben diese interne Zahlen (ASCII sind ja auch nur versteckte Zahlen anstatt Buchstaben) dürfen nicht größer als 65535 sein.
@Jaja:
Super, danke für die anleitung zum Mistbauen =) Hab eh nochn schrottrechner seid gestern rumliegne, mit dem werd ichs mal probieren.=) Aber ansonst ist mir immer noch nicht klar geworden, warum dieses -858993460- kommt! Du hast ja etwas von Übertrag gesagt. Ist das etwa eine zusammensetzung von Überträgen?
mfg
TByte
Antwort 9 von Jaja
übertrag:
angenommen ein datentyp kann nur zahlen bis 99 aufnehmen.
speicherst du 302 hinein, wäre der wert der variablen 02 - der übertrag 3.
dieser übertrag wird verworfen..
angenommen ein datentyp kann nur zahlen bis 99 aufnehmen.
speicherst du 302 hinein, wäre der wert der variablen 02 - der übertrag 3.
dieser übertrag wird verworfen..
Antwort 10 von Jaja
Zitat:
Super, danke für die anleitung zum Mistbauen =)
Super, danke für die anleitung zum Mistbauen =)
na da..
erzeige einfach einen zeiger auf eine variable und erhöhe die ADRESSE des zeigers um einen zufallswert. dann noch auf den inhalt der adresse, auf den der zeiger zeigt schreibend zugreifen und schon haste deinen bluescreen - oder schlimmer...
Antwort 11 von Supermax
Wobei unter Betriebssystemen mit Speicherschutzmechanismen wie Linux/Unix oder auch Windows der Zugriff auf eine zufällige Adresse im Allgemeinen nur das betroffene Programm selbst zum Absturz bringt. Unter Window heisst das dann "Das Programm XZY hat einen Fehler festgestellt und muß beendet werden" bzw. unter unixoiden Betriebssystemen kommt es - meistens - zu einem "segmentation fault".
Wobei das noch die harmloseren Fehler sind - wenigstens weiss man daß etwas nicht stimmt! Heimtückischer sind da schon Fehler, die das Programm scheinbar problemlos weiterlaufen lassen, aber dann an ganz anderer Stelle wieder auftreten.
Wobei das noch die harmloseren Fehler sind - wenigstens weiss man daß etwas nicht stimmt! Heimtückischer sind da schon Fehler, die das Programm scheinbar problemlos weiterlaufen lassen, aber dann an ganz anderer Stelle wieder auftreten.
Antwort 12 von Jaja
@supermax:
na dann probier es mal aus ;)
na dann probier es mal aus ;)
Antwort 13 von TByte
Och, das is ja langweilig! Auf die Idee bin ich ja auch schon gekommen. allerdings wollt ich das mit nem Gameboy machen:
Die sind ja auch alle in C++ geschrieben die Spiele. Und ich hab ein Tutorial zum Spieleentwickeln fürn Gameboy gefuden. Da stand drin, alles muss man mit Zeigern machen. Also kam ich auf die Idee, mal n bissl mit Zeigern aufm Gameboy rumzuspielen. Mal den Graphikmodus im RAM löschen, mal einen schwachsinn reinschreiben und so weiter =)
mfg
TByte
PS: Vielen dank für die Erklärung, aber ich verstehe den Zusammenhang mit -858993460- nicht.
Die sind ja auch alle in C++ geschrieben die Spiele. Und ich hab ein Tutorial zum Spieleentwickeln fürn Gameboy gefuden. Da stand drin, alles muss man mit Zeigern machen. Also kam ich auf die Idee, mal n bissl mit Zeigern aufm Gameboy rumzuspielen. Mal den Graphikmodus im RAM löschen, mal einen schwachsinn reinschreiben und so weiter =)
mfg
TByte
PS: Vielen dank für die Erklärung, aber ich verstehe den Zusammenhang mit -858993460- nicht.
Antwort 14 von TByte
@Supermax:
Das is ja nur im Protected Mode so. Kannst ja mal versuchn - wenn du mal nix zutun hast (ich werd mich in den Ferien auch ran setzen =) ) - Windows in den Open Mode (so hieß er doch, oder?) zu setzen und dann mal die für Windoof reservierten RAM-Segmente zu löschen...
JUHUUUU! BLUESCREEN!!!!
mfg
TByte
Das is ja nur im Protected Mode so. Kannst ja mal versuchn - wenn du mal nix zutun hast (ich werd mich in den Ferien auch ran setzen =) ) - Windows in den Open Mode (so hieß er doch, oder?) zu setzen und dann mal die für Windoof reservierten RAM-Segmente zu löschen...
JUHUUUU! BLUESCREEN!!!!
mfg
TByte
Antwort 15 von TByte
Hex Leute, hab grad n Zeiger um eins erhöht, n Wert zugewiesen, ausgegeben, Zeiger um ein dekrementiert und erneut ausgegeben; und stellt euch vor: ES KLAPPT ALLES HERRLICH!!! =)
---
Ich hab grad nixdastream.h erfunden. Es enthält die Konstante PROGRAMMGEHTNICHTZUENDE, welche dafür sorgt, dass es Endlosschleifen gibt, die dafür sorgen, dass Konsolenprogramme nicht zu Ende gehen, bevor man nicht manuell beendet. So soll sichergegangen werden, dass man das Ergbenis auch sehen kann. Und, Leute, was kann man ohne Kommentare besser erkennen?
while(1);
while(PROGRAMMGEHTNICHTZUENDE);
Ansonsten müsste man wieder haufenweise Kommentare schreiben, was wie warum das Prorgramm hier bewusst eine Endlosschleife nutzt. Aber mit meiner Headerdatei geht alles viel besser. Einfach in das include-Verzeichnis des Compilers kopieren (um immer bei neuen Projekten zu vermeiden) und dann ganz bequem hintippen:
#include <nixdastream.h> und alles genießen! Wie findet ihr das?
mfg
TByte
PS.:
Nixdastream.h, Code: (Habe bewusst weggelassen:
#ifndef NIXDASTREAM_H
#define NIXDASTREAM_H)
Also, der Code:
const bool PROGRAMMGEHTNICHTZUENDE = true;
---
Ich hab grad nixdastream.h erfunden. Es enthält die Konstante PROGRAMMGEHTNICHTZUENDE, welche dafür sorgt, dass es Endlosschleifen gibt, die dafür sorgen, dass Konsolenprogramme nicht zu Ende gehen, bevor man nicht manuell beendet. So soll sichergegangen werden, dass man das Ergbenis auch sehen kann. Und, Leute, was kann man ohne Kommentare besser erkennen?
while(1);
while(PROGRAMMGEHTNICHTZUENDE);
Ansonsten müsste man wieder haufenweise Kommentare schreiben, was wie warum das Prorgramm hier bewusst eine Endlosschleife nutzt. Aber mit meiner Headerdatei geht alles viel besser. Einfach in das include-Verzeichnis des Compilers kopieren (um immer bei neuen Projekten zu vermeiden) und dann ganz bequem hintippen:
#include <nixdastream.h> und alles genießen! Wie findet ihr das?
mfg
TByte
PS.:
Nixdastream.h, Code: (Habe bewusst weggelassen:
#ifndef NIXDASTREAM_H
#define NIXDASTREAM_H)
Also, der Code:
const bool PROGRAMMGEHTNICHTZUENDE = true;
Antwort 16 von omg
Versteh ich nicht so ganz ...
mit "while(true)" ist es doch schon ersichtlich genug, dass es eine Endlosschleife ist. Außerdem benutzt man doch keine Endlosschleife um das Konsolenfenster offen zu halten -.-
Entweder man lässt es ganz, oder halt System("pause") / Zeichen einlesen.
Wenn du dein Programm mit deinem while(true) am laufen hältst, dann ist dir aber klar, dass man es Gewaltsam abbrechen muss.
Wie finde ich das? nützlich ...
mfg
mit "while(true)" ist es doch schon ersichtlich genug, dass es eine Endlosschleife ist. Außerdem benutzt man doch keine Endlosschleife um das Konsolenfenster offen zu halten -.-
Entweder man lässt es ganz, oder halt System("pause") / Zeichen einlesen.
Wenn du dein Programm mit deinem while(true) am laufen hältst, dann ist dir aber klar, dass man es Gewaltsam abbrechen muss.
Wie finde ich das? nützlich ...
mfg
Antwort 17 von TByte
Zitat:
Wie finde ich das? nützlich
supi, immerhin einer.Wie finde ich das? nützlich
Also, weißt du, ich finde den ganzen kram mit System Pause und so irgendwie C-Style. C, C++ und so wurden für Systemprogrammierung entwickelt (Zur Info: Programmiersprachen erfindet oder programmiert man nicht, man entwickelt sie). Und bei Systemprogrammierung gibt es kein System, was man irgendwie pause macht. Man macht selber das system. Und diese Tradition will ich wenigstens in C++ beibehalten, da es in C anscheinend schon verloren gegangen ist. Demnach muss man das aufbleiben mit herkömmlichen Mitteln erzwingen.
mfg
TByte
Antwort 18 von Jaja
tbyte das ist mit verlaub ziemlicher käse.
wenn es dafür schon eine funktion gibt, nutzt man die auch.. und programme die nicht terminieren, nachdem sie ihre aufgabe erledigt haben sind, mal weich formuliert, einfach schlechter stil.
wenn es dafür schon eine funktion gibt, nutzt man die auch.. und programme die nicht terminieren, nachdem sie ihre aufgabe erledigt haben sind, mal weich formuliert, einfach schlechter stil.
Antwort 19 von TByte
jaja:
der Sinn und Zweck von C/C++ ist gewesen, dass der Programmierer möglichst viele Freiheiten hat. Und mit Freiheiten sind meist auch Aufwendigkeiten verbunden. Das heißt: wenn du dir vornimmst, etwas in C/C++ zu machen, musst du ALLES selber machen! Mit der Zeit wurden immer mehr und mehr Bibliotheken und Funktionen geschrieben, die einem alles "erleichtern" sollen. Aber mit Erleichterung ist auch Einschränkung verbunden. Wenn du selber alles machst und keine vordefinierten Sonder-Dinger verwendest, hast alles selber in der Hand! (und verstehst deinen Code auch besser). Und ausserdem wurde C/C++, wie oben schon erwähnt, nicht für Softwareprogrammierung entwickelt, sondern für Systementwicklung! Und Systeme, die sich selber terminieren, sind auch zu nichts zu gebrauchen.
---
Auch wenn man jetzt Software entwickelt, die Tradition sollte man weiterhin beibehalten. Denn damals gab es keine vordefinierten Funktionen, die mussten erst geschrieben werden!
mfg
TByte
der Sinn und Zweck von C/C++ ist gewesen, dass der Programmierer möglichst viele Freiheiten hat. Und mit Freiheiten sind meist auch Aufwendigkeiten verbunden. Das heißt: wenn du dir vornimmst, etwas in C/C++ zu machen, musst du ALLES selber machen! Mit der Zeit wurden immer mehr und mehr Bibliotheken und Funktionen geschrieben, die einem alles "erleichtern" sollen. Aber mit Erleichterung ist auch Einschränkung verbunden. Wenn du selber alles machst und keine vordefinierten Sonder-Dinger verwendest, hast alles selber in der Hand! (und verstehst deinen Code auch besser). Und ausserdem wurde C/C++, wie oben schon erwähnt, nicht für Softwareprogrammierung entwickelt, sondern für Systementwicklung! Und Systeme, die sich selber terminieren, sind auch zu nichts zu gebrauchen.
---
Auch wenn man jetzt Software entwickelt, die Tradition sollte man weiterhin beibehalten. Denn damals gab es keine vordefinierten Funktionen, die mussten erst geschrieben werden!
mfg
TByte
Antwort 20 von Marvin42
Oh. Mein. Gott.
Und mit Gott meine ich nicht dich, TByte...
Systeme, die sich ohne Hard-Off nicht beenden lassen, sind genauso zu nichts zu gebrauchen. Oder ziehst du immer den Stecker, um deinen Rechner abzuschalten?
Und mit Gott meine ich nicht dich, TByte...
Systeme, die sich ohne Hard-Off nicht beenden lassen, sind genauso zu nichts zu gebrauchen. Oder ziehst du immer den Stecker, um deinen Rechner abzuschalten?
Antwort 21 von TByte
Also, ich meinte ja, dass man keine vordefinierten Fuktionen nutzen sollte, sondern, alles selber machen soll:
So hat man die Tradition beibehalten! Et voila!
mfg
TByte
bool aus = true;
while(aus)
{
//anweisung
//noch eine
//noch eine
//noch eine
//noch eine
//noch eine
cout << "Beenden?\n";
char yn;
cin >> yn;
if(yn == "n")
{
aus = false;
} else {
aus = true;
}
}So hat man die Tradition beibehalten! Et voila!
mfg
TByte
Antwort 22 von not.even.wrong
Ich hoffe, TByte versucht niemals aus "Tradition" ein Auto selbst zu bauen ;o)
Junge-Junge... Nach ein paar Tagen Rumspielerei mit Code-Fetzen aller Art hält er hier Vorträge über die Historie von Programmiersprachen im Allgemeinen und "Programmierer-Freiheiten" im Speziellen.
Wann kann man denn in deine erste Vorlesungsreihe an der Uni kommen?
n.e.w.
Junge-Junge... Nach ein paar Tagen Rumspielerei mit Code-Fetzen aller Art hält er hier Vorträge über die Historie von Programmiersprachen im Allgemeinen und "Programmierer-Freiheiten" im Speziellen.
Wann kann man denn in deine erste Vorlesungsreihe an der Uni kommen?
n.e.w.
Antwort 23 von Anatolia
na wenn dich das schon wundert dann gebe mal oben rechts in der suche TByte ein
da staunt der fachmann das kannste glauben ;-))))
da staunt der fachmann das kannste glauben ;-))))
Antwort 24 von Marvin42
Und wo ist in dem neuen Code deine Variable mit dem langen Namen abgeblieben?
Wenn ich das richtig sehe, benutzt du übrigens eine Standard-Bibliothek mit vorgefertigten Objekten.
Wenn ich das richtig sehe, benutzt du übrigens eine Standard-Bibliothek mit vorgefertigten Objekten.
Antwort 25 von Jaja
jo - eigentlich müsste tbyte nach seiner ideologie schon in diesem beispiel die iostream neu backen... ;)
Antwort 26 von not.even.wrong
Aber um TByte mal etwas anzustacheln...
Das Ergebnis deiner Bemühungen würde ich dann gern mal ausprobieren wollen. Vielleicht kannst du ja *irgendwann* ein solches Tool zum Testen anbieten?
PS: Real Mode, nicht "Open". Die Vorstellung ist aber lustig... WinXP/Vista im Real mode ;o)
Zitat:
Windows in den Open Mode (so hieß er doch, oder?) zu setzen und dann mal die für Windoof reservierten RAM-Segmente zu löschen...
JUHUUUU! BLUESCREEN!!!!
Windows in den Open Mode (so hieß er doch, oder?) zu setzen und dann mal die für Windoof reservierten RAM-Segmente zu löschen...
JUHUUUU! BLUESCREEN!!!!
Das Ergebnis deiner Bemühungen würde ich dann gern mal ausprobieren wollen. Vielleicht kannst du ja *irgendwann* ein solches Tool zum Testen anbieten?
PS: Real Mode, nicht "Open". Die Vorstellung ist aber lustig... WinXP/Vista im Real mode ;o)
Antwort 27 von not.even.wrong
Wenn wir schon dabei sind...
Wer bietet ein kleines Tool, um einen BSOD zu erzeugen?
(bitte ab WinXP-SP2 oder höher)
Aber bitte keine buggy Kernelmode-Treiber. Sowas wäre Schmuh ;o)
Einfach 'ne kleine EXE zum probieren.
PS: Interessiert mich echt. Unter NT4 hab ich sowas mal gemacht. Den ausgenutzten Bug hat MS aber irgendwann gefixt.
n.e.w.
Wer bietet ein kleines Tool, um einen BSOD zu erzeugen?
(bitte ab WinXP-SP2 oder höher)
Aber bitte keine buggy Kernelmode-Treiber. Sowas wäre Schmuh ;o)
Einfach 'ne kleine EXE zum probieren.
PS: Interessiert mich echt. Unter NT4 hab ich sowas mal gemacht. Den ausgenutzten Bug hat MS aber irgendwann gefixt.
n.e.w.
Antwort 28 von TByte
Zitat:
jo - eigentlich müsste tbyte nach seiner ideologie schon in diesem beispiel die iostream neu backen... ;)
jo - eigentlich müsste tbyte nach seiner ideologie schon in diesem beispiel die iostream neu backen... ;)
OK, hier:
int main() {
char *video = (char*)0xB8000;
char *hello = "Hello World";
for(video+=4000; video !=(char*)0xB8000 ;video--)
*video=0;
while (*hello) {
*video = *hello;
video++;
*video = 0x07;
video++;
hello++;
}
mfg
TByte
Antwort 29 von Jaja
hey tbyte - das hast du zwar schön irgendwo her kopiert, doch wird das nicht funktionieren..
1. hast du komplett das betriebsystem ignoriert, welche solch direkte zugriffe auf eine i/o adresse zu verhindern weiß
2. besteht die iostream nicht nur aus hello world
3. beginnt nicht bei allen system der framebuffer bei 0xB8000
ich muss leider sagen das mir deine arroganz langsam unsymphatisch wird.. sorry
1. hast du komplett das betriebsystem ignoriert, welche solch direkte zugriffe auf eine i/o adresse zu verhindern weiß
2. besteht die iostream nicht nur aus hello world
3. beginnt nicht bei allen system der framebuffer bei 0xB8000
ich muss leider sagen das mir deine arroganz langsam unsymphatisch wird.. sorry
Antwort 30 von TByte
naja, gut.
Ich hatte schon echt versucht, etwas anderes irgendwie herzustellen. Zu dem Halle Welt kann ich nur sagen:
Es ist relativ schwer, ohne eine Standardbibliothek zu nutzen, einen Zeichenkettentyp zu erfinden, den man irgendwie als Parameter an irgendeine Funktion übergeben kann.
Zum anderen:
Naja, ich wollt nich lang auf mich warten lassen, deshalb hatte ich keine Zeit sowas richtiges selber zu machen. Aber wenn ihr drauf besteht, dann werd ich mich mal in die Materie reinlesen und euch was geben!
mfg
TByte
PS.: Wieso denn arroganz, sollte doch eher die gemeinde hier aufmuntern und nebenbei etwas über die Computer-History lehren.
Ich hatte schon echt versucht, etwas anderes irgendwie herzustellen. Zu dem Halle Welt kann ich nur sagen:
Es ist relativ schwer, ohne eine Standardbibliothek zu nutzen, einen Zeichenkettentyp zu erfinden, den man irgendwie als Parameter an irgendeine Funktion übergeben kann.
Zum anderen:
Naja, ich wollt nich lang auf mich warten lassen, deshalb hatte ich keine Zeit sowas richtiges selber zu machen. Aber wenn ihr drauf besteht, dann werd ich mich mal in die Materie reinlesen und euch was geben!
mfg
TByte
PS.: Wieso denn arroganz, sollte doch eher die gemeinde hier aufmuntern und nebenbei etwas über die Computer-History lehren.

