【发布时间】:2011-04-23 08:47:26
【问题描述】:
我手头的时间有点多,开始想知道我是否可以编写一个自修改程序。为此,我用 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”和一些修改它的东西)并且它工作正常。
编辑:我的理解是,当程序运行时,它会完全加载到内存中。因此,无论出于何种目的和目的,硬盘驱动器上的可执行文件都是一个副本。为什么修改自己会有问题?
有解决办法吗?
谢谢
【问题讨论】:
-
哈哈,没有。只是无聊的好奇心。
-
作弊引擎的工作原理是在程序中查找值并让您更改它们。它可以让你在电子游戏等方面获得额外的生命,但我认为你并不真的想要作弊引擎作为答案。
-
请注意,修改文件不一定——取决于操作系统——与修改实际执行的内存代码相同。您应该清楚自己希望达到的目标。
-
是的,您可以修改自己的可执行文件。你问的是修改正在运行的程序。
标签: c metaprogramming self-modifying