嗨,我正在学习如何使用eBPF地图,所以我试着运行我在密件抄送文档上找到的简单代码。
import os
import socket
import time
import logging
import signal
import sys
import zmq
import json
import yaml
import netifaces as ni
from bcc import BPF
from ctypes import *
b = BPF(src_file="tailcall_test.c")
tail_fn = b.load_func("tail_call", BPF.KPROBE)
prog_array = b.get_table("prog_array")
prog_array[c_int(2)] = c_int(tail_fn.fd)
b.attach_kprobe(event="some_kprobe_event", fn_name = "do_tail_call")下面是我使用的c代码,它的名称是:tailcall_test.c:
#include <uapi/linux/ptrace.h>
#include <net/sock.h>
#include <bcc/proto.h>
#include <linux/bpf.h>
#include <linux/kernel.h>
#include <uapi/linux/bpf.h>
BPF_PROG_ARRAY(prog_array, 10);
int tail_call(void *ctx) {
bpf_trace_printk("tail-call\n");
return 0;
}
int do_tail_call(void *ctx) {
bpf_trace_printk("Original program\n");
prog_array.call(ctx, 2);
return 0;
}我不太确定需要包含哪些标头或库,所以我把所有的东西都抛到了里面。抱歉,代码太脏了
无论如何,当我尝试运行它时,它会给我这个错误:
cannot attach kprobe, probe entry may not exist
Traceback (most recent call last):
File "tailcall_test.py", line 18, in <module>
b.attach_kprobe(event="some_kprobe_event", fn_name = "do_tail_call")
File "/usr/lib/python2.7/dist-packages/bcc/__init__.py", line 648, in attach_kprobe
(fn_name, event))
Exception: Failed to attach BPF program do_tail_call to kprobe some_kprobe_event有什么帮助..?提前谢谢你。
另外,如果你们有任何建议来学习如何使用eBPF的尾部调用,如果你们能和我分享的话,我会非常感激。
提前谢谢。
发布于 2019-06-30 22:45:09
因此,在Roadowl在评论中发现问题的原因之前,我没有时间完成我的回答。由于问题的第二部分是关于尾调用的参考,而且我已经写了这个部分,所以我把它张贴起来,以防万一会有帮助。
https://stackoverflow.com/questions/56828345
复制相似问题