0

eBPF をいじって、別の crc32 アルゴリズムを試すことにしましたが、あまりにも多くの情報を見つけることができないように見える別のエラーに行き詰まりました。bpf: Failed to load program: Invalid argument last insn is not an exit or 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 mark_read 0

4

0 に答える 0