![실행 파일에 "해당 파일이나 디렉터리가 없습니다"가 발생하지만 파일이 존재하고 ldd가 존재하는 모든 라이브러리를 보고합니다.](https://linux55.com/image/32034/%EC%8B%A4%ED%96%89%20%ED%8C%8C%EC%9D%BC%EC%97%90%20%22%ED%95%B4%EB%8B%B9%20%ED%8C%8C%EC%9D%BC%EC%9D%B4%EB%82%98%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EA%B0%80%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4%22%EA%B0%80%20%EB%B0%9C%EC%83%9D%ED%95%98%EC%A7%80%EB%A7%8C%20%ED%8C%8C%EC%9D%BC%EC%9D%B4%20%EC%A1%B4%EC%9E%AC%ED%95%98%EA%B3%A0%20ldd%EA%B0%80%20%EC%A1%B4%EC%9E%AC%ED%95%98%EB%8A%94%20%EB%AA%A8%EB%93%A0%20%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC%EB%A5%BC%20%EB%B3%B4%EA%B3%A0%ED%95%A9%EB%8B%88%EB%8B%A4..png)
따라서 다른 명령을 사용하면 실행 파일이 존재하지만 실행하려고 하면 존재하지 않는다고 주장합니다.
이름을 "cat"으로 바꿨기 때문에 이름에 특수 문자는 아닙니다. 올바르게 설계된 바이너리인 것 같습니다... "그렇습니다", 문제는 파일 외에 오류 메시지를 던질 수 있는 또 다른 것이 무엇인지입니다... 분명히 존재하는 것처럼 파일이 존재하지 않습니다!
LDD.xls
linux-gate.so.1 => (0xb77bc000)
libQtGui.so.4 => /usr/lib/i386-linux-gnu/libQtGui.so.4 (0xb6cc2000)
libpng12.so.0 => /lib/i386-linux-gnu/libpng12.so.0 (0xb6c98000)
libSM.so.6 => /usr/lib/i386-linux-gnu/libSM.so.6 (0xb6c8f000)
libICE.so.6 => /usr/lib/i386-linux-gnu/libICE.so.6 (0xb6c76000)
libXrender.so.1 => /usr/lib/i386-linux-gnu/libXrender.so.1 (0xb6c6d000)
libfreetype.so.6 => /usr/lib/i386-linux-gnu/libfreetype.so.6 (0xb6bd1000)
libfontconfig.so.1 => /usr/lib/i386-linux-gnu/libfontconfig.so.1 (0xb6b9b000)
libXext.so.6 => /usr/lib/i386-linux-gnu/libXext.so.6 (0xb6b88000)
libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6 (0xb6a50000)
libm.so.6 => /lib/i386-linux-gnu/i686/cmov/libm.so.6 (0xb6a2a000)
libQtSql.so.4 => /usr/lib/i386-linux-gnu/libQtSql.so.4 (0xb69ea000)
libQtCore.so.4 => /usr/lib/i386-linux-gnu/libQtCore.so.4 (0xb6704000)
libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xb66ea000)
libgthread-2.0.so.0 => /usr/lib/i386-linux-gnu/libgthread-2.0.so.0 (0xb66e7000)
libglib-2.0.so.0 => /lib/i386-linux-gnu/libglib-2.0.so.0 (0xb65ea000)
libgobject-2.0.so.0 => /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 (0xb6598000)
librt.so.1 => /lib/i386-linux-gnu/i686/cmov/librt.so.1 (0xb658f000)
libpthread.so.0 => /lib/i386-linux-gnu/i686/cmov/libpthread.so.0 (0xb6575000)
libdl.so.2 => /lib/i386-linux-gnu/i686/cmov/libdl.so.2 (0xb6571000)
libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb6485000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb6468000)
libc.so.6 => /lib/i386-linux-gnu/i686/cmov/libc.so.6 (0xb6305000)
libaudio.so.2 => /usr/lib/i386-linux-gnu/libaudio.so.2 (0xb62ea000)
libuuid.so.1 => /lib/i386-linux-gnu/libuuid.so.1 (0xb62e4000)
libexpat.so.1 => /lib/i386-linux-gnu/libexpat.so.1 (0xb62ba000)
libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xb6297000)
/lib/ld-lsb.so.3 => /lib/ld-linux.so.2 (0xb77bd000)
libpcre.so.3 => /lib/i386-linux-gnu/libpcre.so.3 (0xb6258000)
libffi.so.5 => /usr/lib/i386-linux-gnu/libffi.so.5 (0xb624f000)
libXt.so.6 => /usr/lib/i386-linux-gnu/libXt.so.6 (0xb61f1000)
libXau.so.6 => /usr/lib/i386-linux-gnu/libXau.so.6 (0xb61ee000)
libXdmcp.so.6 => /usr/lib/i386-linux-gnu/libXdmcp.so.6 (0xb61e8000)
이름 없음-m(또한 내 배포판은 Debian wheezy입니다.)
i686
파일xls
xls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
dynamically linked (uses shared libs), for GNU/Linux 2.6.15,
BuildID[sha1]=0xa9786f61b371a683ae4306792f95e0636c288883, not stripped
ls -ld xls
-rwxr-xr-x 1 root root 4634064 May 20 14:35 xls
고양이
root@pc170:# cat xls > zls
root@pc170:# ./zls
-su: ./zls: Permission denied
root@pc170:# chmod +x zls
root@pc170:# ./zls
-su: ./zls: No such file or directory
시간
root@pc170:# time ./zls
-su: ./zls: No such file or directory
real 0m0.002s
user 0m0.000s
sys 0m0.000s
답변1
이것은 다음과 같이 보입니다.로더 누락. 짧은 이야기: 프로그램에서 예상하는 동적 로더가 누락되었으며 이 경우 오류 메시지는 오해의 소지가 있습니다. 이전에 이에 대해 논의한 적이 없는 것 같아서 설명하겠습니다 ldd
. 대부분은 형태의 선으로 구성됩니다 library_soname => /path/to/library_file
.
/lib/ld-lsb.so.3 => /lib/ld-linux.so.2 (0xb77bd000)
이러한 라이브러리 내에서 공유 라이브러리가 아닌 것을 볼 수 있습니다. 공유 라이브러리를 로드하는 프로그램입니다. 프로그램이 이를 요청하고 있지만 /lib/ld-lsb.so.3
커널이 이를 찾지 못하여 "해당 파일이나 디렉터리가 없습니다"라고 보고됩니다. 그러나 로더 는 특별한 환경에서 하드 코딩된 로더를 호출하는 래퍼 스크립트이고 프로그램이 예상하는 로더 경로에 관계없이 항상 자체 경로를 보고하기 ldd
때문에 실제로 발견됩니다 .ldd
/lib/ld-linux.so.2
귀하의 시스템에는사실은x86_32 Linux 시스템에서 ELF 로더의 표준 위치입니다. 프로그램에서는 /lib/ld-lsb.so.3
다음을 요구합니다.법학기준장소.
lsb-core
Debian의 패키지 와 같은 배포판에 대한 최소 LSB 지원을 설치하십시오 . 배포판에 없는 경우(대부분 있음) 심볼릭 링크를 만듭니다 /lib/ld-lsb.so.3 -> ld-linux.so.2
. 최후의 수단으로 로더를 명시적으로 호출할 수 있습니다 /lib/ld-linux.so.2 ./xls
.