hooker

iOS逆向与安全11.2 函数本质

2019-07-18  本文已影响0人  looha

栈:是一种具有特殊的访问方式的存储空间(先进后出,后进先出, Last In Out Firt,LIFO)


15193998892055.jpg

push 操作 栈顶向上移动
pop 操作 栈顶向下移动

image.png

a 和 b 在栈中,a 和 b所指向地址存储得值在堆中,所谓大堆小栈

image.png

c 先出栈,b a 后出栈

SP和FP寄存器

内存读写指令

注意:读/写 数据是都是往高地址读/写

此ldr 和 str 的变种ldp 和 stp 还可以操作2个寄存器.


.text
.global _A,_B,_suma

_A:
    mov x0,#0xaaaa
    //str x30,[sp,#-0x10]!
    sub sp,sp,#0x10 //拉伸栈空间 
    str x30,[sp]
    bl _B
    mov x0,#0xaaaa
    ldr x30,[sp],#0x10
    ret

_B:
   sub sp,sp ,#0x20  栈空间拉伸
   stp x0,x1 [sp,#x10] 操作
    ldp x1,x0,[sp,#x10] 操作
   add sp,sp,#0x20  栈空间恢复

    mov x0,#0xbbbb
    ret

_suma:
    add x0,x0,x1
    ret

栈平衡

拉伸栈空间 函数调用完毕,栈空间归位 栈空间拉伸得到的待覆写空间
sub    sp, sp, #0x20    ;拉伸栈空间32个字节
stp    x0, x1, [sp, #0x10] ;sp往上加16个字节,存放x0 和 x1
ldp    x1, x0, [sp, #0x10] ;将sp偏移16个字节的值取出来,放入x1 和 x0
上一篇 下一篇

猜你喜欢

热点阅读