本文主要是介绍Bionic中的ptrace函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
ptrace函数的原型是:
long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);
q
q
q
q
参数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指定的地址中,arm和x86因为寄存器不相同,所以这里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函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!