美文网首页3星
二十、ARM64汇编(二)

二十、ARM64汇编(二)

作者: Lovell_ | 来源:发表于2018-12-24 18:36 被阅读35次

一、bl指令

bl:即调函数。调用完函数后返回原代码,继续玩下执行。
相当于在代码中调用一个函数,函数调用完后继续往下执行原代码。

1、汇编代码bl

汇编代码bl 断点到bl mycode 进入到mycode 返回到test函数

2、OC代码中看汇编bl

OC源代码断点 汇编断点处 开始bl跳转 进入mytest函数 从mytest函数出来,继续往下执行



二、ldr指令

ld:load,即读取的意思

ldr:取内存中的数据,放到另一个寄存器中。

涉及到内存寻址的问题。

1、内存寻址

image.png

2、代码

OC代码--断点 汇编代码--断点 汇编调试ldr:1、先得到一个能访问的地址&a,不能瞎访问



三、ldur指令

ldur与ldr的区别:
ldr用于正数(偏移值是正数);
ldur用于负数(偏移值是负数)。



四、ldp指令

ldp:load pair ,一对寄存器
根据地址读取一对数据,按地址顺序赋值给一对寄存器:
1、先赋值给第一个寄存器;
2、偏移地址后,取值赋值给第二个寄存器。

获取&a得到一个有用的地址



五、str、stur、stp指令

st:store,存储。

str:往内存中写数据(偏移值为正)

OC 汇编 调试

stur:往内存中写数据(偏移值为负)

image.png

stp:

p:pair
stp:store pair,存放一对数据
一对数据,从右边那个地址开始按顺序存放。

格式:寄存器写在左边,内存寻址写右边。



五、wzr、xzr寄存器

wzr:4字节,不能在lldb中读,也不能在lldb中写
xzr:8字节,不能在lldb中读,也不能在lldb中写

lldb读不出来:

但是在代码里是能写的:

为什么要有0寄存器呢?
——因为,如果我们要把某块内存置零的话,是不能这么写立即数的:

str #0x0, [x1]

虽然可以这么写:

但清零这种操作很常见,false,NO,nil等都是清零操作,所以专门设计出存储0的寄存器



六、pc、lr寄存器

概念

1、pc寄存器

查看pc寄存器 查看lr寄存器

2、演示lr寄存器

image.png image.png image.png image.png



七、bl指令的本质

b指令的事情就一件,找到标记,跳转,开始执行代码。

bl指令:跳转,返回。(bl跟ret配合使用)

lr:在bl跳转之前,会将下一行代码的地址赋值给lr寄存器。

ret的本质:函数返回——将lr(x30)寄存器的值赋给pc寄存器。



八、函数的分类

叶子函数:里面没有别的函数了;
非叶子函数:里面还有别的函数。

把oc文件转成汇编,乱七八糟的东西太多了,把c文件转成汇编,比较纯净。
c文件转成汇编指令:

xcrun --sdk iphoneos clang -S -arch arm64 main.c -o main.s

相关文章

  • ARM64汇编入门 - 汇编基础

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

  • 二十、ARM64汇编(二)

    一、bl指令 bl:即调函数。调用完函数后返回原代码,继续玩下执行。相当于在代码中调用一个函数,函数调用完后继续往...

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

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

  • 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 学习

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

  • ARM 汇编学习记录

    1. 简介 根据 CPU 架构不同,汇编主要可以分为两种:模拟器上的x86 汇编、真机上的 arm64 汇编,主要...

网友评论

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

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