<?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 Funktionen]]></title><description><![CDATA[<p>Hallo erstmal,</p>
<p>Ich will von einem Programm in die Funktion eines anderen Programmes springen, dazu folgendes erstmal innerhalb des selben Programmes:</p>
<pre><code>#include &lt;stdio.h&gt;

unsigned int defprog(){
printf(&quot;ich bin DRIN&quot;);
return defprog();
}

//adresse von defprog() in adresse schreiben
unsigned int adresse=(unsigned int)defprog;

unsigned int chref(){
int a=0;
*(&amp;a+2)=adresse; //gebe dem befehlszeiger die adresse des programmes &quot;defprog()&quot;
return 0; //programm fährt mit &quot;defprog()&quot; fort und nciht mit &quot;main()&quot;
}

int main(){
chref();
return 0;
}
</code></pre>
<p>man sieht hier also das ich dem programm manuel den ort von defprog() gebe und er es aufruft. Der Speicherort ist umgewandelt eine 7 stellige Int-Zahl.</p>
<pre><code>#include &lt;stdio.h&gt;

void expl(){
int a=0;
*(&amp;a+2)=4199120;
}

int main(){
expl();
return 0;
}
</code></pre>
<p>hier also ein anderes programm. Die zahl die dem befehlszeiger zugewiesen wird ist der ort des programmes defprog(). Hier wird aber nicht die Funktion aufgerufen, sondern das Programm stürzt unkontrolliert ab.</p>
<p>Ich vermute es hat was mit dem Offset Wert zu tun.</p>
<p>Also gibt es doch eine Möglichkeit von dem 2ten Prog in das erste zu springen?? Ich bin dankbar für Hinweis der mich verstehen lässt, was da genau passiert.</p>
<p>danke lg Aru</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/285366/frage-zu-funktionen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 08:48:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/285366.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 18 Apr 2011 23:39:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu Funktionen on Mon, 18 Apr 2011 23:39:27 GMT]]></title><description><![CDATA[<p>Hallo erstmal,</p>
<p>Ich will von einem Programm in die Funktion eines anderen Programmes springen, dazu folgendes erstmal innerhalb des selben Programmes:</p>
<pre><code>#include &lt;stdio.h&gt;

unsigned int defprog(){
printf(&quot;ich bin DRIN&quot;);
return defprog();
}

//adresse von defprog() in adresse schreiben
unsigned int adresse=(unsigned int)defprog;

unsigned int chref(){
int a=0;
*(&amp;a+2)=adresse; //gebe dem befehlszeiger die adresse des programmes &quot;defprog()&quot;
return 0; //programm fährt mit &quot;defprog()&quot; fort und nciht mit &quot;main()&quot;
}

int main(){
chref();
return 0;
}
</code></pre>
<p>man sieht hier also das ich dem programm manuel den ort von defprog() gebe und er es aufruft. Der Speicherort ist umgewandelt eine 7 stellige Int-Zahl.</p>
<pre><code>#include &lt;stdio.h&gt;

void expl(){
int a=0;
*(&amp;a+2)=4199120;
}

int main(){
expl();
return 0;
}
</code></pre>
<p>hier also ein anderes programm. Die zahl die dem befehlszeiger zugewiesen wird ist der ort des programmes defprog(). Hier wird aber nicht die Funktion aufgerufen, sondern das Programm stürzt unkontrolliert ab.</p>
<p>Ich vermute es hat was mit dem Offset Wert zu tun.</p>
<p>Also gibt es doch eine Möglichkeit von dem 2ten Prog in das erste zu springen?? Ich bin dankbar für Hinweis der mich verstehen lässt, was da genau passiert.</p>
<p>danke lg Aru</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051432</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051432</guid><dc:creator><![CDATA[aru]]></dc:creator><pubDate>Mon, 18 Apr 2011 23:39:27 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Funktionen on Tue, 19 Apr 2011 00:21:06 GMT]]></title><description><![CDATA[<p>Nein, jedes Programm hat eigenen Speicher, auf den andere nicht zugreifen können. Vielleicht bietet das OS aber Funktionen für so etwas an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051434</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Tue, 19 Apr 2011 00:21:06 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Funktionen on Tue, 19 Apr 2011 05:29:04 GMT]]></title><description><![CDATA[<p>Unter Windows: <code>ReadProcessMemory</code> / <code>WriteProcessMemory</code></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051440</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Tue, 19 Apr 2011 05:29:04 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Funktionen on Tue, 19 Apr 2011 07:21:19 GMT]]></title><description><![CDATA[<p>aru schrieb:</p>
<blockquote>
<p>Hallo erstmal,</p>
<p>Ich will von einem Programm in die Funktion eines anderen Programmes springen, dazu folgendes erstmal innerhalb des selben Programmes:</p>
<p>&lt;snip&gt;<br />
man sieht hier also das ich dem programm manuel den ort von defprog() gebe und er es aufruft. Der Speicherort ist umgewandelt eine 7 stellige Int-Zahl.</p>
<p>&lt;snip&gt;</p>
<p>hier also ein anderes programm. Die zahl die dem befehlszeiger zugewiesen wird ist der ort des programmes defprog(). Hier wird aber nicht die Funktion aufgerufen, sondern das Programm stürzt unkontrolliert ab.</p>
<p>Ich vermute es hat was mit dem Offset Wert zu tun.</p>
<p>Also gibt es doch eine Möglichkeit von dem 2ten Prog in das erste zu springen?? Ich bin dankbar für Hinweis der mich verstehen lässt, was da genau passiert.</p>
<p>danke lg Aru</p>
</blockquote>
<p>Wenn du mir erklärst, was du vorhast, dann erkläre ich dir, warum das nicht funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051461</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051461</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Tue, 19 Apr 2011 07:21:19 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Funktionen on Tue, 19 Apr 2011 07:58:52 GMT]]></title><description><![CDATA[<p>okay danke erstmal.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18927">@DocShoe</a> naja was hab ich vor... ich studiere Informatik und der Dozent meinte, das prinzipiel alles möglich ist. Wir sollen verschiedene Dinge ausprobieren und dann erklären was da passiert, warum das eine möglich ist und etwas anderes nicht. (Ist ein Seminar)</p>
<p>und jetzt klär mich auf, für was steht die zahl der adresse? <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/2051477</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051477</guid><dc:creator><![CDATA[aru]]></dc:creator><pubDate>Tue, 19 Apr 2011 07:58:52 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Funktionen on Tue, 19 Apr 2011 08:19:42 GMT]]></title><description><![CDATA[<p>Alle modernen Betriebssysteme, die ich kenne, haben Speicherschutz und virtuelles Speichermanagement, das heißt, du hast im Programm keinen Zugriff mehr auf absolute physische Speicheradressen, sondern nur noch auf virtuelle, die vom OS auf physischen Speicher abgebildet werden. Das bedeutet unter anderem auch, dass jeder Prozess seinen eigenen virtuellen Adressraum hat, der normalerweise nur von ihm beschrieben werden kann. Wenn du also in einem Prozess in einen Speicherbereich schreibst, dann hat das keinen Einfluss auf den Speicherbereich anderer Prozesse. Und deshalb kannst du nicht in einem Prozess eine Speicheradresse auslesen und diese Adresse in einem anderen Prozess anspringen. Die Adressen sind zwar gleich für Prozess A und B, aber die Speicherinhalte unterscheiden sich. Für Prozess A ist er definiert, weil es der Beginn des Funktionscodes ist, für Prozess B ist er allerdings undefiniert, weil B einen anderen Adressraum besitzt, daher auch deine Abstürze. Windows bietet für solche Zwecke Funktionen an, die auf den Adressraum anderer Prozess zugreifen können, wenn der Aufrufer entsprechende Rechte besitzt (sprach EOutOfResources schon an).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051483</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051483</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Tue, 19 Apr 2011 08:19:42 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Funktionen on Tue, 19 Apr 2011 08:22:37 GMT]]></title><description><![CDATA[<p>Für Variablen würde sich evtl auch noch ein Shared-Memory anbieten. Boost ein ein ziemlich cooles Interface dafür.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051486</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051486</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 19 Apr 2011 08:22:37 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Funktionen on Tue, 19 Apr 2011 16:21:35 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/26352">@aru</a>: Darf ich dich darauf aufmerksam machen, daß schon das erste Programm nicht standardkonform ist?<br />
Erstens ist es schon undefiniert, einen Funktionszeiger in einen &quot;normalen&quot; Zeiger umzuwandeln, von einem int gar nicht zu reden.<br />
Zweitens ist es nicht gesichert, daß du mit <code>*(&amp;a+2)</code> wirklich die Rücksprungadresse der Funktion überschreibst.<br />
Und drittens machst du den Stack vermutlich noch mehr kaputt, wenn die defprog()-Funktion endet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051729</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 19 Apr 2011 16:21:35 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Funktionen on Tue, 19 Apr 2011 16:50:00 GMT]]></title><description><![CDATA[<p>jau danke, das ist mir bewusst, das Programm kehrt dannach auch nicht wieder in die main funktion zurück. Wie gesagt ich wollte nur erforschen, was die Sprache zulässt und wie sie auf bestimmte befehle reagiert, die außerhalb der Norm sind. danke für die Erläuterungen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051744</guid><dc:creator><![CDATA[aru]]></dc:creator><pubDate>Tue, 19 Apr 2011 16:50:00 GMT</pubDate></item></channel></rss>