美文网首页
Android 逆向中会用到的ARM

Android 逆向中会用到的ARM

作者: 颓废中二少年 | 来源:发表于2019-07-08 21:37 被阅读0次

    PC 是指令指针 R15
    LR是用于保存函数调用的返回地址 R14
    SP是堆栈指针 R13

    LDR 将内存中的数载入到寄存器
    STR 将寄存器中的数保存到内存
    无条件跳转:L
    函数调用: BL (保存PC到LR再跳转)
    前四个参数保存到R0~R3,其他使用栈传递
    返回值:
    1.结果为一个32位的整数时,可以通过寄存器R0返回.
    2.结果为一个64位整数时,可以通过R0和R1返回,依此类推.
    3.结果为一个浮点数时,可以通过浮点运算部件的寄存器f0,d0或者s0来返回.
    4.结果为一个复合的浮点数时,可以通过寄存器f0-fN或者d0~dN来返回.
    5.对于位数更多的结果,需要通过调用内存来传递.

    BX
    BXL
    X代表切换指令集
    立即数前面加#

    push pop

    ARM 流水线介绍
    ARM7
    取指令,译码,执行

    1、位指令

    AND指令进行逻辑"与"操作;
    ORR指令进行逻辑"或"操作;
    EOR指令进行逻辑"异或"操作;==》F = ^AB + A^B
    ORN指令进行逻辑"或非"操作;==》F = ^(A+B)
    BIC指令进行"RN AND NOT RM"操作

    2、批量存储读取指令
    LDM:(load much)多数据加载,将地址上的值加载到寄存器上
    STM:(store much)多数据存储,将寄存器的值存到地址上
    主要用途:现场保护、数据复制、参数传送等,共有8种模式(前面4种用于数据块的传输,后面4种是堆栈操作)如下:
    IA:每次传送后地址加4,其中的寄存器从左到右执行,例如:STMIA R0,{R1,LR} 先存R1,再存LR
    IB:每次传送前地址加4,同上
    DA:每次传送后地址减4,其中的寄存器从右到左执行,例如:STMDA R0,{R1,LR} 先存LR,再存R1
    DB:每次传送前地址减4,同上
    FD:满递减堆栈 (每次传送前地址减4)
    FA:满递增堆栈 (每次传送后地址减4)
    ED:空递减堆栈 (每次传送前地址加4)
    EA:空递增堆栈 (每次传送后地址加4)
    注意:其中在数据块的传输中是STMMDB和LDMIA对应,STMMIA和LDMDB对应,而在堆栈操作是STMFD和LDMFD对应,STMFA和LDMFA对应

    相关文章

      网友评论

          本文标题:Android 逆向中会用到的ARM

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