gpt4 book ai didi

c++ - 检测系统是否可以运行amd64可执行文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:33:25 24 4
gpt4 key购买 nike

我已将我的应用程序编译为使用 x86 指令集,但我需要以编程方式知道运行可执行文件的机器是否支持 amd64 指令集。有没有一种简单的方法可以找出这一点(可能使用 CPUID)?

应用程序需要能够在多个操作系统上运行,因此首选基于非操作系统的方法。

最佳答案

您正在寻找代码来检测 Long mode .

A bit in the CPUID extended attributes field informs programs in real or protected modes if the processor can go to long mode, which allows a program to detect an x86-64 processor. This is similar to the CPUID attributes bit that Intel IA-64 processors use to allow programs to detect if they are running under IA-32 emulation.

有问题的标志是 CPUID query for 80000001hEDX 中的第 29 位.

CPUID 指令基础设施有点冗长:如果您假设 CPUID 甚至可用,那么您必须在启动之前查询它实际支持的内容询问。然后您需要将寄存器结果放入您的变量中。


这是一些代码,用 C/C++ 的内联汇编程序编写。如果您使用的是 gcc,抱歉:您必须自己转换为(可怕的!)gasm 语法!

// Only on Pentium4 or above
// Only available on 32-bit
bool HasLongMode() {
__asm {
mov eax,0x80000001 // Ask for processor features
cpuid // from the CPU
xor eax,eax // Zero return value
test edx,0x20000000 // Check relevant bit
setnz al // Was bit set?
} // __asm
} // HasLongMode()

关于c++ - 检测系统是否可以运行amd64可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37810867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com