如果您可以描述您想要实现的目标,而不是您想实现它的特定机制,那么回答这个问题会容易得多。
现代操作系统通常会阻止修改正在运行的可执行文件,并且有充分的理由(安全性、完整性等)。出于类似的原因,修改磁盘上的可执行文件也是不可取的。我敢肯定,还有其他方法可以实现您的愿望,而无需求助于自我修改代码。
我有一个带有初始化为“hello world”的字符数组的 ac 代码。我想知道是否有可能在每次执行代码时将这个字符数组重新初始化为其他随机字符串。
是的,这是可能的,但是您需要授予用户对可执行文件的写入权限才能执行此操作,在二进制文件中找到正确的偏移量,修补文件并将其原封不动地保存,等等。有很多方法可以做到这一点错误的。不要这样做。
而不是在可执行文件本身中静态分配的字符串,只需有一个单独的资源文件,其中包含字符串和所需的任何其他状态。您可以更改此资源文件(INI 文件、数据文件等)以在需要时修改字符串(甚至删除它)。为了提供安全性,您可以对文件进行数字签名,这样您就可以验证内容是否合法。如果签名失败,软件可以拒绝工作。您还可以对内容进行加密,使其无法被好奇的用户读出。(除非他们使用调试器很方便!)
如果不是 C,我可以知道这种实现是否可以在任何其他编程语言中实现?
这主要是操作系统限制,包括普通用户能够写入系统文件夹中已安装的应用程序(通常是您不想允许的)。如果你不能用 C 来做,你可能不能用另一种语言来做!
执行此代码一次后,我希望 char 数组 c 自动初始化为其他一些随机字符串(而不是“hello world”),这应该是永久更改。...我可以知道这样的事情是否可能吗?
确实是的,但如上所述使用单独的文件。不要修改可执行文件本身。
这种需要是出于安全原因。
首先,不允许自我修改代码的原因是出于安全原因。如果您尝试实施某种复制保护,您最好研究现有的方法和工具以及最佳实践,甚至可能使用现成的解决方案。这东西很难,有些人为了好玩而破解软件,除了最复杂的保护方案外,他们可以轻松绕过所有问题。
如果没有,我是否可以知道是否可以让代码在执行一次后自毁?
您也许可以让可执行文件自行删除,但这通常也需要提升权限。
只需让程序检查资源文件上的签名,如果它无效则拒绝运行。