如何使用另一个程序访问一个程序的堆space?
How to access heap space of a program by using another program?
假设我执行了一个程序并创建了一个 class、
的实例
MyClass mClass = new MyClass()
执行后,引用 Space 将存储在堆 Space 中。现在我想编写一个程序,它可以访问堆 Space 以从另一个程序的先前创建的实例中检索数据。
我可以吗?
谢谢
据我所知,在实践中,没有。如果你给其他程序管理员权限,你可以读取另一个程序的内存,但据我所知,没有办法确定该程序的堆所在的位置。 (可能有一些 hacky 方法可以实现这一点,但它不会很漂亮或可靠)。
但是,一个进程可以建立一个shared memory的区域,另一个进程可以读取,或者使用套接字,但这需要进程之间的合作。此外,它仍然不会让一个进程直接访问另一个进程的堆 - 您的程序只能看到另一个进程允许它看到的内容。
请注意,虽然您无法更改 new
的行为(据我所知),但没有什么可以阻止您编写代码来手动管理堆;从这个意义上讲,可以将堆直接放在共享内存区域中。这是否明智是另一个问题,显然,这在很大程度上取决于上下文。
为了完全理解操作系统如何管理内存,您必须理解virtual memory and memory management hardware(不过您可能想要比维基百科更深入)。
好吧,我认为您可以使用套接字来访问堆 Space。我希望这有效。
假设我执行了一个程序并创建了一个 class、
的实例MyClass mClass = new MyClass()
执行后,引用 Space 将存储在堆 Space 中。现在我想编写一个程序,它可以访问堆 Space 以从另一个程序的先前创建的实例中检索数据。 我可以吗?
谢谢
据我所知,在实践中,没有。如果你给其他程序管理员权限,你可以读取另一个程序的内存,但据我所知,没有办法确定该程序的堆所在的位置。 (可能有一些 hacky 方法可以实现这一点,但它不会很漂亮或可靠)。
但是,一个进程可以建立一个shared memory的区域,另一个进程可以读取,或者使用套接字,但这需要进程之间的合作。此外,它仍然不会让一个进程直接访问另一个进程的堆 - 您的程序只能看到另一个进程允许它看到的内容。
请注意,虽然您无法更改 new
的行为(据我所知),但没有什么可以阻止您编写代码来手动管理堆;从这个意义上讲,可以将堆直接放在共享内存区域中。这是否明智是另一个问题,显然,这在很大程度上取决于上下文。
为了完全理解操作系统如何管理内存,您必须理解virtual memory and memory management hardware(不过您可能想要比维基百科更深入)。
好吧,我认为您可以使用套接字来访问堆 Space。我希望这有效。