Можно ли получить доступ к переменным и их значениям в запущенной программе (c ++) - PullRequest
0 голосов
/ 19 июня 2020

Возможно ли каким-то образом получить доступ к переменным, которые использует другая программа во время ее работы с использованием C ++? например, у меня есть программа, которая всегда меняет переменную a на 1, и я хочу создать другую программу и получить доступ к переменной a и ее значению.

1 Ответ

2 голосов
/ 19 июня 2020

Да, возможен доступ к переменным в другой программе при условии:

  • Переменная не находится в «стеке».
  • Переменная не находится в регистре.
  • Программа работает одновременно с вашей программой.
  • Страница памяти, на которой находится переменная, находится в памяти и не была «выгружена» на жесткий диск (то есть в виртуальную память).

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

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

Вам нужно будет выполнить поиск в inte rnet для «c ++ windows пример разделяемой памяти», так как концепция слишком велика, чтобы поместиться в ответ StackOverflow.

Изменить: переменные стека
Технически вы можете получить доступ переменная, которая находится в стеке другой программы, при условии, что стек находится в адресуемой области в памяти (некоторые процессоры имеют внутренний стек, который не может быть адресован внешней программой).

Проблема в сроках. Многие программы, написанные на C ++, помещают локальные переменные в стек в начале блока функции или оператора (например, оператор if или while l oop). Переменные исчезнут после того, как выполнение покинет область действия блока операторов. Таким образом, ваша программа должна иметь очень хорошее время, чтобы определить, когда переменная находится в стеке (и, надеюсь, ваша программа в это время работает). Тем не менее, ОС может выгружать другую программу на жесткий диск, пока ваша программа работает в том же пространстве памяти. В этом случае вы не сможете получить доступ к другим переменным программы.

Регистровые переменные Очень немногие процессоры имеют регистры, отображаемые в память. У большинства регистров процессора нет адреса. Кроме того, ваша программа может использовать те же регистры. Как правило, операционная система «замораживает» другую программу, записывая ее регистры и стек в область памяти или на жестком диске. Затем ваша программа будет загружена в память (также как переменные вашей программы и пространство стека будут восстановлены), и ваша программа будет выполнена с того места, где она остановилась. Это показывает вам трудности во времени и доступе к переменным в других программах.

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