arm64汇编基础

作者: 李永开 | 来源:发表于2019-10-28 14:39 被阅读0次

    一.iphone X - arm64截图

    lldb输入命令register read
    • x0 - x7用来传参数,x0也存储返回值(如果参数大于8个,多余的参数放到栈里面)
    • x0 - x30 是31个通用整型寄存器
    • x29 : fp保存栈帧地址(栈底指针)
    • x30 : LR保存子程序结束后需要执行的下一条指令
    • sp 保存栈顶指针,使用 SP/WSP来进行对SP寄存器的访问
    • pc 总是指向即将要执行的下一条指令,在arm64中,软件是不能改写PC寄存器的
    • CPSR 状态寄存器
    1. 第31位(0-31) N(Negative): 记录相关指令(add、sub、orr等逻辑或算数)执行后,其结果是否为负.如果为负,N=1 非负,N=0
    2. 第30位 Z(Zero): 记录相关指令后,结果为0,Z=1 非0,Z=0
    3. 第29位 C(Carry): 进位标识符,一般进行无符号数的运算.
      加法运算:当运算结果产生了进位时(无符号数溢出), C=1 否则C=0
      减法运算(包括CMP):当运算产生了借位时(无符号数溢出),C=0 否则C=1

    tips: arm64是递减栈
    栈是从高地址向低地址扩算,堆是从低地址向高地址扩散

    二. 常用指令

    1. str :store register 将寄存器写入内存,入栈
    2. ldr : load register 将内存读到寄存器,出栈
    3. bl : b代表跳转, L代表lr寄存器, 跳转并给lr寄存器赋值
    4. ret : 让cpu执行lr寄存器里面的东西
    5. adrp (adress page, 一般和add同时出现): 找到常量或者全局变量所在的内存页(内存地址是分页管理的,每10k为一页)

    相关文章

      网友评论

        本文标题:arm64汇编基础

        本文链接:https://www.haomeiwen.com/subject/wrxmsctx.html