Я недавно натолкнулся на упоминание о нем на proggit, и (на данный момент) это не объясняется.
Я подозреваю, что это может быть так, но я точно не знаю.
c
linux
environment-variables
Хэнк Гей
источник
источник
Ответы:
Если вы укажете
LD_PRELOAD
путь к общему объекту, этот файл будет загружен до любой другой библиотеки (включая среду выполнения Clibc.so
). Итак, чтобы запуститьls
вашу специальнуюmalloc()
реализацию, сделайте это:источник
LD_PRELOAD
. Причина в том, что, будучи переменной среды, она наследуется дочерними процессами, которые могут иметь рабочий каталог, отличный от родительского процесса. Таким образом, любой относительный путь не сможет найти библиотеку для предварительной загрузки.Вы можете переопределить символы в стандартных библиотеках, создав библиотеку с такими же символами и указав библиотеку в
LD_PRELOAD
.Некоторые люди используют его для указания библиотек в нестандартных местах, но
LD_LIBRARY_PATH
для этого лучше.источник
С
LD_PRELOAD
помощью библиотеки вы можете отдавать приоритет.Например, вы можете написать библиотеку, которая реализует
malloc
иfree
. И, загрузив их сLD_PRELOAD
вашимиmalloc
иfree
будут выполнены, а не стандартные.источник
calloc
? разве это не все испортит?malloc
и free специально спроектированы в glibc, чтобы позволить этому, и акцииcalloc
удается назвать ваши импортированныеmalloc
. Не пытайтесь делать это с любыми другими функциями. Это не будет работать так хорошо.Как уже упоминалось, многие используют
LD_PRELOAD
предварительную загрузку библиотеки. Кстати, вы можете проверить, если настройка доступна поldd
команде.Пример: предположим, вам нужно предварительно загрузить свой собственный
libselinux.so.1
.Таким образом, установите вашу среду предзагрузки:
Проверьте свою библиотеку еще раз:
источник
LD_PRELOAD
перечисляет общие библиотеки с функциями, которые переопределяют стандартный набор, так же как/etc/ld.so.preload
и. Они реализованы загрузчиком/lib/ld-linux.so
. Если вы хотите переопределить только несколько выбранных функций, вы можете сделать это, создав переопределяющий объектный файл и настройкиLD_PRELOAD
; функции в этом объектном файле будут переопределять только те функции, которые оставят другие такими, какими они были.Для получения дополнительной информации о посещении общих библиотек http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
источник
Вот подробный пост в блоге о предварительной загрузке:
https://blog.cryptomilk.org/2014/07/21/what-is-preloading/
источник
это легко экспортировать
mylib.so
в env:отключить :
источник
unset LD_PRELOAD
когда используется LD_PRELOAD, этот файл будет загружен до того, как будет загружена любая другая
$export LD_PRELOAD=/path/lib
библиотека, даже это может быть использовано и в программахисточник
С помощью
LD_PRELOAD
путь, вы можете заставить загрузчик приложения загружать предоставленный общий объект сверх предоставленного по умолчанию.Разработчики используют это для отладки своих приложений, предоставляя разные версии общих объектов.
Мы использовали его для взлома определенных приложений путем переопределения существующих функций с использованием подготовленных общих объектов.
источник