package ebpftracer import ( "github.com/cilium/ebpf" "github.com/cilium/ebpf/link" "github.com/coroot/coroot-node-agent/ebpftracer/tracer" klog "github.com/sirupsen/logrus" ) func (t *Tracer) AttachStackUprobes(path string, uprobes []tracer.Uprobe) []link.Link { var links []link.Link ex, err := link.OpenExecutable(path) if err != nil { return nil } klog.Infoln("[stack] Attach Start", path) for i, up := range uprobes { klog.Debugf("[stack] attaching %d -> %d -> %s -> 0x%x -> 0x%x -> 0x%x", i, len(uprobes), up.Funcname, up.AbsOffset, up.Address, up.AbsOffset+up.Address) var prog *ebpf.Program switch up.Location { case tracer.AtEntry: prog = t.uprobes["ent"] case tracer.AtRet: prog = t.uprobes["ret"] case tracer.AtDotNetEntry: prog = t.uprobes["dotnetent"] } uplink, err := ex.Uprobe(up.Funcname, prog, &link.UprobeOptions{Address: up.Address, Offset: up.AbsOffset}) if err != nil { klog.Errorf("[stack] attachingERROR:%v, %v, %v", err, up, uplink) // return nil } else { links = append(links, uplink) } } return links } func (t *Tracer) AttachJVMStackUprobes(path string, uprobes []tracer.Uprobe) []link.Link { path = "/opt/cloudwise/smartagent/agent/NativeAgent/libnativeAgent.so" setNodeEnter := "Java_com_cloudwise_agent_common_natives_TraceNative_setNodeEnter" setNodeReturn := "Java_com_cloudwise_agent_common_natives_TraceNative_setNodeReturn" klog.Infoln("Attach Start AttachJVMStackUprobes", path) var links []link.Link ex, err := link.OpenExecutable(path) if err != nil { return nil } klog.Infoln("Attach Start " + setNodeEnter) uplink, err := ex.Uprobe(setNodeEnter, t.uprobes["setNodeEnter"], &link.UprobeOptions{Offset: 0x0}) if err != nil { klog.Errorf("attaching ERROR: %v, %v, %v\n", err, setNodeEnter, uplink) } else { links = append(links, uplink) } klog.Infoln("Attach Start " + setNodeReturn) uplink, err = ex.Uprobe(setNodeReturn, t.uprobes["setNodeReturn"], &link.UprobeOptions{Offset: 0x0}) if err != nil { klog.Errorf("attaching ERROR: %v, %v, %v\n", err, setNodeReturn, uplink) } else { links = append(links, uplink) } return links }