【问题标题】:Getting machine information of an executable获取可执行文件的机器信息
【发布时间】:2020-09-04 11:04:38
【问题描述】:

我在我的 python3 项目中的一个文件夹中为不同的架构(x86_64、arm32 等)编译了不同的 c++ 可执行文件,这些文件具有不同的名称。当我在相应的架构上运行项目时,我将使用其中之一。目前我在各种架构中运行之前更改了可执行文件的路径。 有人可以建议我的方式:

  • 查找这些可执行文件的机器架构信息(无论是 arm32、x86 等)或获取可执行文件 为运行代码的架构编译或在 这些可执行文件中的每一个是哪台机器或架构 遵守。

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

【问题讨论】:

    标签: python python-3.x architecture executable platform


    【解决方案1】:

    要查找当前平台的架构,您需要来自platform 库的uname

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

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

    这是一个来自 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']
    

    【讨论】:

    • 不,这是为了获取系统平台。但是,我想从为一种架构编译的多个可执行文件中选择一个可执行文件?我怎么得到那个?我怎么知道哪个可执行文件是为哪个架构编译的
    • 不简单,但可以做到。看看我的编辑。
    • 我会从幻数开始,因为启动器总是作为可执行文件中的第一个字节出现。 MZ 适用于 Windows/DOS,ELF 适用于 Linux,FEEDFACF/FEEDFACE 适用于 MacOS
    猜你喜欢
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 2012-08-29
    • 2015-12-31
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多