Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 209|Svare: 3

[Sikkerhetskunnskap] Lenker til EBPF-relatert kunnskap

[Kopier lenke]
Publisert 2025-10-20 16:47:02 | | |
Dette innlegget ble sist redigert av 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框架,探针 *




Foregående:. PriorityQueue prioritetskø i NET6
Neste:AI-agent og AI-MCP

Relaterte innlegg

 Vert| Publisert 20.10.2025 16:50:38 |
Både EBPF og kjernemoduler tilsvarer datakilden til kjerneprobene, ikke EBPFs egen
 Vert| Publisert 2025-10-20 16:59:33 |
Linux-referanser: Brother Birds Linux-forfatter taiwansk

Innloggingen med hyperkoblingen er synlig.
 Vert| Publisert 2025-10-20 19:30:47 |
https://www.cnblogs.com/revercc/p/17803876.html
Forbindelsen mellom eBPFs uprobe-program og kjernen/events/uprobe.c er i hovedsak at eBPF-mekanismen gjenbruker kjernens native uprobe-infrastruktur for å implementere hook-funksjonen til brukertilstandsfunksjoner. Spesifikt er eBPFs uprobe en "applikasjon" av kjerne-uprobe-rammeverket, som er koblet gjennom en intern kjernekallkjede og datastruktur.
Kjerneforbindelse: eBPF er avhengig av kernel uprobe-rammeverket for å implementere hooks
Kjernen uprobe.c er kjerneimplementasjonen av Linux-kjernens native user-state probe (uprobe) og er ansvarlig for:
Administrere registrering og kansellering av brukertilstandsprober (f.eks. register_uprobe(), unregister_uprobe()).
Håndterer innsetting av breakpoint (skriver breakpoint-instruksjoner til målfunksjonsadressen, som x86s int3).
Capture breakpoint utløser hendelser (sitter fast i kjernetilstandsprosessering når et program kjøres til breakpoint).
Kall en forhåndsregistrert callback-funksjon (dvs. hook-logikk).
eBPF uprobe-programmet (som eksempelet med hook libc.so du skrev) registrerer i hovedsak en uprobe-basert eBPF-callback-funksjon med kjernen gjennom eBPF-loaderen (f.eks. bcc, libbpf), som er helt avhengig av infrastrukturen som tilbys av uprobe.c.
Spesifikk kallkjede: flyten fra eBPF-programmet til uprobe.c
Når du registrerer en uprobe gjennom en eBPF-loader (som bcc sin attach_uprobe), er den underliggende prosessen som følger:
eBPF-lasteren initierer en registreringsforespørsel: Lasteren (som bccs Python-kode) forteller kjernen via et systemkall (som bpf() eller perf_event_open()) at "Jeg vil henge en eBPF-krok på openat-funksjonen til libc.so" og sender bytekoden til eBPF-programmet.
Kjerneverifisering og forberedelse av eBPF-programmer Kernel eBPF-verifikatoren sjekker programmets legitimitet for å sikre at det ikke kompromitterer kjernens sikkerhet. Når det er godkjent, laster du eBPF-programmet inn i kjernen og har en "eBPF callback-funksjon" (altså den uprobe_openat logikken du skrev).
Gjenbruk av uprobe.cs registreringsgrensesnittkjerne vil kalle register_uprobe()-funksjonen i uprobe.c, registrere en "native uprobe", og bruke eBPF-callback-funksjonen som "trigger-handler" for denne uprobe.
Nøkkelen her er denne: essensen i eBPFs uprobe er å binde en callback av typen eBPF til kjernens native uprobe.
uprobe.c setter inn et breakpoint og venter på at det skal utløses. Uprobe.c skriver en breakpoint-instruksjon (som x86s int3) til brukerens tilstandsminne basert på den registrerte måladressen (openat-adressen i libc.so), og registrerer breakpointens opprinnelige instruksjon (for å gjenoppta utførelsen etter utløsing).
Funksjonskall utløser breakpoints, uprobe.c kaller eBPF-callbacks Når applikasjonen kaller libc.so:openat, utløser utførelsen av breakpoint-instruksjonen en felle og faller inn i kjernetilstanden. På nåværende tidspunkt:
Kjernen kaller uprobe_handler()-funksjonen (kjerneprosesseringslogikk) i uprobe.c.
uprobe_handler() vil sjekke registreringsinformasjonen som tilsvarer breakpunktet og finne ut at den er bundet til en eBPF-callback, så den vil kalle eBPF-programmet (altså uprobe_openat du skrev).
Etter at eBPF-programmet er kjørt (f.eks. ved å samle parametere, skrive til ringbuf), gjenoppretter uprobe_handler() den opprinnelige instruksjonen og lar programmet fortsette utførelsen.
Sammendrag: Forholdet mellom de to
Kernel/events/uprobe.c er den underliggende infrastrukturen, som tilbyr kjernefunksjoner som innsetting, fangst og gjenoppretting av brukerstatus-breakpoints, og er grunnlaget for alle brukertilstandsprober (inkludert eBPF uprobe, gdb-feilsøking osv.).
Uprobe-programmet til eBPF er en applikasjon på et øvre lag basert på denne infrastrukturen, som registrerer eBPF-callback-funksjoner og lar kjernen utføre eBPF-logikk når uprobe utløses, og dermed oppnå effektiv sporing av brukertilstandsfunksjoner.
Kort sagt: uprobe for eBPF er «brukeren» og uprobe.c er «tjenesteleverandøren», og førstnevnte er avhengig av sistnevnte for å fullføre registrering, utløsing og utførelse av hooks.
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com