es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Compilando un programa de filtros de paquetes extended Berkeley en Ubuntu con clang y llvm instalados, también con libbpf instalada, pero no se encontró la función bt helper y se produjo un error de formato.

Así que tengo llvm, encabezados del kernel (5.14.1), clang y también libbpf junto con eso copié bpf_helpers.h en el directorio del programa ebpf desde la fuente de Linux. Este es un programa simple que me gusta cargar y ejecutar cuando se llama al sistema “execve” desde cualquier programa.

#include <errno.h>
#include <stdio.h>
#include <string.h>
#include "bpf_helpers.h" // algunos ayudantes no encontrados, ¿por qué es eso?

#define SEC(NAME) __attribute__((section(NAME), used))

SEC("kprobe/execve")
int bpf_prog1(struct pt_regs *ctx)
{
        char m[]="hello world";
        bpf_trace_printk(m,sizeof(m));

        return 0;
}

char _license[] SEC("license") = "GPL";

Realmente un programa simple,

Compilé el programa con clang, pero cuando hago llvm-objdump -S ./one.o me da un mensaje que dice formato no reconocido,

Así que si mi llvm no entiende mi archivo .o, me gustaría saber qué significa eso. ¿Puedo ignorar esta advertencia de llvm-objdum y continuar cargando el archivo .o usando el programa de carga de ebpf, o la forma en que creé el archivo .o y lo compilé con clang está mal, en ese caso, alguien puede decirme cómo crear un programa ebpf a partir de un archivo .c de ebpf y cargarlo usando el programa de carga.</string.h></stdio.h></errno.h>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de advertencia “formato no reconocido” de llvm-objdump indica que la herramienta de LLVM no puede reconocer el formato del archivo objeto proporcionado (one.o en este caso). Esto puede ocurrir debido a varias razones, como opciones de compilación incorrectas o formatos de archivo objeto incompatibles.

    En este caso, es posible que el archivo objeto se haya compilado con un formato diferente al que llvm-objdump espera. Se recomienda verificar las opciones de compilación y la arquitectura objetivo antes de compilar el programa nuevamente.

    En cuanto a las helpers faltantes de bpf_helpers.h, esto podría deberse a que el archivo de encabezado no se encuentra en una ruta de inclusión estándar. En tales casos, es necesario especificar la ruta al archivo de encabezado utilizando la opción -I durante la compilación.

    Para crear un programa eBPF a partir del archivo C, es necesario utilizar el compilador clang con opciones adecuadas. Aquí hay un ejemplo de comando para crear un programa eBPF a partir del archivo one.c:

    clang -O2 -target bpf -c one.c -o one.o
    

    La opción -target bpf especifica la arquitectura objetivo como bpf, que es requerida para programas eBPF. El archivo objeto resultante (one.o) se puede cargar utilizando el programa cargador de eBPF.

Comments are closed.