В моих встроенных проектах есть этап постобработки, который заменяет значение в исполняемом файле CRC (некоторых разделов) флэш-памяти. Этот шаг может быть выполнен только после связывания, поскольку это первая возможность CRC изображения. В прошлом формат файла был COFF, и я создал специальный инструмент для исправления.
Средство разработки переключено на ELF, поэтому мне нужно повторно внедрить патчер CRC. Прежде чем я это сделал, я подумал, что поищу для этого уже существующий инструмент. Компилятор основан на gcc, но я не вижу какой-либо комбинации ld
и nm
и readelf
, которые могут выполнить эту работу. Поиск в Google не дал результатов.
Мой нынешний инструмент использует нм
, чтобы найти адрес для исправления, и вызывает средство исправления с адресом, ожидаемым значением (для предотвращения перезаписи неправильных данных) и новым значением CRC. CRC вычисляется в "шестнадцатеричном" формате исполняемого файла (который я также исправляю), поэтому, к счастью, мне не нужно переделывать эту часть.
Я могу реализовать это с помощью libelf
и пользовательского кода снова , но прежде чем я это сделаю, он уже существует?
Есть ли лучший способ достичь моей цели - поместить CRC исполняемого файла в исполняемый файл, чтобы он был доступен для приложения?