У меня есть простая программа:доступа (чтение/запись) в процессе виртуальной памяти из другого приложения
#include <stdio.h>
int a = 5;
int
main(void)
{
while(1)
{
int i;
sleep(1);
printf("%p %i\n", &a, a);
}
return 0;
}
Output (Ubuntu x64):
0x601048 5
0x601048 5
0x601048 5
0x601048 5
я узнавал о указателей в C и I уже знаете, что вы можете использовать memcpy
для записи данных везде (почти) в виртуальной памяти процесса. Но возможно ли изменить значение int a
, размещенное по адресу 0x601048
, с помощью другого приложения (которое, конечно, использует собственную виртуальную память)? Как это сделать? Меня интересуют решения только для C.
Короткий ответ: нет. Виртуальное адресное пространство каждого процесса полностью не зависит от других. –
Каждый процесс имеет собственное виртуальное адресное пространство, и процесс не может получить доступ к виртуальному адресному пространству другого процесса. – ouah
Немного более длинный ответ, чем «нет»: 'ptrace'. Отладчики, такие как 'gdb', должны быть в состоянии сделать именно это. – us2012