美文网首页
汇编四、栈

汇编四、栈

作者: fanren | 来源:发表于2018-04-21 18:47 被阅读0次

  • 栈:是一种具有特殊的访问方式的存储空间(后进先出, Last In Out Firt,LIFO)


SP和FP寄存器

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

注意:ARM64开始,取消32位的 LDM,STM,PUSH,POP指令! 取而代之的是ldr\ldp str\stp,(通过sp减某个值来拉伸栈空间,通过sp加某个值来栈平衡);
ARM64里面 对栈的操作是16字节对齐的!!(通过sp拉伸栈空间时,拉伸栈控件的大小一定是16的倍数);

内存读写指令

注意:读/写数据都是往高地址读的;
例如:一个地址0xf4d0,从这个地址读取两个int值,那么应该读取0xf4d0到0xf4e0的数据;如果要向这个地址写入两个int值,应该向0xf4d0到0xf4e0中写入两个值;

str(store register) 指令

将数据从寄存器中取出,写入到内存中

ldr(load register)指令

将数据从内存中读出来,放到寄存器中
stp/ldp是str/ldr的变种,stp/ldp可以同时读写两个寄存器;

栈操作练习

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指令

CPU从何处执行指令是由pc寄存器决定的,我们可以通过修改pc寄存器的值来控制CPU执行目标指令;
pc指令不能通过mov指令来进行修改,ARM64提供了另外的指令用来修改pc的值,这些指令统称为转移指令,其中最简单的就是bl指令;

bl 标号

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

ret

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

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

x30寄存器

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

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

相关文章

  • 汇编四、栈

    栈 栈:是一种具有特殊的访问方式的存储空间(后进先出, Last In Out Firt,LIFO) SP和FP寄...

  • 汇编 - 栈

    栈 栈:是一种具有特殊的访问方式的存储空间(后进先出, Last In Out Firt,LIFO) 8086会将...

  • 汇编(八)

    现场保护 平栈内:外平栈.png *现场保护 函数调用 xcode函数汇编

  • C语言10- C语言与汇编

    20:C语言与汇编 20.1:调用约定之汇编 x86调用约定: cdecl:参数从右往左依次入栈,调用者栈平衡(C...

  • 汇编二 — 栈

    栈 栈:是一种具有特殊的访问方式的存储空间(后进先出, Last In Out Firt,LIFO) SP和FP寄...

  • <安全攻防之汇编基础>

    &关于汇编基础请点击 <汇编一> <汇编二> <汇编三> <汇编四> <汇编五> <汇编六> <汇编七> <汇编八...

  • 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

    实验: 首先,写一个简单的c程序 通过命令编译c程序为汇编代码 打开汇编代码 简化汇编代码 假设目前栈底位置为10...

  • 入门二

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

  • 崩溃分析汇编基础

    崩溃分析汇编基础 栈、调用栈、栈帧 栈 在当今多数计算机体系架构中,函数的参数传递、局部变量的分配和释放都是通过操...

  • [pwnable.tw]-Start

    程序很简单,直接用汇编int 80实现的读写退出,没开NX保护,然后有个栈溢出漏洞,先泄漏栈地址,然后往栈里写sh...

网友评论

      本文标题:汇编四、栈

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