首先:阅读本文需要一定堆的基础知识。
参考链接:传送门 传送门
题目链接:传送门
Unlink
unlink技术原理参考这个网址:传送门
现在看下面的代码。上面有题目链接。我的测试环境是ubuntu14和pwndbg。
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
struct chunk_structure {
size_t prev_size;
size_t size;
struct chunk_structure *fd;
struct chunk_structure *bk;
char buf[10]; // padding
};
int main() {
unsigned long long *chunk1, *chunk2;
struct chunk_structure *fake_chunk, *chunk2_hdr;
char data[20];
// First grab two chunks (non fast)
chunk1 = m