Tag: 自我修改

C标准是否允许自我修改代码?

可以在C中以可移植的方式实现自修改代码吗? 我问的原因是,在某种程度上,OOP依赖于自修改代码(因为在运行时执行的代码实际上是作为数据生成的,例如在v表中),但是,似乎,如果这太过分了,它会阻止编译器中的大多数优化。 例如: void add(char *restrict p, char *restrict pAddend, int len) { for (int i = 0; i < len; i++) p[i] += *pAddend; } 优化编译器可以将*pAddend提升出循环,因为它不会干扰p 。 但是, 这不再是自修改代码中的有效优化 。 通过这种方式,似乎C不允许自修改代码,但与此同时,这不意味着你不能在C中做一些像OOP这样的事情吗? C真的支持自修改代码吗?

C程序可以修改其可执行文件吗?

我手上有点太多时间,开始想知道我是否可以写一个自修改程序。 为此,我在C中编写了一个“Hello World”,然后使用hex编辑器在已编译的可执行文件中查找“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中。 因此,对于所有意图和目的,硬盘驱动器上的可执行文件都是副本。 为什么修改自己会有问题? 有解决方法吗? 谢谢