LINUX 3.5.4 PTRACE (系列七)

本文探讨了如何使用Linux ptrace系统调用跟踪进程,特别是通过内存地址修改子进程变量值的过程。示例中,child4.o启动为后台进程,其内存中的变量i被list9.o通过nm工具获取的地址找到并修改,以此改变子进程的行为。PTRACE_ATTACH使子进程暂停,而PTRACE_TRACEME则不使进程停止,两者在跟踪原理上有所不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文主要研究父进程利用ptrace系统调用访问子进程的内存。

跟踪进程能够查看被跟踪进程的地址空间并且查看进程某个内存地址锁存储的变量的值。在这里我们需要使用linux内核的nm工具对程序进行分析从而获取到符号的地址信息。

本文分析的例子就是通过变量的地址修改变量的值。具体程序如下:

child4:

#include "ptrace.h"
void main(int argc,char *argv[])
{
  pid_t traced_process;
  traced_process=atoi(argv[1]);
  ptrace(PTRACE_ATTACH,traced_process,NULL,NULL);
  wait(NULL);
  int data=ptrace(PTRACE_PEEKDATA,traced_process,0x080496f4,0);
  printf("data=%d\n",data);
  data=245;
  ptrace(PTRACE_POKEDATA,traced_process,0x080496f4,data);
  ptrace(PTRACE_DETACH,traced_process,0,0);
}

list9.c

#include "ptrace.h"
int i;
void main()
{
  i=143;
  printf("child 4 start ...\n");
  while(i!=245);
   printf("child 4 outside loop ...\n");
}


首先在一个中断后台运行child4.o

#./child4.o\ &

然后使用ps命令查看该进程的进程号

最后时候nm命令获取到该进程的符号信息,即变量i所对应的内存地址。操作完了之后,可以将PEEKDATA/POKEDATA中变量i的地址修改为

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值