示例#1
0
// NewBpfModule constructor
func newBpfModule(code string, cflags []string) *BpfModule {
	//Debug.Println("Creating BpfModule from string")
	cflagsC := make([]*C.char, len(defaultCflags)+len(cflags))
	defer func() {
		for _, cflag := range cflagsC {
			C.free(unsafe.Pointer(cflag))
		}
	}()
	for i, cflag := range cflags {
		cflagsC[i] = C.CString(cflag)
	}
	for i, cflag := range defaultCflags {
		cflagsC[len(cflags)+i] = C.CString(cflag)
	}
	cs := C.CString(code)
	defer C.free(unsafe.Pointer(cs))
	c := C.bpf_module_create_c_from_string(cs, 2, (**C.char)(&cflagsC[0]), C.int(len(cflagsC)))
	if c == nil {
		return nil
	}
	return &BpfModule{
		p:       c,
		funcs:   make(map[string]int),
		kprobes: make(map[string]unsafe.Pointer),
	}
}
示例#2
0
// NewBpfModule constructor
func NewBpfModule(code string, cflags []string) *BpfModule {
	Debug.Println("Creating BpfModule from string")
	cflagsC := make([]*C.char, len(cflags))
	for i, cflag := range cflags {
		cs := C.CString(cflag)
		cflagsC[i] = cs
		defer C.free(unsafe.Pointer(cs))
	}
	var cflagsP **C.char
	if len(cflagsC) > 0 {
		cflagsP = (**C.char)(&cflagsC[0])
	}
	cs := C.CString(code)
	defer C.free(unsafe.Pointer(cs))
	c := C.bpf_module_create_c_from_string(cs, 0, cflagsP, C.int(len(cflagsC)))
	if c == nil {
		return nil
	}
	return &BpfModule{
		p:     c,
		funcs: make(map[string]int),
	}
}