c++ - 为什么不能访问自 Windows 95 以来另一个进程的地址空间?

标签 c++ c windows winapi pointers

假设我将一个指针作为参数发送给另一个程序:

program.exe -mypointer

并尝试在那个程序中使用它,它不会工作。经过一些研究(即在 Lounge C++ 询问)后,我发现自 Windows 95 以来,您无法访问另一个程序的地址空间。在旧版本的 Windows 中,它是允许的。我的问题是,为什么微软不允许它?这样做有什么问题或缺点?

P.S 在新版本的 Windows 中是否仍然可以通过一些解决方法来做到这一点?

最佳答案

因为能够访问其他进程的地址空间意味着您可以通过随机更改它们的内存内容等方式使它们崩溃。

保护模式的全部要点 是保护进程彼此。查看memory protection Wikipedia page了解更多详情。在保护之前的糟糕日子里,编写摆弄其他进程的代码要容易得多。

这样做的缺点是,对于 MS Word 中的某些错误来说,不仅会导致 MS Word 崩溃,还会导致 Excel、Borland C、您过去六周一直在运行的 PI 数字计算器崩溃,甚至操作系统本身。

您仍然可以访问另一个进程地址空间,但您基本上必须以更高的权限运行才能执行此操作。例如,这就是调试器允许您运行进程并访问其所有内存以进行调试的方式。

调用 ReadProcessMemoryWriteProcessMemory 允许您执行此操作,以及许多其他 debugging functions .

关于c++ - 为什么不能访问自 Windows 95 以来另一个进程的地址空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8018364/

相关文章:

c - 如何使用 C 中的 libxml 删除 XML 中元素/节点之间的空格?

c - scanf 无限循环

c++ - 如何修改 strcat 使其不会编辑 str1

c++ - Qt错误:expected primary-expression before ')' token

c++ - 评估 if ( std::function<void()> == function )?

C++ 错误 : Conversion to Execution Character set

python - 如何为 Window 10 Maya 2017 python 编译 python c 扩展?

windows - Wscript批量编辑多个文件夹的desktop.ini

windows - 使用 Topshelf 安装后在服务下看不到我的服务

windows - 使用 Linq to XML 将 XElement 添加到 XML 文件