einzellne funktionen in datei speichern (compiliert), dann dateien laden udn funktionen benutzen? geht das irgend wie?



  • hallo

    also kann man die funktionen "extrahieren"
    in eine datei speichern und dann aus einer exe heraus die datei laden ,den inhalt zb als string "speichern" und dann den anfang des strings (pointer) als pointer auf eine funktion definieren ... um dann die funktion "auszuführen"

    ist das machbar? ... wenn ja, dann wie?

    ich bedanke mich

    cui

    ps: über den sinn möchten wir hier aber mal nicht streiten 😉 ... danke



  • als Bibliotheksdatei?



  • Einfach eine DLL/SO-Datei nehmen. Siehe man: dlsym(2)

    ansonsten könntest du den Binärcode der Funktion in die Dateischreiben, einfach auslesen und den Buffer in ein Funktionspointer casten. Aber da solltest du lieber die erste Methode nehmen 🙂



  • in perl geht das prima.



  • Es gab mal einen Thread, wo gezeigt wurde, dass man den Inhalt eines Funktionszeigers (-->die Funktion) einfach in eine Datei schreiben kann und mit einem anderen Programm wieder als Funktionszeiger laden kann. So irgendwie könnte man das machen, ich finde aber leider den Thread gerade nicht.



  • wie findet man die länge einer funktion heraus?



  • @ kingruedi:

    "ansonsten könntest du den Binärcode der Funktion in die Dateischreiben"
    ja und wie mach ich das ? ich meine ich schreibe eine funktion in c/c++
    die kann ich ja nicht einfach so kompilieren(in binärcode umwandeln) ... jedenfalls nicht mit einem normalen compiler (oder gibts da zb. bei vc++ eine möglichkeit?) ... ich muss an den reinen funktionscode rankommen und das als binärcode!!

    für weitere hilfe wäre ich dankbar!

    cui

    ERROR

    ps: dlls will ich nicht, ich will für einzellne funktionen wiklich einzellne dateien haben!! ...



  • Einfach ein Compiler verwenden der ein reines binary ausspuckt (braucht man auch für nen eigenes OS, also einfach mal bei der ASM Faq vorbeischauen).
    Die Länge der Funktion muss man ja nicht wissen, da die Funktion ja über ein ret zurückspringt wenn sie zu Ende ist, du musst sie nur komplett in den Speicher laden und über einen Funktionszeiger aufrufen.

    Könntest vllt. auch mal bei dieversen OS DEV Seiten vorbeischauen, findest auch in der ASM Faq.



  • @Error
    Im Zweifelsfall nimmst du dir einen Disassembler wie man: objdump, der zeigt dir die Opcodes und die Assembleranweisungen an, dann kopierst du eben die Opcodes und schreibst die in eine Datei. Bei einem Jitter den ich neulich geschrieben habe, hab ich das so gemacht. Aber da ging es auch eher um kleinere Codes. Im Zweifelsfall musst du dir eben ein Programm basteln, dass die Funktion sucht und dann bis ret ausliest.



  • kingruedi schrieb:

    @Error
    Im Zweifelsfall musst du dir eben ein Programm basteln, dass die Funktion sucht und dann bis ret ausliest.

    Kann aber auch problematisch werden, wenn es mehrere rets gibt die noch zu dieser Funktion gehören.


Anmelden zum Antworten