美文网首页
2019-06-18 unlink源码解释

2019-06-18 unlink源码解释

作者: 知成 | 来源:发表于2019-07-01 09:58 被阅读0次

Linux中的un


在此输入正文link


glibc2.27中的unlink源码分析

#define unlink(AV, P, BK, FD) {                                            \
    //判断chunk p的大小,是否与下一个chunk 的prev_size相等
    if (__builtin_expect (chunksize(P) != prev_size (next_chunk(P)), 0))      \
      malloc_printerr ("corrupted size vs. prev_size");               \
    //让FD指向p的下一个chunk,BK指向p的上一个chunk
    FD = P->fd;                                   \
    BK = P->bk;                                   \
    //以上是,chunk的大小在small bin范围内的断链操作
    //以下是,large bin,的断链操作,首先判断FD的bk,与BK的fd是否同时指向p
    if (__builtin_expect (FD->bk != P || BK->fd != P, 0))             \
      malloc_printerr ("corrupted double-linked list");               \
    else {                                    \
        //首先进行初步断链,使FD的bk指向BK的fd,BK的fd指向FD,只是堆fd,bk的断链操作
        FD->bk = BK;                                  \
        BK->fd = FD;                                  \
        //以下使堆bk_nextsize,fd_nextsize的断链操作(large bin有两个双向链表,fd,bk用来
        //进行FIFO操作,bk_nextsize,fd_nextsize是根据堆块的大小进行排序的链表)
        //以下第一个if判断p的chunk是否在small范围内
        if (!in_smallbin_range (chunksize_nomask (P))                 \
            && __builtin_expect (P->fd_nextsize != NULL, 0)) {            \
            //判断chunk p的下一个chunk的上一个节点,以及上一个chunk的下一个节点是不是p
        if (__builtin_expect (P->fd_nextsize->bk_nextsize != P, 0)        \
        || __builtin_expect (P->bk_nextsize->fd_nextsize != P, 0))    \
          malloc_printerr ("corrupted double-linked list (not small)");   \
          //以下是luoarge bin的断链操作,首先判断chunk p的下下一个chunk的fd_nextsize是否为空
            if (FD->fd_nextsize == NULL) {                    \
            //p的下下一个chunk的fd_nextsize为空
                if (P->fd_nextsize == P)                      \
                //判断是否只有一个chunk p,是则如下
                  FD->fd_nextsize = FD->bk_nextsize = FD;             \
                else {                                \
                //不是以下操作,四个指针,正常的双向链表的断链操作
                    FD->fd_nextsize = P->fd_nextsize;                 \
                    FD->bk_nextsize = P->bk_nextsize;                 \
                    P->fd_nextsize->bk_nextsize = FD;                 \
                    P->bk_nextsize->fd_nextsize = FD;                 \
                  }                               \
              } else {                                \
              //p的下下一个chunk的fd_nextsize不为空,直接断链
                P->fd_nextsize->bk_nextsize = P->bk_nextsize;             \
                P->bk_nextsize->fd_nextsize = P->fd_nextsize;             \
              }                                   \
          }                                   \
      }                                       \
}

堆溢出漏洞利用,过检测方式的理解

设目标为target
则p = target;
要求FD = p->fd,BK = p->bk,FD->bk = target,BK->fd = targe,求p->fd,与p->bk;("=",为等于号)
解:
设p->fd = x,p->bk = y;
则 BK->fd = y + 0x10,FD->bk = x + 0x18;
又因为:BK = p->bk, FD = p->fd,且FD->bk = target,BK->fd = targe;
因此可解得,x =targe - 0x18,y = targe - 0x10;
所以:p->fd=targe - 0x18,p->bk = targe - 0x10

此篇博客是我自己对unlink的理解,如果觉得有问题请指出(glibc版本2.27);

相关文章

  • 2019-06-18 unlink源码解释

    Linux中的un 在此输入正文link glibc2.27中的unlink源码分析 堆溢出漏洞利用,过检测方式的...

  • 文件目录操作其他(基于itop4412)

    1 删除文件目录链接 解除链接unlink• man 2 unlink• 解除链接函数• int unlink(c...

  • unlink attack --how2heap unlink

    unlink 简介 unlink用于将 chunk 从所在的空闲链表中取出来。基本过程如下: 执行unlink时的...

  • unlink:

    堆入门---unlink的理解和各种题型总结 unlink主要是通过unlink来实现向任意地址写入,这题主要是想...

  • php删除文件

    php删除文件可以使用unlink函数 具体用法如下 unlink($filename);

  • unlink

    堆 pwn glibc中间维护的bins其实是用来存放malloc时从heap中割下来的堆,为了避免在heap中割...

  • Node.js fs模块-unlink、mkdir()、rmdi

    一. unlink()方法-->删除文件 1. fs.unlink('要删除文件的路径',回调函数) 2. 同步版...

  • C语言基础-unlink函数的使用

    一、头文件 二、函数原型 三、函数介绍 unlink()函数功能即为删除文件。执行unlink()函数会删除所给参...

  • Linux中的Unlink命令(删除文件)

    在本文中,我们将向您展示如何使用“unlink”命令删除GNU/Linux系统中的文件。 使用unlink删除文件...

  • pwnable.kr之unlink

    这道题考查基础的堆溢出unlink利用, 其中实现的unlink函数是对早期ptmalloc的模拟. 程序给了堆栈...

网友评论

      本文标题:2019-06-18 unlink源码解释

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