是否可以在程序关闭后在内部保存一个变量并 read/write 到它?

Is it possible to save a variable internally and read/write to it after program shuts down?

我一直在寻找一段时间,但没有希望。 基本上我想知道是否有可能在程序退出后保存一个变量并在可执行文件中读取它。

我知道可以使用 fstream 函数将变量存储在外部文件中,但我正在寻找一种方法来像在 .exe 中那样在内部存储它。

string l;
cin >> l;
// function to save it internally.....

提前致谢o.o

正如@drescherjm 和@Peter 在评论中提到的那样,这种做法正是安全软件所寻找的,因此这并不是最明智的想法。 我不太清楚你的意图,但如果你想在你的程序中实现协程,你可以这样做:

  • 创建一个 static 变量,比如 static int state=0;,并使用它来实现程序生命周期规模的协程。
  • 使用一个文件,比如 "Sys_Status.dat" 来存储这些变量的信息。

这里有一些关于为什么这不是一个好主意的提示。

  • 这并不比使用另一个文件好。
    • 您不能将一大块内存作为“我的所有数据”访问并将其写入文件,因此您必须正确地序列化/反序列化。一旦您获得了该代码,与写入空文件相比,它实际上 更多 处理复杂的文件格式(可能是 ELF or PE)。
  • 实际上更糟。
    • 写入数据时的错误可能会使您的程序无法运行。
    • 多个用户不能各自拥有自己的数据。
  • 您的可执行文件通常是不可写的。
    • 在基于 Unix 的系统上,二进制文件通常安装到系统目录中,普通用户根本无法更改它们。
    • 即使运行以root身份,系统分区为只读的情况并不少见(例如,我自己的设置已/挂载为只读)。
    • 在Windows系统上,虽然运行具有管理员权限更为常见,但它并不通用,而且,无论如何,运行ning程序的二进制文件是被锁定的。
  • 即使您设法解决所有这些问题,它也会妨碍数据的可移植性。
    • 您的程序和数据的安装和更新已消失。
    • 无法备份您的数据并稍后恢复(可能在另一个系统上)。
  • 当时唯一修改可执行文件的程序是恶意软件。因此,拦截可执行修改程序并将其关闭是反恶意软件最基本的功能之一。
    • 按照这些思路,在实现签名二进制文件或任何类型的信任系统的系统上,您修改后的二进制文件将无法通过签名测试。

因此,您的程序和用户体验中有很多怪癖、很多复杂的解决方法(需要请求特殊权限、棘手的保存和备份、很可能丢失数据)。另一方面,简单地保存到数据文件很容易实现并且用户友好。