| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- package ebpftracer
- import (
- "github.com/cilium/ebpf"
- "github.com/cilium/ebpf/link"
- "github.com/coroot/coroot-node-agent/ebpftracer/tracer"
- "github.com/coroot/coroot-node-agent/utils"
- 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 {
- // TODO copy至目标进程读取
- //utils.GetDefaultAgentsPath("NativeAgent","libnativeAgent.so")
- //path = utils.GetDefaultAgentsPath("NativeAgent", "libnativeAgent.so")
- //path = "/tmp/NativeAgentSo2378900480034120722.tmp"
- path = utils.GetDefaultAgentsPath("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 {
- klog.Error(err)
- 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
- }
|