【问题标题】:Can't understand the 'Off' value of a section in readelf output? Is it offset from 'Address'?无法理解 readelf 输出中某个部分的“关闭”值?它是否从“地址”偏移?
【发布时间】:2021-02-24 07:51:16
【问题描述】:

这是 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,它应该在那里。但我不确定为什么该部分的“关闭”值是 0x10000。这个“关闭”值是什么意思?一个部分的地址和大小还不够吗?

【问题讨论】:

  • 偏移量是该段在文件中的位置
  • @SamiKuhmonen 啊,我明白了。谢谢。如果你愿意让它成为答案,我会选择它。

标签: gcc linker elf readelf


【解决方案1】:

Offset 字段表示该段在文件中的位置。这里 .text 段从位置 0x10000 开始,长度为 0x7c 字节,然后下一个段 .rodata 从 0x10080 开始等等。

【讨论】:

    猜你喜欢
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多