如何让程序在执行过程中覆盖自己

How to make program to overwrite itself during execution in go

我尝试编写一个程序,它可以自行打开、自行读取并查找某个地址或字节以替换为其他值。

我的 objective 是通过在第一次运行时修改一些字节来制作一个程序来理解它是否是第一次 运行 (我真的不喜欢在我的程序之外创建一个文件)

可执行文件可以自行读取,但当它尝试自我覆盖时会抛出错误(其他进程使用的文件...正如预期的那样)

程序有没有办法覆盖自己?如果不是,也许我可以只修改仅包含数据的程序的一部分? 还有其他我不知道的简单解决方案吗?

(我同时使用 Linux 和 windows 作为 OS。)

据我了解,你的objective是想看看这个程序以前有没有运行。不要按照您提出的为什么不创建文件的想法去做,可以是任何文件,检查 运行ning 文件是否存在。如果它在那里那么它已经 运行 之前没有。

解决方法可以是(因为它不会自我覆盖,它只是创建另一个文件):

  1. 复制原始可执行文件的所有内容
  2. 修改我需要的
  3. 将原始可执行文件重命名为固定名称"old version"
  4. 将修改后的字节写入"original name"(修改后的可执行文件)
  5. 启动刚刚创建的新可执行文件
  6. 要么让原始可执行文件自行删除,要么从刚刚创建的修改后的可执行文件中删除它

我认为即使不是以最干净的方式完成工作(程序必须从头开始,但我想这是不可避免的)...

如果有人知道更好的方法,欢迎您写下您的想法。