UNIX에서 LD_PRELOAD 환경 변수 사용 예
LD_프리로드
LD_PRELOAD
환경 변수를 사용하여 공유 라이브러리를 가져올 위치를 설정할 수 있습니다. 이 변수를 설정하면 기존 기능을 덮어쓰고 표준 명령이 원하는 방식으로 다르게 작동하도록 할 수 있습니다.
링커는 기본 파일을 컴파일하기 위해 LD_PRELOAD
에서 제공하는 경로의 라이브러리를 연결합니다. 기능이 연결되면 동일한 기능의 다른 인스턴스가 나타날 때 이전 위치는 무시되고 새로운 위치가 사용됩니다.
예를 들어 puts
파일에 있는 stdio.h
함수를 덮어쓰도록 합시다.
다음 내용이 포함된 파일main.c
을 고려하십시오.
#include <stdio.h>
int theFunction(const char *s)
{
return puts(s);
}
int main (int argc, char** argv) {
theFunction("Hello, this is traditional work flow.");
printf("%s: puts location: %p\n", __FILE__, puts);
}
main.c
파일을 컴파일하고 실행하면 puts
위치가 0x7f877af52ef0
인 다음 출력이 제공됩니다.
다음과 같이 다른 파일unmain.c
을 만듭니다.
#include <stdio.h>
int puts(const char *__s)
{
return printf("New puts, hackerman alert!\n");
}
이제 다음 명령을 사용하여 이unmain.c
파일의 공유 라이브러리를 생성합니다.
gcc -fPIC unmain.c -shared -o unmain.so
공유 라이브러리의 위치LD_PRELOAD
로 unmain.so
를 업데이트합니다.
export LD_PRELOAD="$PWD/unmain.so"
그런 다음 첫 번째 컴파일된main.c
파일의 실행 파일main.o
을 다시 실행하여 puts
의 위치가 업데이트되었는지 확인합니다. 제 경우에는 새 위치가 0x7f6003f5d119
로 설정되었습니다.
./main.o
공유 라이브러리를 제거하려면 unset
를 사용하여LD_PRELOAD
.
unset LD_PRELOAD
Github에 기여하는 동일한 예: https://github.com/chhajedji/ld-preload
Reference
이 문제에 관하여(UNIX에서 LD_PRELOAD 환경 변수 사용 예), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/chhajedji/example-showing-usage-of-ldpreload-environment-variable-in-unix-4pl1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#include <stdio.h>
int theFunction(const char *s)
{
return puts(s);
}
int main (int argc, char** argv) {
theFunction("Hello, this is traditional work flow.");
printf("%s: puts location: %p\n", __FILE__, puts);
}
#include <stdio.h>
int puts(const char *__s)
{
return printf("New puts, hackerman alert!\n");
}
gcc -fPIC unmain.c -shared -o unmain.so
export LD_PRELOAD="$PWD/unmain.so"
./main.o
unset LD_PRELOAD
Reference
이 문제에 관하여(UNIX에서 LD_PRELOAD 환경 변수 사용 예), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/chhajedji/example-showing-usage-of-ldpreload-environment-variable-in-unix-4pl1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)