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

时间:2016-04-21 06:48:40

标签: c++ pointers persistence storage ram

基本上我想知道的是,如果我想在程序执行之间将数据保存在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中的内容并将其加载回来。

因此,没有人感到恐惧,这是一个纯粹的理论问题。我刚刚想到你可以用这种方式进行某种非常时髦的用户身份验证,只要计算机没有关闭它就只能保持登录状态。由于身份验证令牌会被保存到每个人的计算机上的不同位置,因此在程序关闭时很难找到身份验证令牌的位置。

2 个答案:

答案 0 :(得分:0)

简短的回答没有。当进程存在时,进程的内存将被擦除,当新进程启动时,它将从头开始。否则,您将遇到重大安全问题。

你想要做的是存储p指向的内容。重新启动时,malloc()的大小相同,并从存储中读回内容。请注意,您无法在磁盘上存储指针,并希望它们在新会话中重新加载时有效。

答案 1 :(得分:0)

假设我们谈论的是普通的日常电脑:不,这是不可能的。

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

此外,程序分配的内存驻留在虚拟内存中 - 每个进程都有自己相同的地址空间。
它通过操作系统和硬件映射到物理内存中的位置 实际上,在同一次执行期间,每次访问时,程序中的地址都不会保证映射到相同的物理RAM位置。

此外,攻击者找出令牌的位置也是微不足道的 (找出一种作为练习的方法。)