我的项目由3个流程组成。进程1是进程2和进程3的“服务器”,实现共享内存。进程2随机崩溃,出现应用程序错误,试图访问自己的内存,但内存不知何故已损坏。
错误是:内存位置的某些地址上的无效指令某些不正确的地址。
我应该从哪里开始查找,在进程1中查找什么类型的内容,以查看它是否覆盖了进程2的内存?
谢谢。
发布于 2011-02-04 09:05:05
意外地覆盖了另一个进程的内存(没有它的合作)?不,因为你必须“意外地”正确地做很多事情。(您必须“意外地”打开进程的句柄,并且“意外地”调用WriteProcessMemory。)
故意的?是的,使用WriteProcessMemory函数。
*如果你在共享内存,那么出错的可能性就会急剧上升。
发布于 2011-02-04 09:02:18
共享内存中的数据结构是否包含任何绝对指针?这不仅是一个坏主意,因为绝对指针在其他进程中没有意义,而且一个进程可能会说服另一个进程通过它的内存进行疯狂的写操作。
通常,内存管理单元防止任何进程直接覆盖/损坏另一个进程的内存。共享内存(包括文件映射)和WriteProcessMemory函数是一般规则的例外。
发布于 2011-02-04 09:02:44
一个进程只有在主动尝试时才能覆盖另一个进程的内存。调试是一个例子,共享内存是另一个例子。意外写入另一个进程的代码或数据区域的可能性很小。
所以问题很可能是进程2的bug,我的意思是,进程2甚至没有共享它的内存,对吧?所以进程1不可能覆盖它。
https://stackoverflow.com/questions/4893504
复制相似问题