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

questionAnswers(9)

yourAnswerToTheQuestion