1. 程式人生 > >C IN ARM64 彙編基礎-函式-基於The C Programming Language - Second Edition

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 <
[email protected]
> 5c4: a9417bfd ldp x29, x30, [sp,#16] 5c8: 910083ff add sp, sp, #0x20 5cc: d65f03c0 ret //根據plt會找到真正的power函式 00000000000004e8 <[email protected]>: 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個,那麼就使用棧.