我正在开发一个C ++应用程序,在这里我需要测试.SO是32位还是64位,然后再加载它。
我设法在Windows上进行了此评估,并获得了Headers文件。
现在我正在寻找一种在Linux中进行评估的方法。
最初,我想使用C ++中的函数或方法来执行此操作,即,无需在外部程序(system()
,file
...)上调用objdump
。
如果我们的社区可以帮助我找到解决方案,我将非常感谢。
谢谢!
.so
文件使用ELF格式。 ELF标头有两种变体,分别适用于32位和64位平台。文件包含两个文件中的哪一个取决于文件中的字节0x04。对于32位格式为1
,对于64位格式为2
。
您可以简单地读取并测试此字节。
也可以从字节0x12和0x13确定编译机器代码的实际指令集,例如x86的0x03
,0x3E
的x86_64
。请注意,这两个字节的字节序由字节0x05决定,对于小字节序而言,其值为1
;对于大字节序而言,其值为2
。
ELF File Format保存该信息。所有需要做的就是将文件读入缓冲区并遵循ELF格式布局(在链接的Wiki中),读取e_machine
字段。
免责声明:我是Windows专家,如果有某些特定于Linux的东西使该方法不适用,请在评论中告知我。