无法理解 readelf 输出中某个部分的 'Off' 值?它是否偏离 'Address'?
Can't understand the 'Off' value of a section in readelf output? Is it offset from 'Address'?
这是 readelf -a test.elf
的输出
Section Headers:
[Nr] Name Type Address Off Size ES Flg Lk Inf Al
[ 0] NULL 0000000000000000 000000 000000 00 0 0 0
[ 1] .text PROGBITS 0000000040000000 010000 00007c 00 AX 0 0 8
[ 2] .rodata PROGBITS 0000000040000080 010080 000016 00 A 0 0 8
[ 3] .debug_info PROGBITS 0000000000000000 010096 0000af 00 0 0 1
[ 4] .debug_abbrev PROGBITS 0000000000000000 010145 000086 00 0 0 1
[ 5] .debug_aranges PROGBITS 0000000000000000 0101cb 000030 00 0 0 1
.text 部分从 0x40000000 开始。使用调试器,我可以看到 PC 值从 0x40000000 开始,那里的代码是 startup.s,它本来就在那里。但我不确定为什么该部分的值 'Off' 是 0x10000。这个 'Off' 值是什么意思? Address 和 Size 不够一个版块吗?
Offset 字段表示该段在文件中的位置。这里 .text
段从位置 0x10000 开始,长度为 0x7c 字节,然后下一个段 .rodata
从 0x10080 开始,依此类推。
这是 readelf -a test.elf
的输出Section Headers:
[Nr] Name Type Address Off Size ES Flg Lk Inf Al
[ 0] NULL 0000000000000000 000000 000000 00 0 0 0
[ 1] .text PROGBITS 0000000040000000 010000 00007c 00 AX 0 0 8
[ 2] .rodata PROGBITS 0000000040000080 010080 000016 00 A 0 0 8
[ 3] .debug_info PROGBITS 0000000000000000 010096 0000af 00 0 0 1
[ 4] .debug_abbrev PROGBITS 0000000000000000 010145 000086 00 0 0 1
[ 5] .debug_aranges PROGBITS 0000000000000000 0101cb 000030 00 0 0 1
.text 部分从 0x40000000 开始。使用调试器,我可以看到 PC 值从 0x40000000 开始,那里的代码是 startup.s,它本来就在那里。但我不确定为什么该部分的值 'Off' 是 0x10000。这个 'Off' 值是什么意思? Address 和 Size 不够一个版块吗?
Offset 字段表示该段在文件中的位置。这里 .text
段从位置 0x10000 开始,长度为 0x7c 字节,然后下一个段 .rodata
从 0x10080 开始,依此类推。