Ich möchte eine einfache C-Methode, um Hex-Bytecode auf einer Linux-64-Bit-Maschine ausführen zu können. Hier ist das C-Programm, das ich habe:Wie bekomme ich c-Code, um Hex-Bytecode auszuführen?
char code[] = "\x48\x31\xc0";
#include <stdio.h>
int main(int argc, char **argv)
{
int (*func)();
func = (int (*)()) code;
(int)(*func)();
printf("%s\n","DONE");
}
Der Code, den ich zu laufen versuche ("\x48\x31\xc0"
) I erhalten durch diese einfache Montage Programm writting (es ist eigentlich nicht wirklich etwas tun)
.text
.globl _start
_start:
xorq %rax, %rax
und dann Kompilieren und Objdumping, um den Bytecode zu erhalten.
Wenn ich jedoch mein C-Programm ausführen, erhalte ich einen Segmentierungsfehler. Irgendwelche Ideen?
Selbst wenn Ihr Datensegment ausführbar ist oder Sie nicht haben NX aktiviert ist, was erwarten Sie, dies zu tun? Es führt eine Anweisung und dann die Anweisung danach aus (die Sie nicht steuern) und dann die Anweisung danach, bis sie Speicher erreicht, der nicht legitimen Code oder Code darstellt, der einen segfault auslöst. –
Sie müssen Byte-Code für ein "ret" hinzufügen, da der indirekte Funktionsaufruf, den Sie tun, ein "Aufruf" sein sollte, der die Rückkehradresse auf den Stapel schiebt. Atleast, das ist meine beste Vermutung, ich habe noch nie so etwas gesehen. – Chris
Ich erwarte, dass dies nichts tut, aber ich möchte, dass es ohne Absturz laufen kann. – Nosrettap