Да, возможен доступ к переменным в другой программе при условии:
- Переменная не находится в «стеке».
- Переменная не находится в регистре.
- Программа работает одновременно с вашей программой.
- Страница памяти, на которой находится переменная, находится в памяти и не была «выгружена» на жесткий диск (то есть в виртуальную память).
Обычно переменные, которые необходимо совместно использовать между программами, помещаются в «общую память», область памяти, к которой могут иметь доступ два или более процессов .
Общие переменные должны иметь схему защиты, чтобы только один процесс записывал в переменную, а переменная не читалась, пока она записывается.
Вам нужно будет выполнить поиск в inte rnet для «c ++ windows пример разделяемой памяти», так как концепция слишком велика, чтобы поместиться в ответ StackOverflow.
Изменить: переменные стека
Технически вы можете получить доступ переменная, которая находится в стеке другой программы, при условии, что стек находится в адресуемой области в памяти (некоторые процессоры имеют внутренний стек, который не может быть адресован внешней программой).
Проблема в сроках. Многие программы, написанные на C ++, помещают локальные переменные в стек в начале блока функции или оператора (например, оператор if
или while
l oop). Переменные исчезнут после того, как выполнение покинет область действия блока операторов. Таким образом, ваша программа должна иметь очень хорошее время, чтобы определить, когда переменная находится в стеке (и, надеюсь, ваша программа в это время работает). Тем не менее, ОС может выгружать другую программу на жесткий диск, пока ваша программа работает в том же пространстве памяти. В этом случае вы не сможете получить доступ к другим переменным программы.
Регистровые переменные Очень немногие процессоры имеют регистры, отображаемые в память. У большинства регистров процессора нет адреса. Кроме того, ваша программа может использовать те же регистры. Как правило, операционная система «замораживает» другую программу, записывая ее регистры и стек в область памяти или на жестком диске. Затем ваша программа будет загружена в память (также как переменные вашей программы и пространство стека будут восстановлены), и ваша программа будет выполнена с того места, где она остановилась. Это показывает вам трудности во времени и доступе к переменным в других программах.