我手头的时间有点多,开始想知道我是否可以编写一个自修改程序。为此,我用 C 语言编写了一个“Hello World”,然后使用十六进制编辑器在编译的可执行文件中查找“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”和一些修改它的东西)并且它工作正常。
编辑:我的理解是,当程序运行时,它完全加载到 ram 中。因此,无论出于何种目的和目的,硬盘驱动器上的可执行文件都是一个副本。为什么修改自己会成为问题?
有解决方法吗?
谢谢