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

问题描述 投票:2回答:2

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

我设法在Windows上进行了此评估,并获得了Headers文件。

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

最初,我想使用C ++中的函数或方法来执行此操作,即,无需在外部程序(system()file ...)上调用objdump

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

谢谢!

c++ c linux shared-objects
2个回答
4
投票

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

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

也可以从字节0x12和0x13确定编译机器代码的实际指令集,例如x86的0x030x3Ex86_64。请注意,这两个字节的字节序由字节0x05决定,对于小字节序而言,其值为1;对于大字节序而言,其值为2

另请参见the wikipedia article on the ELF format


0
投票

ELF File Format保存该信息。所有需要做的就是将文件读入缓冲区并遵循ELF格式布局(在链接的Wiki中),读取e_machine字段。

免责声明:我是Windows专家,如果有某些特定于Linux的东西使该方法不适用,请在评论中告知我。

© www.soinside.com 2019 - 2024. All rights reserved.