<?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[Eigener Virtual Address Space]]></title><description><![CDATA[<p>Nabend,</p>
<p>ich baue zur Zeit einen C-Interpreter (wie es dazu gekommen ist, kann hier noch mal nachgelesen werden: <a href="http://www.c-plusplus.net/forum/280390" rel="nofollow">http://www.c-plusplus.net/forum/280390</a>).</p>
<p>Mittlerweile geht es richtig gut voran, lexikalisch als auch syntaktisch. Im Moment denke ich schon mal etwas vor und mache mir Gedanken übers eigentliche interpretieren. Meine &quot;Zwischensprache&quot; die ich interpretiere wird der vom Parser erzeugte Syntaxbaum sein. So weit, so gut. Grundsätzlich ist es ja so, dass ein Interpreter nur vorliegenden Source-Code interpretieren kann. Ich möchte jedoch eine Anbindung zu kompilierten Code herstellen. Dieser Code muss zwangsweise als .dll bzw. .so vorliegen, da es nicht anders möglich ist, Code zur Laufzeit zu laden. So weit ich bisher gedacht habe, sollte das auch problemlos funktionieren ... bis auf eine Kleinigkeit (mehr oder weniger klein).</p>
<p>Folgendes Szenario mal als Beispiel:</p>
<p>Der Programmierer erstellt eine Funktion. An späterer Stelle wird eine DLL-Funktion aufgerufen und die Adresse der vorher erstellten Funktion übergeben (Funktionszeiger). Die DLL-Funktion soll die andere Funktion über den Zeiger aufrufen können.</p>
<p>Wie könnte das mit den Adressen gelöst werden? Schließlich existiert die Funktion nur in einer von mir definierten Struktur (Syntaxbaum), und nicht als kompilierter Code (somit auch ohne Adresse). Ich bräuchte also etwas, was mir Adressen generiert, mapped oder managed (oder irgendwie sowas) und auf Aufrufe bzw. Zugriffe reagiert ... und das nicht nur auf abstrakter Ebene, sondern auch wenn kompilierter Code tatsächlich die Adresse (wie im obigen Beispiel) aufruft.</p>
<p>Ich dachte mir, dass ein Betriebssystem praktisch auch nichts anderes mit physikalischen Speicher macht. Jedoch weiß ich im Moment hinten und vorne nicht ob das funktionieren kann, und wenn ja, wie.</p>
<p>Hat jemand eine Idee?</p>
<p>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/292241/eigener-virtual-address-space</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 02:10:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/292241.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 05 Sep 2011 16:26:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Eigener Virtual Address Space on Mon, 05 Sep 2011 16:26:56 GMT]]></title><description><![CDATA[<p>Nabend,</p>
<p>ich baue zur Zeit einen C-Interpreter (wie es dazu gekommen ist, kann hier noch mal nachgelesen werden: <a href="http://www.c-plusplus.net/forum/280390" rel="nofollow">http://www.c-plusplus.net/forum/280390</a>).</p>
<p>Mittlerweile geht es richtig gut voran, lexikalisch als auch syntaktisch. Im Moment denke ich schon mal etwas vor und mache mir Gedanken übers eigentliche interpretieren. Meine &quot;Zwischensprache&quot; die ich interpretiere wird der vom Parser erzeugte Syntaxbaum sein. So weit, so gut. Grundsätzlich ist es ja so, dass ein Interpreter nur vorliegenden Source-Code interpretieren kann. Ich möchte jedoch eine Anbindung zu kompilierten Code herstellen. Dieser Code muss zwangsweise als .dll bzw. .so vorliegen, da es nicht anders möglich ist, Code zur Laufzeit zu laden. So weit ich bisher gedacht habe, sollte das auch problemlos funktionieren ... bis auf eine Kleinigkeit (mehr oder weniger klein).</p>
<p>Folgendes Szenario mal als Beispiel:</p>
<p>Der Programmierer erstellt eine Funktion. An späterer Stelle wird eine DLL-Funktion aufgerufen und die Adresse der vorher erstellten Funktion übergeben (Funktionszeiger). Die DLL-Funktion soll die andere Funktion über den Zeiger aufrufen können.</p>
<p>Wie könnte das mit den Adressen gelöst werden? Schließlich existiert die Funktion nur in einer von mir definierten Struktur (Syntaxbaum), und nicht als kompilierter Code (somit auch ohne Adresse). Ich bräuchte also etwas, was mir Adressen generiert, mapped oder managed (oder irgendwie sowas) und auf Aufrufe bzw. Zugriffe reagiert ... und das nicht nur auf abstrakter Ebene, sondern auch wenn kompilierter Code tatsächlich die Adresse (wie im obigen Beispiel) aufruft.</p>
<p>Ich dachte mir, dass ein Betriebssystem praktisch auch nichts anderes mit physikalischen Speicher macht. Jedoch weiß ich im Moment hinten und vorne nicht ob das funktionieren kann, und wenn ja, wie.</p>
<p>Hat jemand eine Idee?</p>
<p>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2115364</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2115364</guid><dc:creator><![CDATA[skNiNe]]></dc:creator><pubDate>Mon, 05 Sep 2011 16:26:56 GMT</pubDate></item><item><title><![CDATA[Reply to Eigener Virtual Address Space on Tue, 06 Sep 2011 09:23:52 GMT]]></title><description><![CDATA[<p>Hallo skNiNe,</p>
<p>du darfst dann der externen Funktion nicht direkt die Adresse übergeben, sondern übergibst ihr die Adresse einer eigenen Funktion, welche dann die Abarbeitung durchführt.<br />
Du müßtest dann natürlich die Adresse deiner Struktur (im Syntaxbaum) noch irgendwie global speichern, damit du dann in der Funktion darauf zugreifen kannst. Probleme entstehen dann natürlich sobald du mehrere Callback-Adressen an die externen DLLs übergibst.<br />
Evtl. ein Array für die Funktionszeiger anlegen und dann eine feste Anzahl von eigenen Funktionen erstellen, welche dann entsprechend auf einen unterschiedlichen Index des Arrays zugreifen:</p>
<pre><code class="language-cpp">typedef void (*Func_array)();
Func_Array func_array[MAX];

int func_array_index = 0; // aktueller (freier) Index (zum Eintragen in das Array)

void Func1(...)
{
  // Zugriff auf Array-Index 1
}

void Func2(...)
{
  // Zugriff auf Array-Index 2
}

...
</code></pre>
<p>So und nun kommt das eigentliche Problem: die Signatur der Funktion, d.h. die Parameter und der Rückgabewert!<br />
Du müßtest dann (wahrscheinlich direkt mit Assembler) die Funktionsparameter von dem Stack auslesen und für den Rückgabewert den passenden Wert zurückgeben.</p>
<p>Alles in allem kaum praktikabel durchführbar (außer du beschränkst dich auf bestimmte Signaturen).</p>
<p>Mit &quot;virtual address space&quot; hat dein Problem aber nichts zu tun, denn du willst ja den Code interpretieren und nicht einfach nur eine andere Adresse übergeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2115599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2115599</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Tue, 06 Sep 2011 09:23:52 GMT</pubDate></item></channel></rss>