Um programa C pode modificar seu arquivo executável?
Eu tinha um pouco de tempo em minhas mãos e comecei a me perguntar se eu poderia escrever um programa auto-modificável. Para esse fim, escrevi um "Hello World" em C e, em seguida, usei um editor hexadecimal para encontrar o local da string "Hello World" no executável compilado. É possível modificar este programa para se abrir e substituir a string "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;
}
Isso não funciona, estou assumindo que há algo impedindo que ele se abra, pois eu posso dividir isso em dois programas separados (um "Hello World" e algo para modificá-lo) e funciona bem.
Edição: Meu entendimento é que, quando o programa é executado, ele é carregado completamente no RAM. Portanto, o executável no disco rígido é, para todos os efeitos, uma cópia. Por que seria um problema para se modificar?
Existe uma solução alternativa?
obrigado