初识汇编(三)

作者: WinJayQ | 来源:发表于2018-05-09 19:37 被阅读0次

函数本质

SP和FP寄存器

  • sp寄存器在任意时刻会保存我们栈顶的地址.
  • fp寄存器也称为x29寄存器属于通用寄存器,但是在某些时刻我们利用它保存栈底的地址!()

注意:ARM64开始,取消32位的 LDM,STM,PUSH,POP指令! 取而代之的是ldr\ldp str\stp
ARM64里面 对栈的操作是16字节对齐的!!

关于内存读写指令

注意:读/写 数据是都是往高地址读/写

str(store register)指令

将数据从寄存器中读出来,存到内存中.

ldr(load register)指令

将数据从内存中读出来,存到寄存器中

此ldr 和 str 的变种ldp 和 stp 还可以操作2个寄存器.

堆栈操作练习

使用32个字节空间作为这段程序的栈空间,然后利用栈将x0和x1的值进行交换.

sub    sp, sp, #0x20    ;拉伸栈空间32个字节
stp    x0, x1, [sp, #0x10] ;sp往上加16个字节,存放x0 和 x1
ldp    x1, x0, [sp, #0x10] ;将sp偏移16个字节的值取出来,放入x1 和 x0

bl和ret指令

bl标号

  • 将下一条指令的地址放入lr(x30)寄存器
  • 转到标号处执行指令

ret

  • 默认使用lr(x30)寄存器的值,通过底层指令提示CPU此处作为下条指令地址!

ARM64平台的特色指令,它面向硬件做了优化处理的

x30寄存器

x30寄存器存放的是函数的返回地址.当ret指令执行时刻,会寻找x30寄存器保存的地址值!

注意:在函数嵌套调用的时候.需要讲x30入栈!

函数的参数和返回值

ARM64下,函数的参数是存放在X0到X7(W0到W7)这8个寄存器里面的.如果超过8个参数,就会入栈.
函数的返回值是放在X0 寄存器里面的.

函数的局部变量

函数的局部变量放在栈里面!

相关文章

  • 初识汇编(三)

    函数的本质 关于CPU的补充 寄存器 CPU由: 控制器, 计算器和寄存器组成. 其中寄存器的作用就是将数据进行临...

  • 初识汇编(三)

    函数本质 SP和FP寄存器 sp寄存器在任意时刻会保存我们栈顶的地址. fp寄存器也称为x29寄存器属于通用寄存器...

  • 初识汇编

    我们在学习逆向开发之前,我们要了解一个基本的逆向原理。首先我们是逆向iOS系统上面的APP。那么我们知道,一个AP...

  • 汇编初识

    琐碎 处理器架构 x86: 统指基于8086处理器指令集的32位架构. x86架构首度出现在1978年推出的Int...

  • 初识汇编

    001--初识汇编 我们在学习逆向开发之前,我们要了解一个基本的逆向原理.首先我们是逆向iOS系统上面的APP.那...

  • 初识汇编

    逆向课程随堂笔记 001--初识汇编 我们在学习逆向开发之前,我们要了解一个基本的逆向原理.首先我们是逆向iOS系...

  • 初识汇编

    我们在学习逆向开发之前,我们要了解一个基本的逆向原理.首先我们是逆向iOS系统上面的APP.那么我们知道,一个AP...

  • 初识汇编

    初识汇编 汇编语言(assembly language) 使用助记符代替机器语言 加:INC EAX 通过编译器 ...

  • 初识汇编

    在逆向开发中,非常重要的一个环节就是静态分析,这里以 iOS 系统为例,首先我们是逆向 iOS 系统上面的 APP...

  • 汇编一、初识汇编

    开发语言的发展 机器语言 由0和1组成的机器指令,如: 加:0100 0000 减:0100 1000 汇编语言 ...

网友评论

    本文标题:初识汇编(三)

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