C IN ARM64 彙編基礎-函式-基於The C Programming Language - Second Edition
阿新 • • 發佈:2019-01-09
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個,那麼就使用棧.