Mit dem x86 ist es möglich.
Hier ist ein kleines Beispiel. Weisen Sie die Seite mit den Berechtigungen write / exec zu und kopieren Sie Ihre Opcodes dorthin.
%Vor%Verwenden Sie für POSIX-Systeme den Aufruf mmap ().
Lesen Sie auch über Trampoline. Siehe den Link: Ссылка
Sie haben nicht gesagt, ob dies ein komplettes Programm oder eine einzelne Funktion ist. Es könnte Probleme mit der relativen / absoluten Adressierung geben.
Kleine Anmerkung: Dieser Code funktioniert auch mit PowerPC und ARMs mit MMU aktiviert.
Auf einigen Plattformen können Sie nicht einfach Folgendes deklarieren:
%Vor%und versuchen
%Vor%um den Hexcode auszuführen.
Da die Datenseite NICHT ausführbar ist. Eine praktische Möglichkeit, eine Funktion zu definieren, ohne sich um deren Inhalt zu kümmern, ist das Hinzufügen einer .s
-Datei zu Ihrem Projekt.
Kompilieren Sie es mit GNU als, und verbinden Sie seine Objektdatei mit Ihrem endgültigen Programm.
zum Beispiel:
main.c
%Vor%x.s
Der Code funktioniert wie C statment: printf("Hello ASM\n"); exit(11);
Kompilieren & amp; Führen Sie
aus %Vor%Wenn sich Ihr Hexadezimalcode-Array in einer Binärdatei befindet, wie a.bin
%Vor%Dann kann Ihre x.s sein:
%Vor%Sehen Sie sich die Headerdatei elf.h an.
Sie müssen die Felder dieser Strukturen mit OPCodes vervollständigen.
In x86 gibt es ein Protokoll, um die ausführbare Datei zu laden, andernfalls, nachdem der Linker das Steuerelement an den geladenen Code übergeben hat, stürzt es ab.
Sehen Sie hier, wie Sie eine gültige ausführbare Datei erstellen:
Tags und Links c x86 inline-assembly