유효한 실행 파일인지 테스트

유효한 실행 파일인지 테스트

실행 파일이 존재할 뿐만 아니라 유효한지 테스트하는 (비교적) 쉬운 방법이 있습니까?

작동한다는 것은 x86_64 Mach-O(OS X) 실행 파일이 ARM Raspberry Pi에서 실행되지 않는다는 것을 의미합니다. 그러나 실행 파일이 실행되지만 실패하는 x86_64 tool-osx || tool-rpi로 대체되지 않는 OS X에서 실행하면 작동합니다 .tool-rpi

프로세서 아키텍처에 유효하지 않은 실행 파일이 있는 경우 다른 실행 파일로 대체하는 방법은 무엇입니까?

답변1

유효한 실행 파일을 테스트하는 대신 현재 아키텍처를 테스트한 다음 해당 아키텍처를 기반으로 올바른 실행 파일을 선택하십시오. 예를 들어:

if [ $(uname -m) == 'armv6l' ]; then
    tool-rpi
else
    tool-osx
fi

그러나 실행 파일을 테스트하려는 경우진짜원하는 경우 GNU는 file실행 파일의 아키텍처를 알려줄 수 있습니다 .

user@host:~$ file $(whereis cat)
ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=0x4e89fd8f129f0a508afa325b0f0f703fde610971, stripped

답변2

Linux glibc에서 동적으로 링크된 실행 파일이 실제로 실행되지 않고 성공적으로 실행될 수 있는지 테스트하는 데 사용할 수 있는 한 가지 방법은 LD_DEBUG=help해당 환경에서 설정하는 것입니다. 양호하면 도움말 메시지를 내보내고(무시함) 성공적으로 종료됩니다. 유효하지 않으면 오류가 발생합니다.

불행히도 이것은 Linux glibc에만 해당되며 MacOS에 대해 묻는 것 같습니다. 또한 정적으로 연결된 바이너리와 setuid 또는 setgid 바이너리에는 영향을 주지 않습니다.

관련 정보