无法理解 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 开始,依此类推。