问题描述
搞乱 eBPF 并决定尝试另一种 crc32 算法来尝试,但遇到了另一个错误,我似乎找不到太多信息。我一直收到 bpf:加载程序失败:最后一个 insn 的无效参数不是退出或 jmp。我试图查看它是否与我编写函数的方式有关,但我生成的只是警告,然后跳转到此错误。
bpf_text3 = '''
#include <uapi/linux/ptrace.h>
static int build_crc32_table(void) {
uint32_t crc=0xFFFFFFFF;
uint32_t str[256];
for(uint32_t i=0;i<256;i++) {
uint32_t ch=i;
for(size_t j=0;j<8;j++) {
uint32_t b=(ch^crc)&1;
crc>>=1;
if(b) crc=crc^0xEDB88320;
ch>>=1;
}
str[i]=crc;
}
return str;
}
int crc32(struct pt_regs *ctx) {
char str[256];
strcpy(str,buildcrc32_table());
//uint32_t str[] = build_crc32_table();
bpf_probe_read(&str,sizeof(str),(void *)PT_REGS_RC(ctx));
uint32_t crc=0xFFFFFFFF;
bpf_trace_printk("BCC - Test Beginning...\\n");
u64 startTime = bpf_ktime_get_ns();
for (size_t i = 0; i < sizeof(str); i++) {
char ch = str[i];
if (ch == '\\0') break;
uint32_t t=(ch^crc)&0xFF;
crc=(crc>>8)^str[t];
}
int result = ~crc;
u64 totalTime = bpf_ktime_get_ns() - startTime;
bpf_trace_printk(">> BCC - CRC of \\"%s\\" is: 0x%x \\n",str,result);
bpf_trace_printk(">> BCC - CRC took: %lu cycles\\n",totalTime);
bpf_trace_printk("BCC - Test Complete.\\n\\n\\n");
return 0;
};
'''
产生了 5 个警告。附加到uretprobe bpf:加载失败 程序:无效参数最后一个 insn 不是退出或 jmp 处理 0 insns (限制 1000000) max_states_per_insn 0 total_states 0 peak_states 0 标记_读取 0
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)