跟踪过程的写内存. [英] Writing memory of the traced process.
问题描述
我正在Linux中玩ptrace.我正在尝试使用/proc/pid/mem接口编写跟踪进程的内存.
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 accomplish this task is :
void write_proc(pid_t child, unsigned long int addr) {
char mem_file_name[100];
char buf[10]="hope";
int mem_fd;
memset( (void*)mem_file_name, 0, 100);
memset( (void *)buf, 0, 10);
sprintf(mem_file_name, "/proc/%d/mem", child);
mem_fd = open(mem_file_name, O_RDONLY);
lseek(mem_fd, addr , SEEK_SET);
if (write(mem_fd, buf, 5) < 0 )
perror("Writing");
return;
}
但是我总是得到错误:写入:错误的文件描述符.
But I always get the error : Writing: Bad file descriptor.
是否可以使用此方法编写跟踪的进程?
Is it possible to write the traced process using this method?
推荐答案
您正在以只读模式(O_RDONLY
)打开文件.我建议改用O_RDWR
再次尝试:
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);
但是,从man proc
开始,尚不清楚这是否可行:
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).
我也很好奇,所以我直接使用ptrace()
组合了这个示例:
I was curious too, so I put together this example using just ptrace()
directly:
#include <sys/ptrace.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#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;
}
这篇关于跟踪过程的写内存.的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!