Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 209|Răspunde: 3

[Cunoștințe de siguranță] Legături către cunoștințe legate de EBPF

[Copiază linkul]
Postat la 20-10-2025 16:47:02 | | |
Această postare a fost editată ultima dată de Summer la 2025-10-21 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框架,探针 *




Precedent:. Coada de priorități PriorityQueue în NET6
Următor:AI Agent și AI MCP
 Proprietarul| Postat la 20-10-2025 16:50:38 |
Atât modulele EBPF, cât și cele ale nucleului corespund sursei de date a sondelor nucleului, nu propriilor EBPF
 Proprietarul| Postat la 2025-10-20 16:59:33 |
Referințe Linux: Brother Bird's Linux Author Taiwanese

Autentificarea cu hyperlink este vizibilă.
 Proprietarul| Postat la 20-10-2025 19:30:47 |
https://www.cnblogs.com/revercc/p/17803876.html
Legătura dintre programul uprobe al eBPF și kernel/events/uprobe.c este în esență faptul că mecanismul eBPF reutilizează infrastructura nativă uprobe a nucleului pentru a implementa funcția hook a funcțiilor de stare a utilizatorului. Mai exact, uprobe al eBPF este o "aplicație" a framework-ului kernel uprobe, care este legat printr-un lanț intern de apeluri și o structură de date a nucleului.
Conexiunea de bază: eBPF se bazează pe cadrul kernel uprobe pentru a implementa hook-uri
Nucleul uprobe.c este implementarea de bază a sondei native de stare a utilizatorului (uprobe) a nucleului Linux și este responsabil pentru:
Gestionează înregistrarea și anularea sondelor de stare a utilizatorului (de exemplu, register_uprobe(), unregister_uprobe()).
Se ocupă de inserția punctelor de întrerupere (scrierea instrucțiunilor punctelor întrerupătoare către adresa funcției țintă, cum ar fi int3-ul lui x86).
Capturează evenimentele de declanșare ale punctelor de întrerupere (blocate în procesarea stării nucleului atunci când un program este executat până la un punct de întrerupere).
Apelează o funcție de callback pre-înregistrată (adică logică de hook).
Programul eBPF uprobe (cum ar fi exemplul hook libc.so pe care l-ai scris) înregistrează practic o funcție de callback eBPF bazată pe uprobe cu nucleul prin loader-ul eBPF (de exemplu, bcc, libbpf), care se bazează complet pe infrastructura oferită de uprobe.c.
Lanț specific de apeluri: fluxul din programul eBPF către uprobe.c
Când înregistrezi un uprobe printr-un loader eBPF (cum ar fi attach_uprobe bcc), procesul de bază este următorul:
Loader-ul eBPF inițiază o cerere de înregistrare Loader-ul (cum ar fi codul Python al bcc) transmite nucleului printr-un apel de sistem (cum ar fi bpf() sau perf_event_open()) că "Vreau să agăț un hook eBPF pe funcția openat a libc.so" și transmite bytecode-ul programului eBPF.
Verificarea nucleului și pregătirea programelor eBPF Verificatorul eBPF al nucleului verifică legitimitatea programului pentru a se asigura că nu compromite securitatea nucleului. Odată trecut, încarcă programul eBPF în kernel și ai o "funcție de callback eBPF" (adică logica uprobe_openat pe care ai scris-o).
Reutilizarea nucleului interfeței de înregistrare a uprobe.c va chema funcția register_uprobe() din uprobe.c, va înregistra un "uprobe nativ" și va folosi funcția de callback eBPF ca "handler de trigger" al acestui uprobe.
Cheia aici este aceasta: esența uprobe-ului eBPF este să lege un callback al tipului eBPF la uproba nativă a nucleului.
uprobe.c introduce un punct de întrerupere și așteaptă ca acesta să fie declanșat. Uprobe.c scrie o instrucțiune de punct de întrerupere (cum ar fi int3 de la x86) în memoria de stare a utilizatorului bazată pe adresa țintă înregistrată (adresa openat în libc.so) și înregistrează instrucțiunea originală a punctului de întrerupere (pentru reluarea execuției după declanșare).
Funcțiile apelează puncte de întrerupere, uprobe.c apelează callback-uri eBPF Când aplicația apelează libc.so:openat, executarea instrucțiunii de întrerupere declanșează o capcană și cade în starea kernel. În acest moment:
Nucleul apelează funcția uprobe_handler() (logică de procesare a nucleului) în uprobe.c.
uprobe_handler() va verifica informațiile de înregistrare corespunzătoare punctului de întrerupere și va vedea că este legat de un callback eBPF, deci va chema programul eBPF (adică uprobe_openat pe care l-ai scris).
După ce programul eBPF este executat (de exemplu, colectarea parametrilor, scrierea în ringbuf), uprobe_handler() restaurează instrucțiunea originală și permite programului să continue execuția.
Rezumat: Relația dintre cele două
Kernel/Events/uprobe.c este infrastructura de bază care oferă capabilități de bază precum inserția, capturarea și recuperarea punctelor de întrerupere ale stării utilizatorului și este baza tuturor sondelor de stare a utilizatorului (inclusiv eBPF uprobe, depanarea gdb etc.).
Programul uprobe al eBPF este o aplicație de nivel superior bazată pe această infrastructură, care înregistrează funcțiile de callback eBPF și permite nucleului să execute logica eBPF atunci când uprobe este declanșat, realizând astfel o urmărire eficientă a funcțiilor de stare a utilizatorului.
Pe scurt: uprobe pentru eBPF este "utilizatorul", iar uprobe.c este "furnizorul de servicii", iar primul se bazează pe al doilea pentru a finaliza înregistrarea, declanșarea și executarea hook-urilor.
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com