Maschinencode im Speicher ausführen

Ich versuche herauszufinden, wie im Speicher gespeicherter Maschinencode ausgeführt wird.

Ich habe folgenden Code:

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

Der obige Code kann in GCC problemlos kompiliert werden, aber wenn ich versuche, das Programm über die Befehlszeile wie folgt auszuführen:

./my_prog /bin/echo hello

Das Programm schlägt fehl. Ich habe herausgefunden, dass das Problem in der letzten Zeile steht, da das Auskommentieren den Segfault stoppt.

Ich glaube nicht, dass ich es richtig mache, da ich immer noch die Funktionszeiger im Blick habe.

Ist das Problem eine fehlerhafte Besetzung oder etwas anderes?

Antworten auf die Frage(9)

Ihre Antwort auf die Frage