我可以读取任何内存值吗?

Env*_*nve 2 c++ memory pointers

我只是想知道我是否可以通过提供它的地址(在我的情况下随机)来读取内存中的任何值.我知道它不起作用,但我试过:

int e = 10;
int* p = &e;
p = 0x220202;
Run Code Online (Sandbox Code Playgroud)

这甚至都不会编译.那么,有没有办法用C++或任何其他编程语言在计算机的内存中读取内容.

let*_*tar 7

那么,有没有办法在我的计算机内存中读取内容

如果您参考计算机的整个内存:不,您不能 - 至少不在现代桌面/主流操作系统上.您只能从进程的地址空间中读取内存.

看看虚拟内存.简而言之:您的指针指的是"虚拟"地址,而不是真正的地址.计算机中的特殊硬件会将这些地址转换为实际地址.操作系统定义了必须如何完成映射.这样,每个进程都拥有自己唯一的地址空间.只要操作系统的调度程序切换到另一个进程,它就会告诉硬件切换到相应的转换表.由于这种机制,您可以在进程之间获得隔离,这是一件非常好的事情:如果编程不良的应用程序访问无效内存,则只有相关进程会崩溃,而系统的其余部分不会受到影响.

想一想:如果没有这种隔离,每次测试某些指针算法时,您可能需要重新启动计算机.

  • 此类代码通常用于嵌入式处理器或OS本身(例如,用于存储器映射外设的驱动程序).在这种情况下,虚拟内存不起作用; 在很多情况下,即使是本地缓存也会被分流. (2认同)