假设我将一个指针作为参数发送给另一个程序:
program.exe -mypointer
并尝试在那个程序中使用它,它不会工作。经过一些研究(即在 Lounge C++ 询问)后,我发现自 Windows 95 以来,您无法访问另一个程序的地址空间。在旧版本的 Windows 中,它是允许的。我的问题是,为什么微软不允许它?这样做有什么问题或缺点?
P.S 在新版本的 Windows 中是否仍然可以通过一些解决方法来做到这一点?
最佳答案
因为能够访问其他进程的地址空间意味着您可以通过随机更改它们的内存内容等方式使它们崩溃。
保护模式的全部要点 是保护进程彼此。查看memory protection Wikipedia page了解更多详情。在保护之前的糟糕日子里,编写摆弄其他进程的代码要容易得多。
这样做的缺点是,对于 MS Word 中的某些错误来说,不仅会导致 MS Word 崩溃,还会导致 Excel、Borland C、您过去六周一直在运行的 PI 数字计算器崩溃,甚至操作系统本身。
您仍然可以访问另一个进程地址空间,但您基本上必须以更高的权限运行才能执行此操作。例如,这就是调试器允许您运行进程并访问其所有内存以进行调试的方式。
调用 ReadProcessMemory
和 WriteProcessMemory
允许您执行此操作,以及许多其他 debugging functions .
关于c++ - 为什么不能访问自 Windows 95 以来另一个进程的地址空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8018364/