我正在开发一个C ++应用程序,在这里我需要测试.SO是32位还是64位,然后再加载它。
我设法在Windows上使用Headers文件进行了评估。
现在,我正在寻找一种在Linux中进行评估的方法。
最初,我想使用C ++中的函数或方法来执行此操作,即不调用system()
外部程序(file
,objdump
...)。
如果我们的社区可以帮助我找到解决方案,我将非常感谢。
谢谢!
.so
文件使用ELF格式。ELF标头有两种变体,分别适用于32位和64位平台。文件包含两个文件中的哪一个取决于文件中的字节0x04。它适用1
于32位格式和2
64位格式。
您可以简单地读取并测试该字节。
也可以从字节0x12和0x13确定编译机器代码的实际指令集,例如0x03
x86和0x3E
for x86_64
。请注意,两个字节的字节序由字节0x05决定,字节1
序为小字节序或2
大字节序。
另请参阅有关ELF格式的维基百科文章。