<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Frage zu EOF unter Windows]]></title><description><![CDATA[<p>Ich Frage mich, was eigentlich passiert, wenn in eienr Datei (mitten in der Datei) EOF enthalten ist?</p>
<p>EOF ist definiert als:<br />
#define EOF -1</p>
<p>...das wissen wir alle.. meine Frage ist nun:<br />
Ist es möglich ein EOF in die Mitte einer Datei zu schreiben und damit alles in der Datei, was nach EOF kommt, für alle Ahnungslosen Programme unsichtbar zu machen??</p>
<p>Ich ahbe gelesen, EOF sei eine C-Interne konstante und das betriebssystem nutze eine spezielle Zeichenfolge. Was wenn ich diese spezielle Zeichenfolge in die Mitte einer Datei setze??</p>
<p>Ihr wisst schon was ich meine....</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/78626/frage-zu-eof-unter-windows</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Apr 2026 11:18:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/78626.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 03 Jul 2004 11:55:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu EOF unter Windows on Sat, 03 Jul 2004 11:55:41 GMT]]></title><description><![CDATA[<p>Ich Frage mich, was eigentlich passiert, wenn in eienr Datei (mitten in der Datei) EOF enthalten ist?</p>
<p>EOF ist definiert als:<br />
#define EOF -1</p>
<p>...das wissen wir alle.. meine Frage ist nun:<br />
Ist es möglich ein EOF in die Mitte einer Datei zu schreiben und damit alles in der Datei, was nach EOF kommt, für alle Ahnungslosen Programme unsichtbar zu machen??</p>
<p>Ich ahbe gelesen, EOF sei eine C-Interne konstante und das betriebssystem nutze eine spezielle Zeichenfolge. Was wenn ich diese spezielle Zeichenfolge in die Mitte einer Datei setze??</p>
<p>Ihr wisst schon was ich meine....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/552290</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/552290</guid><dc:creator><![CDATA[Tolga]]></dc:creator><pubDate>Sat, 03 Jul 2004 11:55:41 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu EOF unter Windows on Sat, 03 Jul 2004 12:06:26 GMT]]></title><description><![CDATA[<p>EOF ist vom Typ int. Eine Datei besteht aber nicht aus ints, sondern auch Bytes (char). Daher ist es unmöglich, dass EOF in einer Datei auftritt.</p>
<p>Was meinst du, warum ifstream::get() einen int und keinen char zurückliefert? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/552297</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/552297</guid><dc:creator><![CDATA[Christoph]]></dc:creator><pubDate>Sat, 03 Jul 2004 12:06:26 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu EOF unter Windows on Sat, 03 Jul 2004 12:58:16 GMT]]></title><description><![CDATA[<p>Wieso kann (int)-1, also 10000000 00000000 00000000 00000000, nicht in einer Datei auftreten??</p>
<p>Ich glaube vielmehr, dass die Funktion get() von der Festplatte (oder vom Dateisystem, das darauf liegt?) Bescheid kriegt wenn die letzte Leseoperation über die Grenzen der Datei lief.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/552333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/552333</guid><dc:creator><![CDATA[Aziz]]></dc:creator><pubDate>Sat, 03 Jul 2004 12:58:16 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu EOF unter Windows on Sat, 03 Jul 2004 14:36:51 GMT]]></title><description><![CDATA[<p>Ich glaube auch, dass es sich bei der Datei-Ende-Markierung um eine festgelegte Bytefolge handelt und alle Bytes können in jeder Reihenfolge in Dateien auftreten.</p>
<p>Ich miene... wäre doch cool wenn man in ner Textdatei 'Ressourcen' einbauen könnte <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Zwar glaube ich kaum das das möglich ist denn sicher sind schon tausend weitere Programmierer auf dasselbe gekommen wie ich. Wenns ginge hätts einer vond enen geschafft und wir wüssten alls was davon..</p>
<p>Viel mehr interessiert es mich warum es nicht geht?<br />
Hängt es an der WINAPI, am Dateisystemtreiber oder wie oder was??</p>
<p>Vielleicht was ja einer doch etwas mehr...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/552442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/552442</guid><dc:creator><![CDATA[Tolga]]></dc:creator><pubDate>Sat, 03 Jul 2004 14:36:51 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu EOF unter Windows on Sat, 03 Jul 2004 16:40:39 GMT]]></title><description><![CDATA[<p>Aziz schrieb:</p>
<blockquote>
<p>Wieso kann (int)-1, also 10000000 00000000 00000000 00000000, nicht in einer Datei auftreten??</p>
</blockquote>
<p>Das sind aber 4 Bytes, kein int. Die 4 Bytes &quot;10000000 00000000 00000000 00000000&quot; können natürlich auftreten, das hab ich nie bestritten.</p>
<p>Der integer -1 (EOF) kann definitiv nicht auftreten, da get() niemals (außer eben bei EOF) etwas anderes als 0-255 zurückliefert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/552524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/552524</guid><dc:creator><![CDATA[Christoph]]></dc:creator><pubDate>Sat, 03 Jul 2004 16:40:39 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu EOF unter Windows on Sat, 03 Jul 2004 16:43:24 GMT]]></title><description><![CDATA[<p>p.s.: Wenn das Dateiende durch eine spezielle Bytefolge innerhalb der Datei kodiert wäre, wie lange würde es dann dauern, bis Windows die Eigenschaften einer 2GB-Datei anzeigen kann?</p>
<p>Das Dateiende ist im Dateisystem gespeichert, und zwar nicht über eine spezielle Bytefolge. In der Dateibeschreibung steht die Größe der Datei.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/552527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/552527</guid><dc:creator><![CDATA[Christoph]]></dc:creator><pubDate>Sat, 03 Jul 2004 16:43:24 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu EOF unter Windows on Sat, 03 Jul 2004 17:04:34 GMT]]></title><description><![CDATA[<p>Nagut, obwohl ich das immer noch nicht schnalle habe ich folgende Frage:</p>
<p>Es ist ja bekannt, dass das Dateisystem die Dateien aufteilt (fragmentiert) wenn sie nicht durchgehend in die Cluster der Festplatte passen. Wie merkt sich das Dateisystem, wo die einzelnen Datenfragmente der selben Datei liegen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/552542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/552542</guid><dc:creator><![CDATA[Aziz]]></dc:creator><pubDate>Sat, 03 Jul 2004 17:04:34 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu EOF unter Windows on Sat, 03 Jul 2004 17:33:38 GMT]]></title><description><![CDATA[<p>In der Partition Table? Aber sicher nicht immer am Ende eines Teils <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/552555</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/552555</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Sat, 03 Jul 2004 17:33:38 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu EOF unter Windows on Sat, 03 Jul 2004 17:35:57 GMT]]></title><description><![CDATA[<p>Das hört sich plausibel an <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/552558</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/552558</guid><dc:creator><![CDATA[Aziz]]></dc:creator><pubDate>Sat, 03 Jul 2004 17:35:57 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu EOF unter Windows on Sat, 03 Jul 2004 17:51:49 GMT]]></title><description><![CDATA[<p>Aziz schrieb:</p>
<blockquote>
<p>Nagut, obwohl ich das immer noch nicht schnalle [...]</p>
</blockquote>
<p>Nochmal anders formuliert: get() liefert die Daten byteweise. EOF passt aber nicht in ein Byte, deswegen kann es nicht zu den &quot;Daten&quot; gehören.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/552567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/552567</guid><dc:creator><![CDATA[Christoph]]></dc:creator><pubDate>Sat, 03 Jul 2004 17:51:49 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu EOF unter Windows on Sat, 03 Jul 2004 18:09:15 GMT]]></title><description><![CDATA[<p>Ok, ich versuche das wirklich zu verstehen, aber ich habe immer noch Fragen im Hinterkopf oder bin momentan einfach nur begriffsstutzig.</p>
<p>Noch mal zurück zu dem was du gesagt hattest:<br />
**Das sind aber 4 Bytes, kein int. Die 4 Bytes &quot;10000000 00000000 00000000 00000000&quot; können natürlich auftreten, das hab ich nie bestritten</p>
<p>Der integer -1 (EOF) kann definitiv nicht auftreten, da get() niemals (außer eben bei EOF) etwas anderes als 0-255 zurückliefert.**</p>
<p>Wenn EOF nicht (int)-1 als 4 Byte (auf 32Bit Systemen) auf der Platte liegt, wie sieht das dann aus? Wenn get() die Datei byteweise einliest wie und wann merkt er, dass jetzt das Dateiende gekommen ist?</p>
<p>Nehmen wir an wir haben eine winzige Datei:</p>
<p>&quot;00000110 00000110 00000110 11110111&quot;</p>
<p>Nach '11110111' ist ja Dateiende. Wenn get() versuchen würde weiterzulesen, dann würde er doch nicht wissen, dass er jetzt kein Byte mehr einlesen müsste sondern ein EOF. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/552576</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/552576</guid><dc:creator><![CDATA[Aziz]]></dc:creator><pubDate>Sat, 03 Jul 2004 18:09:15 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu EOF unter Windows on Sat, 03 Jul 2004 18:24:46 GMT]]></title><description><![CDATA[<p>Achso, jetzt versteh ich, was du meinst.</p>
<p>get() erkennt an den Einträgen im Dateisystem, wann das Ende der Datei erreicht ist. Dann liefert es (int)(-1) zurück.<br />
In den Daten der Datei steht nichts dergleichen, dort ist das Ende nicht speziell markiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/552582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/552582</guid><dc:creator><![CDATA[Christoph]]></dc:creator><pubDate>Sat, 03 Jul 2004 18:24:46 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu EOF unter Windows on Sat, 03 Jul 2004 18:27:31 GMT]]></title><description><![CDATA[<p>Ok, sowas in der Richtung hatte ich schon vermutet <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/552584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/552584</guid><dc:creator><![CDATA[Aziz]]></dc:creator><pubDate>Sat, 03 Jul 2004 18:27:31 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu EOF unter Windows on Sat, 03 Jul 2004 19:19:43 GMT]]></title><description><![CDATA[<p>Gut, scheint sinnvoll zu sein.<br />
Dann wäre die Frage beantwortet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/552599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/552599</guid><dc:creator><![CDATA[Tolga]]></dc:creator><pubDate>Sat, 03 Jul 2004 19:19:43 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu EOF unter Windows on Sat, 03 Jul 2004 23:14:40 GMT]]></title><description><![CDATA[<p>Tolga:<br />
Interessanterweise gibt es doch eine Möglichkeit, Daten &quot;hinter der Datei&quot; zu verstecken.<br />
Und zwar basieren die meisten Dateisysteme auf Clustern. Ein Cluster ist die kleinste logische Einheit auf der Festplatte.<br />
Ein Cluster hat z.B. 4kb (das ist beim Formatieren einstellbar). Wenn eine Datei nun 1kb groß ist, werden 3kb verschwendet, um den Cluster vollzubekommen. Die Datei belegt also 4kb, obwohl sie nur 1kb groß ist. Deswegen ist die &quot;Größe&quot; einer Datei immer kleiner oder gleich groß wie ihre &quot;Größe auf dem Datenträger&quot; (schau dir die Eigenschaften einer beliebigen kleinen Datei an).</p>
<p>Die Mindestgröße jeder Datei auf dieser Festplatte beträgt also 4 Kilobytes, selbst wenn sie nur ein Zeichen enthält.<br />
Logisch, dass bei großen Clustern und kleinen Dateien viel Platz verschwendet wird. Kleine Cluster erzeugen allerdings wieder andere Schwierigkeiten, weswegen man Kompromisse eingeht: NTFS bietet Clustergrößen von 512 bis 4096 Bytes.</p>
<p>In diesem verschwendeten Speicher am Ende fast jeder Datei lassen sich Daten unterbringen. Netterweise erscheinen diese Daten nirgends; sie belegen weder Speicher noch tauchen sie im Dateisystem auf. Sie existieren gewissermaßen gar nicht.<br />
Natürlich gibt es keine Windows-Funktion, um direkt in diesen Speicher zu schreiben. Auf den ersten Blick würde ich vermuten, dass man selbst das Dateisystem analysieren und geeignete Stellen finden muss. Bei FAT32 sollte das machbar sein, bei NTFS wirds wohl etwas komplizierter (zumal es bei NTFS auch noch Ausnahmen gibt, kleinste Dateien belegen dort nämlich effektiv 0 Cluster).</p>
<p>Wenn man die Datei, hinter der die Daten versteckt sind, auf eine andere Partition/einen anderen Datenträger kopiert, werden die versteckten Daten allerdings nicht mitkopiert. Windows kennt die Daten ja nicht.</p>
<p>Alles in allem eine gute Methode, Daten (oder Code) vor unliebsamen Blicken zu schützen.<br />
Ich meine von einem Virus gelesen zu haben, der genau das macht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
Ein Virenscanner kann nämlich prinzipbedingt nur die tatsächlichen Daten überprüfen, nicht diese versteckten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/552693</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/552693</guid><dc:creator><![CDATA[Christoph]]></dc:creator><pubDate>Sat, 03 Jul 2004 23:14:40 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu EOF unter Windows on Tue, 06 Jul 2004 16:11:50 GMT]]></title><description><![CDATA[<blockquote>
<p>Viel mehr interessiert es mich warum es nicht geht?<br />
Hängt es an der WINAPI, am Dateisystemtreiber oder wie oder was??</p>
<p>Vielleicht was ja einer doch etwas mehr...</p>
</blockquote>
<p>Einen Terminator ist nicht die einzige Methode um die Länge einer Folge festzulegen. Hier ist ein Beispiel mit Strings ohne Nullterminator:</p>
<pre><code>char*alloc_string(size_t num){
  int*mem=(int*)malloc(sizeof(size_t)+num);
  *mem=num;
  return (char*)mem;
}
#define free_string(str) free(str)
size_t string_size(const char*str){
  return *((size_t*)str);
}
char*string_begin(char*str){
  return str+4;
}
char*string_end(char*str){
  return str+4+string_size(str);
}
//...
for(char*pos=string_begin(str);pos!=string_end(str);pos+=1){
  //...
}
</code></pre>
<p>In den String kannst du jedes Zeichen packen und es klappt doch. Und was ist eine Datei anders als ein string auf der Festplate?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/554659</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/554659</guid><dc:creator><![CDATA[Irgendwer]]></dc:creator><pubDate>Tue, 06 Jul 2004 16:11:50 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu EOF unter Windows on Tue, 06 Jul 2004 16:20:38 GMT]]></title><description><![CDATA[<p>Irgendwer schrieb:</p>
<blockquote>
<p>Und was ist eine Datei anders als ein string auf der Festplate?</p>
</blockquote>
<p>Das ist es nur aus Sicht des Anwenders. Das OS dagegen muss auch Dinge wie Fragmentierung und Blockgrößen berücksichtigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/554661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/554661</guid><dc:creator><![CDATA[Christoph]]></dc:creator><pubDate>Tue, 06 Jul 2004 16:20:38 GMT</pubDate></item></channel></rss>