我用来完成这个任务的功能是:
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,100); memset( (voID *)buf,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;}
但我总是得到错误:写:错误的文件描述符.
是否可以使用此方法编写跟踪过程?
解决方法 您正在以只读模式(O_RDONLY)打开文件.我建议再试一次O_RDWR:mem_fd = open(mem_file_name,O_RDWR);
然而,从man proc来看,目前尚不清楚它是否会起作用:
06001
编辑:
我也很好奇,所以我直接用ptrace()把这个例子放在一起:
#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)); SHOW(ptrace(PTRACE_POKEDATA,changeme,u.data)); SHOW(ptrace(PTRACE_CONT,0)); wait(NulL); break; } return 0;}总结
以上是内存溢出为你收集整理的linux – 编写跟踪进程的内存.全部内容,希望文章能够帮你解决linux – 编写跟踪进程的内存.所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)