Есть ли способ переименовать имя раздела в.o или.a файле, скомпилированном gcc?
У меня есть предварительно скомпилированная библиотека, скомпилированная с помощью gcc-компилятора, и я хотел бы переместить функции из значения по умолчанию .text
раздел к другому названию раздела (скажем, foo
). Есть ли способ сделать это с помощью binutils без перекомпиляции?
2 ответа
.a библиотека или статическая библиотека - это не что иное, как коллекция только объектных файлов.
Поэтому перед установкой ссылки вы можете использовать команду objcpy rename для изменения названия ваших разделов. Точно так же вы можете изменить имя символа также используя "-redefine-sym"
--rename-section oldname = newname [, flags] Переименовывает раздел из oldname в newname, при необходимости изменяя флаги раздела на флаги. Это имеет преимущество перед использованием сценария компоновщика для выполнения переименования, поскольку выходные данные остаются в виде объектного файла и не становятся связанным исполняемым файлом. Пример:-
objcopy -I binary -O <output_format> -B <architecture> \
--rename-section .data=.rodata,alloc,load,readonly,data,contents \
<input_binary_file> <output_object_file>
Скрипт компоновщика
Вы также можете нас
ld
для переименования разделов с помощью скрипта компоновщика.
ld -r -T section_rename.xsc -o output.o input.o
Где
section_rename.xsc
может выглядеть примерно так:
SECTIONS
{
.newtext : { *(.text) }
.newdata : { *(.data) }
}