gpt4 book ai didi

c - 在 C 中从 .ELF 文件读取一个段时出现问题

转载 作者:行者123 更新时间:2023-11-30 19:00:30 26 4
gpt4 key购买 nike

我正在尝试读取 ELF 文件以访问它所拥有的一个段。到目前为止,我已经读取了文件的 header ,它显示段部分的偏移量从文件开头 (header.e_phoff) 开始 52 个字节,因此我尝试使用 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);

关于c - 在 C 中从 .ELF 文件读取一个段时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59480513/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com