You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

受限条件下使用ptrace读取进程内存的技术咨询

问题:无权限限制下用ptrace读取目标进程数据段的方法探讨

背景与目标

我有一个包含初始化全局变量的简单程序,想要通过ptrace读取它的数据段,但面临以下限制:

  • 没有目标ELF文件的读权限
  • 无root权限,无法访问目标进程的/proc/PID/maps

已完成的尝试

  • 已知text段大小,执行LD_SHOW_AUXV=1 ./target确认程序启用了ASLR
  • 验证程序启动时$rip是否等于基址:
    • 目标程序代码片段:
      // 来自目标程序
      printf("base: %lx\n", getauxval(AT_BASE));
      
    • 追踪程序代码片段:
      // 来自追踪程序
      ptrace( PTRACE_GETREGS, my_pid, NULL, &regs );
      printf("rip: %lx\n", regs.rip);
      
    • 执行结果:
      rip: 7fa86c82b140
      base: 7fa86c811000
      
  • 遇到的障碍:/proc/PID/maps和auxv仅能被目标进程自身访问,$rip无法直接用来定位目标程序基址;曾考虑注入指令访问auxv,但目标程序未引入<sys/auxv.h>库

补充测试(root权限下验证)

为排查内存映射连续性问题,用root权限读取/proc/PID/maps做了补充测试:

  • 测试结果:
    rip: 7f55e1354140
    header: 56214add2040
    entry: 56214add3080
    
  • /proc/PID/maps内容片段:
    56214add2000-56214add3000 r--p 00000000 08:01 3145841                    /home/kali/Desktop/target
    56214add3000-56214add4000 r-xp 00001000 08:01 3145841                    /home/kali/Desktop/target
    ...
    7f55e133b000-7f55e1360000 r-xp 00001000 08:01 4202628                    /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
    
  • 发现:程序启动初期$rip实际位于链接器(ld-linux)的代码段,而非目标程序的.text段

疑问

  • 既然$rip接近进程内存高端,能否向前搜索读取位于环境变量之后、内存顶部的auxv?
  • 能否将LD_SHOW_AUXV=1 ./target的输出管道传输至追踪程序,以此获取auxv信息?

内容的提问来源于stack exchange,提问作者MBS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 10:42:52