linux kernel ptrace 流程梳理

ptrace 背景

ptrace 是linux 中跟踪进程使用的一种方式手段,主要方法是使用stop 信号将目的进程stop掉, 然后使用gup.c中的get_user_page对目的进程的地址空间进行访问
从代码角度讲,ptrace 是linux 的一个系统调用, 详细描述可以man ptrace查看

代码流程

ptrace 系统调用
代码文件 kernel/ptrace.c
linux kernel ptrace 流程梳理_第1张图片

主要代码流程:

ptrace_attach: 1) ptrace_link将自己链接到parent 2) 将对方任务stop掉,
linux kernel ptrace 流程梳理_第2张图片

2) arch_ptrace:
man 里面看到的各使用ptrace的命令字都是在这个函数中实现的, 如PTRACE_PEEKDATA 等, 对应文件,arch/arm/kernel/ptrace.c

ptrace 如何读取tracee的进程地址空间

我们来研究 PTRACE_PEEKDATA 命令字是如何实现的?
ptrace syscall -> arch_ptrace ->ptrace_access_vm -> __access_remote_vm -> -> get_user_pages_remote
linux kernel ptrace 流程梳理_第3张图片

linux kernel ptrace 流程梳理_第4张图片
使用kmap进行映射,然后使用copy_to_user_page拷贝到用户态

你可能感兴趣的:(linux,内核,linux,运维,服务器)