是否可以在程序关闭时将程序数据保存在 RAM 中?

Is it possible to save program data in RAM even when the program is closed?

基本上我想知道的是我是否想在程序执行之间将数据保存在 RAM 中;如果我在 RAM 中写下我要保存它的位置,我可以在程序完成后将信息存储在 RAM 中。我可以这样做吗:

int *p = 10;
send_to_database(p); // Send the location in memory to some server
p = null_ptr;
del p;

The program finishes running

The program starts running again
int *p;
p = get_from_db(user_token);

我想我真正想知道的是我可以故意泄漏内存但稍后再回来吗?它不会被任何类型的垃圾收集处理,因为我们现在会简单地忘记它的位置。然后下次我 运行 程序时,我会查找我在 RAM 中存储某些内容的位置并将其重新加载。

谨防吓人,这是一个纯理论问题。我突然想到,你可以用它做一些非常时髦的用户身份验证,只要计算机没有关闭,它只会保留他们的登录。由于授权令牌会保存到每个人计算机上的不同位置,这让我感到震惊,当程序关闭时很难翻找授权令牌的位置。

简答不。当进程存在时,进程的内存被擦除,当新进程启动时,它从头开始。否则你会遇到重大安全问题。

接下来你要做的是存储 p 指向的内容。当你重新启动时,你 malloc() 相同的大小,并从你的存储中读回内容。请注意,您不能将指针存储在磁盘上,并期望它们在新会话中加载时确实有效。

假设我们谈论的是您日常使用的普通计算机:不,这是不可能的。

首先,您的程序正在从 C++ 内存管理器分配内存,而 C++ 内存管理器又从操作系统分配内存。
当进程退出时,操作系统会回收进程使用的所有内存。

此外,您的程序分配的内存位于 虚拟 内存中 - 每个进程都有自己的相同地址 space.
这由操作系统和硬件映射到物理内存中的位置。
事实上,甚至无法保证每次在同一执行期间访问程序中的地址时,它都会映射到相同的物理 RAM 位置。

此外,对于攻击者来说,找出令牌的位置是微不足道的。
(找出剩下的路作为练习。)