访问程序分配的内存之外。 (访问其他应用程序的内存)

时间:2010-04-11 15:49:02

标签: memory garbage-collection memory-management access-violation

是否有办法访问(读取或释放)在为程序分配的内存之外的内存块,而不会出现访问冲突异常。 除此之外我真正想要理解的是内存清理器(系统垃圾收集器)的工作原理。我一直想写这样一个程序。 (语言不是问题)

提前致谢:)

3 个答案:

答案 0 :(得分:4)

没有

任何现代操作系统都会阻止一个进程访问属于另一个进程的内存。

事实上,你了解虚拟内存,你会明白这是不可能的。每个进程都有自己的虚拟地址空间。

答案 1 :(得分:1)

简单的答案(少我错了),不。一般来说,出于两个原因,这不是一个好主意。首先是因为它导致程序和其他程序之间存在信任问题(更不用说我们人类也不会信任你的应用程序)。第二,如果你能够访问另一个应用程序内存并在应用程序不知情的情况下进行更改,则会导致应用程序崩溃(病毒也会这样做)。

从运行时调用垃圾收集器。运行时“拥有”内存空间并允许其他应用程序在该内存空间中“生存”。这就是垃圾收集器可以存在的原因。您必须创建操作系统分配内存的运行时,让运行时根据其权限执行应用程序,并在其权限下使用GC。您需要允许一些允许应用程序开发人员从运行时(而不是操作系统)“请求”内存的工具或API,并且您的运行时不仅可以响应此类请求,还可以跟踪它的内存空间。分配给该应用程序。您可能需要一个框架(DLL的集合),使这些调用可供应用程序使用(开发人员将使用它们在其应用程序中形成请求)。

您必须确保您的垃圾收集器不会删除正在执行的应用程序使用的内存之外的内存,因为您可能在运行时同时运行多个应用程序。

希望这有帮助。

答案 2 :(得分:1)

实际上正确的答案是肯定的。有一些程序可以做到(如果它们存在......这意味着它可能......) 也许你需要编写内核驱动器来实现这一目标,但这是可能的。

哦 - 我有另一个例子......调试器附加命令...这里是一个与另一个程序存储器交互的程序,即使它们都是作为一个不同的进程启动的......

当然 - 弄乱另一个程序记忆......如果你不知道你在做什么可能会让它变得粉碎......

相关问题