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個,那麼就使用棧.