x64处理器

1、64位

64位系统中内存地址为64位(8个字节),使用64位大小的指针。所以含有绝对地址(VA)的指令大小比原来增加了4个字节。同样,寄存器的大小以及栈的基本单位也变成64位。

2、内存

x64系统中进程虚拟内存的实际大小为16TB。

3、通用寄存器

x64系统中,通用寄存器的大小扩展到64位,数量也增加到18个。所有通用寄存器的名称均以字母“R”开头。为了向下兼容,支持访问寄存器的8位、16位、32位。
GdotU0.png

4、CALL/JMP指令

地址指令由原来的4个字节变成8个字节,为了防止指令长度增加,x64系统中指令后面仍然跟着4个字节大小的地址,只不过该地址被解析为“相对地址”(RVA)。
GdT9Zn.png
说明:
GdT0FP.png

5、函数调用约定

32位系统中使用的函数调用约定包括cdecl、stdcall、fastcall等几种,但64位系统中它们统一为一种变形的fastcall。64位fastcall中最多可以把函数的4个参数存储到寄存器中传递。
Gd7g1O.png
各参数顺序由寄存器确定。若函数的参数超过4个,则与栈并用。

6、栈&栈帧

调用子函数时,不再用PUSH命令来传递参数,而是通过MOV指令操作寄存器与预定的栈来传递。并且创建栈帧时也不再使用RBP寄存器,而是直接使用RSP寄存器来实现。这样能大幅度提升程序的运行速度