zoukankan      html  css  js  c++  java
  • 【arm】常见函数调用约定(x86、x64、arm、arm64)

    Date: 2018.9.20


    1、X86 函数调用约定

    X86 有三种常用调用约定,cdecl(C规范)/stdcall(WinAPI默认)/fastcall 函数调用约定。详细可参考:
    函数调用协议__cdecl,__fastcall,__stdcall
    其中:

    1. Cdecl调用规范:参数从右往左一次入栈,调用者实现栈平衡,返回值存放在 EAX 中。
    2. stdcall调用规范:参数从右往左一次入栈,被调用者实现栈平衡,返回值存放在 EAX 中。
    3. fastcall调用规范:参数1、参数2分别保存在 ECX、EDX ,剩下的参数从右往左一次入栈,被调用者实现栈平衡,返回值存放在 EAX 中。

    2、X64函数调用约定

    X64只有一种 fastcall 函数调用约定。
    参数1、参数2、参数3、参数4分别保存在 RCX、RDX、R8D、R9D ,剩下的参数从右往左一次入栈,被调用者实现栈平衡,返回值存放在 RAX 中。

    3、arm32函数调用约定

    arm32位调用约定采用ATPCS。
    参数1~参数4 分别保存到 R0~R3 寄存器中 ,剩下的参数从右往左一次入栈,被调用者实现栈平衡,返回值存放在 R0 中。

    4、arm64函数调用约定

    arm64位调用约定采用AAPCS64。
    参数1~参数8 分别保存到 X0~X7 寄存器中 ,剩下的参数从右往左一次入栈,被调用者实现栈平衡,返回值存放在 X0 中。

    详细的调用规则分析可以采用IDA静态反汇编软件进行分析和查看。

    参考:
    https://blog.csdn.net/a565499699/article/details/79294261


    THE END!

  • 相关阅读:
    js获取粘贴内容
    axios导出 exer
    Mac + IDEA + JRebel破解方法.
    富有魅力的git stash
    java web 下实现文件下载
    java23中设计模式
    高并发量网站解决方案
    Linux下拆分大文件
    Linux下jvm、tomcat、mysql、log4j优化配置
    cas单点登出
  • 原文地址:https://www.cnblogs.com/SoaringLee/p/10532367.html
Copyright © 2011-2022 走看看