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个,那么就使用栈.