Part 2 8 chapters

User-space & language probing

Turn the lens around: uprobes, USDT, and probing inside running applications and language runtimes โ€” bash, your own Rust binaries, TLS, and more.

Chapter 13

uprobe + bashreadline

The first user-space probe โ€” attach a uretprobe to bash's readline() to capture commands typed at interactive prompts, learning how uprobes target a binary or library by symbol and read the calling process's memory.

25 minutesRead โ†’
Chapter 14

uprobe on a Rust binary

Point a uprobe at a function in a Rust program you built โ€” confront symbol mangling and calling conventions, read a function argument at entry, and lay the groundwork for tracing your own services.

25 minutesRead โ†’
Chapter 15

BTF-assisted uprobe

Read a struct argument from a uprobe by following a pointer into the target's memory, and understand how BTF recovers a struct's layout so you can probe binaries you didn't write without hardcoding offsets.

25 minutesRead โ†’
Chapter 16

Bootstrap: containerized targets (Java & Python)

Stand up real application targets โ€” Java 25 + Quarkus and Python 3.14 + FastAPI, both as multi-stage UBI containers โ€” and learn to observe a process that lives inside a container by scoping eBPF to its cgroup, with crun's role on Fedora.

35 minutesRead โ†’
Chapter 17

sslsniff

See the plaintext crossing TLS by probing OpenSSL โ€” SSL_write before encryption and SSL_read after decryption โ€” learning to probe a shared library and to capture bounded binary data, with the ethics that come with it.

30 minutesRead โ†’
Chapter 18

funclatency

Time a function per call by pairing a uprobe at entry with a uretprobe at return and bpf_ktime_get_ns, then turn the durations into an OTLP latency histogram โ€” and weigh per-call events against an in-kernel histogram.

25 minutesRead โ†’
Chapter 19

Tracing goroutine states

Probe the Go scheduler's state machine through runtime.casgstatus โ€” and meet two Go-specific realities head-on: the register ABI (args aren't where C puts them) and why you must never put a uretprobe on Go.

30 minutesRead โ†’
Chapter 20

javagc

Time JVM garbage-collection pauses โ€” learn what USDT is and why it's the ideal surface, discover that a stock OpenJDK ships no gc USDT markers, and fall back to uprobing the G1 collector's real stop-the-world function resolved from libjvm.so's symbol table.

30 minutesRead โ†’