Не могу понять значение ‘Off’ раздела в выводе readelf? Это смещение от ‘Address’?

#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 и т.д.