我有一个名为 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
编辑:
Ranas 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
工作XYZ操作系统还是 CPU?
正如人们说不同的语言一样,不同的计算机理解不同的指令。例如,您的 Mac 使用 Intel 处理器,而您的 Android 手机使用 ARM 处理器。将这两种处理器与英语和法语进行比较。它们可能属于同一语系,但您仍然无法同时说这两种语言。这得出一个结论:
不同的计算机用不同的语言“交谈”。
至于为什么不同的操作系统(例如 Windows、Mac OS X 和 Linux)不能使用相同的二进制文件,请考虑这一点:
软件与硬件的客观区别是什么?区别并不大。
两者都提供了一个系统和一种“语言”,使计算机的更复杂组件能够为最终用户完成任务。两者都需要一种约定俗成的语言来完成工作。想象一下,如果有 10 个人在争吵,每个人都说着不同的语言。这就是为什么不同的操作系统软件需要不同的二进制文件,即使两种操作系统使用相同的处理器。
答案2
汇编语言?你需要编译它,或者更确切地说是汇编它。
man as