Как получить доступ к пространству кучи программы с помощью другой программы? - PullRequest
1 голос
/ 08 января 2020

Рассмотрим случай, когда я выполнил программу и создал экземпляр класса,

MyClass mClass = new MyClass()

После выполнения эталонное пространство будет сохранено в пространстве кучи. Теперь я хочу написать программу, которая может получить доступ к пространству кучи для извлечения данных из ранее созданного экземпляра другой программы. Могу ли я это сделать?

Спасибо

Ответы [ 2 ]

1 голос
/ 08 января 2020

Нет. Вы никогда не сможете получить доступ к памяти другого процесса.

Однако процесс может установить sh область общей памяти , которую может прочитать другой процесс, но для этого требуется совместное использование. операция между процессами. Кроме того, он по-прежнему не дает процессу прямой доступ к куче другого процесса - он может видеть только то, что другой процесс явно перемещает в общую область (так что в вашем примере вам придется копировать данные из кучи в общую). памяти или поместите его в общую память для начала, что, вероятно, не очень хорошая идея).

Обратите внимание, что, хотя вы не можете изменить поведение new (насколько я знаю), ничто не мешает вам писать код для управления вашей кучей вручную; в этом смысле можно было бы разместить кучу непосредственно в области общей памяти. Будет ли это разумным или нет - это другой вопрос, который, очевидно, сильно зависит от контекста.

Чтобы полностью понять, как операционные системы управляют памятью, вам нужно понять виртуальная память и аппаратное обеспечение для управления памятью (хотя вы, вероятно, захотите на go глубже, чем Википедия).

0 голосов
/ 10 января 2020

Ну, я думаю, вы можете использовать сокеты для доступа к пространству кучи. Я надеюсь, что это работает.

...