3.4 Android bpfloader初始化流程解读(二)

我继续看bpfloader是如何读取和处理bpf程序的。

4.2 读取代码段之readCodeSections


static int readCodeSections(ifstream& elfFile, vector& cs, size_t sizeOfBpfProgDef,
                            const bpf_prog_type* allowed, size_t numAllowed) {
    ...
    ret = readSectionHeadersAll(elfFile, shTable);//读取所有段的头信息。
    ret = readProgDefs(elfFile, pd, sizeOfBpfProgDef);//读取“progs” section对应的bpf_prog_def数据结构(可参考下面bpf_prog_def的定义),大小为sizeOfBpfProgDef。
    ret = getSectionSymNames(elfFile, "progs", progDefNames);
        ret = getSymName(elfFile, shTable[i].sh_name, name);//获取段名称如maps,progs,text等。
        enum bpf_prog_type ptype = getSectionType(name);//获取段类型,BPF_PROG_TYPE_UNSPEC(0),BPF_PROG_TYPE_TRACEPOINT(5),最后再根据段类型,来找到非BPF_PROG_TYPE_UNSPEC的section的index,如段名称为tracepoint_gpu_mem_gpu_mem_total的类型为5.
        ret = readSectionByIdx(elfFile, i, cs_temp.data);//通

你可能感兴趣的:(Android,eBPF,Book,android,python,开发语言)