patchelf

Утилита для модификации существующих ELF-исполняемых файлов и библиотек. Она позволяет изменять динамический загрузчик ("ELF interpreter") исполняемых файлов и корректировать пути поиска библиотек (RPATH/RUNPATH). PatchELF широко используется в системах управления пакетами и инструментах упаковки для настройки бинарных файлов после компиляции без необходимости пересборки.

Особенности

  • изменение динамического загрузчика (интерпретатора) исполняемых файлов;
  • модификация путей поиска разделяемых библиотек (RPATH и RUNPATH);
  • добавление, удаление и замена объявленных зависимостей (DT_NEEDED);
  • изменение SONAME динамических библиотек;
  • сжатие RPATH путём удаления неиспользуемых директорий;
  • модификация "на месте" или сохранение результата в отдельный файл;

Основные компоненты

Утилита предоставляет набор опций командной строки для выполнения различных операций над ELF-файлами (подробнее с документацией можно ознакомиться здесь).

Управление динамическим загрузчиком

Интерпретатор позволяет изменить путь к динамическому загрузчику, который используется для запуска исполняемого файла. Это может быть полезно для создания переносимых или изолированных окружений.

Основные опции:

  • --set-interpreter INTERPRETER — изменение динамического загрузчика исполняемого файла на указанный;
  • --print-interpreter — вывод текущего пути к интерпретатору;
  • --print-os-abi — вывод значения OS ABI из заголовка ELF;
  • --set-os-abi ABI — изменение OS ABI (например, Linux, FreeBSD).

Работа с путями поиска библиотек (RPATH/RUNPATH)

Позволяет управлять путями, по которым динамический загрузчик ищет разделяемые библиотеки. Поддерживаются как устаревший DT_RPATH, так и современный DT_RUNPATH.

Основные опции для работы с путями:

  • --set-rpath RUNPATH — установка нового пути поиска библиотек;
  • --add-rpath RUNPATH — добавление пути к существующему DT_RUNPATH;
  • --shrink-rpath — удаление из RPATH всех директорий, которые не содержат библиотек, реально используемых файлом (анализ DT_NEEDED);
  • --allowed-rpath-prefixes PREFIXES — совместно с --shrink-rpath позволяет сохранить определённые префиксы путей;
  • --print-rpath — вывод текущего RPATH или RUNPATH;
  • --remove-rpath — полное удаление RPATH/RUNPATH из файла;
  • --force-rpath — принудительное использование DT_RPATH вместо DT_RUNPATH (по умолчанию DT_RPATH преобразуется в DT_RUNPATH).

Управление зависимостями (DT_NEEDED)

Позволяет добавлять, удалять или заменять записи о необходимых разделяемых библиотеках в секции .dynamic.

Основные опции:

  • --add-needed LIBRARY — добавление новой зависимости;
  • --remove-needed LIBRARY — удаление существующей зависимости;
  • --replace-needed LIB_ORIG LIB_NEW — замена одной зависимости на другую;
  • --print-needed — вывод списка всех зависимостей (DT_NEEDED).

Изменение SONAME

Позволяет изменить внутреннее имя библиотеки (SONAME), которое записывается в динамический раздел. Это может быть необходимо при создании совместимых версий библиотек.

Опции для работы с SONAME:

  • --set-soname SONAME — установка нового SONAME для библиотеки;
  • --print-soname — вывод текущего SONAME.

Управление сегментами и дополнительными атрибутами

Позволяет изменять атрибуты, связанные с выполнением и отладкой.

Дополнительные опции:

  • --print-execstack, --clear-execstack, --set-execstack — управление флагом исполняемого стека (GNU_STACK);
  • --add-debug-tag — добавление тега DT_DEBUG для отладки;
  • --no-default-lib — пометка объекта, что при поиске его зависимостей следует игнорировать стандартные пути поиска библиотек;
  • --page-size SIZE — использование указанного размера страницы вместо стандартного;
  • --rename-dynamic-symbols NAME_MAP_FILE — переименование динамических символов согласно файлу соответствий.

Использование в проекте

Документация по использованию Conan-пакетов для разработки приложений для ОС Аврора.

На сервере Conan библиотеки заранее собраны и размещены под различные версии ОС Аврора 4 и ОC Аврора 5. Для данных версий представлены архитектуры armv7hl, aarch64 и x84_64.

Библиотеку можно использовать в проекте с помощью данного conanfile.py

from conan import ConanFile

class Application(ConanFile):
    settings = "os", "compiler", "arch", "build_type"
    generators = "PkgConfigDeps"

    requires = (
        "patchelf/0.18@aurora",
    )    

Процесс локальной сборки описан в документации.

patchelf

A small utility to modify the dynamic linker and RPATH of ELF executables
Лицензия
GPL-3.0-or-later
Версия
Домашняя страница
Скачать
x86_64
113.77 Kb
MD5: 0536ebdb185f25b63e9b3c90644e6036
Updated: 09.09.2025, 15:21:01
armv8
109.42 Kb
MD5: c49b7092ed102f998be7024cc5dfa49c
Updated: 09.09.2025, 15:20:50
armv7
111.06 Kb
MD5: acd4855997a6e7c340a48b65fbb6b2ec
Updated: 09.09.2025, 15:21:00
Использование в проекте

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.