So erstellen Sie ein C-Programm, das x86-Hexadezimalcodes ausführen kann

8

Ich habe ein Array von Hex-Codes, die in Assembler-Anweisungen übersetzt werden, und ich möchte ein Programm in C erstellen, das diese ausführen kann.

%Vor%     
Iowa15 28.06.2012, 20:52
quelle

5 Antworten

8

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.

    
Viktor Latypov 28.06.2012, 22:09
quelle
4

Deklarieren Sie einen Funktionszeiger und rufen Sie dann die Funktion auf.

%Vor%

Natürlich ist das ein undefiniertes Verhalten und funktioniert nicht garantiert.

    
ouah 28.06.2012 20:56
quelle
4

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);

%Vor%

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%     
yang wen 29.06.2012 07:02
quelle
1

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:

Ссылка

    
alinsoar 28.06.2012 21:12
quelle
-1

Konnten Sie diese nicht einfach in eine Datei ausgeben und dann den Aufruf system() verwenden? Auf diese Weise müssen Sie sich keine Gedanken darüber machen, ob dieses Array der C-Aufrufkonvention folgt.

    
Daniel 28.06.2012 20:56
quelle

Tags und Links