问题描述
这里是 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。这个“关闭”值是什么意思?一个部分的地址和大小还不够吗?
解决方法
Offset 字段表示该段在文件中的位置。这里的 .text
段从位置 0x10000 开始,长度为 0x7c 个字节,然后下一个段 .rodata
从 0x10080 等处开始。