Самый простой способ объединить 2 или более файлов ELF

Я работаю над некоторым встроенным кодом для проекта класса, который в настоящее время (согласно требованиям) создает несколько файлов srec и объединяет их. Я хотел бы иметь возможность загрузить этот код в QEMU, но обычно он доволен только файлами ELF. Каков самый простой способ объединить исходные файлы ELF вместо файлов srec. Также приемлем метод преобразования srec обратно в ELF и загрузки итогового файла (похоже, что objcopy создает довольно битые файлы при этом (никакой архитектуры среди других). Инструменты должны быть способны работать с двоичными файлами m68k, но хост-система - это обычная x86.


person megabytephreak    schedule 02.06.2011    source источник


Ответы (4)


См. библиотеку ELFIO. Он содержит примеры WriteObj и Writer. Используя библиотеку, вы сможете создавать двоичные файлы ELF на разных хост-платформах.

person Serge C    schedule 10.06.2011

Легко ... допустим: a.c и b.c

gcc a.c -c -o a.o
gcc b.c -c -o b.o
ld -r a.o b.oc -o c.o

c.o теперь содержит как перемещаемый ELF-файл, так и a.o и b.o.

--Иван

person Ivan    schedule 04.12.2017

Возможно, использовать ваш компоновщик?

Файл srec содержит только связанный / расположенный загружаемый двоичный файл, файл elf содержит дополнительные метаданные, которые теряются при генерации двоичного файла, поэтому возврат к elf может быть невозможен, особенно если elf необходимо перемещать.

person Clifford    schedule 02.06.2011

Я обнаружил, что самым простым решением моей первоначальной проблемы было фактически добавить загрузку SREC в qemu. Я уже модифицирую исходный код, чтобы добавить поддержку платы, поэтому поддержка SREC не требует особого труда. Я нашел код на github от кого-то, кто это уже сделал, и использовал его в качестве основы для своей работы.

https://github.com/MegabyteP3-64bcd3d3d3d3d3d3d3d3d3d3d5d5d8d5ddddddddddddddddddddddddddddddddddd8

person megabytephreak    schedule 30.06.2011
comment
Кажется, это ответ на проблему, но не на вопрос ... по крайней мере, не так, как указано в заголовке. - person Scheintod; 24.01.2020