<?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[Code on the fly]]></title><description><![CDATA[<p>Hi!</p>
<p>Gibts eine Möglichkeit, Code dynamisch einzubinden, außer als DLL? Wenn ich quasi Assembler-Code zur Laufzeit erzeuge oder aus einer Datei lade (nur den Code für eine Funktion), kann ich den irgendwie aufrufen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/198741/code-on-the-fly</link><generator>RSS for Node</generator><lastBuildDate>Mon, 29 Jun 2026 15:31:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/198741.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 24 Nov 2007 21:53:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Code on the fly on Sat, 24 Nov 2007 21:53:05 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Gibts eine Möglichkeit, Code dynamisch einzubinden, außer als DLL? Wenn ich quasi Assembler-Code zur Laufzeit erzeuge oder aus einer Datei lade (nur den Code für eine Funktion), kann ich den irgendwie aufrufen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1409578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409578</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 24 Nov 2007 21:53:05 GMT</pubDate></item><item><title><![CDATA[Reply to Code on the fly on Sat, 24 Nov 2007 22:03:18 GMT]]></title><description><![CDATA[<p>Moin,<br />
das würd mich auch sehr interessieren.<br />
In Java kann man ja z.b. Klassen dynamisch nachladen.<br />
Aber wie siehts mit den Restlichen Sprachen aus?</p>
<p>MFG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1409584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409584</guid><dc:creator><![CDATA[Claude]]></dc:creator><pubDate>Sat, 24 Nov 2007 22:03:18 GMT</pubDate></item><item><title><![CDATA[Reply to Code on the fly on Sat, 24 Nov 2007 22:23:29 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>...kann ich den irgendwie aufrufen?</p>
</blockquote>
<p>Du kannst Dir einen Funktionspointer definieren, der mit der Startadresse des generierten Codes initialisiert wird.<br />
Mit 'casten bis zum Absturz' kann die Startadresse auch die Adresse einer Variablen (Array) sein.<br />
Eben nur aufpassen, daß der generierte Code _keine_ festen Adressen (Stringreferenzen o.ä.) enthält.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1409594</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409594</guid><dc:creator><![CDATA[CodeJumper]]></dc:creator><pubDate>Sat, 24 Nov 2007 22:23:29 GMT</pubDate></item><item><title><![CDATA[Reply to Code on the fly on Sat, 24 Nov 2007 22:28:46 GMT]]></title><description><![CDATA[<p>Hem, also theoretisch müsste das gehen. Ich kenne mich leider mit x86-Assembler nicht aus. Aber Pseudocode:</p>
<pre><code class="language-cpp">void load(ifstream &amp;file, size_t filesize)
{
    std::vector&lt;int&gt; code(filesize);
    std::copy(istream_iterator&lt;int&gt;(file), istream_iterator&lt;int&gt;(), back_inserter(code));

    _asm:
        jsr &amp;(code[0]);   // Jump Subroutine
}
</code></pre>
<p>Naja, nicht getestet und nur eine Idee. <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>Aber wenn es nicht C++- oder Maschinencode sein soll: eine Scriptsprache wie Python oder LUA erfüllt genau diesen Zweck in C++: Code on the fly ausführen. Ja, sogar on the fly abändern! D.h. ohne das C++-Programm neu starten zu müssen. Machen ja Game-Entwickler auch nicht anders: die ändern ihre Scripte im Spiel und spielen die Scene nochmal neu ohne das Spiel neu starten zu müssen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1409597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409597</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Sat, 24 Nov 2007 22:28:46 GMT</pubDate></item><item><title><![CDATA[Reply to Code on the fly on Sat, 24 Nov 2007 22:33:52 GMT]]></title><description><![CDATA[<p>Ich glaub ich probiers so mal aus <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="🙂"
    /> Python kenne und nutze ich selbst sehr gerne als eingebettete Skriptsprache, ist aber für mein Projekt nicht zu gebrauchen! Aber danke für die Einschätzung des theoretisch-gehens <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="😉"
    /> <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="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1409599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409599</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 24 Nov 2007 22:33:52 GMT</pubDate></item><item><title><![CDATA[Reply to Code on the fly on Sat, 24 Nov 2007 22:40:40 GMT]]></title><description><![CDATA[<p>schau dich doch mal bei den jit-compiler (java, mono, perl oder ähnliche) oder bei den vms mit code-umsetzung um (valgrind, virtualbox oder ähnliches). dort solltest du die passende herangehensweise für dein problem finden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1409604</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409604</guid><dc:creator><![CDATA[ghorst]]></dc:creator><pubDate>Sat, 24 Nov 2007 22:40:40 GMT</pubDate></item><item><title><![CDATA[Reply to Code on the fly on Sat, 24 Nov 2007 23:06:24 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Hi!<br />
Gibts eine Möglichkeit, Code dynamisch einzubinden, außer als DLL? Wenn ich quasi Assembler-Code zur Laufzeit erzeuge oder aus einer Datei lade (nur den Code für eine Funktion), kann ich den irgendwie aufrufen?</p>
</blockquote>
<p>das ist sehr systemspezifisch. unter welcher umgebung möchtest du das machen?<br />
<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/1409612</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409612</guid><dc:creator><![CDATA[low level hacker]]></dc:creator><pubDate>Sat, 24 Nov 2007 23:06:24 GMT</pubDate></item><item><title><![CDATA[Reply to Code on the fly on Sat, 24 Nov 2007 23:21:42 GMT]]></title><description><![CDATA[<p>low level hacker schrieb:</p>
<blockquote>
<p>das ist sehr systemspezifisch. unter welcher umgebung möchtest du das machen?<br />
<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>
</blockquote>
<p>Unter &quot;normalen&quot; Desktop-PCs, unter Windows und wenn's geht auch unter Linux <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="🙂"
    /> Hab übrigens schon was hingekriegt:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

typedef void(*Calculator)(int*);

int main()
{
	unsigned char code[] = { 0x55, 0x8B, 0xEC, 0x8B, 0x45, 0x08, 0xc7, 0x00, 0x40, 0xE2, 0x01, 0x00, 0x5D, 0xC3 };
	void* c = (void*)&amp;code[0];
	Calculator calc = (Calculator)(c);

	int x = 10;
	calc( &amp;x );
	cout &lt;&lt; x &lt;&lt; endl;
	return 0;
}
</code></pre>
<p>Der Code ist für</p>
<pre><code class="language-cpp">void Calc( int* x )
{
    *x = 123456;
}
</code></pre>
<p>Im Detail:</p>
<pre><code class="language-asm">push ebp
mov ebp,esp
mov eax, dword ptr [x]
mov dword ptr [eax],1E240h
pop ebp
ret
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1409618</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409618</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 24 Nov 2007 23:21:42 GMT</pubDate></item><item><title><![CDATA[Reply to Code on the fly on Sat, 24 Nov 2007 23:41:01 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Hab übrigens schon was hingekriegt:</p>
</blockquote>
<p>den umweg über den void* kannste dir übrigens sparen. ein</p>
<pre><code>Calculator calc = (Calculator)code;
</code></pre>
<p>sollte reichen. aber bedenke dabei, dass sich der code in einem RAM bereich befindet, der normalerweise nicht für die codeausführung ausgezeichnet ist. manche betriebssysteme könnten darauf etwas zickig reagieren. zu allem übel müsste der code auch noch mit dem selben compiler übersetzt werden, mit dem der code compiliert wurde, der ihn aufruft und wenn erst 'relocation' ins spiel kommt, wird das ganze sowieso gnadenlos abkacken. verwende lieber eine eingebettete skriptsprache (wie schon vorgeschlagen) ansonsten kommst du mit solchen hacks in teufels küche.<br />
<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/1409622</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409622</guid><dc:creator><![CDATA[hack the world]]></dc:creator><pubDate>Sat, 24 Nov 2007 23:41:01 GMT</pubDate></item><item><title><![CDATA[Reply to Code on the fly on Sun, 25 Nov 2007 00:01:25 GMT]]></title><description><![CDATA[<p>Unter Linux und anderen Unix-Derivaten kannst du mit <a href="http://man.cx/mmap(2)" rel="nofollow">man: mmap(2)</a> und PROT_EXEC Code direkt ausführbar laden. Achte darauf, dass du den Code Positionsunabhängig kompilierst. Das geht mittels -pie bzw -fPIE-Flag beim GCC.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1409627</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409627</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Sun, 25 Nov 2007 00:01:25 GMT</pubDate></item></channel></rss>