如何测试共享对象是32位还是64位?

Dan*_*olo 2 c c++ linux shared-objects

我正在开发一个C ++应用程序,在这里我需要测试.SO是32位还是64位,然后再加载它。

我设法在Windows上使用Headers文件进行了评估。

现在,我正在寻找一种在Linux中进行评估的方法。

最初,我想使用C ++中的函数或方法来执行此操作,即不调用system()外部程序(fileobjdump...)。

如果我们的社区可以帮助我找到解决方案,我将非常感谢。

谢谢!

wal*_*nut 5

.so文件使用ELF格式。ELF标头有两种变体,分别适用于32位和64位平台。文件包含两个文件中的哪一个取决于文件中的字节0x04。它适用1于32位格式和264位格式。

您可以简单地读取并测试该字节。

也可以从字节0x12和0x13确定编译机器代码的实际指令集,例如0x03x86和0x3Efor x86_64。请注意,两个字节的字节序由字节0x05决定,字节1序为小字节序或2大字节序。

另请参阅有关ELF格式的维基百科文章