Как сгенерировать чистый бинарник, используя GCC?

Не подскажете, как сгенерировать бинарный файл без DWARF и CFI-секций. Чтобы остались просто голые инструкции?


Я делаю так:


gcc -c -o kmain.o kmain.c

ld -e kmain -Ttext 0x7e00 --oformat=binary -o kernel.bin


и получаю на выходе бинарник с ненужным мне DWARF-мусором, идущем после инструкций.


Мне кажется, должна быть возможность его удаления, коль это не С++ (т.е. не нужно поддерживать исключения). Спасибо.
  • Вопрос задан
  • 4594 просмотра
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Или ещё вариант без objcopy, но со скриптом линковщика:
$ cat kernel.lds 
SECTIONS {
        .text 0x7e00:
        {
                *(.text)
        }
        /DISCARD/ :
        {
                *(*)
        }
}
$ ld -e kmain -T kernel.lds test.o --oformat=binary -o kernel-lds.bin
$ hexdump -Cv kernel-lds.bin
00000000  55 48 89 e5 b8 01 00 00  00 5d c3                 |UH.......].|
0000000b


Опять же, если в исходных объектниках есть другие нужные секции помимо .text, их имена надо вписать внутрь .text: {} после *(.text).
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Может

ld -e kmain -Ttext 0x7e00 -o kernel.elf
objcopy --strip-all -R .comment -R .note.gnu.build-id -O binary kernel.elf kernel.bin

и в -R добавить имена ненужных секций?
Ответ написан
qxfusion
@qxfusion
попробуйте сделать трансляцию в asm и потом ручной сборкой.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы