strace神器(跟踪系统调用)

简介:

strace是一个可用于诊断、调试和教学的Linux用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。
在这里插入图片描述

编译安装:

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

分析:

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让程序再下次执行到系统调用时断下来。
在这里插入图片描述

参考:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值