systemptap系列之用户空间探针

简介:

起初systemtap 是聚焦于内核空间的,因为用户层的诊断工具真的很多,后来还是在0.6版本时候可以探测用户进程了,既然可以用,那就用它吧。

       Systemtap用uprobes 模块来执行用户层的探测,在内核3.5以后,已经包含了,可以查看内核的config文件中CONFIG_UPROBES参数。

1.   用户层事件

用户事件可以通过PID来限定,也可以通过可执行路径来限定。

       有些事件限制了必须使用一个特定的PATH,因为需要debug信息来静态分析将探针放在哪里。

       例如:

process(“PATH”).function(“function”),用户空间函数入口。类似内核函数的kernel.function(“function”)。

       process(“PATH”).statement(“statement”),类似kernel.statement(“statement”).

       process(“PATH”).mark(“marker”),静态点marker定义在PATH .很多应用提供静态探针.例如java的hotspot JVM.

probe hotspot.gc_begin =

process("/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/server/libjvm.so").mark("gc__begin")

       process.begin,用户进程开始创建

       process.thread.begin,用户线程创建

       process.end用户进程结束

       process.thread.end用户线程结束

       process.syscall用户进程使用系统调用。

2.   访问目标变量

对于每个函数,第一个参数是指向数据的

user_char(address) ,包含当前用户进程中地址的字节。此外还有如下,分别是短整型,整型,长整型,字符串。

user_short, user_int, user_long, user_string, user_string_n

 

3.   用户空间堆栈

探针指针probe point(pp)可以显示是那个事件触发了事件句柄。

但是共享库函数经常被程序不同模块激活,所以函数堆栈就可以看到事件是如何被触发的。

       用户层堆栈,通过调试信息段来实现的,不过对于可执行程序需要使用-d executable参数,共享库需要-ldd参数。

       例如:

#stap -d /bin/ls --ldd -e 'probe process("ls").function("xmalloc") {print_usyms(ubacktrace())}' -c "ls /"

 

目录
相关文章
|
6月前
|
Linux 数据安全/隐私保护 Perl
bpf对内核的观测
bpftrace 可以对线上项目的系统调用的函数的进行观测,对观测的结果做出分析
114 0
|
6月前
|
缓存 负载均衡 Linux
内核:进程与调度机制(笔记)
内核:进程与调度机制(笔记)
132 0
|
3月前
|
调度
探索操作系统的心脏:内核空间与用户空间
【8月更文挑战第28天】在数字世界的海洋中,操作系统犹如一艘巨轮的核心引擎。本文将带领读者深入操作系统的内核,探讨内核空间与用户空间的奥秘。通过深入浅出的解释和生动的比喻,我们将揭示这两个空间如何协同工作,确保系统的高效运行。文章不仅适合初学者作为入门指南,也适合有一定基础的读者深化理解。
|
6月前
|
存储 安全 Ubuntu
eBPF程序如何跟内核进行交互
【2月更文挑战第4天】 一个完整的 eBPF 程序,通常包含用户态和内核态两部分:用户态程序需要通过 BPF 系统调用跟内核进行交互,进而完成 eBPF 程序加载、事件挂载以及映射创建和更新等任务;而在内核态中,eBPF 程序也不能任意调用内核函数,而是需要通过 BPF 辅助函数完成所需的任务。尤其是在访问内存地址的时候,必须要借助 bpf_probe_read 系列函数读取内存数据,以确保内存的安全和高效访问。
|
6月前
|
存储 Linux
Linux进程间通信(mmap)
Linux进程间通信(mmap)
65 0
|
11月前
|
Kubernetes 网络协议 Cloud Native
k8s 就绪探针
k8s 就绪探针
|
存储 Kubernetes 负载均衡
基于 Cilium 和 eBPF 检测容器逃逸
如果运行云原生工作负载均衡设施,则可以更好地保护我们的服务。毕竟,服务经常向公众暴露以及工作负载可能属于不同的租户。在这篇博文中,我将向大家展示访问我们的 Kubernetes 集群的攻击者如何进行容器逃逸:运行 Pod 以获得 root 权限,将 Pod 转义到主机上,并通过不可见的 Pod 和无文件执行来持续攻击。同时,我将向大家展示如何基于 Isovalent Cilium Enterprise 进行攻击检测。
272 0
|
Kubernetes 网络协议 Perl
K8s之就绪探针和存活探针
K8s之就绪探针和存活探针
639 0
K8s之就绪探针和存活探针
|
监控 网络协议 Linux
Linux:动态监控进程+监控网络状态
Linux:动态监控进程+监控网络状态
216 0
Linux:动态监控进程+监控网络状态
|
监控 应用服务中间件 Apache