Python 检查文件体系结构的通用方法

Python 检查文件体系结构的通用方法,python,cpu-architecture,python-magic,libmagic,Python,Cpu Architecture,Python Magic,Libmagic,是否有检查二进制文件(可以是ELF、Dwarf、PE等)的平台(32位/64位)和体系结构(powerpc、arm等)的通用方法 我知道几乎每个文件(elf或pe)都有一个头,上面写着哪个体系结构可以执行它,但是有没有一种通用的方法可以从所有二进制文件中获取这些信息 我试着使用magic返回所有这些信息,但它以字符串形式返回- ELF 64-bit LSB executable, x86-64,ELF 64-bit LSB executable, x86-64, version 1 (SYSV)

是否有检查二进制文件(可以是ELF、Dwarf、PE等)的平台(32位/64位)和体系结构(powerpc、arm等)的通用方法

我知道几乎每个文件(elf或pe)都有一个头,上面写着哪个体系结构可以执行它,但是有没有一种通用的方法可以从所有二进制文件中获取这些信息

我试着使用magic返回所有这些信息,但它以字符串形式返回-

ELF 64-bit LSB executable, x86-64,ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib/ld.so.0, stripped

现在,我正在使用正则表达式从中提取信息,但我不确定是否可以始终依靠它,因为magic的字符串输出可能会有所不同。

@amanb Look代码并不重要,因为它特定于此elf。。。我在问什么是最好的通用方法(对于所有文件和arch)。。如果有某种类型的库已经在执行此操作或其他操作,那么libmagic字符串看起来像Unix/Linux上的
文件
shell命令的输出,但缺少GNU/Linux的
输出中区分*BSD ELF可执行文件和Linux ELF可执行文件的部分,例如。@PeterCordes是的,libmagic输出应该与“file”命令输出相同。。但是我不确定它在显示架构和平台方面是否一致,或者检索itI的最佳方式是什么我不知道python,我在这里是为了CPU架构标签,抱歉。但不管怎样,这可能不完全相同。e、 g.
ELF 64位LSB共享对象,x86-64,版本1(SYSV),动态链接,解释器/lib64/ld-linux-x86-64.so.2,对于GNU/linux 3.2.0,BuildID[sha1]=0dd69c924e36ce85c93964d2364e645509dc82ea,在Arch linux上为
file/bin/ls
剥离。你在OSX上吗?我刚刚注意到您的ELF解释器是
/lib/ld.so.0
,它在普通的multiarch Linux系统上是不存在的。而
/lib/ld linux.so.2
是32位的。因此,Linux上的libmagic可能会打印我得到的。libmagic的
libmagic
内部结构非常特殊,它会为某些文件类型填充一些字段,但它无法为任何特定的文件类型提取任何系统或原理。从
libmagic
定义中反向工程您自己的检测将是我的方法,尽管它很糟糕。
libmagic
规则并不难理解,它或多或少类似于
scanf
模板。