Hallo liebes Forum, ich hatte heute vormittag etwas mit der FILE Structure herumgespielt. Folgendes ist passiert. Durch Zufall habe ich herausgefunden dass man auch durch Makros auf Strukturen zugreifen kann(Wisst ihr ja wahrscheinlich schon ;)). Im speziellen mein ich den STDIN. Aus irgendeinem einem Grund tritt der selbe Effekt als würde man den Puffer leeren, wenn man das "stdin->_cnt" auf 0 setzt. (Windows 8.1 CodeBlocks, MinGW64 aktuelle V) Ich tippe mal darauf dass das "current" heißen soll, und die aktuelle Position beinhaltet. Könnt ihr euch das erklären? Was passiert da genau? Gruß Müller
Die Leute, die die Library schrieben, hatten sich größte Mühe gegeben, damit du nicht auf die Interna zugreifen kannst. Der Grund dafür: Jeder macht das anders. Und die wollen solche Interna ohne Ankündigung von einer auf die andere Version ändern. Meist kann man da nicht einfach einen Wert ändern, muss mehrere Werte gleichzeitig konsistent ändern. Wenn du dich für so etwas interessierst - beim GCC bekommst du alle Quelltexte für die Libraries. Kannst genau nachvollziehen, was da wie gemacht wird. Übrigens, cnt ist normalerweise die Abkürzung für count.
Du hast recht. Aber wenn man die Struktur direkt in die stdio.h schreibt, ziemlich weit oben. Dann hat man sich ja nicht viel Mühe gegeben, damit ich das nicht sehen kann ;) Die glibc unterscheidet sich extrem von der die bei mir in den includes drinnen ist. Mit dem Cnt für count hast du recht. Aber trotzdem leuchtet mir der Effekt noch nicht wirklich ein. Wenn ich den Cnt auf 0 setze, sage ich dem, dass da aktuell nichts drinnen ist. Ist ja dann quasi so, dass ich dem vergaukle, dass der Puffer leer wäre. Womit dann beispielsweise eine erneute Eingabe ohne Probleme funktioniert(1. Eingabe absichtlich mehr Zeichen, damit die noch im Puffer drinnen sind). Ich könnte mir jetzt vorstellen, wenn man das nach jeder Eingabe auf 0 setzt, und immer bei einer eingabe mehr Zeichen eingibt(Fgets), dass ich da mit den immer übrig geblieben Zeichen im Puffer, den stdin irgendwann zum overflow bringen könnte. Könnte das sein? Gruß
Wie wär's, wenn du einfach mal Code postest, damit das alle nachvollziehen können, statt diesem prosa-rosa geschwafel?!
MinGW verwendet die C-Laufzeitbibliothek von Microsoft (msvcr*.dll). Deren Interna (und dazu gehört auch dieses _cnt) sind m.W. nicht öffentlich dokumentiert. Dir bleibt also nicht anderes übrig, als - zu raten, - herumzuprobieren, - die msvcr*.dll reverse-zu-engineeren - oder die Wine-Sourcen anzuschauen und zu hoffen, dass die Wine- Entwickler richtig geraten, herumprobiert und reverse-geengineert haben. Der Nutzen dieser Aktion wird aber eher gering sein, denn wenn du auf solche Tricks baust, wird dein Programm gerade einmal unter Windows und dort evtl. auch nur mit einer bestimmten Version der Laufzeitbibliothek funktionieren. Müller schrieb: > ich hatte heute vormittag etwas mit der FILE Structure herumgespielt. Herumspielen ist natürlich immer erlaubt :)
Müller schrieb: > Du hast recht. Aber wenn man die Struktur direkt in die stdio.h > schreibt, ziemlich weit oben. Dann hat man sich ja nicht viel Mühe > gegeben, damit ich das nicht sehen kann ;) Naja, sehen kannst du es schon, wenn du willst, aber es sollte dich nicht interessieren. Das sind Interna, und wenn du da direkt dran rumpfuschst, kann alles mögliche passieren. > Wenn ich den Cnt auf 0 setze, sage ich dem, dass da aktuell nichts > drinnen ist. Nein. Du manipulierst interne Daten, ohne deren Bedeutung zu verstehen. Das ist so, als ob du deinen Fernseher aufmachst, und dann irgendwo wahllos einen Widerstand einlötest und nun versuchst, zu verstehen, warum als Reaktion darauf das Bild nun grün ist.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.