繁体   English   中英

检测Linux下的64位环境中是否运行32位进程

[英]Detect if a 32bit process is running in a 64bit environment under Linux

我正在分发一个32位版本的软件。 我想在运行时检测它运行的用户区是否是64位,并且能够运行64位可执行二进制文件(ELF 64位x86-64)。

这与在编译时检测架构是32位还是64位不同。

理想情况下,我希望以最便携的方式做到这一点,所以宁愿避免像file $(which init) | grep x86-64那样做file $(which init) | grep x86-64 file $(which init) | grep x86-64依赖于

我不认为读取cpuid也是一种解决方案 - 可以在64位CPU上运行32位操作系统。

检测以长模式运行的64位cpu似乎也不是解决方案,也不检测内核本身是否为64位,因为操作系统可能是具有64位内核的32位用户空间(可能有些Debian配置 )。

我主要不想检测32和64以外的位数。

我能想到的一个可能的强大解决方案是实际包含并尝试调用64位ELF二进制文件并查看它是否运行,但这并不是一种非常有效的方法。 是否有一个linux函数或stl或boost中的某些内容可以帮助我可靠地找到它?

具有讽刺意味的是, 在Windows下 ,等效问题很容易解决

您可以测试/lib64/ld-linux-x86-64.so.2的存在。 从理论上讲,这并不总是有效,因为Linux系统可以将动态链接器放在其他地方,但这个特定的路径是目前最常见的,加上动态链接器的路径硬编码到ELF二进制文件中,所以这适用于至少以及实际将64位库与您的软件捆绑在一起(假设有匹配的libc,无论如何)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM