Executando código de máquina na memória

Eu estou tentando descobrir como executar código de máquina armazenado na memória.

Eu tenho o seguinte código:

#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]);
}

O código acima compila bem no GCC, mas quando eu tento e executo o programa a partir da linha de comando assim:

./my_prog /bin/echo hello

Os segfaults do programa. Eu descobri que o problema está na última linha, já que comentá-lo interrompe o segfault.

Eu não acho que estou fazendo muito bem, já que ainda estou dando uma olhada nos ponteiros de função.

O problema é um elenco defeituoso ou algo mais?

questionAnswers(9)

yourAnswerToTheQuestion