学习打卡4:堆漏洞的利用技术与技巧与堆风水学习

本文探讨了堆漏洞的利用思想,包括破坏内存管理数据结构和用户数据,以及防护方法如堆Canary和CFI。重点介绍了堆风水(堆排布)的重要性,并列举了各种利用技术,如Use After Free、Double Free、Heap Overflow等。同时,通过babyfengshui实例展示了如何利用堆风水绕过检查并获取shell。
摘要由CSDN通过智能技术生成

督促自己:2020-9-10

学习记录:

《逆向工程权威指南》上

ARM64

ARM64的CPU中可能运行于ARM模式,不可能运行于 Thmub 或者 Thmub-2 moshi ,所以它必须使用32位指令。

  • STP(Store Pair) 指令是把寄存器的值存储到内存中的任意地址,明确是sp寄存器时,是存储在栈中。
  • 感叹号标志意味着其标注的运算会被优先执行。(这属于“预索引/pre-index”指令,对应“延迟索引/post-index”指令)
  • 在ARM64中,X29寄存器时帧指针,X30起着LR的作用,所以在函数序言和尾声成对出现。
  • W0是X0寄存器的低32位
mov x0, #0x0            //#0
  • 此处这条指令没有感叹号标记,意味着它将进行赋值操作,再把sp的值与16进行求和运算。------延时索引(post-index)指令

  • RET指令(返回指令)与BX LR作用相同,但是是按照寄存器的名称进行跳转的(默认使用X30寄存器指向的地址)

MIPS

全局指针 Globle Pointer :MIPS重要概念

每条MIPS指令都是32位的指令,所以单条指令无法容纳32位地址(指针)。这种情况下MIPS就得传递一对指令才能使用一个完整的指针。

**概念:**为了简化静态数据的访问操作,MIPS平台特地为此保留了一个专用的寄存器,并且把常用数据分配到了一个大小为64KB的内存数据空间中,这种专用的寄存器就叫做:‘全局指针’寄存器。

它的值是一个指针,指向64KB(静态)数据空间的正中间。而这64KB空间通常用于存储全局变量,以及printf()这类由外部导入的的外部函数地址。

在ELF格式的文件中,这个64KB的静态数据位于.sbss和.sdata之中。".sbss”是small BSS(Block Started by
Symbol)的缩写,用于存储非初始化的数据。".sdata”是small data的缩写,用于存储有初始化数值的数据。

根据这种数据布局编程人员可以自行决定把需要快速访问的数据放在.sdata、还是.sbss数据段中。

  • GP寄存器:全局指针寄存器

在这里插入图片描述

  • 初始化呢全局指正寄存器GP寄存器的值,并将其指向64KB数据段的正中央。

  • LW政令(Load Word):加载指令。

  • LUI :Load Upper Immediate

  • ADDIU : Add Immediate Unsigned Word

  • JALR : Jump and Link Register

  • MIPS有一个常量寄存器$0寄存器提供数值0的机制,$0里面的值是常量0。

    在MIPS系统中,没有在寄存器之间复制数值的(硬件)指令。
    MOVE DST , SRC 指令是通过加法指令ADD DST , SRC, $ZERO变相实现的,即等效:DST = SRC + 0

  • “T-”开头的寄存器叫做“临时”寄存器,同于保存代码里的临时值。

  • MIPS和其他的一些硬件平台的指令集都没有单独的NOP指令。

    NOP的显示:在IDA中,IDA并不会自动把实际指令匹配为NOP指令,所有一般是“OR $AT , $ZERO”形式,表面上看,它将保留寄存器 $AT 的值与0进行或运算,但从本质上讲,就是发给CPU的NOP指令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值