Выполнение машинного кода в памяти

Я пытаюсь понять, как выполнить машинный код, хранящийся в памяти.

У меня есть следующий код:

#include 
#include 

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

Приведенный выше код прекрасно компилируется в GCC, но когда я пытаюсь выполнить программу из командной строки, вот так:

./my_prog /bin/echo hello

Программа segfaults. Я'Мы выяснили, что проблема в последней строке, так как ее комментирование останавливает segfault.

Я нене думаю, что яя делаю это совершенно правильно, так как яЯ все еще думаю о функциональных указателях.

Является ли проблема неисправным составом актеров или чем-то еще?

Ответы на вопрос(9)

Ваш ответ на вопрос