lcc/golcc/rexample/hello/hello.go (56 lines of code) (raw):

package main import "C" import ( "flag" "fmt" "os" "strings" "time" "github.com/aquasecurity/libbpfgo" "golang.org/x/sys/unix" ) var ( h bool path string ) func init() { var name unix.Utsname unix.Uname(&name) defaultPath := fmt.Sprintf("/boot/vmlinux-%s", name.Release) defaultPath = strings.Trim(defaultPath, "\x00") flag.BoolVar(&h, "h", false, "this help") flag.StringVar(&path, "p", defaultPath, "set BTF custom path") } func main() { flag.Parse() fmt.Println("btf path:", path) bpfModule, err := libbpfgo.NewModuleFromFileArgs(libbpfgo.NewModuleArgs{ BPFObjPath: "hello.bpf.o", BTFObjPath: path, }) if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(-1) } defer bpfModule.Close() err = bpfModule.BPFLoadObject() if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(-1) } prog1, err := bpfModule.GetProgram("j_wake_up_new_task") if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(-1) } link1, err := prog1.AttachGeneric() if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(-1) } if link1.GetFd() == 0 { os.Exit(-1) } fmt.Println(prog1.GetType().String()) time.Sleep(10000 * time.Second) }