Daten in das codesegment laden
-
Moin!
Ich habe folgendes Problem: Ich möchte ein Programm schreiben, dass eine Datei in den RAM lädt und sie dann ausführt (ich gehe einfach mal davon aus, dass die Datei binär ist).
Wenn ich die Datei einfach in ein chararray einlese, liegt die Datei im Datensegment .. und da kann ich ja schlecht hin jumpen.
Also muss ich speicher im Codesegment reservieren, nur wie?
Wenn ich mit alloc Speicher alloziiere, bekomme ich doch immer Speicher aus dem Datensegment.
Ich sag dann schon mal Danke im voraus
-
.. und da kann ich ja schlecht hin jumpen.
doch, das geht gut.
-
-
Also so wirklich funzt das nicht. Hier mal mein Code:
#include <cstdio> #define BUF 1024*1024 typedef int(*func_t)(void); int main(int argc, char* argv[]) { FILE* file = 0; char* bincode = new char[BUF]; func_t f=(func_t)bincode; if(argc < 2) { fprintf(stderr, "Usage: %s <Programfile>\n", argv[0]); return 1; } if(!(file=fopen(argv[1], "rb"))) { fprintf(stderr, "Couldn't open programfile\n"); return 2; } for(int i=0; (i<BUF) && (!feof(file)); ++i) bincode[i] = fgetc(file); fclose(file); fprintf(stdout, "Starting program..."); f(); // Fakt ist: Hier springt er in die Wallachei! fprintf(stdout, "done.\n"); return 0; }
Der Debugger sagt f == bincode. Beides sind aber auch nur Offsets. Ich denke, dass er bei f(); nach cs:bincode und nicht nach ds:bincode springt!
Davon mal abgesehen: DS zeigt aber doch auf ein Datensegment. Im Descriptor sind die Segmente doch typisiert, also es steht fest, ob es ein Codesegment oder ein Datensegment ist. Wieso kann dann Code im Datensegment ausgeführt werden?
[EDIT]
Oha! Es funzt doch! Es liegt an der Programmdatei!
[/EDIT]