作为作业的一部分,我必须处理三个结构。文件FileHeader中有一些较大的表,它由SectionHeader结构组成。Hdr由这些结构的数组组成,这些结构被布置在连续内存中。因此,我应该能够通过在内存中键入表的位置来访问数组。

typedef struct {
    unsigned int offset; // offset in bytes from start of file to section headers
    unsigned short headers; // count of section headers in table
} FileHeader;

typedef struct {
    unsigned int name;
    unsigned int type;
} SectionHeader;

我应该:使用FileHeader(hdr)中的offset和headers字段来标识节头表的位置和长度。我假设文件的开头是&hdr。
所以我这么做了,但这给了我一个seg错误。访问此数组的正确方法是什么?
    int header_location = hdr.offset;
    int header_length = hdr.headers;

    SectionHeader *sec_hdrs = (SectionHeader *) &hdr + header_location;

    SectionHeader sec_hdr;

    for (int i = 0; i < header_length; i++) {

            sec_hdr = sec_hdrs[i];
            if (sec_hdr.type == SHT_SYMTAB) break;
    }

最佳答案

试试这个:ElfSectionHeader *sec_hdrs = (ElfSectionHeader *)((unsigned char *) &hdr + header_location);
您的原始代码&hdr + header_location会将指针偏移sizeof(hdr) * header_location,这不是您的意图。

关于c - 尝试访问结构数组时出现段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25120992/

10-13 08:43