将数据从可执行文件本身写入可执行文件的末尾

时间:2016-05-30 16:19:07

标签: c linux executable

我有这个有趣的想法:将一些数据(比如整数类型的变量)写到可执行文件本身的末尾,然后在下次运行时读取它。

这可能吗?这样做是件坏事(我很确定这是:))?怎么会遇到这个问题?

附加
我更喜欢在Linux操作系统下用C语言做这个,但是可以理解任何编程语言/操作系统组合的答案。

编辑:
经过一段时间玩这个想法后,很明显Linux在执行时不允许写入文件。但是,它允许delete它。

我现在对写作过程的看法是:

  1. 使用程序制作程序的副本
  2. 将数据附加到副本的末尾
  3. 制作程序以自行删除
  4. 将副本重命名为原始名称
  5. 一旦我有时间,我会尽力实现。

    如果有人对“删除自己”在Linux下如何工作感兴趣 - 请查看有关inode的信息。据我所知,在Windows下无法做到这一点(可能是错误的)。

    编辑2:
    用C实现了Linux下的工作example 它基本上使用上述策略,即将数据位附加到复制程序的末尾,删除自身并将程序重命名为原始名称。它接受整数在CLI中保存为单个参数,并且也打印旧数据。

    这肯定不会在Windows下运行(虽然我在快速搜索中找到some options),但我很好奇它将如何在OS X下运行。

    效率思想:

    • 显然,复制整个可执行文件效率​​不高。我想在程序停止执行后,另一个帮助程序可执行文件可以更快地执行更快的操作。
    • 它不会重复使用旧空间,而只是在每次运行时将新数据附加到最后。这可以通过一些页脚预订过程来修复(可能会在将来尝试实现)

    编辑3:
    令人惊讶的是,它适用于OS X! (版本10.11.5,默认gcc)。

0 个答案:

没有答案