У меня есть программа, которая добавляет машинный код в конец исполняемого файла, и я хочу написать программу на С ++ в начале исполняемого файла, чтобы запустить добавленный машинный код. Затем добавленный код запустит оригинальную программу.
Моя программа будет работать на 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
}
Вы можете создать программу, которая создает исполняемый файл из добавленного кода и затем выполняет его.
Или, если вам нужно, чтобы исполняемый файл выполнял код, добавленный к нему, то вам пришлось бы вызывать этот добавленный код как функцию или перейти к нему во встроенной сборке («call» или «jmp»).