在阅读英特尔手册时,我看到了以下内容:
在支持 Intel 64 架构的处理器上,
IA32_SYSENTER_ESP
字段和IA32_SYSENTER_EIP
字段必须分别包含规范地址。
什么是“规范地址”?
在阅读英特尔手册时,我看到了以下内容:
在支持 Intel 64 架构的处理器上,
IA32_SYSENTER_ESP
字段和IA32_SYSENTER_EIP
字段必须分别包含规范地址。
什么是“规范地址”?
我建议您下载完整的软件开发人员手册。该文档分为多个卷,但此链接可让您在单个大型PDF中获取所有七个卷,从而更易于搜索内容。
答案在第3.3.7.1节中。该节的第一行说明如下:
在64位模式下,如果地址的63位到微架构实现的最高有效位均设置为全0或全1,则认为地址处于规范形式。
接下来还有一些详细内容...
您可以使用cpuid
查询CPU上支持的虚拟地址宽度(即“由微架构实现”)。或者通常可以假设为48位。
即规范的虚拟地址是48位,正确地符号扩展到64位。如果高位不匹配,则为非规范形式,如果尝试对其进行解引用,则会导致故障。
(或者使用英特尔即将推出的5级页表扩展,57位符号扩展到64位)。
Sign-extended
是将最高有效位复制到地址的上位位。上位是11111…
,下位是00000…
。