iOS逆向之函数本质总结

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

    2.sp和FP寄存器

        (1)sp寄存器在任意时刻  会保存我们栈顶的地址

        (2)fp寄存器也成为x29寄存器,属于通用寄存器,但是在某些时刻我们利用它保存栈底的地址

    3.ARM64里面对栈的操作是16字节对齐的。

    4.栈的读写指令

        (1)读:ldr(load register)指令LDR、LDP

        (2)写:str(store register)指令STR、STP

    5.汇编练习

        (1)指令

                sub   sp , sp , #0x10     拉升栈空间16个字节

                stp    x0 , x1 , [sp]       往sp所在位置存放x0和x1

            (2)简写

                    stp  x0 , x1 , [sp , #-0x10]!

bl指令

    1.跳转指令:bl标号,标明程序执行到标号处,将下一条指令的地址保存到lr寄存器里。 

    B 代表跳转

    L 代表lr(x30)寄存器

ret

    1.类似函数中return

    2.让CPU执行lr寄存器所指向的指令

函数的参数

    1.ARM64中,参数放在x0到x7的8个寄存器中    

    2.如果是浮点数,就会用浮点寄存器

    3.如果超过8个参数就会用栈传递

函数的返回值

    1.一般函数的返回值使用x0寄存器保存

    2.如果返回值超过8个字节,就会利用内存传递返回值。

你可能感兴趣的:(iOS逆向之函数本质总结)