> Подскажите , а как с помощью этого ключа правильно определить смещение сегмента
> данных чтобы задать в pad-to
>
> --gap-fill val --pad-to val
> Вкратце посмотрел -- кажется действительно через objdump не выйдет изменить размер секции. Через ld, как предложил pavlinux, можно попробовать, но на выходе линкер дает бинарь, а не объектник, а вам надо объектник, как я понимаю (в качестве примера скрипта линкера можно юзать например /usr/lib/ldscripts/elf_x86_64.x).
Есть другая идея -- дизасемблировать (через objdump) объектник в ассемблерный код и там изменить размер секции data, после чего скомпилировать асм в объектник. Проблема только в том, как дезасемблировать в такой код, который поймет gcc.
Вот пример:
1. Компилируем main.c в асм (main.s):
$ gcc -S main.c -o main.S
2. Меняем в main.S размеры переменных (например) в секции .data:
.data
.align 64
.type x, @object
.size x, 64
x:
.long 10
.align 64
.type y, @object
.size y, 64
y:
.long 11
.align 64
.type z, @object
.size z, 64
z:
.long 12
т.е. align и size были 4 байта, я сделал 64 (первое что в голову пришло).
3. Компилируем асм в объектник:
$ gcc -c main.S
Получаем объектник с измененной секцией ".data".
В этой цепочке я изменял асм полученный из сырца, а не из объектника. Ваша задача понять, как получить из объектника такой асм файл, чтобы он мог быть скомпилирован обратно в объектник. Остальная процедура будет такая же, как у меня.