동적으로 연결된 실행 파일과 해당 종속성에서 정적으로 연결된 실행 파일 만들기

동적으로 연결된 실행 파일과 해당 종속성에서 정적으로 연결된 실행 파일 만들기

예 를 들어 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.

관련 정보