飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 4341|回复: 3

[x64] x64传参规则研究--飘云[转自飘云BLOG]

[复制链接]
  • TA的每日心情
    奋斗
    2016-1-13 12:25
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2014-9-23 09:15:17 | 显示全部楼层 |阅读模式
    http://www.dllhook.com/?id=10

    1. By 飘云/P.Y.G
    2. https://www.chinapyg.com
    3. http://www.dllhook.com


    4. 先写一段函数测试:

    5.         /*
    6.         000000013F991062   mov         r9,0x44444444444444
    7.         000000013F99106C   mov         r8,0x333333333333333
    8.         000000013F991076   mov         rdx,0x222222222222222
    9.         000000013F991080   mov         rcx,0x111111111111111
    10.         000000013F99108A   call        @ILT+0(?FunTest@@YAX_J000@Z)
    11.         */
    12.         FunTest(0x111111111111111, 0x222222222222222, 0x333333333333333, 0x44444444444444);
    13.        
    14. 这里看到顺序是 rcx rdx r8 r9 从左到右 -- 返回值 RAX


    15. 再写一段更多参数的试试:
    16.         /*
    17.         000000013FFC32CF   mov         rax,0x77777777777777
    18.         000000013FFC32D9   mov         [rsp+0x30],rax
    19.         000000013FFC32DE   mov         rax,0x66666666666666
    20.         000000013FFC32E8   mov         [rsp+0x28],rax
    21.         000000013FFC32ED   mov         rax,0x555555555555555
    22.         000000013FFC32F7   mov         [rsp+0x20],rax
    23.         000000013FFC32FC   mov         r9,0x44444444444444
    24.         000000013FFC3306   mov         r8,0x333333333333333
    25.         000000013FFC3310   mov         rdx,0x222222222222222
    26.         000000013FFC331A   mov         rcx,0x111111111111111
    27.         000000013FFC3324   call        @ILT+10(?FunTest2@@YAX_J000000@Z)
    28.         */
    29.         FunTest2(0x111111111111111, 0x222222222222222, 0x333333333333333, 0x44444444444444, 0x555555555555555, 0x66666666666666, 0x77777777777777);


    30. 这里可以看到前4个不变,,后面开始用栈传递--前四个寄存器占了32字节(0x20)   所以第五个参数开始从 [rsp+20] 传参 以此类推,,每8byte一组   [rsp+28]......

    31. 再写一段浮点参数的试试:
    32.         /*
    33.         000000013F5F3399   movss       xmm0,[000000013F5F692C]
    34.         000000013F5F33A1   movss       [rsp+0x30],xmm0
    35.         000000013F5F33A7   movss       xmm0,[000000013F5F6928]
    36.         000000013F5F33AF   movss       [rsp+0x28],xmm0
    37.         000000013F5F33B5   movss       xmm0,[000000013F5F6924]
    38.         000000013F5F33BD   movss       [rsp+0x20],xmm0
    39.         000000013F5F33C3   movss       xmm3,[000000013F5F6920]
    40.         000000013F5F33CB   movss       xmm2,[000000013F5F691C]
    41.         000000013F5F33D3   movss       xmm1,[000000013F5F6918]
    42.         000000013F5F33DB   movss       xmm0,[000000013F5F6914]
    43.         000000013F5F33E3   call        @ILT+15(?FunTest3@@YAXMMMMMMM@Z)
    44.         */
    45.         FunTest3(11.0, 22.0, 33.0, 44.0, 55.0, 66.0, 77.0);
    46.        
    47. 这里看到浮点从 xmm0-xmm3 固定顺序传入 前4参数   从左到右   其他和上面同理


    48. 微软官方文档:
    49. http://msdn.microsoft.com/zh-cn/library/9z1stfyw.aspx
    复制代码



    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2015-8-23 23:49
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    发表于 2014-9-23 09:23:56 | 显示全部楼层
    专坐Q婶沙发~~

    PYG19周年生日快乐!
  • TA的每日心情
    开心
    12 小时前
  • 签到天数: 956 天

    [LV.10]以坛为家III

    发表于 2016-5-10 17:22:23 | 显示全部楼层

    感谢楼主分享,非常感谢~~
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    13 小时前
  • 签到天数: 2037 天

    [LV.Master]伴坛终老

    发表于 2016-12-5 15:44:43 | 显示全部楼层
    感谢楼主分享 谢谢 收藏
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表