32 位内核 (x86) 只能运行 32 位代码。64 位内核 (x86_64) 可以运行 32 位和 64 位代码。
我想知道机器是否可以运行可执行文件:换句话说,我有一个二进制文件,我必须在 32 位 Ubuntu 上运行它,但我不知道该二进制文件是否是 32 位可执行文件.
我使用file命令,指定要检查的可执行文件,这是返回的结果:
ELF 64 位 LSB 可执行文件,x86-64,版本 1 (SYSV),动态链接(使用共享库),适用于 GNU/Linux 2.6.24,BuildID[sha1]=0x7329fa71323a6cd64823c2594338682065cd6e07,未剥离
use*_*ser 38
标题中问题的答案就在输出的开头:
ELF 64 位LSB 可执行文件,x86-64
ELF 是Executable and Linkable Format,Linux 最常用的二进制可执行文件格式。
x86-64 是二进制的架构,最初由 AMD引入的 x86 指令集的64 位版本。出于我无法理解的原因,Microsoft 将其称为“x64”,但这是同一回事。
如果需要了解内核本身的架构,可以使用uname -mpi. 例如,在我的系统上,打印:
x86_64 未知 未知
这意味着我正在运行 x86-64 内核。
如果您对 CPU 本身感兴趣,请查看/proc/cpuinfo有关 Linux 内核检测到的 CPU 的详细信息。
一个 32 位 80x86 可执行文件被标识file为,例如:
ELF 32 位LSB 可执行文件,Intel 80386,版本 1 (SYSV),动态链接(使用共享库),用于 GNU/Linux 2.6.8,已剥离
它告诉我们它是一个使用 Intel 80386 指令集(可能带有扩展)的 32 位可执行文件。
请注意,它并不像 32 位与 64 位体系结构那么简单。例如,Linux 内核支持32 位架构,如 Intel 80386、AVR32、S/390和Unicore32。在 64 位方面,Linux 可用于PA-RISC、x86-64、Itanium和Alpha等。然而,并非所有发行版都为所有架构提供二进制文件(而且我怀疑是否有任何发行版针对所有受支持的 CPU 架构均等)。因此,如果您想知道给定的二进制文件是否可以在给定的系统上执行,您需要考虑架构,而不是 CPU 的原生字长。
小智 10
Linux 二进制可执行文件(ELF 格式,参见维基百科)的第 5 个字节对于 32 位可执行文件为 1,对于 64 位可执行文件为 2。
要查看名为“foo”的程序的此信息,请在命令行中键入
od -t x1 -t c foo | head -n 2
Run Code Online (Sandbox Code Playgroud)
小智 8
如果你想避免“头”管,你可以这样做
od -An -t x1 -j 4 -N 1 foo
Run Code Online (Sandbox Code Playgroud)
如果 foo 是 32 位二进制文件,这将打印 01,如果它是 64 位,则打印 02。它可能仍然包含一些前导空格 - 值得知道是否对结果进行任何自动比较。
如果在未安装“文件”的基本 Ubuntu Docker 容器中发现这很有用。
| 归档时间: |
|
| 查看次数: |
77251 次 |
| 最近记录: |