LD_PRELOAD is an environment variable on Unix-like operating systems that allows users to specify a shared library to be loaded before others when a program is executed.
This functionality is provided by the system dynamic linker and works only for dynamically linked executables.
The dynamic linker is a program that handles the execution of all dynamically loaded programs on the system.
LD_PRELOAD adds a list of shared libraries to be loaded after the program image but before its shared object dependencies.
Examples of using LD_PRELOAD include Zlibc for decompression and overriding functions like malloc, read, and write.
LD_PRELOAD can be used for testing, hot-fixes, observability, alternative implementations, and injecting custom code.
Other ways to preload a library on Linux include using LD_PRELOAD environment variable, --preload option when invoking the dynamic linker, and /etc/ld.so.preload file.
Security implications of LD_PRELOAD need to be considered, as it can override system calls and potentially introduce security vulnerabilities.
Mitigations against security risks include limited preloading for secure-execution mode binaries on Linux.
Alternative solutions like eBPF exist, offering more restrictions and fewer security concerns compared to LD_PRELOAD.