美文网首页建工程
十九、 ARM64汇编(一)

十九、 ARM64汇编(一)

作者: Lovell_ | 来源:发表于2018-12-23 21:20 被阅读40次

一、简介

1、模拟器和真机的汇编是不一样的

其实都是GNU的汇编,只是架构不一样,汇编是严重依赖机器的,机器架构不一样,所以对应的汇编指令也就不一样。

所以我们调试程序的时候,统一运行在真机上面,因为我们的程序最终也是运行在真机上面的。

所以,就不用去了解模拟器上的汇编,作用并不大。

2、真机和模拟器上各自的汇编代码样式:

真机上的汇编 模拟器上的汇编

从上两图来看,二者汇编语言差别还是蛮大的。

3、如何学好arm64汇编

除了有arm64,还有arm32汇编,不过以后手机都是arm64构架,所以没必要学arm32汇编。

学好arm64汇编要学好3个东西:

学好这三个东西,这门汇编语言也就掌握的差不多了。



二、通用寄存器

这些是暂时需要用到的寄存器。

如何查看寄存器?

通用寄存器有什么用呢?
——通用的,存放些东西,如何存放呢?这需要学些指令,来操作。



三、mov指令

mov:move

如何编写汇编指令:
1、在OC或C中嵌入汇编;

在OC或C中嵌入汇编

2、外部建立一个汇编文件.s,再配个.h文件暴露函数的声明,以函数的形式来练习汇编(实现文件后缀.asm或.s);


注意:
1、在.h中是test(),但是在.s中是_test,因为底层调用带下划线的函数。
2、如果不想公开这个函数,可以不带下划线,怎么写都行。

1、给寄存器赋值

2、寄存器间赋值



四、add、sub指令

add 加法
sub 减法

汇编代码——mov add sub 断点调试结果

注意:汇编中,函数最后一定要写ret,否则会一直按顺序执行下去。他会认为下一个函数名只是下个代码块的标记。

实现加法和减法功能:

传进来的参数在哪呢?

打断点 参数存放结果

哪个寄存器用来返回?

公开函数 汇编实现 结果



五、cmp指令、cpsr寄存器

cmp:compare 比较
cpsr:Current Program Status Register 程序状态寄存器器
spsr:Saved Program Status Register,异常状态下使⽤用

另外:c:进位;v:溢出

为正的情况:

register write

为负情况:



六、b指令

跳转指令



七、带条件的b指令

使用方法 b后面的条件对应cpsr的位置

根据上上图,beq,去会看cpsr中的z位看是否为1.



八、带if-else反汇编

image.png

蓝色部分的跳转,是为了实现执行完if的代码后,不执行else if的代码,继续执行后面的公共代码。

相关文章

  • ARM64汇编入门 - 汇编基础

    ARM64汇编入门 - 汇编基础ARM64汇编入门 - 汇编基础

  • ARM64汇编学习笔记一(初始汇编)

    ARM64汇编学习笔记一(初始汇编)

  • 十九、 ARM64汇编(一)

    一、简介 1、模拟器和真机的汇编是不一样的 其实都是GNU的汇编,只是架构不一样,汇编是严重依赖机器的,机器架构不...

  • IOS arm64常用的汇编

    导论 生成汇编文件 寄存器 arm64 汇编条件域 arm64 汇编指令 总结 1. 生成汇编文件 2. 寄存器 ...

  • ARM 64 常见汇编指令

    ARM64常用的汇编指令 运算指令 程序跳转指令

  • iOS逆向

    ARM64汇编1、汇编初探[https://www.jianshu.com/p/f3ae7cef6659]2、函数...

  • arm64汇编基础

    iOS汇编 真机:arm64汇编 模拟器:x86汇编 将c语言的代码转化成汇编: 1. 寄存器 lldb查看当前a...

  • iOS汇编基础(二)寄存器

    以arm64为例 xcode调试汇编 1. xcode 查看运行时的汇编代码 debug -> debug wor...

  • 入门二

    [转]ARM64 汇编 寄存器 汇编指令栈栗子 逆向工程绕不过的一部分就是汇编指令的分析。我们iPhone里面用到...

  • ARM64 学习

    iOS汇编 真机 arm64汇编,GNU 模拟器 x86, AT&T 汇编 寄存器 指令 堆栈 通用寄存器 64b...

网友评论

    本文标题:十九、 ARM64汇编(一)

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