【发布时间】:2014-12-18 04:44:26
【问题描述】:
如果 2 个程序正在运行,并且一个程序在内存地址存储一个数字,并且如果我知道该内存地址,并将其硬编码到第二个程序中并打印出该地址处的值,它实际上会得到那个信息? C++ 是否允许程序访问存储在 RAM 中的任何数据,无论它是否是程序的一部分?
【问题讨论】:
-
对于 Windows,您可以使用 ReadProcessMemory()。但是你没有提到操作系统。参考:msdn.microsoft.com/en-us/library/windows/desktop/…
-
C++ 不会阻止您,但 操作系统 很可能会这样做。请记住,现代多用户操作系统通过多种方式将进程彼此分离。其中之一是该进程在 RAM 中并没有真正的地址,它们具有 virtual 地址,并且一个进程中的一个虚拟地址与另一个进程中的虚拟地址不同。可能有特定于操作系统的函数来访问其他进程的内存,但它们不是 C++ 的一部分,并且它们的使用通常需要提升权限(否则您会遇到巨大的安全漏洞)。
-
这个问题与C/C++无关。要了解原因,请阅读虚拟内存:en.wikipedia.org/wiki/Virtual_memory
-
如果你想在进程之间共享内存,你可能应该使用shared memory。
-
即使共享内存也不能满足要求,因为(在大多数系统中)共享内存可以映射到虚拟地址空间中的不同页面。
标签: c++ pointers ram memory-address