无法从 C 中的 .ELF 文件中读取一个段

Trouble reading one segment from a .ELF file in C

我正在尝试读取一个 ELF 文件以访问它拥有的一个段。到目前为止,我已经阅读了文件的 header,它显示段部分的偏移量从文件的开头开始 52 个字节 (header.e_phoff),所以我尝试使用 fseek(fitxer , header.e_phoff, SEEK_SET );但是当我读取该段并打印它时,它显示 header 的偏移量是 1024,物理地址是 32768,当它们分别应该是 0x000400 和 0x00008000 时。

FILE* fitxer = fopen(string,"rb");
        if(fitxer)
        {
            fread(&header, 1, sizeof(header), fitxer);
            fseek(fitxer, header.e_phoff, SEEK_SET );
            fread(&segment, 1, sizeof(segment), fitxer);
        }
        fclose(fitxer);
printf("offset: ");
    printf("\n%d",segment.p_offset);
    printf("\n");
    printf("pyshical address: ");
    printf("%d",segment.p_paddr);
    printf("\n");

我做错了什么?

$ arm-none-eabi-readelf -l HOLA.elf
Elf file type is EXEC (Executable file)
Entry point 0x8000
There are 1 program headers, starting at offset 52
Program Headers:
 Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
 LOAD 0x000400 0x00008000 0x00008000 0x0019f 0x0019f R E 0x400
 Section to Segment mapping:
 Segment Sections...
 00 .text .rodata
```

一切正常:十进制的1024等于十六进制的0x400,0x8000等于32768

无论如何,如果您需要十六进制表示法的结果,请使用 %x 格式而不是 %d:

printf("\n%x",segment.p_offset);
printf("\n");
printf("pyshical address: ");
printf("%x",segment.p_paddr);