系统相关
首页 > 系统相关> > c-检测Linux下64位环境中是否正在运行32位进程

c-检测Linux下64位环境中是否正在运行32位进程

作者:互联网

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

这与在编译时检测体系结构是32位还是64位不同.

理想情况下,我希望以最可移植的方式执行此操作,因此希望避免执行文件$(which init)| grep x86-64取决于

我也不认为读取cpuid也是一种解决方案-可能在64位CPU上运行32位OS.

检测以长模式运行的64位cpu似乎也不是解决方案,也不检测内核本身是否为64位,因为操作系统可能是具有64位内核的32位用户区(如some Debian configurations可能那样) ).

除了32& amp; amp;以外,我对检测位不感兴趣. 64.

我能想到的一种可能的健壮解决方案是实际包括并尝试调用64位ELF二进制文件,然后查看其是否运行,但这并不是一种非常有效的方法.在stl或boost中是否有linux函数或其他东西可以帮助我可靠地找到?

具有讽刺意味的是,这一次等效问题是very easy to solve under Windows.

解决方法:

您可以测试是否存在/lib64/ld-linux-x86-64.so.2.从理论上讲,这并不总是可行的,因为Linux系统可以将动态链接器放置在其他位置,但是到目前为止,该特定路径是最常见的,而且将动态链接器的路径硬编码到ELF二进制文件中,因此可以在至少以及将64位库与软件捆绑在一起(无论如何,只要有匹配的libc).

标签:32bit-64bit,c-3,linux,64-bit,c-4
来源: https://codeday.me/bug/20191121/2048759.html