获取可执行文件的计算机信息



我在python3项目中的一个文件夹中为不同的架构(x86_64,arm32等(编译了不同的c ++可执行文件。当我在相应的架构上运行项目时,我会使用其中之一。目前,我在各种体系结构中运行之前更改了可执行文件的路径。 有人可以建议我的方法吗:

  • 查找这些可执行文件的计算机体系结构信息(无论是 ARM32、x86 等(或获取可执行文件 针对运行代码的体系结构或 In 编译 这些可执行文件中的每一个是哪台计算机或体系结构 遵守。

我尝试在python中检查平台库,但没有得到任何有效的解决方案。如何在 Python3 中实现上述任何一项

要查找当前平台的体系结构,您需要从platform库中uname

import platform
uname = platform.uname()
uname.machine
'x86_64'

编辑:找到编译二进制文件的目标架构更加困难。总是有一个操作系统调用来告诉你二进制文件是否被编译为在该操作系统的特定体系结构上运行,但很难找到任意二进制文件的编译目标。以下是您可以执行的一些操作,具体取决于您使用的平台:

  • 在 Linux 上,您可以使用 utilfile: https://linux.die.net/man/1/file
  • 在 macOS 上,您可以使用 BSD utilfile: https://ss64.com/osx/file.html
  • Windows 二进制
  • 文件在标头中对其目标进行编码:如何确定 Windows 10 上可执行二进制文件的体系结构

下面是来自 macOS 的示例:

import subprocess
result = subprocess.run(['file', '/bin/cat'], stdout=subprocess.PIPE)
result.stdout.decode("utf-8").strip().split(' ')
['/bin/cat:', 'Mach-O', '64-bit', 'executable', 'x86_64']

你可以使用 bash 命令file,例如:

$ file myExecutable
myExecutable: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), 
dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, 
BuildID[sha1]=3c3776317ac80168ec7fb9b095e59c4ae256b6a5, for 
GNU/Linux 3.2.0, not stripped`

最新更新