maschienencode zur laufzeit

cantharis

Grünschnabel
Hallo,

Wie der Titel schon sagt geht möchte ich Binärcode zur Laufzeit ausführen.
Genauer gesagt möchte ich einen bestimmten "Code-Teil" meines Programms auslesen und falls notwending daran Änderungen vornehmen und dann erst ausführen.
Momentan bin ich soweit das ich einen Zeiger auf eine Funktion erstelle und dann ihre Größe bestimmte.
Dann wollte ich eine Schleife machen und den Maschienencode auf den der Zeiger grade zeigt in einen Array schreiben, auf den ich dann letzendlich einen Funktionszeiger mache um ihn auszuführen.
Allerdings weiß ich nicht wie ich an den Code komme? Hier mal mein bisheriger Ansatz:
Code:
void ausgabe()
{
	cout << "HALLO \n";
}
void Ende(){}

int _tmain(int argc, _TCHAR* argv[])
{
	
	void (*zeiger)();
	zeiger = ausgabe;
	zeiger();

	unsigned long myFuncLen = (long)Ende - (long)ausgabe;

	wait();
	return 0;
}

Könnt ihr mir weiterhelfen?
Liebe Grüße
 
Zuerst einmal: Deine Methode ist ziemlich abhängig vom Compiler.

Was ist, wenn du einen Compiler verwendest, der Ende vor ausgabe in die Binärdatei packt, weils grad so lustig ist? Mir ist kein Standart bekannt, der die Reihenfolge festlegt.

Dann: Warum weißt du nicht, wie du an den (einzufügenden) Code kommst?
Die Frage ist wohl, was du dort machen willst, sonst kann dir keiner einen Code dafür sagen.

Was hast du denn überhaupt vor?
Wahrscheinlich lässt sich das Ganze sinnvoller lösen.
 
An welchen Code willst du wo kommen? Willst du die .exe Datei selbst in sich ändern und dann wieder ausführen oder was willst du machen?
 
Ich will an den Binärcode kommen der zur Laufzeit existiert. Also wenn ich eine .exe starte muss ja irgendwo der Code für die Funktion ausgabe() stehen und den will ich auslesen, ändern und ausführen.
 
ich will keinen disassembler ich will den maschienencode so wie er ist ihn dann in einen array packen und aufühern. Ich will ihn nicht in eine "für mich lesbare Form" wandeln.
 
meines Programms auslesen und falls notwending daran Änderungen vornehmen und dann erst ausführen.
Ja, wenn du was ändern willst, wie willst du das denn denn machen? Ich meine was bringt dir das dann mit dem auslesen? Ansonsten verwende einfach ganz normale ifstreams, Mode Flag ios_base::binary.

Gruß,

badday
 
Es geht mir erstmal nur darum den Maschienencode auszulesen und auszuführen. Aber so wie ich das verstanden habe ist das wohl nicht möglich?
 
Naja, ausführen hast du in deinem Programm ja schon drinnen.

Und ausgeben...einfach den Funktionsnamen als Pointer hernehmen und Byte für Byte ausgeben?
 
Zurück