#gcc #linker #elf #readelf
#gcc #компоновщик #elf #readelf
Вопрос:
Вот вывод 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. С помощью debugger я мог видеть, что значение PC начинается с 0x40000000, а в коде есть startup.s, который должен быть там. Но я не уверен, почему значение ‘Off’ для этого раздела равно 0x10000. Что означает это значение ‘Off’? Разве адреса и размера недостаточно для раздела?
Комментарии:
1. Смещение — это местоположение этого сегмента в файле
2. @SamiKuhmonen А, понятно. Спасибо. если вы сделаете это ответом, я выберу его.
Ответ №1:
Поле Offset обозначает местоположение этого сегмента в файле. Здесь .text
сегмент начинается с местоположения 0x10000 и имеет длину 0x7c байт, затем следующий сегмент .rodata
начинается с 0x10080 и т.д.