美文网首页
伪指令LDR和ADR的分析

伪指令LDR和ADR的分析

作者: 我非鱼丶 | 来源:发表于2020-04-19 11:51 被阅读0次

Q:为什么要进行分析?


A:伪指令在arm汇编中占有非常重要的地位,通常可以帮助我们在进行汇编编程的时候简化编程难度,因为一条伪指令可以实现多条普通汇编指令一同实现的效果。

Q:是什么?


A:ADR的定义是---小范围的地址读取伪指令,ADR指令将基于PC相对偏移的地址值读取到寄存器中,在编译源程序时ADR伪指令被编译器 替换成一条合适的指令。通常,编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能,若不能用一条指令实现,刚产生错误。拆解开看就是:

1.将基于PC的地址的偏移量拿出来,存入指定寄存器

2.在真实场景下(逆向时),我们只能看到add或sub等多条指令来代替这个指令

ADR家族的指令(包括ADR、ADRL)跳转范围是距离自己0-4k和0-64k大小的地址,因为指令长度是有限的,数据太大意味着数据在指令中占的长度会很长,指令就写不下了,因此跳转范围受到了限制,反推去看也能知道,在真实环境中被转成的add和sub指令也是受到指令长度限制的~~~~


LDR的定义为:大范围地址读取伪指令,LDR伪指令用于加载32们的立即数或一个地址值到指定寄存器。在汇编编译源程序时,LDR伪指令被编译 器替换成一条合适的指令。若加载的常数未超出MOV或者MVN的范围,刚使用MOV或MVN指令代替该LDR伪指令,否则汇编器将常量放入字池,并使用一 条程序相对偏移的LDR指令从文字池读出常量。拆解开看就是:

1.用于加载32位的立即数或一个地址值到指定寄存器

2.优先使用MOVMVN指令代替该指令

同样可能是跳转,这里跳转的范围巨大,0-4g,毕竟是立即数,32位寻址范围多大它就多大,完全没有指令长度限制数字大小的问题。

相关文章

  • 伪指令LDR和ADR的分析

    Q:为什么要进行分析? A:伪指令在arm汇编中占有非常重要的地位,通常可以帮助我们在进行汇编编程的时候简化编程难...

  • ARM汇编之加载地址到寄存器

    有这几种方式可以加载地址到寄存器: 使用ADR汇编指令 使用ADRL伪指令 使用MOV32伪指令 使用LDR Rd...

  • 3-伪指令_FIQ_IRQ_乘法

    伪指令:编译器识别的指令。 ldr伪指令 ldr r0,=0x12345678 ldr指令 ldr r0,[r0...

  • 17 ARM汇编伪指令

    伪指令的意义 伪指令不是指令,伪指令和指令的根本区别是经过编译后不会生成机器码 伪指令的意义在于知道编译过程 伪指...

  • <<汇编语言>>第4~6章笔记

    伪指令 伪指令是由编译器来执行的指令,编译器根据伪指令来进行相关的编译操作 segment和ends segmen...

  • ADR

    Attorneys, by the way, have mixed emotions about ADR. Som...

  • 004.ARM指令之LDR

    LDR指令的格式: LDR{条件} 目的寄存器 <存储器地址>作用:将 存储器地址 所指地址处连续的4...

  • 陈晨|成功谈判21|您知道如何正其解执行和评估您的协议么?

    Understanding ADR processes is important for three reason...

  • 汇编语言

    LDR:读内存,LDR R0,[R1] 读取R1地址上的值,保存到R0中。 STR:写内存命令,STR R0, ...

  • 8086伪指令

    8086伪指令 *db(define byte)自定义字节 *dw(define word)自定义字 Call和R...

网友评论

      本文标题:伪指令LDR和ADR的分析

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