当进程终止时,RAM 中的进程数据会发生什么?

问题描述 投票:0回答:1

我很想知道当进程在基于 Unix 的系统(GNU/Linux 或 Mac)和 Windows 等流行操作系统上终止时,RAM 中的进程数据会发生什么情况。

假设我们正在开发一个应用程序,将加密密钥或密码等敏感信息加载到 RAM 中,如果我们不覆盖这些数据,这些数据是否会保留在 RAM 中供其他进程访问?

我理解RAM是一种易失性存储器,从硬件角度来看,需要不断刷新(以非常短的间隔用相同的值重新覆盖)以保持存储数据。这个刷新过程是否与一个过程完成后数据发生的情况有关,例如单元格未刷新并丢失其值?


我还有另一个与此相关的问题,在类似 C 的编程语言中,如果你开始从 RAM 的未初始化字节读取,你将得到如下随机值:

#include <iostream>
#include <cstring>
using namespace std;

void print_bytes(void *ptr, int size) 
{
    cout<<"Address : "<<ptr<<endl<<"Size in bytes : "<<size<<endl;
    unsigned char *p = (unsigned char *) ptr;
    int i;
    for (i=size-1; i>=0; i--) {
        printf("%02hhX ", p[i]);
    }
    cout<<endl<<"==================================="<<endl;
}

int main()
{
    int a;
    float b;
    double c;
    char d;
    string e;
    bool f;

    print_bytes( &a , sizeof(a) );
    print_bytes( &b , sizeof(b) );
    print_bytes( &c , sizeof(c) );
    print_bytes( &d , sizeof(d) );
    print_bytes( &e , sizeof(e) );
    print_bytes( &f , sizeof(f) );

    return 0;  
}
┌──(user㉿dhcppc4)-[~]
└─$ g++ test.cpp && ./a.out                                                                                                                               130 ⨯
Address : 0x7fffb762f35c
Size in bytes : 4
00 00 7F FF 
===================================
Address : 0x7fffb762f358
Size in bytes : 4
B7 62 F4 88 
===================================
Address : 0x7fffb762f350
Size in bytes : 8
2E 78 78 63 62 69 6C 67 
===================================
Address : 0x7fffb762f34f
Size in bytes : 1
00 
===================================
Address : 0x7fffb762f320
Size in bytes : 32
00 00 7F 1A 6F DF D5 B8 6C 6F 6F 70 5F 68 65 00 00 00 00 00 00 00 00 00 00 00 7F FF B7 62 F3 30 
===================================
Address : 0x7fffb762f31f
Size in bytes : 1
00 
===================================

这些值是什么? 这些是否有可能包含来自已终止进程的数据?

我也感谢任何介绍有关此特定主题的参考资料以供进一步阅读。

linux memory-management process operating-system ram
1个回答
0
投票

假设我们正在开发一个应用程序,将加密密钥或密码等敏感信息加载到 RAM 中,如果我们不覆盖这些数据,这些数据是否会保留在 RAM 中供其他进程访问?

它保留在 RAM 中,但没有其他进程可以访问它。

对 RAM 的访问由虚拟内存子系统介导。进程只能访问与其虚拟内存页面相对应的 RAM 页面。

当进程获得新的虚拟内存页面并为其分配 RAN 时,RAM 会被清零,以防止读取使用该 RAM 页面的上一个进程留下的任何数据。

© www.soinside.com 2019 - 2024. All rights reserved.