В нашей встроенной системе на основе G CC C мы используем опции -ffunction-sections
и -fdata-sections
, чтобы позволить компоновщику при связывании конечного исполняемого файла удалять неиспользуемые (не имеющие ссылок) разделы. Это хорошо работает с годами.
В той же системе большинство структур данных и буферов распределяются статически (часто как static
-переменные в области видимости файла).
Конечно, мы есть ошибки, иногда неприятные, в которых мы хотели бы быстро исключить возможность переполнения буфера.
Одна из идей, которую мы имеем, заключается в размещении канареек между каждым разделом bss и разделом данных - каждый из которых представляет точно один символ (из-за -fdata-sections
). Как компилятор делает для стеков функций, когда активированы Stack-Smashing и StackProtection. Проверять эти канареек можно с хоста, читая адреса канареек «время от времени».
Кажется, что изменяют скрипт компоновщика (помещая раздел вручную и добавляя между ними слово канареек) кажется выполнимым, но имеет ли это смысл?
Есть ли в дикой природе проект или статья? Используя мои ключевые слова, я ничего не смог найти.