공유 라이브러리 로드 오류: libc.so.6: 공유 개체 파일을 열 수 없습니다.

공유 라이브러리 로드 오류: libc.so.6: 공유 개체 파일을 열 수 없습니다.

나는 다음과 같이 루트를 지정한 Linux 커널을 가지고 있습니다 /var/chroot.

bash다음과 같이 종속성을 추가했습니다 .

ldd /bin/bash
        linux-vdso.so.1 =>  (0x00007fff9a373000)
        libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f24d57af000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f24d55ab000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f24d51eb000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f24d59f8000)

그런 다음 나는 다음을 수행했습니다.

# cd /var/chroot/
# mkdir bin/ lib64/ lib/
# cp /lib/x86_64-linux-gnu/libtinfo.so.5 lib/
# cp /lib/x86_64-linux-gnu/libdl.so.2 lib/
# cp /lib/x86_64-linux-gnu/libc.so.6 lib/
# cp /lib64/ld-linux-x86-64.so.2 lib64/
# cp /bin/bash bin/

이후:

# chroot /var/chroot

그 후에 복사했는데 /bin/ls실행 ldd ls하면 ls다음과 같은 오류가 발생합니다.

ls: error while loading shared libraries: libpthread.so.0: wrong ELF class: ELFCLASS32

답변1

분명히 bash를 시작할 수 있으므로 기본 사항을 올바르게 이해한 것입니다. 나열된 모든 라이브러리를 ldd /bin/command다음 위치에 복사해야 합니다.라이브러리 로드 경로/lib64/ld-linux-x86-64.so.2, 실행 파일의 하드 코딩된 위치에 있어야 하는 로더 자체( ).

오류가 발생하는 경우

error while loading shared libraries: libc.so.6: cannot open shared object file

그러면 여기서 지적한 라이브러리가 누락되었습니다. 올바른 이름으로 올바른 디렉토리에 배치되었는지 확인하십시오. 심볼릭 링크뿐만 아니라 라이브러리 파일도 복사했는지 확인하세요.

오류가 발생하는 경우

ls: error while loading shared libraries: libpthread.so.0: wrong ELF class: ELFCLASS32

그런 다음 잘못된 아키텍처에 대한 라이브러리를 복사했습니다. 32비트 라이브러리를 복사해야 했지만 libpthread.so.064비트 라이브러리를 실행하고 있었습니다.

다른 문제가 있는 경우 로더가 라이브러리를 찾으려고 하는 위치를 정확히 찾는 것이 도움이 될 수 있습니다. 하나 넣어strace바이너리(정적으로 컴파일된 바이너리 또는 동적으로 컴파일된 바이너리와 필요한 모든 라이브러리)를 chroot한 다음 실행 chroot ls하고 정확히 무엇이 실패하는지 확인하세요. 또는 chroot 외부에서 바이너리를 strace chroot ls사용하려면 실행하세요.strace

답변2

주의 깊은. 공유 라이브러리 파일은 일반적으로 심볼릭 링크됩니다. 이렇게 하면 현재 버전이 변경되며 설치된 모든 응용 프로그램은 계속해서 이를 찾을 수 있습니다. 예를 들어 내 시스템에서는 다음과 같습니다.

ls -l /usr/lib/libc.so.6
lrwxrwxrwx 1 root root 12 dec 27 03:13 /usr/lib/libc.so.6 -> libc-2.20.so*

따라서 libc.so.6실제로 현재 libc 버전을 가리키면 시스템을 업데이트할 때 그것이 무엇이든 새 버전을 가리킬 것입니다. 종종 여러 수준의 연결이 있습니다.

링크뿐만 아니라 실제 라이브러리를 복사해야 합니다.

답변3

노력하다

mkdir lib/x86_64-linux-gnu
cp /lib/x86_64-linux-gnu/libtinfo.so.5  /lib/x86_64-linux-gnu/libdl.so.2 /lib/x86_64-linux-gnu/libc.so.6 lib/x86_64-linux-gnu

ls와 같은 명령을 사용하려면 ldd /bin/ls라이브러리 파일도 복사해야 합니다.

그런데 cp심볼릭 링크의 내용이 복사됩니다.

관련 정보