Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 209|Respuesta: 3

[Conocimiento de Seguridad] Enlaces con el conocimiento relacionado con EBPF

[Copiar enlace]
Publicado el 20-10-2025 16:47:02 | | |
Esta publicación fue editada por última vez por Summer el 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框架,探针 *




Anterior:. Cola de prioridad PriorityQueue en NET6
Próximo:Agente de IA y MCP de IA

Publicaciones relacionadas

 Propietario| Publicado el 20-10-2025 16:50:38 |
Tanto los módulos EBPF como los núcleos corresponden a la fuente de datos de las sondas núcleo, no a la propia EBPF
 Propietario| Publicado el 20-10-2025 16:59:33 |
Referencias a Linux: Autor de Linux de Brother Bird Taiwanés

El inicio de sesión del hipervínculo es visible.
 Propietario| Publicado el 20-10-2025 19:30:47 |
https://www.cnblogs.com/revercc/p/17803876.html
La conexión entre el programa uprobe de eBPF y el kernel/events/uprobe.c es esencialmente que el mecanismo eBPF reutiliza la infraestructura nativa uprobe del kernel para implementar la función hook de las funciones de estado de usuario. Específicamente, el uprobe de eBPF es una "aplicación" del framework kernel uprobe, que está vinculado mediante una cadena interna de llamadas y una estructura de datos del kernel.
Conexión principal: eBPF se basa en el framework kernel uprobe para implementar hooks
El kernel uprobe.c es la implementación central de la sonda nativa de estado de usuario (uprobe) del núcleo Linux y es responsable de:
Gestionar el registro y cancelación de sondas de estado de usuario (por ejemplo, register_uprobe(), unregister_uprobe()).
Se encarga de la inserción de puntos de interrupción (escribir instrucciones de punto de interrupción en la dirección de la función objetivo, como int3 de x86).
Captura eventos de disparo de punto de interrupción (atascado en el procesamiento del estado del núcleo cuando un programa se ejecuta hasta un punto de interrupción).
Llama a una función de callback preregistrada (es decir, lógica de gancho).
El programa eBPF uprobe (como el ejemplo de hook libc.so que escribiste) registra esencialmente una función de callback eBPF basada en uprobe con el núcleo a través del cargador eBPF (por ejemplo, bcc, libbpf), que depende completamente de la infraestructura proporcionada por uprobe.c.
Cadena de llamadas específica: el flujo desde el programa eBPF hasta uprobe.c
Cuando registras un uprobe a través de un cargador eBPF (como el attach_uprobe de bcc), el proceso subyacente es el siguiente:
El cargador eBPF inicia una solicitud de registro. El cargador (como el código Python de bcc) le dice al núcleo mediante una llamada al sistema (como bpf() o perf_event_open()) que "Quiero colgar un gancho eBPF en la función openat del libc.so" y pasa el bytecode del programa eBPF.
Verificación del núcleo y preparación de programas eBPF El verificador eBPF del núcleo verifica la legitimidad del programa para asegurarse de que no compromete la seguridad del núcleo. Una vez aprobado, carga el programa eBPF en el kernel y ten una "función de callback eBPF" (es decir, la lógica uprobe_openat que has escrito).
La reutilización del núcleo de la interfaz de registro de uprobe.c llamará a la función register_uprobe() en uprobe.c, registrará un "uprobe nativo" y usará la función de callback eBPF como el "gestor de disparos" de este uprobe.
La clave aquí es esta: la esencia de la uprobe de eBPF es vincular una callback de tipo eBPF a la uprobe nativa del kernel.
uprobe.c inserta un punto de interrupción y espera a que se active. Uprobe.c escribe una instrucción de punto de interrupción (como el int3 de x86) en la memoria de estado del usuario basada en la dirección de destino registrada (la dirección de openat en libc.so), y registra la instrucción original del punto de interrupción (para reanudar la ejecución tras el disparo).
Las llamadas a función activan puntos de interrupción, uprobe.c llama a las llamadas eBPF Cuando la aplicación llama a libc.so:openat, ejecutar la instrucción de punto de interrupción activa una trampa y entra en estado kernel. En este momento:
El núcleo llama a la función uprobe_handler() (lógica de procesamiento del núcleo) en uprobe.c.
uprobe_handler() comprobará la información de registro correspondiente al punto de interrupción y verá que está vinculado a una callback eBPF, por lo que llamará al programa eBPF (es decir, al uprobe_openat que escribiste).
Después de ejecutar el programa eBPF (por ejemplo, recoger parámetros, escribir en ringbuf), uprobe_handler() restaura la instrucción original y permite que el programa continúe su ejecución.
Resumen: La relación entre ambos
kernel/events/uprobe.c es la infraestructura subyacente, que proporciona capacidades clave como la inserción, captura y recuperación de puntos de interrupción de estado de usuario, y es la base de todas las sondas de estado de usuario (incluyendo eBPF uprobe, depuración gdb, etc.).
El programa uprobe de eBPF es una aplicación de capa superior basada en esta infraestructura, que registra funciones de callback eBPF y permite al kernel ejecutar lógica eBPF cuando se activa uprobe, logrando así un seguimiento eficiente del estado de funciones de usuario.
En resumen: uprobe para eBPF es el "usuario" y uprobe.c es el "proveedor de servicios", y el primero depende del segundo para completar el registro, activación y ejecución de los hooks.
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com