Wykonywanie kodu maszynowego w pamięci

Próbuję dowiedzieć się, jak wykonać kod maszynowy przechowywany w pamięci.

Mam następujący kod:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{
    FILE* f = fopen(argv[1], "rb");

    fseek(f, 0, SEEK_END);
    unsigned int len = ftell(f);
    fseek(f, 0, SEEK_SET);

    char* bin = (char*)malloc(len);
    fread(bin, 1, len, f);

    fclose(f);

    return ((int (*)(int, char *)) bin)(argc-1, argv[1]);
}

Powyższy kod kompiluje się dobrze w GCC, ale kiedy próbuję wykonać program z linii poleceń w ten sposób:

./my_prog /bin/echo hello

Program ulega awarii. Zorientowałem się, że problem jest na ostatniej linii, ponieważ komentowanie go zatrzymuje segfault.

Nie sądzę, że robię to całkiem dobrze, ponieważ wciąż mam głowę nad wskaźnikami funkcji.

Czy problem jest wadliwy, czy coś innego?

questionAnswers(9)

yourAnswerToTheQuestion