首页 > 解决方案 > 如何测试共享对象是 32 位还是 64 位?

问题描述

我正在开发一个 C++ 应用程序,我需要在加载之前测试 .SO 是 32 位还是 64 位。

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

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

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

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

谢谢!

标签: c++clinuxshared-objects

解决方案


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

您可以简单地读取和测试这个字节。

编译机器代码的实际指令集也可以从字节 0x12 和 0x13 确定,例如x860x030x3E. x86_64请注意,这两个字节的字节序由字节 0x05 确定,该字节1用于小端或2大端。

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


推荐阅读