Долгое время самым простым решением было создание файла .s
или .S
.
binutils не содержит ничего полезного.
Тамэто двухэтапный трюк, который быстр и использует мало памяти:
Шаг 1. Создайте и скомпилируйте файл .c, который содержит символ правильного размера, но у него короткая подпись вместо реальнойДлинные данные.Он должен выглядеть следующим образом:
const char hi[1234567] = "SIGNATURE";
const char *hi_end = hi + sizeof(hi) / sizeof(char);
Шаг 2. Найдите байты SIGNATURE
в файле .o, сгенерированном компилятором, и замените его (и следующие '\0'
s) данными изфайл реальных двоичных данных.
Скрипт Perl cobjgen автоматизирует оба этапа.См. сообщение в блоге для более подробного анализа и использования.