![동적으로 연결된 실행 파일과 해당 종속성에서 정적으로 연결된 실행 파일 만들기](https://linux55.com/image/200601/%EB%8F%99%EC%A0%81%EC%9C%BC%EB%A1%9C%20%EC%97%B0%EA%B2%B0%EB%90%9C%20%EC%8B%A4%ED%96%89%20%ED%8C%8C%EC%9D%BC%EA%B3%BC%20%ED%95%B4%EB%8B%B9%20%EC%A2%85%EC%86%8D%EC%84%B1%EC%97%90%EC%84%9C%20%EC%A0%95%EC%A0%81%EC%9C%BC%EB%A1%9C%20%EC%97%B0%EA%B2%B0%EB%90%9C%20%EC%8B%A4%ED%96%89%20%ED%8C%8C%EC%9D%BC%20%EB%A7%8C%EB%93%A4%EA%B8%B0.png)
예 를 들어 cat
이렇게 하면 다음과 같이 ldd $(which cat)
표시됩니다.
linux-vdso.so.1 (0x00007fff8afbb000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb3102dd000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb310524000)
cat
정적 링크가 되도록 바이너리를 이 세 파일과 함께 so
묶는 방법이 있습니까 ?
내 의도는 컨테이너 내부에서 사용하는 것입니다.
답변1
안정제이를 수행할 수 있습니다. 동적으로 연결된 바이너리와 해당 종속성을 번들로 묶습니다. 결과는 바이너리를 먼저 정적으로 빌드한 경우 얻을 수 있는 결과와 완전히 다르지만 원하는 결과를 제공합니다.
"정적" 바이너리를 생성하려면 레이아웃 무작위화를 비활성화해야 합니다.
printf 0 | sudo tee /proc/sys/kernel/randomize_va_space
(그런 다음 원래 값을 복원합니다).
컨테이너에 실제로 원하는 바이너리가 무엇인지에 따라 정적 Busybox와 같은 것을 사용하는 것이 더 간단할 수도 있습니다.
첫 번째 종속성은 관심을 가져야 할 동적 라이브러리가 아니라커널에서 제공되는 vDSO.