I am playing around with ptrace in linux. I am trying to write the memory of the traced process using /proc/pid/mem interface.
the function I ma using for accompli
You are opening the file in read-only mode (O_RDONLY). I'd suggest trying again with O_RDWR instead:
mem_fd = open(mem_file_name, O_RDWR);
However, from man proc it's not clear this will work:
/proc/[pid]/mem This file can be used to access the pages of a process's memory through open(2), read(2), and lseek(2).
EDIT:
I was curious too, so I put together this example using just ptrace() directly:
#include
#include
#include
#include
#include
#define SHOW(call) ({ int _ret = (int)(call); printf("%s -> %d\n", #call, _ret); if (_ret < 0) { perror(NULL); }})
char changeme[] = "This is a test";
int main (void)
{
pid_t pid = fork();
int ret;
int i;
union {
char cdata[8];
int64_t data;
} u = { "Hijacked" };
switch (pid) {
case 0: /* child */
sleep(1);
printf("Message: %s\n", changeme);
exit(0);
case -1:
perror("fork");
exit(1);
break;
default: /* parent */
SHOW(ptrace(PTRACE_ATTACH, pid, 0, 0));
SHOW(ptrace(PTRACE_POKEDATA, pid, changeme, u.data));
SHOW(ptrace(PTRACE_CONT, pid, 0, 0));
wait(NULL);
break;
}
return 0;
}