У меня было слишком много времени на моих руках, и я начал задаваться вопросом, могу ли я написать программу самомодификации. С этой целью я написал "Hello World" в C, а затем использовал шестнадцатеричный редактор, чтобы найти местоположение строки "Hello World" в скомпилированном исполняемом файле. Можно ли изменить эту программу, чтобы открыть себя и перезаписать строку "Hello World"?
char* str = "Hello World\n";
int main(int argc, char* argv) {
printf(str);
FILE * file = fopen(argv, "r+");
fseek(file, 0x1000, SEEK_SET);
fputs("Goodbyewrld\n", file);
fclose(file);
return 0;
}
Это не работает, я предполагаю, что там что-то мешает ему открыться, так как я могу разделить его на две отдельные программы ( "Hello World" и что-то изменить), и он отлично работает.
EDIT: Я понимаю, что когда программа запускается, она полностью загружается в ram. Таким образом, исполняемый файл на жестком диске, по сути, является копией. Почему это было бы проблемой для его модификации?
Есть ли способ обхода?
Спасибо