리눅스 바이너리 파일이 32 비트인지 64 비트인지 확인하는 방법?


24

32 비트 커널 (x86)은 32 비트 코드 만 실행할 수 있습니다. 64 비트 커널 (x86_64)은 32 비트 및 64 비트 코드를 모두 실행할 수 있습니다.

기계가 실행 파일을 실행할 수 있는지 알고 싶습니다. 즉, 이진 파일이 있고 32 비트 우분투에서 실행해야하지만 이진 파일이 32 비트 실행 파일인지 알 수 없습니다 .

file검사 할 실행 파일을 지정 하여 명령을 사용했으며 이것이 반환 된 결과입니다.

ELF 64 비트 LSB 실행 파일, x86-64, 버전 1 (SYSV), 동적 링크 (공유 라이브러리 사용), GNU / Linux 2.6.24, BuildID [sha1] = 0x7329fa71323a6cd64823c2594338682065cd6e07, 스트립되지 않음

답변:


29

제목의 질문에 대한 답변은 출력 시작 부분에 있습니다.

ELF 64 비트 LSB 실행 파일, x86-64

ELF는 Linux에서 가장 일반적으로 사용되는 이진 실행 파일 형식 인 Executable and Linkable Format 입니다.

x86-64는 AMD가 처음 도입 x86 명령어 세트64 비트 버전 인 바이너리의 아키텍처입니다 . 저를 넘어서서, Microsoft는 "x64"라고 부르지 만, 같은 것입니다.

커널 자체의 아키텍처를 알아야 할 경우 사용할 수 있습니다 uname -mpi. 예를 들어, 내 시스템에서 다음을 인쇄합니다.

알 수없는 x86_64

이것은 내가 x86-64 커널을 실행하고 있음을 의미합니다.

CPU 자체에 관심이있는 경우 /proc/cpuinfoLinux 커널에서 감지 한 CPU 에 대한 세부 사항을보십시오.

32 비트 80x86 실행 파일은 다음 file과 같이 식별됩니다 .

ELF 32 비트 LSB 실행 파일, Intel 80386 , 버전 1 (SYSV), 동적 링크 (공유 라이브러리 사용), GNU / Linux 2.6.8 용, 제거

인텔 80386 명령어 세트 (확장자 포함)를 사용하는 32 비트 실행 파일임을 알려줍니다.

32 비트와 64 비트 아키텍처만큼 간단하지는 않습니다. 예를 들어, Linux 커널은 Intel 80386, AVR32 , S / 390Unicore32 와 같은 32 비트 아키텍처를 지원합니다 . 64 비트 측면에서 Linux는 PA-RISC , x86-64, ItaniumAlpha 에서 사용할 수 있습니다. 그러나 모든 배포판이 모든 아키텍처에 바이너리를 제공하는 것은 아닙니다 ( 지원되는 모든 CPU 아키텍처를 똑같이 대상으로하는 배포판이 있는지 의심합니다 ). 따라서 주어진 바이너리가 주어진 시스템에서 실행 가능한지 알고 싶다면 CPU의 기본 단어 크기가 아닌 아키텍처 를 고려해야합니다 .


1
"나를 넘어서는 이유". 나는 x64가 64 비트이고 x86이 32 비트라는 것을 알았던 날을 여전히 기억합니다.
Paul Draper

1
@PaulDraper 용어 "x86"은 명확한 어원이 있습니다. 인텔의 80x86 시리즈 CPU로 거슬러 올라가 8008 또는 8080과 같은 이전 모델과 차별화되며 요즘에는 32 비트 (IA-32 명령어 세트) 가능 변형 (80386, 80486, Pentium 이상) ). 이 최신 모델 번호는 처음에 "80"을 생략하여 축약 된 경우가 많으므로 (암시 적 32 비트) x86은 386, 486 등과 일치합니다. 그러나 모델 번호가 64 비트 인 64 비트 CPU는 알 수 없습니다. "64"로 끝나는 유사한 구조; 확실히 AMD와 인텔은 오늘날 이러한 이름 지정 체계를 사용하지 않습니다.
CVn

x64 매우 일반적인 용어 이지만 . 무작위 예 : microsoft.com/en-us/download/details.aspx?id=42482
Paul Draper

@PaulDraper 현재 Microsoft 세계에서는 일반적 이지만 "x86"에 대한 어원은 명확하지 않습니다.
CVn

마이크로 소프트는 자신의 설치에 AMD64로 x86_64의를 말한다
phuclv

7

Linux 바이너리 실행 파일의 5 번째 바이트 ( ELF 형식, Wikipedia 참조 )는 32 비트 실행 파일의 경우 1이고 64 비트 실행 파일의 경우 2입니다.

"foo"라는 프로그램에 대해 이것을 보려면, 명령 행에 입력하십시오

od -t x1 -t c foo | head -n 2

2

'헤드'파이프를 피하려면 할 수 있습니다

od -An -t x1 -j 4 -N 1 foo

이것은 foo가 32 비트 바이너리 인 경우 01을, 64 인 경우 02를 출력합니다. 결과에 자동 비교를하고 있는지 알 수있는 몇 가지 선행 공백이 여전히 포함될 수 있습니다.

이 파일이 'file'이 설치되지 않은 기본 Ubuntu Docker 컨테이너에서 유용하다는 것을 알았습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.