Linux 源码分析( ptrace ) 第 1页一函数说明 1. 函数使用说明名字 ptrace –进程跟踪形式#include <sys/> int ptrace(int request, int pid, int addr, int data); 描述 Ptrace 提供了一种父进程可以控制子进程运行,并可以检查和改变它的核心 image 。它主要用于实现断点调试。一个被跟踪的进程运行中,直到发生一个信号。则进程被中止,并且通知其父进程。在进程中止的状态下, 进程的内存空间可以被读写。父进程还可以使子进程继续执行,并选择是否是否忽略引起中止的信号。 Request 参数决定了系统调用的功能: PTRACE_TRACEME 本进程被其父进程所跟踪。其父进程应该希望跟踪子进程。 PTRACE_PEEKTEXT, PTRACE_PEEKDATA 从内存地址中读取一个字节,内存地址由 addr 给出。 PTRACE_PEEKUSR 从 USER 区域中读取一个字节,偏移量为 addr 。 PTRACE_POKETEXT, PTRACE_POKEDATA 往内存地址中写入一个字节。内存地址由 addr 给出。 PTRACE_POKEUSR 往 USER 区域中写入一个字节。偏移量为 addr 。 PTRACE_SYSCALL, PTRACE_CONT 重新运行。 PTRACE_KILL 杀掉子进程,使它退出。 PTRACE_SINGLESTEP 设置单步执行标志 PTRACE_ATTACH 跟踪指定 pid 进程。 PTRACE_DETACH 结束跟踪 Intel386 特有: PTRACE_GETREGS 读取寄存器 Linux 源码分析( ptrace ) 第 2页 PTRACE_SETREGS 设置寄存器 PTRACE_GETFPREGS 读取浮点寄存器 P TRACE_SETFPREGS 设置浮点寄存器 init 进程不可以使用此函数返回值成功返回 0 。错误返回-1。e rrno 被设置。错误 EPERM 特殊进程不可以被跟踪或进程已经被跟踪。 ESRCH 指定的进程不存在 EIO 请求非法 2. 功能详细描述 1) PTRACE_TRACEME 形式: ptrace(PTRACE_TRACEME,0 ,0 ,0) 描述: 本进程被其父进程所跟踪。其父进程应该希望跟踪子进程。 2) PTRACE_PEEKTEXT, PTRACE_PEEKDATA 形式: ptrace(PTRACE_PEEKTEXT, pid, addr, data) ptrace(PTRACE_PEEKDATA, pid, addr, data) 描述: 从内存地址中读取一个字节, pid 表示被跟踪的子进程,内存地址由 addr 给出, dat a 为用户变量地址用于返回读到的数据。在 Linux ( i386 )中用户代码段与用户数据段重合所以读取代码段和数据段数据处理是一样的。 3) PTRACE_POKETEXT, PTRACE_POKEDATA 形式: ptrace(PTRACE_P O KETEXT, pid, addr, data) ptrace(PTRACE_POKEDATA, pid, addr, data) Linux 源码分析( ptrace ) 第 3页描述: 往内存地址中写入一个字节。 pid 表示被跟踪的子进程,内存地址由 addr 给出, dat a 为所要写入的数据。 4) PTRACE_PEEKUSR 形式: ptrace(PTRACE_PEEKUSR, pid, addr, data) 描述:从 USER 区域中读取一个字节, pid 表示被跟踪的子进程, USER 区域地址由 addr 给出, data 为用户变量地址用于返回读到的数据。 USER 结构为 core 文件的前面一部分, 它描述了进程中止时的一些状态,如: 寄存器值, 代码、数据段大小, 代码、数据段开始地址等。在 Linux ( i386 ) 中通过 PTRACE_PEEKUSER 和 PTRACE_POKEUSR 可以访问 USER 结构的数据有寄存器和调试寄存器。 5) PTRACE_POKEUSR 形式: ptrace(PTRACE_POKEUSR, pid, addr, data) 描述:往 USER 区域中写入一个字节, pid 表示被跟踪的子进程, USER 区域地址由 addr 给出, data 为需写入的数据。 6) PTRACE_CONT 形式: ptrace(PTRACE_CONT, pid, 0, signal ) 描述: 继续执行。 pid 表示被跟踪的子进程, signal 为0 则忽略引起调试进程中止的信
Linux源码分析-PTRACE 来自淘豆网m.daumloan.com转载请标明出处.