Я пытаюсь выяснить, как выполнить машинный код, хранящийся в памяти.
У меня есть следующий код:
#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]);
}
Код выше компилируется в GCC, но когда я пытаюсь выполнить программу из командной строки следующим образом:
./my_prog /bin/echo hello
Программа segfaults. Я выяснил, что проблема находится на последней строке, так как комментирование ее останавливает segfault.
Я не думаю, что я делаю это совершенно правильно, так как я все еще склоняюсь к указателям на функции.
Является ли проблема неисправным приложением или что-то еще?