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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章