/proc/pid/mem
ведет себя как образ памяти процесса. Чтобы прочитать / записать память процесса, просто откройте /proc/pid/mem
, затем lseek
по желаемому адресу и read()
или write()
сколько угодно байтов.
Например, чтобы перезаписать байт в адрес 0x12345
в процессе с 0x90
, вы можете просто сделать
fd = open("/proc/XXX/mem", O_RDWR);
lseek(fd, 0x12345, SEEK_SET);
unsigned char new = 0x90;
write(fd, &new, 1);
В 32-битной системе вместо этого используйте lseek64
(и добавьте #define _LARGEFILE64_SOURCE
до включения в стандарт).
Обратите внимание, что для доступа к /proc/XXX/mem
требуются те же разрешения, что и для отслеживания процесса. В частности, в некоторых системах вам может потребоваться быть root.