Как эта программа статически ссылается на .so по пути, отличному от значения по умолчанию

Программа, которую я использую, может быть установлена ​​только с помощью специального установщика (бесплатная версия IDA). Я установил его в своем домашнем каталоге, все работает отлично.

Теперь я заметил, что при проверке программы с помощью ldd: она поставляется со своими собственными библиотеками Qt, которые являются местами в качестве общих библиотек в своем установочном каталоге (поэтому в том же каталоге находится его основной исполняемый файл, а не / usr / lib или аналогичный).

$ ldd ida64 linux-vdso.so.1 => (0x00007ffec5fb9000) libida64.so => /home/asdf/idafree-7.0/./libida64.so libQt5PrintSupport.so.5 => /home/asdf/idafree-7.0/./libQt5PrintSupport.so.5 libQt5Widgets.so.5 => /home/asdf/idafree-7.0/./libQt5Widgets.so.5 ....

(install dir = /home/asdf/idafree-7.0/)

Теперь мне интересно: как это делается? Я запускаю программу напрямую без магии LD_LIB_PATH.

0
задан 13 May 2018 в 22:44

2 ответа

Простое объяснение, как запустить исполняемый файл, требующий уникального LD_LIBRARY_PATH, например. путь к libs в текущем каталоге /:

Short: export LD_LIBRARY_PATH=., где точка (.) означает «текущий каталог»

Обычно также система LD_LIBRARY_PATH (должна ): export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH

«Жесткое кодирование», например ida64: Функция в исполняемом файле, который будет запущен первым, устанавливает уникальный LD_LIBRARY_PATH. ... Другой пример: firefox.

0
ответ дан 17 July 2018 в 14:23

Простое объяснение, как запустить исполняемый файл, требующий уникального LD_LIBRARY_PATH, например. путь к libs в текущем каталоге /:

Short: export LD_LIBRARY_PATH=., где точка (.) означает «текущий каталог»

Обычно также система LD_LIBRARY_PATH (должна ): export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH

«Жесткое кодирование», например ida64: Функция в исполняемом файле, который будет запущен первым, устанавливает уникальный LD_LIBRARY_PATH. ... Другой пример: firefox.

0
ответ дан 20 July 2018 в 14:27
  • 1
    Так что, в отличие от окон, импорт эльфов разрешен лениво? – bernd feinman 14 May 2018 в 15:09
  • 2
    Я никогда не использую Windows ©. .... .... »» Импорт эльфа разрешен лениво ««: Просьба уточнить. – Knud Larsen 14 May 2018 в 15:14
  • 3
    В Windows запуск исполняемого файла завершается с ошибкой, если не все импортеры / библиотеки могут быть расположены загрузчиком перед передачей управления исполняемому файлу. Здесь вы говорите, что сам исполняемый файл linux может настроить LD_LIBRARY_PATH после его запуска, поэтому, похоже, загрузчик ищет и загружает эти библиотеки, когда на самом деле вызывается один из их экспорта. Верный? – bernd feinman 14 May 2018 в 15:19
  • 4
    Первый вызов может быть «file.ini». ida64 может использовать ida64.int или что-то еще. Но обычно «путь» является частью кода в исполняемом файле. Если вы откроете исполняемый файл ida64 с помощью редактора, в текстовом виде вы увидите слово, подобное /lib64/ld-linux-x86-64.so.2. – Knud Larsen 14 May 2018 в 16:17

Другие вопросы по тегам:

Похожие вопросы: