이 문제, "어느 파티션에 어떤 운영 체제가 있는지 알아보세요.”, 실제로 해당 배포판으로 부팅하지 않고도 설치된 배포판에서 실행 파일을 실행할 수 있는지 생각하게 되었습니다.
이 질문에 대한 대답은 "chmod -R 000 /bin에서 복구하는 방법은 무엇입니까?”, 설치된 distro 파티션에서 로더를 호출할 수 있을 것이라는 생각이 들었습니다.
가능합니까?
예
막상 해보니 잘 안되는데, 또 다른 부분이 빠진게 아닐까 하는 생각이 듭니다.
제가 사용하려는 명령은 입니다 lsb_release
. 중요한 경우 현재 64비트 Fedora 14를 설치하고 있습니다.
$ sudo /lib/ld-2.13.so /usr/bin/lsb_release
/usr/bin/lsb_release: error while loading shared libraries: /usr/bin/lsb_release: invalid ELF header
답변1
예, 실행 중인 커널이 설치된 배포판에서 바이너리를 실행할 수 있다면 가능합니다.
이를 위해서는 설치된 배포판이 실행 중인 프로세서 아키텍처 또는 호환 가능한 프로세서 아키텍처에 적합해야 합니다. 예를 들어 x86 프로세서에서는 ARM 바이너리를 실행할 수 없습니다. 호환성은 CPU에 따라 다릅니다. 예를 들어 x86/amd64에서 64비트 바이너리는 64비트 CPU에서만 실행되는 반면, 32비트 바이너리는 32비트 및 64비트 CPU 모두에서 실행됩니다. 호환성은 운영 체제에 따라 다릅니다. 예를 들어 x86_64 CPU에서는 Solaris가 32비트 및 64비트 커널에서 구분 없이 64비트 및 32비트 프로그램을 실행할 수 있으며, Linux 64비트 커널은 32비트 프로그램을 실행할 수 있습니다. , 그러나 그 반대는 아닙니다. OpenBSD 64비트 커널은 32비트 프로그램을 실행할 수 없습니다.
정적으로 링크된 실행 파일은 고정된 위치에서 파일을 찾지 않는 한 어려움 없이 제자리에서 실행됩니다. 설치된 배포판에 최신 버전의 C 라이브러리가 있거나, 다른 C 라이브러리(예: uClibc 대 Glibc)를 사용하거나, 호스트가 사용자 공간( 예를 들어 i386 및 amd64, armhf 및 armel).
때로는 동적으로 링크된 실행 파일이 작동하도록 하기 위해 명시적으로 동적 링커를 호출하고 설치된 시스템의 라이브러리 디렉터리를 라이브러리 검색 경로에 먼저 넣어야 합니다.
LD_LIBRARY_PATH=/mnt/lib:/mnt/usr/lib /mnt/lib/ld-linux.so.2 /mnt/bin/foo
설치된 시스템의 프로그램이 필요한 모든 것(로더, 라이브러리, 구성 파일, 데이터 파일 등)을 찾도록 하는 쉬운 방법입니다.chroot. chroot는 파일 시스템 보기를 단일 디렉터리와 해당 하위 디렉터리로 제한합니다. 루트만 이 chroot
명령을 호출할 수 있습니다.
chroot /mnt /bin/foo
프로그램은 루트로 실행되므로 /mnt
해당 계층 구조 외부에는 아무것도 표시되지 않습니다. no /home
(또는 의 항목 /mnt
), no /proc
, static defaults /dev
등 만 표시됩니다. 특수 파일 시스템은 외부( ) 또는 내부( )에서 /proc
chroot에 마운트될 수 있습니다 . Linux에서는 디렉터리를 사용하거나 두 번째 위치에 다시 탑재하거나(원래 위치에 유지하면서) 지정된 디렉터리에 탑재된 파일 시스템을 복사할 수 있습니다 .mount -t proc proc /mnt/proc
mount -t proc proc /proc
mount --bind
mount --rbind
mount --rbind /dev /mnt/dev
mount --bind /home /mnt/home
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
chroot /mnt /bin/foo
데비안과 다른 배포판은 다음과 같은 소프트웨어를 제공합니다.슈루트이러한 설치를 자동화하고 기타 세부 사항을 수행합니다. 일회성 작업으로는 약간 과잉이지만 원할 경우 편리합니다.여러 배포판 유지.