C IN ARM64 汇编基础-函数-基于The C Programming Language - Second Edition

C源码:

#include <stdio.h>

int power(int m, int n); /* test power function */

int main() {
    return power(2,1);
}

int power(int base, int n) {
    return base;
}

汇编源码:

//main函数
00000000000005a8 <main>:
 5a8:   d10083ff    sub sp, sp, #0x20
 5ac:   a9017bfd    stp x29, x30, [sp,#16]
 5b0:   910043fd    add x29, sp, #0x10
 5b4:   321f03e0    orr w0, wzr, #0x2
 5b8:   320003e1    orr w1, wzr, #0x1
 5bc:   b81fc3bf    stur    wzr, [x29,#-4]
 5c0:   97ffffca    bl  4e8 <power@plt>
 5c4:   a9417bfd    ldp x29, x30, [sp,#16]
 5c8:   910083ff    add sp, sp, #0x20
 5cc:   d65f03c0    ret

//根据plt会找到真正的power函数
00000000000004e8 <power@plt>:
 4e8:   b0000010    .word   0xb0000010
 4ec:   f947fe11    .word   0xf947fe11
 4f0:   913fe210    .word   0x913fe210
 4f4:   d61f0220    .word   0xd61f0220

//power函数
00000000000005d0 <power>:
 5d0:   d10043ff    sub sp, sp, #0x10
 5d4:   b9000fe0    str w0, [sp,#12]
 5d8:   b9000be1    str w1, [sp,#8]
 5dc:   b9400fe0    ldr w0, [sp,#12]
 5e0:   910043ff    add sp, sp, #0x10
 5e4:   d65f03c0    ret

这里面要注意的就是调用power函数的时候,把两个参数分别放入了寄存器w0(x0)、w1(x1),这也是arm汇编里面传参数的方式,arm64用x0-x7传参数,如果参数大于8个,那么就使用栈.

猜你喜欢

转载自blog.csdn.net/EMH1899/article/details/83117587