LD PRELOAD
Материал из Xgu.ru
LD_PRELOAD — переменная окружения, с помощью которой вы можете указать системному компоновщику времени выполнения(ld.so),
что он должен загрузить указанные библиотеки раньше других.
В результате можно перехватывать какие-либо функции, и заменять их собственной реализацией.
Понятное дело, что LD_PRELOAD не работает для SUID-ных программ, иначе вы можете представить что бы началось (собственно, на этом бы ничего не началось, а наоборот, всё закончилось), но даже и без этого с его помощь можно делать много веселья.
Самое простое, например, переводить время для отдельных определённых программ [] или заменять реализацию malloc её более быстрым аналогом [1]. Вообще же, пользуясь LD_PRELOAD, вы можете изменять поведение программы без правки её исходного кода и без перекомпиляции.
[править] Дополнительная информация
- Reverse Engineering with LD_PRELOAD (англ.) — пример использования LD_PRELOAD для выполнения простейшего обратного инжиниринга (reverse engineering)
- FakeTime Preload Library (англ.) — подводим часы для отдельных программ
- TCMalloc : Thread-Caching Malloc (англ.) — быстрая реализация malloc
- [2] (англ.) — ещё один пример использования LD_PRELOAD
- Passing arguments to a library loaded with LD_PRELOAD (англ.) — как передавать аргументы библиотеке, которая загружается через LD_PRELOAD (суть идеи коротко: передавать через переменные окружения)
- Dynamic linker tricks: Using LD_PRELOAD to cheat, inject features and investigate programs (англ.) — подменяем генератор случайных чисел, open и прочее
- interpose_python.c (англ.) — живой пример перехвата open/open64 (для вопроса http://stackoverflow.com/questions/6421784/why-wont-ld-preload-work-with-python)
Другие, более хитрые методы перехвата функций:
- Linux Function Interception (англ.)
- Patch-free User-level Link-time intercepting of system calls and interposing on library functions (англ.)
- SHARED LIBRARY CALL REDIRECTION VIA ELF PLT INFECTION (англ.)