本质上,我正在做类似于https://wiki.osdev.org/ELF_Tutorial的事情,我将数据加载到结构中并通过它们的偏移量读取各个部分。主机是小端,我正在尝试分析为大端目标交叉编译的文件。我尝试对这些大端文件执行与小端文件相同的代码序列,但是在尝试访问这些部分时代码段错误。
int fd = open(filename, O_RDONLY);
char *header_start = (char *)mmap(0, file_size, PROT_READ, MAP_PRIVATE, fd, 0);
Elf32_Ehdr* elf_ehdr = (Elf32_Ehdr *)header_start;
Elf32_Shdr* elf_shdrs = (Elf32_Shdr *)((int)header_start + elf_ehdr->e_shoff);
Elf32_Shdr* sh_strtab = &elf_shdrs[elf_ehdr->e_shstrndx];
// code segfaults here when trying to access sh_strtab->sh_offset for big endian
// files, but works just fine for little endian files
为什么大端文件的代码会失败?