Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 209|Svar: 3

[Säkerhetskunskap] Länkar till EBPF-relaterad kunskap

[Kopiera länk]
Publicerad den 2025-10-20 16:47:02 | | |
Detta inlägg redigerades senast av Summer den 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框架,探针 *




Föregående:. PriorityQueue prioritetskö i NET6
Nästa:AI-agent och AI-MCP

Relaterade inlägg

 Hyresvärd| Publicerad den 2025-10-20 16:50:38 |
Både EBPF och kärnmoduler motsvarar datakällan för kärnprober, inte EBPF:s egen
 Hyresvärd| Publicerad den 2025-10-20 16:59:33 |
Linux-referenser: Brother Birds Linux-författare taiwanesisk

Inloggningen med hyperlänken är synlig.
 Hyresvärd| Publicerad 2025-10-20 19:30:47 |
https://www.cnblogs.com/revercc/p/17803876.html
Kopplingen mellan eBPF:s uprobe-program och kärnan/events/uprobe.c är i princip att eBPF-mekanismen återanvänder kärnans inbyggda uprobe-infrastruktur för att implementera hook-funktionen för användarstatusfunktioner. Specifikt är eBPF:s uprobe en "applikation" av kärnans uprobe-ramverk, som är kopplad via en intern kärnanropskedja och datastruktur.
Kärnanslutning: eBPF förlitar sig på kärnans uprobe-ramverk för att implementera hooks
Kärnan uprobe.c är kärnimplementeringen av Linuxkärnans inbyggda user-state probe (uprobe) och ansvarar för:
Hantera registrering och avbokning av användarstatusprober (t.ex. register_uprobe(), unregister_uprobe()).
Hanterar brytpunktsinsättning (skriver brytpunktsinstruktioner till målfunktionsadressen, såsom x86:s int3).
Fånga brytpunkt utlöser händelser (fastnar i kärnans tillståndsbehandling när ett program körs till en brytpunkt).
Anropa en förregistrerad återkallelsefunktion (dvs. hook-logik).
eBPF uprobe-programmet (som exemplet med hook libc.so du skrev) registrerar i princip en uprobe-baserad eBPF-callback-funktion med kärnan via eBPF-laddaren (t.ex. bcc, libbpf), som helt och hållet är beroende av infrastrukturen som tillhandahålls av uprobe.c.
Specifik samtalskedja: flödet från eBPF-programmet till uprobe.c
När du registrerar en uprobe via en eBPF-laddare (som bcc:s attach_uprobe) är den underliggande processen följande:
eBPF-laddaren initierar en registreringsförfrågan: Lastaren (såsom bcc:s Python-kod) meddelar kärnan via ett systemanrop (såsom bpf() eller perf_event_open()) att "Jag vill hänga en eBPF-hook på openat-funktionen för libc.so" och skickar bytekoden för eBPF-programmet.
Kärnverifiering och förberedelse av eBPF-program Kärnans eBPF-verifierare kontrollerar programmets legitimitet för att säkerställa att det inte äventyrar kärnsäkerheten. När det har passerat, ladda eBPF-programmet i kärnan och ha en "eBPF callback-funktion" (dvs. den uprobe_openat logik du skrev).
Återanvändningen av uprobe.c:s registreringsgränssnittskärna kommer att anropa register_uprobe()-funktionen i uprobe.c, registrera en "native uprobe" och använda eBPF:s callback-funktion som "trigger-hanterare" för denna uprobe.
Nyckeln här är denna: kärnan i eBPF:s uprobe är att binda en callback av typen eBPF till kärnans inbyggda uprobe.
uprobe.c infogar en brytpunkt och väntar på att den ska triggas. Uprobe.c skriver en brytpunktsinstruktion (såsom x86:s int3) till användarens tillståndsminne baserat på den registrerade måladressen (openat-adressen i libc.so), och registrerar brytpunktens ursprungliga instruktion (för att återuppta exekveringen efter utlösning).
Funktionsanrop utlöser brytpunkter, uprobe.c anropar eBPF-återkallelser När applikationen anropar libc.so:openat utlöser exekveringen av brytpunktsinstruktionen en fälla och hamnar i kärntillståndet. Just nu:
Kärnan anropar uprobe_handler()-funktionen (kärnbearbetningslogik) i uprobe.c.
uprobe_handler() kommer att kontrollera registreringsinformationen som motsvarar brytpunkten och upptäcka att den är bunden till en eBPF-callback, så den kommer att anropa eBPF-programmet (dvs. den uprobe_openat du skrev).
Efter att eBPF-programmet har körts (t.ex. samlat in parametrar, skrivit till ringbuf), återställer uprobe_handler() den ursprungliga instruktionen och tillåter programmet att fortsätta köras.
Sammanfattning: Relationen mellan de två
kernel/events/uprobe.c är den underliggande infrastrukturen, som tillhandahåller kärnfunktioner såsom insättning, fångst och återställning av användarstatusbrytpunkter, och utgör grunden för alla användarstatusprober (inklusive eBPF-uprobe, GDB-felsökning med mera).
Uprobe-programmet i eBPF är en överordnad applikation baserad på denna infrastruktur, som registrerar eBPF-callback-funktioner och tillåter kärnan att köra eBPF-logik när uprobe triggas, vilket därmed uppnår effektiv spårning av användarstatusfunktioner.
Kort sagt: uprobe för eBPF är "användaren" och uprobe.c är "tjänsteleverantören", och den förstnämnda förlitar sig på den senare för att slutföra registrering, utlösande och exekvering av hooks.
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com