Как выполнить машинный код, добавленный в конец исполняемого файла, используя C++?

У меня есть программа, которая добавляет машинный код в конец исполняемого файла, и я хочу написать программу на C++ в начале исполняемого файла, чтобы запустить добавленный машинный код. Затем добавленный код запустит оригинальную программу.

Моя программа будет работать на Mac.

Здесь есть похожий вопрос: выполнение машинных кодов, прикрепленных в конце исполняемого файла. Однако на этот вопрос ответа не последовало, были предложены альтернативные решения. Я не могу использовать связанные списки, потому что цель этой программы - изменить функциональность исполняемых файлов на машинах, на которых не обязательно установлен компилятор.

Вот пример:

// C++ program at the beginning of file, runs appended machine code.

// Original program, must be skipped over and run after appended machine code is run.

#include <iostream>
#include <stdio.h>
using namespace std;

int main()
{
    FILE *input,*output;
    char buffer[512];

    =fopen("a.out","rb");
    output=fopen("filename","ab");

    for(;fread(buffer,512,1,input)==1;)
        fwrite(buffer,512,1,output);
    fclose(output);
    cout << "Testing, testing, testing" << endl;

    //Run original program
}

1 ответ

Вы можете создать программу, которая создает исполняемый файл из добавленного кода и затем выполняет его. Или, если вы хотите, чтобы исполняемый файл выполнял код, добавленный к нему, то вам пришлось бы вызывать этот добавленный код как функцию или перейти к нему во встроенной сборке ("call" или "jmp").

Другие вопросы по тегам