x64 | C++逆向【參數傳遞】

    函數參數前四個整數參數將傳入寄存器,整數值在 RCX、RDX、R8 和 R9 中傳遞 (按順序從左到右)。參數五和更高在堆棧上傳遞。全部參數是將右側對齊在註冊。所以,被調用方能夠根據須要忽略寄存器中上面的位,而且只訪問所需的寄存器部分。函數

    函數參數前四個浮點型和雙精度參數傳入 XMM0、XMM一、XMM二、XMM3(最大可達 4 個)中,參數五和更高在堆棧上傳遞,並忽略經常使用於該基槽的整型槽(RCX、RDX、R8 和 R9)(請參見示例),反之亦然。下面分三類狀況進行分析spa

參數傳遞示例 1 – 所有都是整型參數
code

func1(int a, int b, int c, int d, int e);  
// a in RCX, b in RDX, c in R8, d in R9, e pushed on stack

參數傳遞示例 2 – 所有都是浮點型參數orm

func2(float a, double b, float c, double d, float e);  
// a in XMM0, b in XMM1, c in XMM2, d in XMM3, e pushed on stack

參數傳遞示例 3 – 既有整型參數又有浮點型參數
ci

func3(int a, double b, int c, float d);  
// a in RCX, b in XMM1, c in R8, d in XMM3
相關文章
相關標籤/搜索