<?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[Funktionszeiger und Shellcode]]></title><description><![CDATA[<p>Hio,<br />
Ich habe ein kleines Problem mit Funktionszeigern. Ich möchte innerhalb meines Programmes reinen Shellcode ausführen. Dazu habe ich folgendes Beispiel gefunden:</p>
<pre><code class="language-cpp">char shellcode[] = 
	&quot;\x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb\x16\x5b\x31\xc0&quot;
	&quot;\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d&quot;
	&quot;\x53\x0c\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73&quot;
	&quot;\x68&quot;; 

int main() {
	void (*fp)() = shellcode;
	fp();
	return 0;
}
</code></pre>
<p>gcc meckert mit: Fehler: »char*« kann nicht nach »void (*)()« in initialization umgewandelt werden.<br />
Das verstehe ich nicht ganze. Eigentlich sollte fp ein Zeiger auf eine Funktion sein, die keine Parameter braucht und auch keine zurückgibt. Und diese Funktion liegt halt als shellcode im Programm vor.</p>
<p>Wo liegt da der Fehler?</p>
<p>Gruß<br />
Pille</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/247795/funktionszeiger-und-shellcode</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 10:59:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/247795.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 15 Aug 2009 16:04:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktionszeiger und Shellcode on Sat, 15 Aug 2009 16:04:18 GMT]]></title><description><![CDATA[<p>Hio,<br />
Ich habe ein kleines Problem mit Funktionszeigern. Ich möchte innerhalb meines Programmes reinen Shellcode ausführen. Dazu habe ich folgendes Beispiel gefunden:</p>
<pre><code class="language-cpp">char shellcode[] = 
	&quot;\x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb\x16\x5b\x31\xc0&quot;
	&quot;\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d&quot;
	&quot;\x53\x0c\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73&quot;
	&quot;\x68&quot;; 

int main() {
	void (*fp)() = shellcode;
	fp();
	return 0;
}
</code></pre>
<p>gcc meckert mit: Fehler: »char*« kann nicht nach »void (*)()« in initialization umgewandelt werden.<br />
Das verstehe ich nicht ganze. Eigentlich sollte fp ein Zeiger auf eine Funktion sein, die keine Parameter braucht und auch keine zurückgibt. Und diese Funktion liegt halt als shellcode im Programm vor.</p>
<p>Wo liegt da der Fehler?</p>
<p>Gruß<br />
Pille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1761418</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761418</guid><dc:creator><![CDATA[Pille456]]></dc:creator><pubDate>Sat, 15 Aug 2009 16:04:18 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger und Shellcode on Sat, 15 Aug 2009 16:20:08 GMT]]></title><description><![CDATA[<p>Huh?<br />
<code>fp</code> ist ein Funktionszeiger, <code>shellcode</code> hingegen ein Array aus <code>char</code> . Ein Array aus <code>char</code> ist keine Funktion, folglich kann auch kein Funktionszeiger darauf zeigen. Du könntest <code>shellcode</code> eventuell casten, jedoch denke ich nicht, dass das so eine gute Idee ist. Hast Du keinen ASM von dem shellcode? Oder geht es Dir um Obfuscation?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1761426</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761426</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Sat, 15 Aug 2009 16:20:08 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger und Shellcode on Sat, 15 Aug 2009 17:08:32 GMT]]></title><description><![CDATA[<p>Hmm naja die Theorie ist ja diese dahinter:<br />
Shellcode ist irgendein gültiger, ausführbarer Code sobald dieser im Speicher landet. Das dieser im C++ Programm in dieser Form mit Opcodes vorliegt ist ja dem Speicher egal, im Speicher sind alle Daten gleich.<br />
Nun muss ich C++ ja nur noch irgendwie sagen &quot;führe das aus, wan an der Stelle steht wo du Shellcode abgelegt hast&quot;.<br />
Und dazu wollte ich halt einen Funktionszeiger auf diese Speicherstelle nutzen, die halt genau auf Shellcode zeigt. Sprich genau die dortige Funktion ausführt.</p>
<p>Bestimmt ist das 1000mal einfacher mit inline Assembler etc. zu realisieren,aber hier geht es gerade weniger um eine praktische Anwendung, sondern eher zum Verstehen von Shellcodes und deren nutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1761451</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761451</guid><dc:creator><![CDATA[Pille456]]></dc:creator><pubDate>Sat, 15 Aug 2009 17:08:32 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger und Shellcode on Sat, 15 Aug 2009 19:40:19 GMT]]></title><description><![CDATA[<p>natürlich ist das möglich. das man dir wenigstens die richtige antwort<br />
im ersten post nicht gegeben hat. tzzz...</p>
<pre><code class="language-cpp">void (*fp)() = reinterpret_cast&lt;void(*)()&gt;(shellcode);
</code></pre>
<p>einfach reincasten <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/1761494</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761494</guid><dc:creator><![CDATA[keksdose2]]></dc:creator><pubDate>Sat, 15 Aug 2009 19:40:19 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger und Shellcode on Sat, 15 Aug 2009 19:45:22 GMT]]></title><description><![CDATA[<p>Nonono, not possible, geht das nicht:</p>
<pre><code>There is no context in which this conversion is possible
</code></pre>
<p><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/1761495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761495</guid><dc:creator><![CDATA[Kenn0r@Ausland]]></dc:creator><pubDate>Sat, 15 Aug 2009 19:45:22 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger und Shellcode on Sat, 15 Aug 2009 21:56:46 GMT]]></title><description><![CDATA[<p>Kenn0r@Ausland schrieb:</p>
<blockquote>
<p>Nonono, not possible, geht das nicht:</p>
<pre><code>There is no context in which this conversion is possible
</code></pre>
<p><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>
</blockquote>
<p>Das sagt wer?</p>
<p>Ich denke auch, daß das geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1761528</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761528</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 15 Aug 2009 21:56:46 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger und Shellcode on Sat, 15 Aug 2009 22:50:58 GMT]]></title><description><![CDATA[<p>el visual estudio 2008</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1761548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761548</guid><dc:creator><![CDATA[Kenn0r@Ausland]]></dc:creator><pubDate>Sat, 15 Aug 2009 22:50:58 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger und Shellcode on Sun, 16 Aug 2009 11:32:02 GMT]]></title><description><![CDATA[<p>keksdose2 schrieb:</p>
<blockquote>
<p>natürlich ist das möglich. das man dir wenigstens die richtige antwort im ersten post nicht gegeben hat. tzzz...</p>
</blockquote>
<p>Hatte ja nicht direkt erwartet, eine Antwort zu bekommen die sofort richtig ist, wollte aber auch klar machen in welche Richtung die Antwort gehen sollte <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>Mal ganz nebenbei, gcc/g++ schluckt das anstandslos - danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1761658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761658</guid><dc:creator><![CDATA[Pille456]]></dc:creator><pubDate>Sun, 16 Aug 2009 11:32:02 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger und Shellcode on Sun, 16 Aug 2009 11:36:42 GMT]]></title><description><![CDATA[<p>Afaik geht das nicht, also Datenzeiger auf Codezeiger zu casten (nach Standard), würde auch Sinn machen, man denke an eine Harvard-Architektur.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1761660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761660</guid><dc:creator><![CDATA[Tippgeber]]></dc:creator><pubDate>Sun, 16 Aug 2009 11:36:42 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger und Shellcode on Sun, 16 Aug 2009 12:39:24 GMT]]></title><description><![CDATA[<p>Tippgeber schrieb:</p>
<blockquote>
<p>Afaik geht das nicht, also Datenzeiger auf Codezeiger zu casten (nach Standard)</p>
</blockquote>
<p>Dochdoch, geht schon, ist schliesslich C++. <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>Man muss halt zu einer <code>union</code> greifen. Aber ob das Sinn macht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1761701</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761701</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 16 Aug 2009 12:39:24 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger und Shellcode on Sun, 16 Aug 2009 12:45:46 GMT]]></title><description><![CDATA[<p>Natürlich ist das Verhalten vom Standard nicht gedeckt. Auch nicht mit union.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1761703</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761703</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 16 Aug 2009 12:45:46 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger und Shellcode on Sun, 16 Aug 2009 12:57:05 GMT]]></title><description><![CDATA[<p>Es geht in C++ nur mit einer Uni0n.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1761710</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761710</guid><dc:creator><![CDATA[Kenn0r]]></dc:creator><pubDate>Sun, 16 Aug 2009 12:57:05 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger und Shellcode on Sun, 16 Aug 2009 16:32:30 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">char *data = 0;
void (*pfunc)() = reinterpret_cast&lt;void (*)()&gt;(data);
pfunc();
</code></pre>
<p>ohne probleme (visual studio 08)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1761839</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761839</guid><dc:creator><![CDATA[keksdose2]]></dc:creator><pubDate>Sun, 16 Aug 2009 16:32:30 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger und Shellcode on Sun, 16 Aug 2009 16:38:10 GMT]]></title><description><![CDATA[<p>Aso, aha, also mit &quot;char code[] = ...&quot; gehts ned, aber mit &quot;char* code = ...&quot; schon.<br />
Komisch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1761841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1761841</guid><dc:creator><![CDATA[Kenn0r]]></dc:creator><pubDate>Sun, 16 Aug 2009 16:38:10 GMT</pubDate></item></channel></rss>