Funktionszeiger und Shellcode
-
Hmm naja die Theorie ist ja diese dahinter:
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.
Nun muss ich C++ ja nur noch irgendwie sagen "führe das aus, wan an der Stelle steht wo du Shellcode abgelegt hast".
Und dazu wollte ich halt einen Funktionszeiger auf diese Speicherstelle nutzen, die halt genau auf Shellcode zeigt. Sprich genau die dortige Funktion ausführt.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.
-
natürlich ist das möglich. das man dir wenigstens die richtige antwort
im ersten post nicht gegeben hat. tzzz...void (*fp)() = reinterpret_cast<void(*)()>(shellcode);einfach reincasten

-
Nonono, not possible, geht das nicht:
There is no context in which this conversion is possible
-
Kenn0r@Ausland schrieb:
Nonono, not possible, geht das nicht:
There is no context in which this conversion is possible
Das sagt wer?
Ich denke auch, daß das geht.
-
el visual estudio 2008
-
keksdose2 schrieb:
natürlich ist das möglich. das man dir wenigstens die richtige antwort im ersten post nicht gegeben hat. tzzz...
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

Mal ganz nebenbei, gcc/g++ schluckt das anstandslos - danke!
-
Afaik geht das nicht, also Datenzeiger auf Codezeiger zu casten (nach Standard), würde auch Sinn machen, man denke an eine Harvard-Architektur.
-
Tippgeber schrieb:
Afaik geht das nicht, also Datenzeiger auf Codezeiger zu casten (nach Standard)
Dochdoch, geht schon, ist schliesslich C++.

Man muss halt zu einer
uniongreifen. Aber ob das Sinn macht...
-
Natürlich ist das Verhalten vom Standard nicht gedeckt. Auch nicht mit union.
-
Es geht in C++ nur mit einer Uni0n.
-
char *data = 0; void (*pfunc)() = reinterpret_cast<void (*)()>(data); pfunc();ohne probleme (visual studio 08)
-
Aso, aha, also mit "char code[] = ..." gehts ned, aber mit "char* code = ..." schon.
Komisch?