Как заставить код C выполнять шестнадцатеричный байт-код?

Я хочу, чтобы простой метод C мог запускать шестнадцатеричный байт-код на 64-битной машине Linux. Вот программа на C, которая у меня есть:

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

Код, который я пытаюсь запустить("\x48\x31\xc0")Я получил, написав эту простую программу на ассемблере (она не должна ничего делать)

.text
.globl _start
_start:
        xorq %rax, %rax

а затем скомпилировать и выполнить objdump-, чтобы получить байт-код.

Однако, когда я запускаю свою программу на C, я получаю ошибку сегментации. Любые идеи?

9
задан Peter Cordes 29 April 2019 в 17:16
поделиться