Можно ли получить доступ к памяти из приложения в другое? Как? - PullRequest
1 голос
/ 28 февраля 2011

Название немного запутано. Но я пытаюсь сделать что-то вроде:

У меня есть кнопка (Button1 из класса TButton) в приложении. Я хочу получить значение указателя этой кнопки и проверить его свойства из второго приложения.

Кто-то может сказать, возможно ли это? А если нет, объясните почему?

Tks.


Повторное открытие, потому что я получил другую информацию в Интернете.

Если я использую такие вещи, как? ReadProcessMemory

Примеры: http://www.codeproject.com/KB/threads/int64_memsteal.aspx http://forum.cheatengine.org/viewtopic.php?p=4150408&sid=2358f118bab9f54b032d99377aed0545

Ответы [ 5 ]

2 голосов
/ 28 февраля 2011

Это возможно.Просто используйте функции Windows API WriteProcessMemory/ReadProcessMemory.Передайте дескриптор процесса и указатель на данные.

2 голосов
/ 28 февраля 2011

приложений защищены друг от друга, пытаясь испортить друг друга.Для этого на вашем компьютере есть специальное оборудование (MMU).Это делает вещи надежными и надежными.

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

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

В качестве альтернативы вы можете предоставить межпроцессный API, RPC / Com / Webservices / Sockets, чтобы другие приложения могли запрашивать и изменять состояние

1 голос
/ 28 февраля 2011

Это не невозможно ... Просто довольно сложно.

Как вы писали сами, вы можете использовать ReadProcessMemory для чтения части памяти другого приложения. Дело в том, чтобы найти правильный адрес для чтения. Даже если вы найдете правильный способ сделать это, это, вероятно, сломает между версиями Delphi.

Конечно, если ваше целевое приложение «выставляет» некоторые методы для этого (например, отвечая на сообщение Windows), это другая история.

0 голосов
/ 28 февраля 2011

У меня сначала к тебе вопрос: Почему вы хотите это сделать, и приложение ваше?

Если он предназначен для тестирования / отладки и вы можете построить цель в режиме отладки, вы можете использовать интерфейс программирования приложений отладки, чтобы получить доступ к чему угодно (из отладочного приложения сборки).

Может быть, вы можете найти информацию в этом вопросе Написание очень простого отладчика

0 голосов
/ 28 февраля 2011

Действительно зависит от ОС

Обычно все новые ОС и многопользовательские ОС обеспечивают защиту памяти. Таким образом, вы не можете получить доступ к памяти другого процесса, если у вас нет прав делать это через системные вызовы ОС.

В таких ОС, как MSDOS, вы можете иметь доступ к любому адресу, который вам нужен. С помощью C вы можете объявить указатель типа char far * и назначить ему адрес.

Я использовал это для создания ncurses-подобных библиотек, прямого доступа к видеопамяти и записи / чтения 8-битных частей памяти для установки / получения консольных текстовых атрибутов.

То, что вы хотите, может быть выполнено с помощью IPC или RPC, если вы находитесь на удаленной машине. Вы не получаете указатель, но можете получить доступ к свойствам кнопки, используя ваш любимый API IPC / RPC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...