Доступ вне памяти, выделенной программой. (Доступ к памяти другого приложения) - PullRequest
0 голосов
/ 11 апреля 2010

Есть ли способ получить доступ к (доступным или свободным) частям памяти, которые находятся вне памяти, выделенной для программы, без получения исключений нарушения прав доступа. Ну, что я на самом деле хотел бы понять, кроме этого, как работает очиститель памяти (системный сборщик мусора). Я всегда хотел написать такую ​​программу. (Язык не проблема)

Заранее спасибо:)

Ответы [ 3 ]

4 голосов
/ 11 апреля 2010

номер

Любая современная операционная система будет препятствовать доступу одного процесса к памяти, принадлежащей другому процессу.

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

1 голос
/ 11 апреля 2010

На самом деле правильный ответ - ДА ... есть программы, которые это делают (и если они существуют .. это означает, что это возможно ...) может быть, вам нужно написать диск с ядром для этого, но это возможно.

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

конечно - возиться с памятью другой программы ... если вы не знаете, что делаете, возможно, она сломается ...

1 голос
/ 11 апреля 2010

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

Сборщик мусора вызывается из среды выполнения. Среда выполнения «владеет» пространством памяти и позволяет другим приложениям «жить» в этом пространстве памяти. Вот почему сборщик мусора может существовать. Вам нужно будет создать среду выполнения, для которой ОС выделяет память, среда выполнения будет запускать приложение под ее полномочиями, а также использовать GC под ее полномочиями. Вам нужно будет разрешить использование некоторого инструментария или API, который позволяет разработчику приложения «запрашивать» память из вашей среды выполнения (не ОС), и ваша среда выполнения может не только отвечать на такой запрос, но и отслеживать пространство памяти, которое оно выделение для этого приложения. Вероятно, вам потребуется структура (набор DLL), которая делает эти вызовы доступными для приложения (разработчик будет использовать их для формирования запроса внутри своего приложения).

Вы должны быть уверены, что ваш сборщик мусора не удаляет память, отличную от памяти, используемой выполняемым приложением, поскольку в вашей среде выполнения может одновременно работать более 1 приложения.

Надеюсь, это поможет.

...