Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 209|Antwoord: 3

[Veiligheidskennis] Links naar EBPF-gerelateerde kennis

[Link kopiëren]
Geplaatst op 20-10-2025 16:47:02 | | |
Dit bericht is voor het laatst bewerkt door Summer op 21-10-2025 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框架,探针 *




Vorig:. PriorityQueue prioriteitswachtrij in NET6
Volgend:AI-agent en AI MCP

Gerelateerde berichten

 Huisbaas| Geplaatst op 20-10-2025 16:50:38 |
Zowel EBPF- als kernelmodules komen overeen met de databron van kernelprobes, niet met die van EBPF
 Huisbaas| Geplaatst op 20-10-2025 16:59:33 |
Linux-referenties: Brother Bird's Linux-auteur Taiwanees

De hyperlink-login is zichtbaar.
 Huisbaas| Geplaatst op 20-10-2025 19:30:47 |
https://www.cnblogs.com/revercc/p/17803876.html
De verbinding tussen het uprobe-programma van eBPF en de kernel/events/uprobe.c is in wezen dat het eBPF-mechanisme de native uprobe-infrastructuur van de kernel hergebruikt om de hook-functie van gebruikerstoestandfuncties te implementeren. Specifiek is de uprobe van eBPF een "toepassing" van het kernel uprobe-framework, dat via een interne kernel-callchain en datastructuur is gekoppeld.
Kernverbinding: eBPF vertrouwt op het kernel uprobe-framework om hooks te implementeren
De kernel uprobe.c is de kernimplementatie van de native user-state probe (uprobe) van de Linux-kernel en is verantwoordelijk voor:
Beheer de registratie en annulering van user-state probes (bijv. register_uprobe(), unregister_uprobe()).
Behandelt breakpoint-insertie (het schrijven van breakpoint-instructies naar het doelfunctieadres, zoals x86's int3).
Capture breakpoint triggeren gebeurtenissen (vast in kernel state processing wanneer een programma naar een breakpoint wordt uitgevoerd).
Roep een vooraf geregistreerde callback-functie aan (d.w.z. hook-logica).
Het eBPF uprobe-programma (zoals het voorbeeld van hook libc.so dat je schreef) registreert in wezen een uprobe-gebaseerde eBPF-callbackfunctie bij de kernel via de eBPF-loader (bijv. bcc, libbpf), die volledig afhankelijk is van de infrastructuur die door uprobe.c wordt geleverd.
Specifieke oproepketen: de stroom van het eBPF-programma naar uprobe.c
Wanneer je een uprobe registreert via een eBPF-loader (zoals de attach_uprobe van bcc), is het onderliggende proces als volgt:
De eBPF-loader start een registratieverzoek: De loader (zoals de Python-code van bcc) vertelt de kernel via een systeemaanroep (zoals bpf() of perf_event_open()) dat "Ik wil een eBPF-hook ophangen op de openat-functie van de libc.so" en geeft de bytecode van het eBPF-programma door.
Kernelverificatie en voorbereiding van eBPF-programma's De kernel eBPF-verificateur controleert de legitimiteit van het programma om te waarborgen dat het de kernelbeveiliging niet in gevaar brengt. Zodra het is goedgekeurd, laad je het eBPF-programma in de kernel en heb je een "eBPF callback-functie" (oftewel de uprobe_openat logica die je hebt geschreven).
Het hergebruik van de registratieinterface-kernel van uprobe.c zal de functie register_uprobe() in uprobe.c aanroepen, een "native uprobe" registreren en de eBPF-callbackfunctie gebruiken als de "trigger handler" van deze uprobe.
De sleutel hier is deze: de essentie van eBPF's uprobe is het binden van een callback van het type eBPF aan de native uprobe van de kernel.
uprobe.c voegt een breakpoint in en wacht tot dit wordt geactiveerd Uprobe.c schrijft een breakpoint-instructie (zoals x86's int3) naar het statusgeheugen van de gebruiker op basis van het geregistreerde doeladres (het adres van openat in libc.so), en registreert de originele instructie van het breakpoint (voor het hervatten van de uitvoering na het triggeren).
Functieaanroepen triggeren breakpoints, uprobe.c roept eBPF-callbacks aan Wanneer de applicatie libc.so:openat aanroept, activeert het uitvoeren van de breakpoint-instructie een val en raakt in de kerneltoestand. Op dit moment:
De kernel roept de functie uprobe_handler() (kernelverwerkingslogica) aan in uprobe.c.
uprobe_handler() controleert de registratiegegevens die bij het breakpoint horen en ontdekt dat deze gebonden is aan een eBPF-callback, dus wordt het eBPF-programma aangeroepen (dus de uprobe_openat die je hebt geschreven).
Nadat het eBPF-programma is uitgevoerd (bijvoorbeeld parameters verzamelen, schrijven naar ringbuf), herstelt uprobe_handler() de oorspronkelijke instructie en laat het programma doorgaan.
Samenvatting: De relatie tussen de twee
kernel/events/uprobe.c is de onderliggende infrastructuur, die kernmogelijkheden biedt zoals het invoegen, vastleggen en herstellen van gebruikersstatus-breakpoints, en vormt de basis voor alle user state probes (inclusief eBPF uprobe, gdb-debugging, enz.).
Het uprobe-programma van eBPF is een applicatie op een hogere laag gebaseerd op deze infrastructuur, die eBPF-callbackfuncties registreert en de kernel in staat stelt eBPF-logica uit te voeren wanneer uprobe wordt geactiveerd, waardoor efficiënte gebruikersstatusfunctietracking wordt bereikt.
Kort gezegd: uprobe voor eBPF is de "gebruiker" en uprobe.c is de "serviceprovider", en de eerste vertrouwt op de laatste om de registratie, het triggeren en uitvoeren van hooks te voltooien.
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com