Возможно, да, но не гарантируется.
При нормальной работе адресное пространство каждого процесса полностью отделено.
Процессы могут использовать общую память, чтобы разрешить доступ к той же области памятив разных процессах (отмечая, что адрес, по которому регион виден в каждом процессе, не обязательно совпадает).В большинстве операционных систем вы даже можете отображать файлы таким образом.
Операционные системы предоставляют различные средства, помогающие в разработке и отладке.В Linux и BSD (изначально из Unix System V) интерфейс ptrace , вероятно, является самым мощным.В общем, интерфейс работает между процессами, работающими под одним и тем же идентификатором пользователя, и требует использования привилегий суперпользователя для использования в противном случае.(В Linux, в зависимости от конфигурации ядра, также возможно манипулировать содержимым памяти, которое каждый процесс видит напрямую, через /proc/PID/mem
. Это также имеет аналогичные соображения безопасности.)
В Linux процесс можетЗвоните prctl(PR_SET_DUMPABLE, 0uL)
, чтобы сделать себя и своих детей недостижимыми.Это часто встречается, например, когда привилегированная служба запускает вспомогательный процесс, который делает что-то от имени непривилегированного пользователя, но этот вспомогательный процесс должен быть защищен от манипуляций этим пользователем (например, вспомогательный процесс возвращает некоторые привилегированные данные, которые пользователь долженне сможет подделать или подделать).
(Фактически, если процесс меняет свою идентификацию с помощью seteuid()
, setegid()
, setfsuid()
, setfsgid()
, или связанных вызовов, или процессабыл выполнен как двоичный файл setuid / setgid или получил дополнительные возможности, основанные на возможностях файловой системы для своего двоичного файла, ядро автоматически делает эквивалент вызова вышеупомянутого prctl (), запрещая трассировку таких процессов.)
динамический компоновщикв Linux также может использоваться для вставки или внедрения кода в любой процесс (не setuid / setgid / gaining -abilities), который запускает пользователь, путем указания путей к этим дополнительным динамическим библиотекам в переменной среды LD_PRELOAD
.Это позволяет такие вещи, как замена стандартных функций библиотеки C вашими собственными обертками.Формат исполняемого файла ELF также поддерживает «конструкторы» и «деструкторы»;функции, которые автоматически вызываются при выполнении и выходе двоичного файла (то есть до и после main()
).Они позволяют вам по существу внедрить небольшую службу в любые процессы, которые вы запускаете (которые выполняются с вашей собственной учетной записью пользователя и вашими привилегиями пользователя), к которым вы можете удаленно подключаться и наносить вред процессу, например перенаправлять файлы или изменять сохраненные данные.по некоторым адресам памяти.
Как видите, лучше задать как и , когда один процесс может изменить значение переменной в другом процессе во время выполнения.И ответ на это зависит от ситуации.Наиболее распространенным случаем является взаимодействие двух процессов - межпроцессное взаимодействие - так, чтобы целевой процесс фактически вносил изменения, когда другой пользователь попросил об этом.Решения варьируются в зависимости от конкретной ситуации - и используемой ОС, конечно;Мой ответ здесь специфичен для Linux, но подобные или связанные функции доступны во всех операционных системах, они просто немного отличаются.