GCC разбивает пути в бинарнике на куски, и grep их не находит

Paths in Pieces

Дистрибутивы Linux и пакетные менеджеры проверяют собранные бинарники на абсолютные пути вроде /home/linuxbrew/.linuxbrew, чтобы те не сломались на машине пользователя. Но GCC с x86-64 разбивает строковые константы на 16-байтовые куски для векторных инструкций, и путь исчезает из бинарника: grep даёт ноль совпадений, а strings показывает выдуманный /home/linuxbrew/xbrew/.linuxbrew. Автор объясняет оптимизацию, дедупликацию повторяющихся кусков и почему её стоит отключить.

Другими словами, запуск strings ./binary — настолько простой и удобный способ заглянуть внутрь непрозрачного бинарного блоба, что он перевешивает ту минимальную экономию, которую дают разбиение на куски и дедупликация.

Ещё за этот день

2026-11-12