C/C++(arm64指令集)代码分析函数调用过程的汇编分享

下述C语言程序包含了一个简单的add()函数,该函数接受两个整型参数,计算并返回两者的和。

main()函数调用执行了add()函数来计算3+2的和,并将计算结果打印出来。

#include <stdio.h>

int add(int a, int b){
    int t =  a + b;
    return t;
}

int main(){
    int x = 3;
    x = add(x,2);
    printf("%d",x);
    return 1;
}
为了从机器指令层面理解上述函数调用过程中的传参、跳转、返回等行为,我们在浏览器中访问了下述网站:


在粘贴相关代码并选择ARM64 gcc 9.3选项后,我们得到下述汇编语言指令序列:

add(int, int):
        sub     sp, sp, #32
        str     w0, [sp, 12]
        str     w1, [sp, 8]
        ldr     w1, [sp, 12]
        ldr     w0, [sp, 8]
        add     w0, w1, w0
        str     w0, [sp, 28]
        ldr     w0, [sp, 28]
        add     sp, sp, 32
        ret
.LC0:
        .string "%d"
main:
        stp     x29, x30, [sp, -32]!
        m

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值