<?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[Crashtest :D]]></title><description><![CDATA[<p>hey <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>kompiliert mal bitte diesen CODE:</p>
<pre><code class="language-cpp">int main()
{
	string satz[2] = {&quot;World&quot;, &quot;Hallo&quot;};
	for(int i = 2; i &gt;= 0; --i)
	{
		cout&lt;&lt;satz[i];
	}
	cout&lt;&lt;&quot;\n&quot;;

	return 0;
}
</code></pre>
<p>und dann aufrufen und schon seht ihr was ich meine xD<br />
man sieht dann alle Windowsordner mit source(benötigt diesen Ressourcen editor zum nachprüfen)</p>
<p>Guckt euch das mal an</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/180419/crashtest-d</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 19:26:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/180419.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 02 May 2007 14:15:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Crashtest :D on Wed, 02 May 2007 14:15:21 GMT]]></title><description><![CDATA[<p>hey <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>kompiliert mal bitte diesen CODE:</p>
<pre><code class="language-cpp">int main()
{
	string satz[2] = {&quot;World&quot;, &quot;Hallo&quot;};
	for(int i = 2; i &gt;= 0; --i)
	{
		cout&lt;&lt;satz[i];
	}
	cout&lt;&lt;&quot;\n&quot;;

	return 0;
}
</code></pre>
<p>und dann aufrufen und schon seht ihr was ich meine xD<br />
man sieht dann alle Windowsordner mit source(benötigt diesen Ressourcen editor zum nachprüfen)</p>
<p>Guckt euch das mal an</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1277586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277586</guid><dc:creator><![CDATA[Marco F.]]></dc:creator><pubDate>Wed, 02 May 2007 14:15:21 GMT</pubDate></item><item><title><![CDATA[Reply to Crashtest :D on Wed, 02 May 2007 14:35:11 GMT]]></title><description><![CDATA[<p>Wie hast du das denn rausgefunden?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1277603</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277603</guid><dc:creator><![CDATA[ceplusplus]]></dc:creator><pubDate>Wed, 02 May 2007 14:35:11 GMT</pubDate></item><item><title><![CDATA[Reply to Crashtest :D on Wed, 02 May 2007 14:52:14 GMT]]></title><description><![CDATA[<p>Warum so umständlich ?</p>
<pre><code class="language-cpp">int main()
{
   char* satz = 0;
   cout&lt;&lt; *satz;
   return 0;
}
</code></pre>
<p>Macht dasselbe.</p>
<p>Gruß,</p>
<p>Simon2</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1277617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277617</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 02 May 2007 14:52:14 GMT</pubDate></item><item><title><![CDATA[Reply to Crashtest :D on Wed, 02 May 2007 14:53:06 GMT]]></title><description><![CDATA[<p>hmm joa ... du greifst nur auf einen bereich zu in dem du nichts zu suchen hast ... std::string string[2] =&gt; string[2] net da <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="😉"
    /> muss string[1] heißen <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1277619</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277619</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Wed, 02 May 2007 14:53:06 GMT</pubDate></item><item><title><![CDATA[Reply to Crashtest :D on Wed, 02 May 2007 15:13:25 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Warum so umständlich ?</p>
<pre><code class="language-cpp">int main()
{
   char* satz = 0;
   cout&lt;&lt; *satz;
   return 0;
}
</code></pre>
<p>Macht dasselbe.</p>
<p>Gruß,</p>
<p>Simon2</p>
</blockquote>
<p>oder so:</p>
<pre><code class="language-cpp">int main()
{
	return *((int*)0);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1277657</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277657</guid><dc:creator><![CDATA[crasher]]></dc:creator><pubDate>Wed, 02 May 2007 15:13:25 GMT</pubDate></item><item><title><![CDATA[Reply to Crashtest :D on Wed, 02 May 2007 17:28:52 GMT]]></title><description><![CDATA[<p>Ist wohl alles reine Glückssache. Beim obigen Code (Simon) z.B. stürzt das Programm auf meinem Rechner einfach ab. Ich hatte auch mal vor Ewigkeiten versehentlich nen Array überlaufen, und dessen Inhalt anzeigen lassen. Brachte ganz lustige Infos über die CPU (Stepping, Modell, Befehlssatz etc.), und ein paar Ordner sowie Benutzer (!) -daten zum Vorschein, bis das Programm abstürzte. Nen <a href="http://img470.imageshack.us/img470/4608/arrayfehlzugriffce3.jpg" rel="nofollow">Screenshot existiert auch davon.</a></p>
<p>Ein uninitialisierter Pointer, der auf fremden Speicherbereich zeigt, produziert eine Access Violation, und somit ist das Verhalten undefiniert.</p>
<p>[EDIT:] Der Code von Marco zeigt hingegen tatsächlich einige Infos an, sehr ähnlich zum Screenshot. Mein PC piepste ein paar mal, und danach stürzte das Programm ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1277763</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277763</guid><dc:creator><![CDATA[mikey]]></dc:creator><pubDate>Wed, 02 May 2007 17:28:52 GMT</pubDate></item><item><title><![CDATA[Reply to Crashtest :D on Wed, 02 May 2007 17:58:00 GMT]]></title><description><![CDATA[<p>Schwach.</p>
<pre><code>Thomas:~ Thomas$ cat &gt; test.cpp
#include &lt;iostream&gt;
using namespace std;

int main()
{
    string satz[2] = {&quot;World&quot;, &quot;Hallo&quot;};
    for(int i = 2; i &gt;= 0; --i)
    {
        cout&lt;&lt;satz[i];
    }
    cout&lt;&lt;&quot;\n&quot;;

    return 0;
}

Thomas:~ Thomas$ g++ test.cpp -o test
Thomas:~ Thomas$ ./test 
Segmentation fault
Thomas:~ Thomas$ rm test*
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1277779</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277779</guid><dc:creator><![CDATA[ich mag bill nicht]]></dc:creator><pubDate>Wed, 02 May 2007 17:58:00 GMT</pubDate></item><item><title><![CDATA[Reply to Crashtest :D on Wed, 02 May 2007 20:30:34 GMT]]></title><description><![CDATA[<p>Mh also ich hab mir den Thread hier jetzt grad durchgelesen und das dann selber sofort mal ausprobiert, und das funktioniert ja echt. Was passiert da den jetzt genau? Man greift auf eine string Adresse vom Betriebsystem zu oder? Aber warum steht in einem string so viel drin??? Wenn man das mit 4 probiert dann kommt bei mir noch viel mehr. Kann man soviel überhaupt in einen string reinschreiben? Und was ist das genau was da drin steht? Was passiert da, hat jemand eine Ahnung von?</p>
<p>CODE:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int main()
{
    string test[1];
    cout &lt;&lt; test[20] &lt;&lt; endl; 
    return 0;
}
</code></pre>
<p>Bei 2,4,11,14 und 20 kommen witzige Ergebnisse bei mir! Weiter hatte ich keinen bock mehr zu suchen.<br />
Bei 13,15 und 19 z.B. kommt bei mir nicht mal n Error.<br />
Also irgendwie fasziniert mich das jetzt <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>
<p>Dankeschön schon mal im Voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1277827</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277827</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Wed, 02 May 2007 20:30:34 GMT</pubDate></item><item><title><![CDATA[Reply to Crashtest :D on Wed, 02 May 2007 21:16:18 GMT]]></title><description><![CDATA[<p>Stromberg schrieb:</p>
<blockquote>
<p>Man greift auf eine string Adresse vom Betriebsystem zu oder?</p>
</blockquote>
<p>Nein, es hat nichts mit strings und dem Betriebssystem zu tun. Das OS kennt keine &quot;strings&quot; in dem Sinne, es ist nur eine simple Klasse. Hierbei handelt es sich viel mehr um Adressen. Um jetzt nicht noch genauer auf die überladenen Indexoperatoren der string-Klasse einzugehen, betrachten wir die string-Klasse einfach mal als einen rohen char* String, also eine Zeichenkette. Mit dem [] Operator greift man auf eine Speicheradresse zu. Vorher muss man sich diese Adressen reservieren, also dem Betriebssystem sagen, &quot;hey, ich möchte z.B. 4 kb Speicher haben, gib mir den mal&quot;. Dieser angeforderte Speicher steht dir dann frei zur Verfügung, und kein anderes Programm darf darauf zugreifen (es sei denn, man verwendet ReadProcessMemory (), aber das ist wieder ne andere Geschichte). Selbiges gilt natürlich auch für dich. Du darfst nur in deinem eigenen Speicherbereich agieren, aber nicht auf fremden zugreifen, da es sonst einen Segmentation Fault gibt, und das Programm stürzt ab (Verursacht durch Windows persönlich!). Natürlich kann dich aber trotzdem niemand daran hindern, auf diese Bereiche zuzugreifen, wie es in den obigen Codebeispielen gezeigt wurde. In dem Fall wurde dem string nur ein bestimmter Speicherbereich reserviert, (z.B. 20 Zeichen), und du versuchst, auf das 25 Zeichen (nichts anderes als ne Speicheradresse) zuzugreifen. Da diese Adresse jedoch nicht deinem Programm zugewiesen wurde, kannst du zwar deren Inhalt auslesen und anzeigen lassen, jedoch lässt dann Windows das Programm abstürzen (da nicht gestattet!). Das ist eigentlich der ganze Zauber an der Sache. Du machst nichts anderes, als den Inhalt bestimmter Speicheradressen auszulesen.</p>
<p>Das mit den Stringgefummel ist übrigens nur ein Nebeneffekt. Um gezielt den Inhalt einer Speicheradresse auszulesen, kann man z.B. folgendes machen:</p>
<pre><code class="language-cpp">unsigned char addr = 0x04FF;
 unsigned char *inhalt = reinterpret_cast &lt;unsigned char*&gt; (addr);
 std::cout&lt;&lt;*inhalt;
</code></pre>
<p>...Programmabsturz vorprogrammiert <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>Wer sich näher mit dem Thema beschäftigen möchte, dem seien Buffer Overflow Exploits ans Herz gelegt, denn dieses Märchen geht noch viel weiter <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/1277845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277845</guid><dc:creator><![CDATA[mikey]]></dc:creator><pubDate>Wed, 02 May 2007 21:16:18 GMT</pubDate></item><item><title><![CDATA[Reply to Crashtest :D on Wed, 02 May 2007 22:03:57 GMT]]></title><description><![CDATA[<p>Was man hier ausliest ohne das das Programm abstürzt, ist kein prozessfremder Speicher sondern Speicher, der vom Betriebssystem in den Adressraum des eigenen Prozesses eingeblendet wird. Es ist also nicht so, als würde man verbotenen Speicher lesen (der Zugriff ist Programm-intern natürlich als nicht typsicher zu bezeichnen), sondern man liest Informationen aus, die das Betriebssystem einen sowieso zur Verfügung stellt und die man über geeignete API-Funktionen wesentlich typsicherer Abfragen kann. Der Grund warum das Betriebssystem es so macht ist, dass es einfach performanter ist, die Informationen in den Speicherbereich readonly (und shared) für alle Prozesse einzublenden, anstatt das das Programm jedesmal einen langsamen Betriebssystem-Aufruf machen muss.</p>
<p>Also muss ich eure Begeisterung bremsen, damit kommt man unter Windows NT nicht an geheime Informationen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1277859</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277859</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 02 May 2007 22:03:57 GMT</pubDate></item></channel></rss>