汇编基础(六)内存分配区

2018-05-08  本文已影响23人  struggle3g

引言

在汇编当中不光光需要了解一些寄存器,汇编代码,也需要了解一下内存是怎么分区域的

列表:

分析代码

int g = 20;
int func(int a,int b){
    printf("wode");
    int c = a + g;
    return c;
}

int main(int argc, char * argv[]) {
    printf("%d",func(1, 2));
    return 0;  
}

转换汇编
main函数

    0x104fe28c4 <+0>:  sub    sp, sp, #0x30             ; =0x30 
    0x104fe28c8 <+4>:  stp    x29, x30, [sp, #0x20]
    0x104fe28cc <+8>:  add    x29, sp, #0x20            ; =0x20 
    0x104fe28d0 <+12>: orr    w8, wzr, #0x1
    0x104fe28d4 <+16>: orr    w9, wzr, #0x2
    0x104fe28d8 <+20>: stur   wzr, [x29, #-0x4]
    0x104fe28dc <+24>: stur   w0, [x29, #-0x8]
    0x104fe28e0 <+28>: str    x1, [sp, #0x10]
->  0x104fe28e4 <+32>: mov    x0, x8
    0x104fe28e8 <+36>: mov    x1, x9
    0x104fe28ec <+40>: bl     0x104fe2874               ; func at main.m:14
    0x104fe28f0 <+44>: mov    x30, x0
    0x104fe28f4 <+48>: mov    x10, sp
    0x104fe28f8 <+52>: str    x30, [x10]
    0x104fe28fc <+56>: adrp   x0, 1
    0x104fe2900 <+60>: add    x0, x0, #0xf2d            ; =0xf2d 
    0x104fe2904 <+64>: bl     0x104fe2bf8               ; symbol stub for: printf
    0x104fe2908 <+68>: mov    w8, #0x0
    0x104fe290c <+72>: str    w0, [sp, #0xc]
    0x104fe2910 <+76>: mov    x0, x8
    0x104fe2914 <+80>: ldp    x29, x30, [sp, #0x20]
    0x104fe2918 <+84>: add    sp, sp, #0x30             ; =0x30 
    0x104fe291c <+88>: ret    

func函数

    0x1008ce874 <+0>:  sub    sp, sp, #0x20             ; =0x20 
    0x1008ce878 <+4>:  stp    x29, x30, [sp, #0x10]
    0x1008ce87c <+8>:  add    x29, sp, #0x10            ; =0x10 
    0x1008ce880 <+12>: stur   w0, [x29, #-0x4]
    0x1008ce884 <+16>: str    w1, [sp, #0x8]
->  0x1008ce888 <+20>: adrp   x0, 1
    0x1008ce88c <+24>: add    x0, x0, #0xf28            ; =0xf28 
    0x1008ce890 <+28>: bl     0x1008cebf8               ; symbol stub for: printf
    0x1008ce894 <+32>: adrp   x30, 2
    0x1008ce898 <+36>: add    x30, x30, #0xd10          ; =0xd10 
    0x1008ce89c <+40>: ldur   w1, [x29, #-0x4]
    0x1008ce8a0 <+44>: ldr    w8, [x30]
    0x1008ce8a4 <+48>: add    w8, w1, w8
    0x1008ce8a8 <+52>: str    w8, [sp, #0x4]
    0x1008ce8ac <+56>: ldr    w8, [sp, #0x4]
    0x1008ce8b0 <+60>: str    w0, [sp]
    0x1008ce8b4 <+64>: mov    x0, x8
    0x1008ce8b8 <+68>: ldp    x29, x30, [sp, #0x10]
    0x1008ce8bc <+72>: add    sp, sp, #0x20             ; =0x20 
    0x1008ce8c0 <+76>: ret    

汇编分析
在main函数汇编中:(只写大概的意思就不一一分析了)

在func函数汇编中

总结

上一篇下一篇

猜你喜欢

热点阅读