유닉스 계열 시스템에서 "LD_PRELOAD" 환경 변수는 프로그램 실행 시 다른 라이브러리보다 먼저 로드될 공유 라이브러리를 사용자가 지정할 수 있게 해줍니다. 이는 기존 라이브러리의 함수를 재정의하거나 사용자 지정 코드를 애플리케이션에 주입하는 데 사용될 수 있습니다. 동적 링커는 프로그램 이미지와 공유 라이브러리를 로드한 다음 실행을 시작하는 역할을 합니다. Linux에서는 동적 링커가 ld-linux.so이고, FreeBSD에서는 ld-elf.so입니다. LD_PRELOAD는 동적 링커가 로드할 공유 라이브러리 목록을 추가하여 함수 재정의를 가능하게 합니다. LD_PRELOAD 사용 예시로는 파일의 투명한 압축 해제, malloc 및 read/write 함수의 재정의 등이 있습니다. LD_PRELOAD는 테스팅, 핫픽스, 관찰 가능성 및 대체 구현에 사용될 수 있습니다. 하지만 시스템 호출 재정의와 같은 보안적 의미를 가지며, Linux와 FreeBSD에는 오용을 방지하기 위한 완화 조치가 마련되어 있습니다. LD_PRELOAD는 "--preload" 명령줄 옵션 및 "/etc/ld.so.preload" 파일과 같은 대체 방법으로 사용될 수 있습니다. 마지막으로, eBPF는 LD_PRELOAD의 대안이지만, 더 제한적이며 동일한 보안 문제를 발생시키지 않습니다.
dev.to
LD_PRELOAD explained
