<?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[Unvollständige Funktion &amp;quot;aufrufen&amp;quot;?! Asm?!]]></title><description><![CDATA[<p>Hallo,<br />
ich habe ein kleines Problem. Ich habe eine Funktion irgendwo im Speicher sitzen, von der die ersten 4 bytes fehlen. Diese 4 bytes (bzw. die asm Befehle, welche in diesen 4 bytes sitzen) sind aber zur Compilezeit bekannt, und so habe ich gedacht, ich könnte vielleicht soetwas schreiben...</p>
<pre><code class="language-cpp">DerRueckgabeWert DieFunktion(DieArgumente)
{
	__asm
	{
		//Die ersten Befehle, z.B.
		nop
		nop
		nop
		nop

		call EchteFunktion
	}
}
</code></pre>
<p>Hier mal ein kleines Beispiel:</p>
<pre><code class="language-cpp">char* pcAdd;
int Add()
{
	return 1+2;
}

void Add2()
{
	__asm
	{
		call pcAdd;
	}
}

int main()
{
	pcAdd=reinterpret_cast&lt;char*&gt;(Add);
	Add2();
	return 0;
}
</code></pre>
<p>Dies erzeugt den folgenden Assembler code:<br />
Add:<br />
00000 55 push ebp<br />
00001 8b ec mov ebp, esp<br />
00003 83 ec 40 sub esp, 64 ; 00000040H<br />
00006 53 push ebx<br />
00007 56 push esi<br />
00008 57 push edi</p>
<p>00009 b8 mov eax, 3 ;1+2 <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>0000e 5f pop edi<br />
0000f 5e pop esi<br />
00010 5b pop ebx<br />
00011 8b e5 mov esp, ebp<br />
00013 5d pop ebp<br />
00014 c3 ret 0</p>
<p>Add2:<br />
00000 55 push ebp<br />
00001 8b ec mov ebp, esp<br />
00003 83 ec 40 sub esp, 64 ; 00000040H<br />
00006 53 push ebx<br />
00007 56 push esi<br />
00008 57 push edi</p>
<p>00009 ff call DWORD PTR ?pcAdd@@3PADA ; pcAdd</p>
<p>0000f 5f pop edi<br />
00010 5e pop esi<br />
00011 5b pop ebx<br />
00012 8b e5 mov esp, ebp<br />
00014 5d pop ebp<br />
00015 c3 ret 0</p>
<p>Wenn ich jetzt meinen Code aber anpasse, klappt es nicht (Exception) <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>
<pre><code class="language-cpp">char* pcAdd;
int Add()
{
	return 1+2;
}

void Add2()
{
	__asm
	{
		push edp
		call pcAdd;
	}
}

int main()
{
	pcAdd=reinterpret_cast&lt;char*&gt;(Add);
	pcAdd++;

	Add2();
	return 0;
}
</code></pre>
<p>Was ist falsch?!<br />
Helft mir <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/topic/158043/unvollständige-funktion-quot-aufrufen-quot-asm</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 13:31:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/158043.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 31 Aug 2006 18:49:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Unvollständige Funktion &amp;quot;aufrufen&amp;quot;?! Asm?! on Thu, 31 Aug 2006 18:49:00 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe ein kleines Problem. Ich habe eine Funktion irgendwo im Speicher sitzen, von der die ersten 4 bytes fehlen. Diese 4 bytes (bzw. die asm Befehle, welche in diesen 4 bytes sitzen) sind aber zur Compilezeit bekannt, und so habe ich gedacht, ich könnte vielleicht soetwas schreiben...</p>
<pre><code class="language-cpp">DerRueckgabeWert DieFunktion(DieArgumente)
{
	__asm
	{
		//Die ersten Befehle, z.B.
		nop
		nop
		nop
		nop

		call EchteFunktion
	}
}
</code></pre>
<p>Hier mal ein kleines Beispiel:</p>
<pre><code class="language-cpp">char* pcAdd;
int Add()
{
	return 1+2;
}

void Add2()
{
	__asm
	{
		call pcAdd;
	}
}

int main()
{
	pcAdd=reinterpret_cast&lt;char*&gt;(Add);
	Add2();
	return 0;
}
</code></pre>
<p>Dies erzeugt den folgenden Assembler code:<br />
Add:<br />
00000 55 push ebp<br />
00001 8b ec mov ebp, esp<br />
00003 83 ec 40 sub esp, 64 ; 00000040H<br />
00006 53 push ebx<br />
00007 56 push esi<br />
00008 57 push edi</p>
<p>00009 b8 mov eax, 3 ;1+2 <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>0000e 5f pop edi<br />
0000f 5e pop esi<br />
00010 5b pop ebx<br />
00011 8b e5 mov esp, ebp<br />
00013 5d pop ebp<br />
00014 c3 ret 0</p>
<p>Add2:<br />
00000 55 push ebp<br />
00001 8b ec mov ebp, esp<br />
00003 83 ec 40 sub esp, 64 ; 00000040H<br />
00006 53 push ebx<br />
00007 56 push esi<br />
00008 57 push edi</p>
<p>00009 ff call DWORD PTR ?pcAdd@@3PADA ; pcAdd</p>
<p>0000f 5f pop edi<br />
00010 5e pop esi<br />
00011 5b pop ebx<br />
00012 8b e5 mov esp, ebp<br />
00014 5d pop ebp<br />
00015 c3 ret 0</p>
<p>Wenn ich jetzt meinen Code aber anpasse, klappt es nicht (Exception) <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>
<pre><code class="language-cpp">char* pcAdd;
int Add()
{
	return 1+2;
}

void Add2()
{
	__asm
	{
		push edp
		call pcAdd;
	}
}

int main()
{
	pcAdd=reinterpret_cast&lt;char*&gt;(Add);
	pcAdd++;

	Add2();
	return 0;
}
</code></pre>
<p>Was ist falsch?!<br />
Helft mir <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/1128685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128685</guid><dc:creator><![CDATA[Trauerspiel]]></dc:creator><pubDate>Thu, 31 Aug 2006 18:49:00 GMT</pubDate></item><item><title><![CDATA[Reply to Unvollständige Funktion &amp;quot;aufrufen&amp;quot;?! Asm?! on Fri, 01 Sep 2006 06:45:03 GMT]]></title><description><![CDATA[<p>Die Frage ist wohl eher nicht wie man eine unvollständige Funktion aufrufen kann, sondern wie du zu der selben kommst...</p>
<p>Wie schafst du es den Compiler dazu zu bringen eine Funktion nicht vollständig zu uebersetzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128809</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128809</guid><dc:creator><![CDATA[Mathias]]></dc:creator><pubDate>Fri, 01 Sep 2006 06:45:03 GMT</pubDate></item><item><title><![CDATA[Reply to Unvollständige Funktion &amp;quot;aufrufen&amp;quot;?! Asm?! on Fri, 01 Sep 2006 16:41:02 GMT]]></title><description><![CDATA[<p>Klingt irgendwie nach Gaunerei.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1129269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1129269</guid><dc:creator><![CDATA[Erhard Henkes]]></dc:creator><pubDate>Fri, 01 Sep 2006 16:41:02 GMT</pubDate></item></channel></rss>