0
点赞
收藏
分享

微信扫一扫

strace神器(跟踪系统调用)

草原小黄河 2022-04-23 阅读 87

简介:

编译安装:

分析:

init主要是初始化的工作,ATTACH等。
在这里插入图片描述
init–>startup_attach–>attach_tcb–>ptrace_attach_or_seize:进行PTRACE_ATTACH挂载。
在这里插入图片描述
init–>startup_attach–>attach_tcb:参数加 -f followfork就为1,这样就可以调试全部线程。通过/proc/xxxx/task下的线程号对其进行attach。
在这里插入图片描述
next_event:wait4等待进程是否断下,并返回对应的pid号。
next_event–>pid2tcb:通过pid找到对应的tcb结构体。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

next_event–>startup_tcb–>get_scno–>get_regs–>ptrace_getregset:获取寄存器的值。
在这里插入图片描述
next_event–>startup_tcb–>get_scno–>arch_get_scno:通过get_regs获取到的寄存器的值得到orig_rax,orig_rax是sys_call的系统调用号。
在这里插入图片描述
系统调用号(Linux内核):
在这里插入图片描述
再通过系统调用号找到对应的sysent结构体。
在这里插入图片描述
sys_func指向的是对应的系统函数地址。用来打印对应的系统函数。
在这里插入图片描述
dispatch_event函数主要是打印对应的数据。
dispatch_event–>ptrace_restart:调用ptrace中的PTRACE_SYSCALL让程序再下次执行到系统调用时断下来。
在这里插入图片描述

参考:

举报

相关推荐

0 条评论