Объединить разделы elf

#elf #objcopy

Вопрос:

У меня есть файл elf с этими разделами:

 Section Headers:
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0
  [ 1] .rtc.text         PROGBITS        400c0000 14e3c92 000000 00   W  0   0  1
  [ 2] .iram0.vectors    PROGBITS        40080000 000074 000400 00  AX  0   0  4
  [ 3] devices           PROGBITS        3ffb0000 13b2780 000090 00  WA  0   0  4
  [ 4] _k_mem_slab_area  PROGBITS        3ffb0090 13b2810 000038 00  WA  0   0  4
  [ 5] _k_sem_area       PROGBITS        3ffb00c8 13b2848 000048 00  WA  0   0  4
  [ 6] _k_mutex_area     PROGBITS        3ffb0110 13b2890 000014 00  WA  0   0  4
  [ 7] _net_buf_pool_are PROGBITS        3ffb0124 13b28a4 000050 00  WA  0   0  4
  [ 8] net_if            PROGBITS        3ffb0180 13b2900 0000a0 00  WA  0   0 32
  [ 9] net_if_dev        PROGBITS        3ffb0220 13b29a0 000020 00  WA  0   0  4
  [10] initlevel         PROGBITS        40080400 000474 000080 00   A  0   0  4
  [11] sw_isr_table      PROGBITS        40080480 0004f4 000100 00  WA  0   0  4
  [12] shell_sections    PROGBITS        40080580 0005f4 00002c 00   A  0   0  4
  [13] shell_root_cmds_s PROGBITS        400805ac 000620 000040 00   A  0   0  4
  [14] text              PROGBITS        400805ec 000660 000115 00  AX  0   0  4
  [15] .dram0.data       PROGBITS        3ffb0240 13b29c0 000128 00  WA  0   0  4
  [16] rodata            PROGBITS        3ffb0368 13b2ae8 0034d0 00   A  0   0  4
  [17] bss               NOBITS          3ffb3838 13b5fb8 001900 00  WA  0   0  8
  [18] app_noinit        PROGBITS        3ffb5138 14e3c92 000000 00   W  0   0  1
  [19] noinit            NOBITS          3ffb5140 13b5fb8 005e10 00  WA  0   0 16
  [20] .intList          PROGBITS        3ebfe010 000790 000048 00  WA  0   0  4
  [21] .flash.text       PROGBITS        400d0018 14d2798 0114fa 00  AX  0   0  4
 

Я использую инструмент, который использует этот elf в качестве входных данных, но может работать только с максимум 16 разделами. Как вы можете видеть, некоторые из этих разделов находятся рядом.

Есть ли способ объединить эти разделы либо во время ссылки, либо непосредственно перед использованием другого инструмента?

Комментарии:

1. Можете ли вы объяснить, почему вы хотите их объединить? Можно написать скрипт компоновщика.

2. @P__J__ Я использую инструмент, который не может обрабатывать более 16 разделов. Они могли бы использовать сегменты, но на данный момент они используют разделы

3. Какой инструмент? Что делает этот инструмент?

4. эсптул . Это преобразует файл elf в файл bin для esp32

Ответ №1:

Я использую инструмент, который использует этот elf в качестве входных данных, но может работать только с максимум 16 разделами. https://github.com/espressif/esptool

Поскольку инструмент с открытым исходным кодом, было бы намного проще исправить его, а затем попытаться обойти это ограничение.

Объединение разделов, которые имеют одинаковые флаги и являются последовательными, несложно, но может нарушить код, если есть перемещения, ссылающиеся на начало/конец раздела.

Если таких перемещений нет, вам следует посмотреть, почему у вас есть все эти разделы в первую очередь.

Комментарии:

1. Я постараюсь это исправить. Но я пытался найти быстрый обходной путь, потому что это просто проблема, которая не имеет никакого отношения к тому, что я пытаюсь сделать