Доступ к памяти других приложений C ++ - PullRequest
4 голосов
/ 16 мая 2011

Я думаю о проблеме, которая у меня возникла в течение некоторого времени .. Я хотел бы написать программу на C / C ++ (под Windows), которая может обращаться (читать / изменять значения) к памяти (стек, кучавсе) других запущенных программ.(Не как общая память, но любая память, которую имеет компьютер ..) Без необходимости запускать приложение из моего собственного приложения ... Я видел нечто подобное раньше, но я просто не могу понять, как это делается ... Если бы я былдоступ к памяти любой работающей программы, я бы получил ошибки от ОС, верно?Любая помощь приветствуется!

Ответы [ 3 ]

7 голосов
/ 16 мая 2011

Как сказал @sharptooth, это требует поддержки со стороны ОС. Разные ОС делают это по-разному. Поскольку вы работаете в Windows, вы можете выполнить несколько шагов:

  1. Позвоните OpenProcess или CreateProcess, чтобы получить доступ или запустить новый процесс. В этом звонке вы должны запросить PROCESS_VM_READ доступ.
  2. Вызовите ReadProcessMemory, чтобы прочитать кусок памяти в этом открытом процессе.

Если вы хотите изменить память другого процесса, вам потребуется PROCESS_VM_WRITE доступ и использование WriteProcessMemory для достижения этого.

Например, в Linux вы бы использовали ptrace для подключения к процессу и заглядывали в его память.

1 голос
/ 16 мая 2011

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

0 голосов
/ 16 мая 2011

Возможно, вам будет интересно взглянуть на функцию Toolhelp32ReadProcessMemory.

...