어셈블리 언어가 포함된 b1이라는 파일이 있습니다. 다음을 사용하여 OSX에서 파일을 실행하려고 합니다.
$ ./b1
다음 오류가 발생합니다.
-bash: ./b1: cannot execute binary file
다른 비슷한 질문도 살펴봤지만 소용이 없었습니다. 저는 확실히 64비트 아키텍처를 사용하고 있습니다.
관련 정보의 출력은 다음과 같습니다.
$ file b1
b1: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped
$ uname -a
Darwin Anthonys-MacBook-Pro.local 13.0.0 Darwin Kernel Version 13.0.0: Thu Sep 19 22:22:27 PDT 2013; root:xnu-2422.1.72~6/RELEASE_X86_64 x86_64
편집하다:
Ran as b1
은 다음과 같이 종료되었습니다.
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/as: fatal error in /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../libexec/as/x86_64/as
답변1
죄송합니다. 이 파일은 GNU/Linux용입니다.
출력 결과 에 따르면 file
이 프로그램은 GNU/Linux용입니다. 나는 다음과 같은 이유로 이것을 알고 있습니다:
- 파일은
b1
다음 위치에 있습니다.ELF
(확장 가능하고 연결 가능한 형식)Mac OS X에서는Mach-O
바이너리 형식을 사용합니다. file
는 이 파일이 에 대한 것임을 인식합니다GNU/Linux 2.6.18
. 이는 대부분의 최신 Linux 배포판에서 작동한다는 의미입니다.
문제를 해결하려면 Linux 배포판 내에서 이 문제를 실행하거나 프로그램을 다시 컴파일하거나 이 프로그램의 Mac OS X 버전을 가져와야 합니다.
그럼... 왜 b1
작동하지 않는 거죠?XYZOS 또는 CPU?
사람들이 서로 다른 언어를 사용하는 것처럼, 서로 다른 컴퓨터는 서로 다른 명령을 이해합니다. 예를 들어 Mac은 Intel 프로세서를 사용하는 반면 Android 휴대폰은 ARM 프로세서를 사용합니다. 이 두 프로세서를 영어와 프랑스어와 비교해 보세요. 그들은 같은 어족에 속할 수도 있지만 동시에 두 언어를 모두 말할 수는 없습니다. 이는 다음과 같은 결론으로 이어진다.
서로 다른 컴퓨터는 서로 다른 언어로 "대화"합니다.
서로 다른 운영 체제(예: Windows, Mac OS X, Linux)가 동일한 바이너리를 사용할 수 없는 이유는 다음을 고려하세요.
소프트웨어가 하드웨어와 객관적으로 다른 점은 무엇입니까? 별로.
둘 다 최종 사용자를 위한 작업을 완료하기 위해 컴퓨터의 보다 복잡한 구성 요소를 허용하는 시스템과 "언어"를 제공합니다. 둘 다 작업을 완료하려면 합의된 언어가 필요합니다. 서로 다른 언어를 사용하는 10명의 사람들이 소리를 지르며 경기를 한다고 상상해 보세요. 이것이 두 운영 체제가 동일한 프로세서를 사용하더라도 서로 다른 OS 소프트웨어에 서로 다른 바이너리가 필요한 이유입니다.
답변2
어셈블리어? 컴파일해야 하거나 오히려 어셈블해야 합니다.
man as