Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 209|Odgovoriti: 3

[Varnostno znanje] Povezave do znanja, povezanega z EBPF

[Kopiraj povezavo]
Objavljeno 2025-10-20 16:47:02 | | |
To objavo je nazadnje uredila Summer 21. 10. 2025 ob 09:20

https://github.com/iovisor/bcc/blob/master/docs/kernel-versions.md  ebpf对应的 内核版本特性 能解决什么问题 *
https://lore.kernel.org/bpf/ ebpf对应的内核ebpf补丁的信息讨论 *
https://juejin.cn/post/7084515511576313864 linux tracing system 各种tracing框架的对比 分为前端,tracing框架,探针 *




Prejšnji:. PriorityQueue prioritetna vrsta v NET6
Naslednji:AI agent in AI MCP
 Najemodajalec| Objavljeno 2025-10-20 ob 16:50:38 |
Tako EBPF kot jedrni moduli ustrezajo podatkovnemu viru jedrnih sond, ne EBPF-jevemu lastnemu
 Najemodajalec| Objavljeno 2025-10-20 ob 16:59:33 |
Linux reference: Brother Birdov Linux avtor Tajvanec

Prijava do hiperpovezave je vidna.
 Najemodajalec| Objavljeno 2025-10-20 ob 19:30:47 |
https://www.cnblogs.com/revercc/p/17803876.html
Povezava med uprobe programom eBPF in kernel/events/uprobe.c je v bistvu v tem, da mehanizem eBPF ponovno uporablja izvorno uprobe infrastrukturo jedra za implementacijo hook funkcije funkcij uporabniškega stanja. Natančneje, eBPF-jev uprobe je "aplikacija" ogrodja kernel uprobe, ki je povezan preko notranje verige klicev jedra in podatkovne strukture.
Core connection: eBPF se zanaša na kernel uprobe framework za implementacijo hookov
Jedro uprobe.c je osrednja implementacija izvorne uporabniške sonde (uprobe) jedra Linux jedra in je odgovorna za:
Upravljanje registracije in preklica sond uporabniških držav (npr. register_uprobe(), unregister_uprobe()).
Obravnava vstavljanje prelomnih točk (zapisovanje ukazov prelomne točke na naslov ciljne funkcije, kot je int3 v x86).
Zajem sprožilnih dogodkov prelomnih točk (ki so zataknjeni v obdelavi stanja jedra, ko se program izvede do točke preloma).
Pokličite vnaprej registrirano funkcijo za povratni klic (tj. hook logiko).
Uprobe program eBPF (kot je primer hook libc.so, ki ste ga napisali) v bistvu registrira uprobe funkcijo eBPF callback z jedrom preko eBPF nalagalnika (npr. bcc, libbpf), ki v celoti temelji na infrastrukturi, ki jo zagotavlja uprobe.c.
Specifična veriga klicev: tok iz programa eBPF v uprobe.c
Ko registrirate uprobe preko eBPF nalagalnika (kot je bcc-jev attach_uprobe), je osnovni postopek naslednji:
Nalagalnik eBPF sproži zahtevo za registracijo Nalagalec (kot je Python koda bcc) jedru preko sistemskega klica (kot sta bpf() ali perf_event_open()) sporoči, da "želim obesiti eBPF kljuko na funkcijo openat libc.so" in posreduje bajtno kodo programa eBPF.
Preverjanje jedra in priprava eBPF programov Jedrni eBPF preverjevalec preverja legitimnost programa, da zagotovi, da ne ogroža varnosti jedra. Ko je sprejeto, naložite eBPF program v jedro in uporabite "eBPF callback funkcijo" (tj. uprobe_openat logiko, ki ste jo napisali).
Ponovna uporaba jedra registracijskega vmesnika uprobe.c bo poklicala funkcijo register_uprobe() v uprobe.c, registrirala "nativni uprobe" in uporabila funkcijo eBPF kot "trigger handler" te uprobe.
Ključ je tukaj: bistvo eBPF-jevega uprobe je vezati callback tipa eBPF na nativni uprobe jedra.
uprobe.c vstavi prelomno točko in počaka, da se sproži. Uprobe.c zapiše ukaz prelomne točke (kot je x86-jev int3) v uporabnikov pomnilnik stanja na podlagi registriranega ciljnega naslova (naslov openat v libc.so) in zabeleži prvotni ukaz prelomne točke (za nadaljevanje izvajanja po sprožitvi).
Klici funkcij sprožijo prelomne točke, uprobe.c kliče eBPF povratne klice Ko aplikacija pokliče libc.so:openat, izvedba ukaza prekinitve sproži past in pade v stanje jedra. Trenutno:
Jedro pokliče funkcijo uprobe_handler() (logiko obdelave jedra) v uprobe.c.
uprobe_handler() bo preveril registracijske podatke, ki ustrezajo prekinitveni točki, in ugotovil, da je vezan na eBPF povratni klic, zato bo poklical eBPF program (tj. uprobe_openat, ki ste ga napisali).
Po zagonu programa eBPF (npr. zbiranju parametrov, pisanju v ringbuf) uprobe_handler() obnovi izvirni ukaz in omogoči programu nadaljevanje izvajanja.
Povzetek: Odnos med obema
kernel/events/uprobe.c je osnovna infrastruktura, ki zagotavlja osnovne zmogljivosti, kot so vstavljanje, zajemanje in obnova točk prekinitve uporabniških stanj, ter je osnova za vse sonde uporabniških stanj (vključno z eBPF uprobe, gdb odpravljanjem napak itd.).
Uprobe program eBPF je aplikacija na višji plasti, ki temelji na tej infrastrukturi, ki registrira funkcije povratnih klicev eBPF in omogoča jedru izvajanje logike eBPF, ko se sproži upprobe, s čimer doseže učinkovito sledenje funkcijam uporabniškega stanja.
Na kratko: uprobe za eBPF je "uporabnik", uprobe.c pa "ponudnik storitev", prvi pa se zanaša na drugega za dokončanje registracije, sprožitve in izvajanja kljuk.
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com