通过对计算机上的多个进程执行一些cat /proc/*some PID*/maps
,我注意到它们在内存地址方面都有相同的起点,即0x8048000
。这是否意味着每个进程都有“它自己的内存空间,包括堆栈,堆等”。在运行时?
如果是这样,攻击者如何区分一个进程的内存地址与另一个进程的内存地址?
因此,如果一台机器有2GB的RAM,并且有几个进程同时运行 - 我们如何知道我们所针对的内存地址?或者我把这一切都弄错了,攻击开始于查看过程本身然后从那里前进?
原谅初学者的问题,我刚刚进入大会并正在同时阅读5篇教程,并且有点难以把握所有这些以达到理解水平。
请注意这个问题是放在这里而不是IT安全,因为我确实参考了大会方面。
答案 0 :(得分:5)
每个进程都有自己的“虚拟内存”,它存储自己的堆栈,堆,指令等。每个进程可以独立于任何其他进程使用整个32/64位地址空间。内核管理每个进程虚拟内存和机器物理RAM之间的映射。 Wikipedia更详细地介绍了这一点。
大多数攻击都针对一个特定进程中的内存。攻击者使用他们所针对的进程的地址空间中的地址。正如您所观察到的,许多可执行文件加载到标准虚拟地址,使攻击者更容易预测进程的内存布局。