一、通用寄存器
64位下的通用寄存器

其中 rflag高32位一直為0,因為現在還用不到
xmm0~xmm15是浮點寄存器,128位的
對比32位下的通用寄存器


ST0到ST7這些是32位下的浮點寄存器
二、虛擬地址空間

用戶層的有效地址范圍是0x00000000 ` 00000000到 0x00007fff ` ffffffff
內核層地址分布在 0xffff8000 ` 00000000 到 0xffffffff ` ffffffff
中間的那一大堆內存都是無效內存
三、64位下對32位寄存器進行寫操作(包括運算結果),會造成64位寄存器的高32位清零

就像圖中這兩條指令,我把rax賦值為0xffffffff`ffffffff 再對eax減一,按理來說結果應該是0xffffffff`fffffffe,但最后卻是:
0x00000000FFFFFFFE

同樣,我們在64位下使用 xor eax,eax會直接清零整個rax寄存器
但也僅限於32位,如果我們操作16位或8位還是我們之前預想的邏輯

四、對立即數的優化
如果我們在調試器上寫下mov rax,0x1 這條匯編指令在寫下后會變成mov eax , 0x1
猜測這是調試器對其的優化
五、不支持push 長立即數
push 0x123456789是會出錯的
只能利用寄存器進行push
六、64位不支持的一些匯編指令



七、尋址
64位更多的使用的是相對偏移尋址,直接尋址的指令比較少
八、應用
當我們在64位下使用hook,返回的時候,可以這樣寫

一般來說,立即數的使用。優先使用32位擴展,64位立即數較少