将文件读入结构体

idj*_*adj 5 c struct fread

我正在尝试将文件的内容读入结构中。该结构如下所示:

    typedef struct{
            unsigned char e_ident[EI_NIDENT] ;
            Elf32_Half e_type;
            Elf32_Half e_machine;
            Elf32_Word e_version;
            Elf32_Addr e_entry;
            Elf32_Off e_phoff;
            Elf32_Off e_shoff;
            Elf32_Word e_flags;
            Elf32_Half e_ehsize;
            Elf32_Half e_phentsize;
            Elf32_Half e_phnum;
            Elf32_Half e_shentsize;
            Elf32_Half e_shnum;
            Elf32_Half e_shstrndx;
    } Elf32_Ehdr;
extern Elf32_Ehdr elfH;
Run Code Online (Sandbox Code Playgroud)

它基本上是一个ELF头文件。所以,无论如何我想将文件的内容加载到这个结构中。

该函数看起来像这样。

Elf32_Ehdr elfH;
int load(char* fname){
        FILE* file = fopen(fname,"r");

        if(NULL == file) return 0;

        fread(&elfH, 1, 52, file);

        fclose(file);
        return 1;
}
Run Code Online (Sandbox Code Playgroud)

因为它似乎无法正常工作。elfH 的内容不符合预期。可能是什么问题?我是不是该

dra*_*sht 0

您必须"b"在文件访问模式字符串 ( "rb")中添加fopen才能执行二进制数据读取。你的硬编码的 elf 头大小也可能不是一个好主意,因为你的 elf 头结构的大小可能不完全是 62。sizeof(Elf32_Ehdr)这可能是一个更好的方法......