Bionic中的ptrace函数

ptrace函数的原型是:

long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);

q  参数request是请求ptrace执行的操作。

q  参数pid是目标进程的ID

q  参数addr是目标进程的地址值。

q  参数data的作用则根据request的不同而变化,如果需要向目标进程中写入数据,data存放的是需要写入的数据;如果从目标进程中读数据,data将存放返回的数据。

参数request的常用的值如下:

名称

说明

PTRACE_TRACEMEE

0

PTRACE_TRACEME用在目标进程中。表示子进程容许父进程跟踪自己。

PTRACE_PEEKTEXT

1

从目标进程的代码段中读取一个长整型,内存地址由参数addr指定。

PTRACE_PEEKDATA

2

从目标进程的数据段中读取一个长整型,内存地址由参数addr指定。

PTRACE_PEEKUSR

3

在调试coredump文件时,从USER区域中读取一个长整型。USER结构为coredump文件的前面一部分,它描述了进程中止时的一些状态,如:寄存器值,代码、数据段大小,代码、数据段开始地址等。USER区域地址由参数addr参数。

PTRACE_POKETEXT

4

向目标进程的代码段中写入一个长整型,内存地址由参数addr指定。

PTRACE_POKEDATA

5

向目标进程的数据段中写入一个长整型,内存地址由参数addr指定。

PTRACE_POKEUSR

6

USER区域中写入一个长整型。

PTRACE_CONT

7

继续执行目标进程。参数pid表示被跟踪的目标进程。

PTRACE_KILL

8

中止目标进程。参数pid表示被跟踪的目标进程。

PTRACE_SINGLESTEP

9

设置单步执行标志,单步执行一条指令。被跟踪进程单步执行完一条指令后,被跟踪进程将被中止,并通知调试进程。

PTRACE_GETREGS

12

读取寄存器值,pid表示被跟踪的目标进程,返回的寄存器值保存在data指定的地址中,armx86因为寄存器不相同,所以这里data指向的数据结构也不一样

PTRACE_SETREGS

13

设置寄存器值,pid表示被跟踪的目标进程,data为寄存器数据地址。

PTRACE_GETFPREGS

14

读取浮点寄存器值,pid表示被跟踪的目标进程,返回的浮点寄存器值保存在data指定的地址中

PTRACE_SETFPREGS

15

设置浮点寄存器值,pid表示被跟踪的目标进程,data为浮点寄存器数据地址。

PTRACE_ATTACH

16

要求跟踪某个进程。参数pid表示被跟踪进程。被跟踪进程将成为当前进程的子进程,并进入中止状态。

PTRACE_DETACH

17

结束跟踪某个进程。 参数pid表示被跟踪的子进程。结束跟踪后被跟踪进程将继续执行。

PTRACE_SYSCALL

24

继续执行被中止的进程。参数pid表示被跟踪的子进程。与PTRACE_CONT不同的是当被跟踪进程进行系统调用或者从系统调用中返回时,被跟踪进程将被中止,并通知调试进程。

你可能感兴趣的:(Bionic中的ptrace函数)