strace神器(跟踪系统调用)

简介:

strace是一个可用于诊断、调试和教学的Linux用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。
strace神器(跟踪系统调用)_第1张图片

编译安装:

下载低版本4.20版本进行分析,高版本的strace,make的时候报错,直接下载低版本进行分析就可以了。
1. ./configure
2. make

分析:

init主要是初始化的工作,ATTACH等。
strace神器(跟踪系统调用)_第2张图片
init–>startup_attach–>attach_tcb–>ptrace_attach_or_seize:进行PTRACE_ATTACH挂载。
strace神器(跟踪系统调用)_第3张图片
init–>startup_attach–>attach_tcb:参数加 -f followfork就为1,这样就可以调试全部线程。通过/proc/xxxx/task下的线程号对其进行attach。
strace神器(跟踪系统调用)_第4张图片
next_event:wait4等待进程是否断下,并返回对应的pid号。
next_event–>pid2tcb:通过pid找到对应的tcb结构体。
strace神器(跟踪系统调用)_第5张图片
strace神器(跟踪系统调用)_第6张图片
strace神器(跟踪系统调用)_第7张图片

next_event–>startup_tcb–>get_scno–>get_regs–>ptrace_getregset:获取寄存器的值。
strace神器(跟踪系统调用)_第8张图片
next_event–>startup_tcb–>get_scno–>arch_get_scno:通过get_regs获取到的寄存器的值得到orig_rax,orig_rax是sys_call的系统调用号。
strace神器(跟踪系统调用)_第9张图片
系统调用号(Linux内核):
strace神器(跟踪系统调用)_第10张图片
再通过系统调用号找到对应的sysent结构体。
strace神器(跟踪系统调用)_第11张图片
sys_func指向的是对应的系统函数地址。用来打印对应的系统函数。
strace神器(跟踪系统调用)_第12张图片
dispatch_event函数主要是打印对应的数据。
dispatch_event–>ptrace_restart:调用ptrace中的PTRACE_SYSCALL让程序再下次执行到系统调用时断下来。
strace神器(跟踪系统调用)_第13张图片

参考:

https://blog.csdn.net/mijichui2153/article/details/85229307

你可能感兴趣的:(Ptrace,Linux,ptrace,strace)