如何在Windows上检测X32?
X32允许人们使用32位整数、长整数和指针编写在x86_64处理器上运行的程序。在某些用例下,使用X32有许多好处。(X32与X86或X64不同;有关更多详细信息,请参阅) 似乎有些Windows Enterprise Server支持X32,但我很难找到有关它的详细信息。这是基于一些英特尔PDF的,比如: 微软的文档中列出了常见的嫌疑犯,如如何在Windows上检测X32?,windows,c-preprocessor,32bit-64bit,abi,linux-x32-abi,Windows,C Preprocessor,32bit 64bit,Abi,Linux X32 Abi,X32允许人们使用32位整数、长整数和指针编写在x86_64处理器上运行的程序。在某些用例下,使用X32有许多好处。(X32与X86或X64不同;有关更多详细信息,请参阅) 似乎有些Windows Enterprise Server支持X32,但我很难找到有关它的详细信息。这是基于一些英特尔PDF的,比如: 微软的文档中列出了常见的嫌疑犯,如\u M_X64和\u M_AMD64。但它似乎没有讨论X32的架构选项 如果Microsoft支持X32,那么我怀疑它将是一个类似于大地址空间感知或终端
\u M_X64
和\u M_AMD64
。但它似乎没有讨论X32的架构选项
如果Microsoft支持X32,那么我怀疑它将是一个类似于大地址空间感知或终端服务感知的选项
微软是否真的支持X32(相对于X86和X64)
- 如果是,我如何确定在Windows下选择X32的时间
- 如果不是,那么英特尔为什么专门为Windows推出X32平台
长答案-第一部分 “X32没有标题字符串” 无视下列事实:
- 没有此类功能的官方文件
- Visual Studio或
中没有启用/禁用它的选项,并且cl.exe/?
没有显示此类选项的迹象strings-el clui.dll
strings-el“%vcsinstalldir%\bin\1033\clui.dll”| find“Microsoft(R)”
也没有显示匹配头字符串的迹象:
4Microsoft (R) C/C++ Optimizing Compiler Version %s
-for Microsoft (R) .NET Framework version %s
(Microsoft (R) C/C++ Optimizing Compiler
FMicrosoft (R) C/C++ Optimizing Compiler Version %s for MIPS R-Series
)Microsoft (R) MIPS Assembler Version %s
CMicrosoft (R) C/C++ Optimizing Compiler Version %s for Renesas SH
<Microsoft (R) C/C++ Optimizing Compiler Version %s for ARM
:Microsoft (R) C/C++ Standard Compiler Version %s for x86
<Microsoft (R) C/C++ Optimizing Compiler Version %s for x86
GMicrosoft (R) 32-bit C/C++ Optimizing Compiler Version %s for PowerPC
@Microsoft (R) C/C++ Optimizing Compiler Version %s for Itanium
<Microsoft (R) C/C++ Optimizing Compiler Version %s for x64
>Microsoft (R) C/C++ Optimizing Compiler Version %s for ARM64
Microsoft (R) MIPS Assembler
但是,没有宏指示Windows上的数据模型。您的目标是以下体系结构之一:
- 32位x86(
)\u M_IX86
- 64位AMD64(
/\u M_AMD64
)\u M_X64
- (32位?)
\u M u AMD64
和\u M u X64
单独确定X32是否存在,但如果定义了\u M u AMD64
,则也定义了\u M u X64
长答案-第三部分 “坏消息” 最后,在搜索任何东西,甚至可能是早已被遗忘的资料之后,没有证据表明Windows支持或将支持为类似于X32 ABI的Linux编写代码。预处理器宏无助于识别X32,命令行选项和IDE选项不存在,识别此类编译器的字符串也不存在
答案很长——新的希望破灭了 “这些不是您要找的宏” 我们可以假设使用当前存在的宏来检查,但在这种情况下它没有帮助,因为X32 for Windows不存在。它与GLIBC检查没有什么不同,但是如果定义了
\uuuuILP32\uuuuuuuuuuu
,则不启用X32,而是在未定义\u M\u X64
时启用它
\ifdef\u M\u AMD64
#ifndef_M_X64
#定义ABI_STR“X32”
#否则
#定义ABI_STR“AMD64”
#恩迪夫
#elif定义的_M_IX86
#定义ABI_STR“X86”
#否则
#错误:不支持的CPU/体系结构
#恩迪夫
当然,如果定义了\u M_AMD64
,那么也定义了\u M_X64
,进一步强化了Windows没有X32的证据。问题
微软是否真的支持X32(相对于X86和X64)
TL;answer博士
答案是“不,Microsoft不支持。”预处理器宏不会导致对X32的任何标识,命令行选项和IDE选项不存在,标识此类编译器的字符串也不存在
长答案-第一部分 “X32没有标题字符串” 无视下列事实:
- 没有此类功能的官方文件
- Visual Studio或
中没有启用/禁用它的选项,并且cl.exe/?
没有显示此类选项的迹象strings-el clui.dll
strings-el“%vcsinstalldir%\bin\1033\clui.dll”| find“Microsoft(R)”
也没有显示匹配头字符串的迹象:
4Microsoft (R) C/C++ Optimizing Compiler Version %s
-for Microsoft (R) .NET Framework version %s
(Microsoft (R) C/C++ Optimizing Compiler
FMicrosoft (R) C/C++ Optimizing Compiler Version %s for MIPS R-Series
)Microsoft (R) MIPS Assembler Version %s
CMicrosoft (R) C/C++ Optimizing Compiler Version %s for Renesas SH
<Microsoft (R) C/C++ Optimizing Compiler Version %s for ARM
:Microsoft (R) C/C++ Standard Compiler Version %s for x86
<Microsoft (R) C/C++ Optimizing Compiler Version %s for x86
GMicrosoft (R) 32-bit C/C++ Optimizing Compiler Version %s for PowerPC
@Microsoft (R) C/C++ Optimizing Compiler Version %s for Itanium
<Microsoft (R) C/C++ Optimizing Compiler Version %s for x64
>Microsoft (R) C/C++ Optimizing Compiler Version %s for ARM64
Microsoft (R) MIPS Assembler
但是,没有宏指示Windows上的数据模型。您的目标是以下体系结构之一:
- 32位x86(
)\u M_IX86
- 64位AMD64(
/\u M_AMD64
)\u M_X64
- (32位?)
\u M u AMD64
和\u M u X64
单独确定X32是否存在,但如果定义了\u M u AMD64
,则也定义了\u M u X64
长答案-第三部分 “坏消息” 最后,在搜索任何东西,甚至可能是早已被遗忘的资料之后,没有证据表明Windows支持或将支持为类似于X32 ABI的Linux编写代码。预处理器宏无助于识别X32,命令行选项和IDE选项不存在,识别此类编译器的字符串也不存在
答案很长——新的希望破灭了 “这些不是您要找的宏” 我们可以假设使用当前存在的宏来检查,但在这种情况下它没有帮助,因为X32 for Windows不存在。它与GLIBC检查没有什么不同,但是如果定义了
\uuuuILP32\uuuuuuuuuuu
,则不启用X32,而是在未定义\u M\u X64
时启用它
\ifdef\u M\u AMD64
#ifndef_M_X64
#定义ABI_STR“X32”
#否则
#定义ABI_STR“AMD64”
#恩迪夫
#elif定义的_M_IX86
#定义ABI_STR“X86”
#否则
#错误:不支持的CPU/体系结构
#恩迪夫