c++ - 如何测试共享对象是 32 位还是 64 位?
问题描述
我正在开发一个 C++ 应用程序,我需要在加载之前测试 .SO 是 32 位还是 64 位。
我设法在 Windows 上进行了此评估,获取了 Headers 文件。
现在我正在寻找一种在 Linux 中进行评估的方法。
最初,我想使用 C++ 中的函数或方法来执行此操作,即不调用system()
外部程序(file
... objdump
)。
如果我们的社区可以帮助我找到解决方案,我将非常感激。
谢谢!
解决方案
.so
文件使用 ELF 格式。ELF 标头有两种用于 32 位和 64 位平台的变体。文件包含哪两个是由文件中的字节 0x04 决定的。它1
适用于 32 位格式和2
64 位格式。
您可以简单地读取和测试这个字节。
编译机器代码的实际指令集也可以从字节 0x12 和 0x13 确定,例如x860x03
和0x3E
. x86_64
请注意,这两个字节的字节序由字节 0x05 确定,该字节1
用于小端或2
大端。
另请参阅有关 ELF 格式的维基百科文章。
推荐阅读
- autodesk-forge - Autodesk Forge 将 DWG 上的许多布局转换为 PDF
- objective-c - NSSound 停止功能
- node.js - 如何根据 MongoDB 数据库中的键获取多个结果?
- python-3.x - 如何克服“盐必须是字节字符串错误”?
- python - nltk 和下载的 Chaquopy 问题
- node.js - 是否可以更新 IP2Location 数据库?
- javascript - 如何按数组对项目进行排序?
- sql - 在 SQL 中查询循环和随机
- snowflake-cloud-data-platform - Snowpipe rest api 总是返回“无效的 jwt 令牌”
- reactjs - React 中的状态无缘无故未定义?