Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 209|Resposta: 3

[Conhecimento de Segurança] Links para conhecimento relacionado à EBPF

[Copiar link]
Postado em 20-10-2025 16:47:02 | | |
Este post foi editado pela última vez por Summer em 2025-10-21 às 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:. Fila de prioridade PriorityQueue no NET6
Próximo:Agente de IA e MCP de IA

Posts Relacionados

 Senhorio| Postado em 20-10-2025 16:50:38 |
Tanto o EBPF quanto o módulo kernel correspondem à fonte de dados das sondas do kernel, não à própria EBPF
 Senhorio| Postado em 20-10-2025 às 16:59:33 |
Referências ao Linux: Autor de Linux do Brother Bird Taiwanês

O login do hiperlink está visível.
 Senhorio| Postado em 20-10-2025 19:30:47 |
https://www.cnblogs.com/revercc/p/17803876.html
A conexão entre o programa uprobe do eBPF e o kernel/events/uprobe.c é essencialmente que o mecanismo eBPF reutiliza a infraestrutura nativa uprobe do kernel para implementar a função hook das funções de estado do usuário. Especificamente, o uprobe do eBPF é uma "aplicação" do framework kernel uprobe, que é vinculado por uma cadeia interna de chamadas e estrutura de dados do kernel.
Conexão principal: o eBPF depende do framework kernel uprobe para implementar hooks
O kernel uprobe.c é a implementação central do user-state probe nativo (uprobe) do kernel Linux e é responsável por:
Gerencie o registro e cancelamento das sondas de estado do usuário (por exemplo, register_uprobe(), unregister_uprobe()).
Gerencia a inserção de ponto de interrupção (escrevendo instruções de ponto de interrupção no endereço da função alvo, como o int3 do x86).
Capture eventos de gatilho de ponto de interrupção (travados no processamento do estado do kernel quando um programa é executado até um ponto de interrupção).
Chame uma função de retorno de chamada pré-registrada (ou seja, lógica de hook).
O programa eBPF uprobe (como o exemplo do hook libc.so você escreveu) basicamente registra uma função de callback eBPF baseada em uprobe no kernel através do carregador eBPF (ex.: bcc, libbpf), que depende totalmente da infraestrutura fornecida pelo uprobe.c.
Cadeia de chamadas específica: o fluxo do programa eBPF para uprobe.c
Quando você registra um uprobe através de um carregador eBPF (como o attach_uprobe do bcc), o processo subjacente é o seguinte:
O carregador eBPF inicia uma solicitação de registro. O carregador (como o código Python do bcc) informa ao kernel, via uma chamada de sistema (como bpf() ou perf_event_open()) que "Quero pendurar um gancho eBPF na função openat do libc.so" e passa o bytecode do programa eBPF.
Verificação do Kernel e Preparação de Programas eBPF O verificador eBPF do kernel verifica a legitimidade do programa para garantir que ele não comprometa a segurança do kernel. Depois de aprovado, carregue o programa eBPF no kernel e tenha uma "função de retorno de chamada eBPF" (ou seja, a lógica uprobe_openat que você escreveu).
O reuso do kernel da interface de registro do uprobe.c chamará a função register_uprobe() no uprobe.c, registrará um "uprobe nativo" e usará a função de callback eBPF como o "manipulador de gatilho" desse uprobe.
O ponto chave aqui é o seguinte: a essência do uprobe do eBPF é vincular um callback do tipo eBPF ao uprobe nativo do kernel.
uprobe.c insere um ponto de interrupção e espera que ele seja acionado. Uprobe.c escreve uma instrução de ponto de interrupção (como o int3 do x86) na memória de estado do usuário com base no endereço alvo registrado (o endereço do openat em libc.so), e registra a instrução original do ponto de interrupção (para retomar a execução após o disparo).
Funções chamam pontos de interrupção, uprobe.c chama callbacks eBPF Quando a aplicação chama libc.so:openat, executar a instrução de ponto de interrupção aciona uma armadilha e entra no estado kernel. Neste momento:
O kernel chama a função uprobe_handler() (lógica de processamento do kernel) no uprobe.c.
uprobe_handler() vai verificar as informações de registro correspondentes ao ponto de interrupção e verá que ele está vinculado a um callback eBPF, então ele chamará o programa eBPF (ou seja, o uprobe_openat que você escreveu).
Após a execução do programa eBPF (por exemplo, coletando parâmetros, escrevendo em ringbuf), uprobe_handler() restaura a instrução original e permite que o programa continue a execução.
Resumo: A relação entre os dois
Kernel/Events/uprobe.c é a infraestrutura subjacente, que fornece capacidades essenciais como inserção, captura e recuperação de pontos de interrupção de estado do usuário, e é a base para todas as sondas de estado do usuário (incluindo eBPF uprobe, depuração gdb, etc.).
O programa uprobe do eBPF é uma aplicação de camada superior baseada nessa infraestrutura, que registra funções de callback do eBPF e permite que o kernel execute a lógica do eBPF quando o uprobe é acionado, alcançando assim um rastreamento eficiente do estado da função do usuário.
Resumindo: uprobe para eBPF é o "usuário" e uprobe.c é o "provedor de serviço", e o primeiro depende do segundo para completar o registro, acionamento e execução dos ganchos.
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com