系统调用追踪工具strace
当我们想知道某个进程为什么突然卡了,或者是某个工具到底是如何实现的时候。strace就派上了用场。它能将程序的调用信息打印出来。
strace原理:它的实现基础是ptrace系统调用。ptrace系统调用提供了一种方法来跟踪和控制进程的执行,它可以读取和修改进程地址空间中的内容,包括寄存器的值。ptrace主要用于实现断点调试和跟踪系统调用。
ptrace系统调用Ptrace 提供了一种父进程可以控制子进程运行,并可以检查和改变它的核心image。它主要用于实现断点调试。
一个被跟踪的进程运行中,在执行系统调用之前,内核会先检查当前进程是否处于被“跟踪”(traced)的状态。如果是的话,内核暂停当前进程并将控制权交给跟踪进程,使跟踪进程得以察看或者修改被跟踪进程的寄存器。
在一个进程被跟踪之后,跟踪者进程会在某种意义上充当被跟踪进程的父进程(如使用ps命令就可以看到他们的父子关系),而子进程真正的父进程被保存在其task_struct结构的real_parent成员中。
当子进程产生系统调用时,就会被暂停,父进程会在每次调用wait()时得到子进程停止运行的通知,这时父进程就可以检测和修改子进程了,随后父进程可以让子进程继续运行。当父进程不想跟踪了,可以通过设置PTRACE_KILL标记来终止子进程的运行。也可以通过设置PTRACE_DETACH标记让子进程解除被跟踪,继续正常运行。
函数参数:
父进程跟踪一个进程的方式有两种:
调用fork(),然后子进程打上PTRACE_TRACEME标记,并执行exec。 父进程可以给自己打上PTRACE_ATTACH标记来跟踪一个已有进程。所以我们看strace有两种用法,一个是strace直接加要运行的程序,一个是用-p指定一个正在运行的进程。
一个进程被跟踪后,他只要接收到一个信号(即使这个信号被设置为忽略)就会停止运行(SIGKILL除外),然后父进程会在每次调用wait()时得到子进程停止运行的通知,这时父进程就可以检测和修改子进程了,随后父进程可以让子进程继续运行。
当父进程不想跟踪了,可以通过设置PTRACE_KILL标记来终止子进程的运行。也可以通过设置PTRACE_DETACH标记让子进程解除被跟踪,继续正常运行。
strace用法:最简单的用法其实就是trace后面直接跟着要执行的命令。比如:
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fee98686000
-p pid :绑定到一个由pid对应的正在运行的进程。此参数常用来调试后台进程。 -e 函数名:只追踪定义函数名。 -f :除了跟踪当前进程外,还跟踪其子进程。 -o file :将输出信息写到文件file中,而不是显示到标准错误输出(stderr)。
在linux中,很多性能查看命令都是通过读取/proc中的文件实现的。所以我们如果想学习它们的实现,就可以使用strace追踪,用-e筛选出open函数,就知道它读取了什么文件。比如mount命令。
使用Systemtap跟踪系统调用 (一) SystemTap是一个诊断Linux系统性能或功能问题的开源软件。它使得对运行时的Linux系统进行诊断调式变得更容易、更简单。有了它,开发者或调试人员不再需要重编译、安装新内核、重启动等烦人的步骤。
使用UnhookMe分析恶意软件中未受监控的系统调用问题 关于UnhookMe UnhookMe是一款通用的Windows API动态解析工具,可以帮助广大研究人员分析和处理恶意软件中未受监控的系统调用问题。 在这个侵入式反病毒产品和EDR产品盛行的年代,很多网络攻击者必须拥有强大的工具来绕过这些安全防御工具。而动态导入解析器能够在运行中取消已用函数的钩子,这也是增强攻击者攻击能力的又一方法。 而UnhookMe可以帮助广大研究人员在编译的可执行文件的PE头中保持可视性。
相关文章
- Linux CPU使用查看工具
- Spring的Assert工具类的用法
- 【工具】tsar 监控Linux系统状态的利器
- 011 - JDK自带的性能监控工具
- struts+hibernate+oracle+easyui实现lazyout组件的简单案例——工具类
- UCloner 是一个针对 Ubuntu Linux 编写的系统备份、恢复、克隆工具
- 代码生成工具初步实现
- 域渗透小工具分享
- 56. 动手开发一个有用的 ABAP ALV 工具 - 查看指定用户的 ABAP 传输请求,模拟 SE10 事物码
- 庖丁解牛-系统基本指标对应分析工具图
- 【阶段二】Python数据分析数据可视化工具使用03篇:词云图与相关性热力图
- github 创建网络仓库 ,使用git工具将本地文件上传/删除 --- 心得
- Python爬虫:chrome网页解析工具-XPath Helper
- 【Android 逆向】Android 进程注入工具开发 ( 系统调用 | Android NDK 中的系统调用示例 )
- Linux系统之dool命令行工具的基本使用
- Linux系统之网络客户端工具
- SCons官网,Scons构建工具手册,SCons构建系统
- 封装Win 10系统时封装工具报错,无法正常封装,封装失败
- dns tunnel工具地址
- sar 找出系统瓶颈的利器 目前Linux上最为全面的系统性能分析工具之一 直接 sar -dur 1 30 即可看内存 CPU和IO占用
- 您做系统设计用何种工具?
- 一文详解 Linux 系统常用监控工具(top,htop,iotop,iftop)
- rk3399 源码下查找交叉编译工具链
- python工具方法 13 win系统字库保存为图片文件
- python工具方法 7 keras默认loss库中添加rmse
- fofa工具下载安装