Ejecutando código de máquina en memoria
Estoy tratando de averiguar cómo ejecutar el código de máquina almacenado en la memoria.
Tengo el siguiente 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]);
}
El código anterior se compila bien en GCC, pero cuando intento ejecutar el programa desde la línea de comandos de esta manera:
./my_prog /bin/echo hello
El programa segfaults. Me he dado cuenta de que el problema está en la última línea, ya que al comentarlo se detiene la falla de seguridad.
No creo que lo esté haciendo del todo bien, ya que todavía me estoy enfocando en los punteros de función.
¿Es el problema un reparto defectuoso, o algo más?