У меня есть небольшой текстовый файл, который я хотел бы записать здесь в BPF. Вот как выглядит мой код Python для BPF, но я пока не могу ничего распечатать. Я продолжаю получать сообщение «Не удалось загрузить программу: неверный аргумент с кучей ошибок регистра». На данный момент моя строка в основном говорит привет, мир, привет
BPF_ARRAY(lookupTable, char, 512);
int helloworld2(void *ctx)
{
//print the values in the lookup table
#pragma clang loop unroll(full)
for (int i = 0; i < 512; i++) {
char *key = lookupTable.lookup(&i);
if (key) {
bpf_trace_printk("%s\n", key);
}
}
return 0;
}
Вот код Python:
b = BPF(src_file="hello.c")
lookupTable = b["lookupTable"]
#add hello.csv to the lookupTable array
f = open("hello.csv","r")
file_contents = f.read()
#append file contents to the lookupTable array
b_string1 = file_contents.encode('utf-8')
b_string1 = ctypes.create_string_buffer(b_string1)
lookupTable[0] = b_string1
f.close()
b.attach_kprobe(event=b.get_syscall_fnname("clone"), fn_name="helloworld2")
b.trace_print()
У меня есть ссылка на ошибку в этом pastebin, так как он такой длинный: Ошибка BPF
Одной заметной ошибкой является упоминание об обнаружении бесконечного цикла, что мне нужно проверить.
bpftool prog dump xlated <prog>
после загрузки илиllvm-objdump -S <objfile>
, но у вас не будет объектного файла с bcc)? Я подозреваю, что нет, потому что вы передаете указатель сi
наlookupTable.lookup(&i)
, а это означает, что значение вi
может измениться внутри цикла, и вы можете потенциально иметь этот бесконечный цикл. Помощник поиска, конечно, доступен только для чтения, но clang не знает об этом. - person Qeole   schedule 28.07.2021