Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 209|Odpoveď: 3

[Bezpečnostné znalosti] Odkazy na poznatky súvisiace s EBPF

[Kopírovať odkaz]
Zverejnené 2025-10-20 16:47:02 | | |
Tento príspevok naposledy upravila Summer 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框架,探针 *




Predchádzajúci:. PriorityQueue prioritná fronta v NET6
Budúci:AI agent a AI MCP

Súvisiace príspevky

 Prenajímateľ| Zverejnené 2025-10-20 16:50:38 |
Moduly EBPF aj jadra zodpovedajú zdroju dát kernelových sond, nie vlastnému EBPF
 Prenajímateľ| Zverejnené 2025-10-20 16:59:33 |
Linuxové referencie: Brother Bird's Linux Author Taiwanese

Prihlásenie na hypertextový odkaz je viditeľné.
 Prenajímateľ| Zverejnené 2025-10-20 19:30:47 |
https://www.cnblogs.com/revercc/p/17803876.html
Spojenie medzi uprobe programom eBPF a kernel/events/uprobe.c je v podstate v tom, že mechanizmus eBPF opätovne využíva natívnu infraštruktúru uprobe jadra na implementáciu hook funkcie funkcií používateľského stavu. Konkrétne, eBPF uprobe je "aplikáciou" kernel uprobe frameworku, ktorý je prepojený cez interný reťazec volaní jadra a dátovú štruktúru.
Core connection: eBPF sa spolieha na kernel uprobe framework na implementáciu hookov
Kernel uprobe.c je jadrom implementácie natívnej sondy používateľského stavu (uprobe) v jadre Linux a je zodpovedný za:
Spravovať registráciu a rušenie sond používateľských stavov (napr. register_uprobe(), unregister_uprobe()).
Rieši vkladanie breakpointov (zapisovanie inštrukcií breakpointu na adresu cieľovej funkcie, napríklad int3 v x86).
Zachytenie spúšťacích udalostí breakpointu (zaseknutých v jadrovom stave, keď sa program vykoná do breakpointu).
Zavolajte predregistrovanú callback funkciu (t. j. hook logiku).
Program eBPF uprobe (napríklad príklad hook libc.so, ktorý ste napísali) v podstate registruje uprobe založenú eBPF callback funkciu s jadrom cez eBPF loader (napr. bcc, libbpf), ktorý úplne závisí od infraštruktúry poskytovanej uprobe.c.
Špecifický volací reťazec: tok z programu eBPF do uprobe.c
Keď zaregistrujete uprobe cez eBPF loader (napríklad bcc attach_uprobe), základný proces je nasledovný:
Loader eBPF iniciuje požiadavku na registráciu. Loader (napríklad Python kód bcc) informuje jadro prostredníctvom systémového volania (napríklad bpf() alebo perf_event_open()), že "chcem zavesiť eBPF hook na funkciu openat libc.so" a odovzdá bajtkód programu eBPF.
Overovanie jadra a príprava eBPF programov Jadrový eBPF overovateľ kontroluje legitímnosť programu, aby sa uistil, že neohrozuje bezpečnosť jadra. Po odoslaní načítajte eBPF program do jadra a použite "eBPF callback function" (t. j. uprobe_openat logiku, ktorú ste napísali).
Opätovné použitie jadra registračného rozhrania uprobe.c zavolá funkciu register_uprobe() v uprobe.c, zaregistruje "natívny uprobe" a použije funkciu eBPF callback ako "trigger handler" tohto uprobe.
Kľúčom je toto: podstatou eBPF uprobe je naviazať callback typu eBPF na natívny uprobe jadra.
uprobe.c vloží breakpoint a čaká na jeho spustenie Uprobe.c zapíše breakpoint inštrukciu (napríklad x86 int3) do stavovej pamäte používateľa na základe registrovanej cieľovej adresy (adresa openat v libc.so) a zaznamená pôvodnú inštrukciu breakpointu (na obnovenie vykonávania po spustení).
Volania funkcií spúšťajú breakpointy, uprobe.c volá eBPF callbacky Keď aplikácia volá libc.so:openat, vykonanie inštrukcie breakpointu spustí pascu a spadne do stavu jadra. V súčasnosti:
Jadro volá funkciu uprobe_handler() (logika spracovania jadra) v uprobe.c.
uprobe_handler() skontroluje registračné informácie zodpovedajúce bodu prerušenia a zistí, že je viazaný na eBPF callback, takže zavolá eBPF program (t. j. uprobe_openat, ktorý ste napísali).
Po spustení eBPF programu (napr. zber parametrov, zápis do ringbuf) uprobe_handler() obnoví pôvodnú inštrukciu a umožní programu pokračovať v vykonávaní.
Zhrnutie: Vzťah medzi týmito dvoma
kernel/events/uprobe.c je základná infraštruktúra, ktorá poskytuje základné schopnosti ako vkladanie, zachytávanie a obnova prerušovacích bodov používateľského stavu a je základom pre všetky používateľské stavové sondy (vrátane eBPF uprobe, gdb ladenia atď.).
Uprobe program eBPF je aplikácia vyššej vrstvy založená na tejto infraštruktúre, ktorá registruje funkcie spätného volania eBPF a umožňuje jadru vykonávať logiku eBPF pri spustení uprobe, čím dosahuje efektívne sledovanie funkcií používateľského stavu.
Stručne povedané: uprobe pre eBPF je "používateľ" a uprobe.c je "poskytovateľ služby", pričom prvý sa spolieha na to druhého, aby dokončil registráciu, spustenie a vykonanie hookov.
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com