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?