<?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[Wie starte ich eine executable?]]></title><description><![CDATA[<p>Hi,</p>
<p>ich schreibe hier nicht besonders häufig und kann daher nur beten, dass ich das passende Forum getroffen habe <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>
<p>Es geht um folgendes:</p>
<p>Wie kann ich den Computer, oder besser gesagt, die CPU, dazu bringen, eine Datei auszuführt?<br />
Damit meine ich nicht, mit Windows so etwas wie System(&quot;Programm.exe&quot;)...sondern, generell auch auf weniger bekannten Systemen?</p>
<p>Muss man da mit Assembler was am IP oder einem der anderen Register rumhantieren oder wie läuft dieser Vorgang ab?</p>
<p>Würde halt gerne sowas wie einen App-Loader in c++ schreiben und will zumindest theoretisch wissen, wie der Ablauf aussehen sollte <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
<p>Danke schonmal für jede Hilfe <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>PS:<br />
Bei falschem Forum verschieben und ruhig schimpfen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/219728/wie-starte-ich-eine-executable</link><generator>RSS for Node</generator><lastBuildDate>Wed, 07 Oct 2026 14:02:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/219728.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 06 Aug 2008 19:17:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wie starte ich eine executable? on Wed, 06 Aug 2008 19:17:40 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich schreibe hier nicht besonders häufig und kann daher nur beten, dass ich das passende Forum getroffen habe <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>
<p>Es geht um folgendes:</p>
<p>Wie kann ich den Computer, oder besser gesagt, die CPU, dazu bringen, eine Datei auszuführt?<br />
Damit meine ich nicht, mit Windows so etwas wie System(&quot;Programm.exe&quot;)...sondern, generell auch auf weniger bekannten Systemen?</p>
<p>Muss man da mit Assembler was am IP oder einem der anderen Register rumhantieren oder wie läuft dieser Vorgang ab?</p>
<p>Würde halt gerne sowas wie einen App-Loader in c++ schreiben und will zumindest theoretisch wissen, wie der Ablauf aussehen sollte <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
<p>Danke schonmal für jede Hilfe <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>PS:<br />
Bei falschem Forum verschieben und ruhig schimpfen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560434</guid><dc:creator><![CDATA[Dark_DanI]]></dc:creator><pubDate>Wed, 06 Aug 2008 19:17:40 GMT</pubDate></item><item><title><![CDATA[Reply to Wie starte ich eine executable? on Wed, 06 Aug 2008 19:51:38 GMT]]></title><description><![CDATA[<p>Da das Starten von Programmen eine Sache des OS ist und C++ absichtlich unabhängig von Betriebssystemen ist, leider so pauschal nicht. Je nach OS sind die APIs leicht bis sehr verschieden, so dass je nach OS ander Bibliotheken und Funktionen bemüht werden müssen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560450</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 06 Aug 2008 19:51:38 GMT</pubDate></item><item><title><![CDATA[Reply to Wie starte ich eine executable? on Wed, 06 Aug 2008 20:17:52 GMT]]></title><description><![CDATA[<p>Also auf Windows geht das auf die dreckige Art:<br />
- Mit system(&quot;&quot;) rumpfuschen.<br />
oder auf die saubere Art und Weise:<br />
<a href="http://msdn.microsoft.com/en-us/library/ms684841(VS.85).aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/ms684841(VS.85).aspx</a></p>
<p>Das geht mit anderen OS mit grosser Wahrscheinlichkeit ebenfalls mit dieser unsauberen und sauberen Art. (für die Saubere brauchst du hald die jeweilige API für das OS).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560463</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560463</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 06 Aug 2008 20:17:52 GMT</pubDate></item><item><title><![CDATA[Reply to Wie starte ich eine executable? on Wed, 06 Aug 2008 23:59:01 GMT]]></title><description><![CDATA[<p>Mit protablem standard C++ geht das nicht.<br />
Ansonsten geht es oft so in der Art:</p>
<pre><code class="language-cpp">void loader(char const* path)
{
    FILE* f = fopen(path, &quot;rb&quot;);
    fseek(f, 0, SEEK_END);
    long len = ftell(f);

    std::vector&lt;char&gt; code(len);
    fseek(f, 0, SEEK_SET);
    fread(&amp;code[0], 1, len, f);

    typedef void voidfun();
    voidfun* funptr = (voidfun*)(&amp;code[0]); // hier 1x dick und fett non-standard C++ (was aber viele compiler unterstützen).
                                            // nämlich einen datenzeiger zu einem funktionszeiger zu casten
    funptr(); // die calling convention und die erwarteten parameter müssen passen, sonst klescht es hier
}
</code></pre>
<p>Natürlich klappt das nur wenn der Code relozierbar (&quot;position independent&quot;) ist, und wenn das OS und die CPU es erlauben Bytes in einem Datensegment als Code auszuführen.</p>
<p>Damit bekommst du die OS-unabhängigen Viren von denen du vermutlich träumst aber auch nicht gebacken <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/1560516</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560516</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 06 Aug 2008 23:59:01 GMT</pubDate></item><item><title><![CDATA[Reply to Wie starte ich eine executable? on Thu, 07 Aug 2008 16:34:53 GMT]]></title><description><![CDATA[<p>danke besonders für den letzten Beitrag!</p>
<p>läuft so nicht auch ein Emulator ab?<br />
Nur das er halt den op-Code übersetzt?</p>
<p>&quot;Natürlich klappt das nur wenn der Code relozierbar (&quot;position independent&quot;) ist, und wenn das OS und die CPU es erlauben Bytes in einem Datensegment als Code auszuführen.&quot;</p>
<p>und wenn eines von denen mal nicht zutreffen sollte-&gt;gibts dann überhaupt noch Hoffnung, oder ist es um es klar zu sagen selbst für Profis dann so gut wie unmöglich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560978</guid><dc:creator><![CDATA[Dark_DanI]]></dc:creator><pubDate>Thu, 07 Aug 2008 16:34:53 GMT</pubDate></item><item><title><![CDATA[Reply to Wie starte ich eine executable? on Thu, 07 Aug 2008 16:44:39 GMT]]></title><description><![CDATA[<p>Um in einem richtigen Betriebssystem Code ausführen zu können muss die Page(s) in welcher der Code steht als ausführbar markiert sein, sonst läuft da gar nichts.</p>
<p>Benutze einfach die Möglichkeiten des entsprechenden Betriebssystems, die bieten alle die Möglichkeit Code in den speicher zu laden und ihn ausführen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560983</guid><dc:creator><![CDATA[Tippgeber]]></dc:creator><pubDate>Thu, 07 Aug 2008 16:44:39 GMT</pubDate></item><item><title><![CDATA[Reply to Wie starte ich eine executable? on Thu, 07 Aug 2008 19:33:14 GMT]]></title><description><![CDATA[<p>Ich will sichergehen, dass ich nichts falsch verstanden habe...deshalb lies dir bitte folgendes kurz durch und korrigier mich:</p>
<p>std::vector&lt;char&gt; code(len);<br />
fseek(f, 0, SEEK_SET);<br />
fread(&amp;code[0], 1, len, f);</p>
<p>std::vector&lt;char&gt; code(len);<br />
du erstellst einen Vector aus char(-&gt;also 1Byte groß: aber wieso genau 1byte?)<br />
in der im ersten Feld die Größe der Datei steht-&gt;len<br />
wieso im ersten vector die Größe der Datei?~</p>
<p>fseek(f, 0, SEEK_SET);<br />
was bringt diese Zeile überhaupt?</p>
<p>fread(&amp;code[0], 1, len, f);<br />
in den ersten Vektor schreibst du nun len mal 1Byte(wieder-&gt;wieso 1Byte?) rein.<br />
wieso jetzt aber in den ersten vektor den gesamten Code reinschreiben???</p>
<p>letzter Teil ist ein Funktions-Zeiger-&gt;dachte immer, die gehörten zu c++ dazu^^<br />
naja, so lernt man eben...</p>
<p>hoffe, du kannst mir diese drei Zeilen näher erleutern <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>EDIT:<br />
zweite Zeile hat sich beim zweiten durchlesen erledigt;)</p>
<p>fehlt noch:<br />
std::vector&lt;char&gt; code(len);<br />
und<br />
fread(&amp;code[0], 1, len, f);</p>
<p>EDIT2:<br />
man lädt den fertigen Maschinencode in einen vector und führt diesen dann aus?<br />
-&gt;ddeshalb Konvertierung in eine Funktion?<br />
-&gt;muss es ein Vektor sein, oder welche besondere Eigenschaft hat er, dass man nicht bspw. ein Array aus char hätte verwenden können?</p>
<p>-&gt;In Windows funktionierts auf die schnelle nicht-&gt;war damit zu rechnen oder wäre der Code vielleicht noch ein wenig an Feinabstimmung bedarflich?</p>
<p>EDIT3:<br />
achja, und sollte denn nicht eigentlich von der Boot-Address aus angefangen werden, den Maschinen-Code zu lesen?<br />
Weil Header-Informationen etc. sind ja eigentlich nicht für die CPU direkt gedacht, sondern sowas wie Zusatz-Informationen(mitunter halt auch wichtige...)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560990</guid><dc:creator><![CDATA[Dark_DanI]]></dc:creator><pubDate>Thu, 07 Aug 2008 19:33:14 GMT</pubDate></item><item><title><![CDATA[Reply to Wie starte ich eine executable? on Fri, 08 Aug 2008 15:41:04 GMT]]></title><description><![CDATA[<p>*push*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1561541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1561541</guid><dc:creator><![CDATA[Dark_DanI]]></dc:creator><pubDate>Fri, 08 Aug 2008 15:41:04 GMT</pubDate></item><item><title><![CDATA[Reply to Wie starte ich eine executable? on Fri, 08 Aug 2008 15:48:55 GMT]]></title><description><![CDATA[<p>Dark_DanI schrieb:</p>
<blockquote>
<p>*push*</p>
</blockquote>
<p>Lern besser mal richtig Fragen stellen und auch den Quote-Button. So kommt niemand draus, was du willst.<br />
Dann kriegst du auch Antworten, aber bei dem Gewurst dort oben vergeht einem die Lust gleich wieder. <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/1561543</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1561543</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 08 Aug 2008 15:48:55 GMT</pubDate></item><item><title><![CDATA[Reply to Wie starte ich eine executable? on Fri, 08 Aug 2008 16:11:42 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Dark_DanI schrieb:</p>
<blockquote>
<p>*push*</p>
</blockquote>
<p>Lern besser mal richtig Fragen stellen und auch den Quote-Button. So kommt niemand draus, was du willst.<br />
Dann kriegst du auch Antworten, aber bei dem Gewurst dort oben vergeht einem die Lust gleich wieder. <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>
</blockquote>
<p>tut mir leid <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>hier die Fragen einzeln aufgelistet:</p>
<blockquote>
<p>std::vector&lt;char&gt; code(len); //zur 1. Frage<br />
fread(&amp;code[0], 1, len, f); //zur 2. Frage</p>
</blockquote>
<p>-wieso im ersten Vektor die Größe der Datei?~<br />
-wieso in den ersten Vektor den gesamten Code reinschreiben???<br />
-Muss es ein Vektor sein, oder wäre ein char-Array auch ausreichend?<br />
-gehören Funktions-Zeiger nicht zu c++(oder zu c)?</p>
<p>-Wird alles in Allem der Maschinen-Code in eine Funktion konvertiert?<br />
-Das das in Windows mit einer normalen exe nicht funktioniert, war doch klar, oder?<br />
-&gt;hätte ich nicht die ganze exe einlesen sollen, sondern nur AB DEM BOOT-Code?<br />
-&gt;oder lässt Windows sowas einfach nicht zu?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1561551</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1561551</guid><dc:creator><![CDATA[Dark_DanI]]></dc:creator><pubDate>Fri, 08 Aug 2008 16:11:42 GMT</pubDate></item><item><title><![CDATA[Reply to Wie starte ich eine executable? on Fri, 08 Aug 2008 16:36:45 GMT]]></title><description><![CDATA[<p>hallo</p>
<blockquote>
<p>-wieso im ersten Vektor die Größe der Datei?</p>
</blockquote>
<p>da ist nur ein vector und mit der größe wird der speicehrplatz reserviert</p>
<blockquote>
<p>-wieso in den ersten Vektor den gesamten Code reinschreiben???</p>
</blockquote>
<p>wohin den sonst ? mann muss ja irgentwie den code in den speicher bekommen</p>
<blockquote>
<p>-Muss es ein Vektor sein, oder wäre ein char-Array auch ausreichend?</p>
</blockquote>
<p>ein char array wäre ausreichend aber die vectorklasse ist leichter zu benutzen</p>
<blockquote>
<p>-gehören Funktions-Zeiger nicht zu c++(oder zu c)?</p>
</blockquote>
<p>doch zu C (und damit auch zu c++)</p>
<blockquote>
<p>-Wird alles in Allem der Maschinen-Code in eine Funktion konvertiert?</p>
</blockquote>
<p>ja</p>
<blockquote>
<p>-Das das in Windows mit einer normalen exe nicht funktioniert, war doch klar, oder?</p>
</blockquote>
<p>weil in einer .exe nichtnur code sondern auch daten wie stringliterale oder<br />
importierte funktionen stehen + header am anfang. in einer .com würden nur<br />
die daten stehen</p>
<blockquote>
<p>-&gt;hätte ich nicht die ganze exe einlesen sollen, sondern nur AB DEM BOOT-Code?</p>
</blockquote>
<p>du müsstest dich über den aufbau einer exe informieren, ab da laden</p>
<blockquote>
<p>-&gt;oder lässt Windows sowas einfach nicht zu?</p>
</blockquote>
<p>doch man kann datensegmente auch ausführen, das geht (habs schon getestet)<br />
aber das problem sind die relocationen. das sind die stellen wo das programm<br />
eine funktion aufruft, die nicht im eigenen code steht (runtime, winapi...)</p>
<p>an der stelle steht im code nur ein dummycall (glaub 0xffffffff). an diese<br />
stelle (wo das ist steht auch in der exe) wird dann die entgültige addresse<br />
hingeschrieben.</p>
<p>das problem liegt einfach daran, dass das programm im speicher wenn es läuft<br />
nicht das selbe ist, was auf der platte liegt.</p>
<p>windows macht es zum beispiel so (ungefähr)</p>
<p>-programm in den speicher kopieren<br />
-alle importierten addressen durch die entgültigen funktionen ersetzen.<br />
-alle angeforderten DLLs laden<br />
-CS:IP auf den codebegin setzen<br />
-dann wird es auseführt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1561563</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1561563</guid><dc:creator><![CDATA[helferlein]]></dc:creator><pubDate>Fri, 08 Aug 2008 16:36:45 GMT</pubDate></item><item><title><![CDATA[Reply to Wie starte ich eine executable? on Fri, 08 Aug 2008 18:53:48 GMT]]></title><description><![CDATA[<p>hat mir sehr geholfen, danke:)</p>
<p>hab noch ne Frage vergessen:</p>
<p>Wieso ausgerechnet ein char-&gt;1Byte?<br />
Sind die Anweisungen genau ein Byte groß, oder weshalb?</p>
<p>PS:<br />
Bei der <a href="http://command.com" rel="nofollow">command.com</a> funktionierts schonmal nicht:(</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1561609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1561609</guid><dc:creator><![CDATA[Dark_DanI]]></dc:creator><pubDate>Fri, 08 Aug 2008 18:53:48 GMT</pubDate></item><item><title><![CDATA[Reply to Wie starte ich eine executable? on Sun, 10 Aug 2008 15:18:12 GMT]]></title><description><![CDATA[<p>push</p>
<p>ich bekomme beim Starten-&gt;egal, was ich auch probiere immer Fehler beim Ausführen der Funktion-&gt;Die Anweisung xyz verweist auf bablabla</p>
<p>liegts vielleicht an der com-Datei?<br />
hat jemand zufällig sowas wie ne HelloWorld als com da?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1562275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1562275</guid><dc:creator><![CDATA[Dark_DanI]]></dc:creator><pubDate>Sun, 10 Aug 2008 15:18:12 GMT</pubDate></item></channel></rss>