Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 209|Risposta: 3

[Conoscenze sulla sicurezza] Collegamenti con conoscenze relative all'EBPF

[Copiato link]
Pubblicato il 20-10-2025 16:47:02 | | |
Questo post è stato modificato l'ultima volta da Summer il 21-10-2025 alle 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框架,探针 *




Precedente:. Coda di priorità PriorityQueue in NET6
Prossimo:AI Agent e AI MCP
 Padrone di casa| Pubblicato il 20-10-2025 16:50:38 |
Sia i moduli EBPF che quelli del kernel corrispondono alla sorgente dati delle sonde kernel, non a quella stessa di EBPF
 Padrone di casa| Pubblicato il 20-10-2025 16:59:33 |
Riferimenti Linux: Brother Bird's Linux Author Taiwanese

Il login del link ipertestuale è visibile.
 Padrone di casa| Pubblicato il 20-10-2025 19:30:47 |
https://www.cnblogs.com/revercc/p/17803876.html
Il collegamento tra il programma uprobe di eBPF e il kernel/events/uprobe.c è essenzialmente che il meccanismo eBPF riutilizza l'infrastruttura nativa uprobe del kernel per implementare la funzione hook delle funzioni di stato utente. In particolare, uprobe di eBPF è un'"applicazione" del framework kernel uprobe, collegato tramite una catena di chiamate e una struttura dati interna del kernel.
Connessione core: eBPF si basa sul framework kernel uprobe per implementare gli hook
Il kernel uprobe.c è l'implementazione principale della sonda nativa utente (uprobe) del kernel Linux ed è responsabile di:
Gestire la registrazione e la cancellazione delle sonde di stato utente (ad esempio, register_uprobe(), unregister_uprobe()).
Si occupa dell'inserimento di breakpoint (scrivere istruzioni di breakpoint all'indirizzo della funzione target, come l'int3 di x86).
Cattura eventi trigger breakpoint (bloccati nell'elaborazione dello stato kernel quando un programma viene eseguito fino a un punto di interruzione).
Chiama una funzione di callback pre-registrata (cioè logica di hook).
Il programma eBPF uprobe (come l'esempio del hook libc.so che hai scritto) registra essenzialmente una funzione di callback eBPF basata su uprobe con il kernel tramite il loader eBPF (ad esempio, bcc, libbpf), che si basa completamente sull'infrastruttura fornita da uprobe.c.
Catena di chiamate specifica: il flusso dal programma eBPF a uprobe.c
Quando registri un uprobe tramite un loader eBPF (come il attach_uprobe di bcc), il processo sottostante è il seguente:
Il loader eBPF avvia una richiesta di registrazione. Il loader (come il codice Python di bcc) comunica al kernel tramite una chiamata di sistema (come bpf() o perf_event_open()) che "Voglio appendere un hook eBPF alla funzione openat del libc.so" e passa il bytecode del programma eBPF.
Verifica del kernel e preparazione dei programmi eBPF Il verificatore eBPF del kernel verifica la legittimità del programma per assicurarsi che non comprometta la sicurezza del kernel. Una volta passato, carica il programma eBPF nel kernel e crea una "funzione di callback eBPF" (cioè la logica uprobe_openat che hai scritto).
Il riutilizzo del kernel dell'interfaccia di registrazione di uprobe.c chiamerà la funzione register_uprobe() in uprobe.c, registrerà un "uprobe nativo" e utilizzerà la funzione di callback eBPF come "gestore di trigger" di questo uprobe.
La chiave qui è questa: l'essenza dell'uprobe di eBPF è legare un callback di tipo eBPF all'uprobe nativo del kernel.
uprobe.c inserisce un punto di interruzione e attende che venga attivato. Uprobe.c scrive un'istruzione di punto di interruzione (come l'int3 di x86) nella memoria di stato dell'utente basata sull'indirizzo target registrato (l'indirizzo di openat in libc.so), e registra l'istruzione originale del punto di interruzione (per riprendere l'esecuzione dopo l'attivazione).
Le chiamate funzione attivano breakpoint, uprobe.c chiama callback eBPF Quando l'applicazione chiama libc.so:openat, l'esecuzione dell'istruzione breakpoint attiva una trappola e entra nello stato kernel. Al momento:
Il kernel chiama la funzione uprobe_handler() (logica di elaborazione del kernel) in uprobe.c.
uprobe_handler() controllerà le informazioni di registrazione corrispondenti al punto di interruzione e scoprirà che è vincolato a un callback eBPF, quindi chiamerà il programma eBPF (cioè il uprobe_openat che hai scritto).
Dopo l'esecuzione del programma eBPF (ad esempio, raccolta dei parametri, scrittura su ringbuf), uprobe_handler() ripristina l'istruzione originale e permette al programma di continuare l'esecuzione.
Sommario: Il rapporto tra i due
kernel/events/uprobe.c è l'infrastruttura sottostante, che fornisce funzionalità fondamentali come inserimento, cattura e recupero dei punti di interruzione dello stato utente, ed è la base per tutte le sonde di stato utente (inclusi eBPF uprobe, gdb debugging, ecc.).
Il programma uprobe di eBPF è un'applicazione di livello superiore basata su questa infrastruttura, che registra le funzioni di callback eBPF e permette al kernel di eseguire la logica eBPF quando uprobe viene attivata, ottenendo così un tracciamento efficiente dello stato delle funzioni utente.
In breve: uprobe per eBPF è l'"utente" e uprobe.c è il "fornitore di servizi", mentre il primo si basa sul secondo per completare la registrazione, l'attivazione e l'esecuzione degli hook.
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com