_IO_FILE | setvbuf原理浅析

环境:glibc2.23   对于_IO_FILE,我们再分析最后一个函数:setvbuf,这个是用来设置标准输入输出或者错误输出的临时缓冲区的,在CTF中经常能看到setvbuf(stdout,0,2,0);这样的代码,效果相当于不会为_IO_2_1_stdout_结构体分配堆块,…

_IO_FILE | fclose原理跟踪分析

环境:glibc2.23   上一节我们分析过了一遍fread读取文件的过程,那么文件操作结束后自然要用fclose关闭文件里,这一节我们就好好分析一下fclose的原理,其源码如下: # define _IO_new_fclose fclose # define CHECK_FILE(FILE, …

_IO_FILE | fread原理跟踪分析

环境:glibc2.23   上次我们已经跟踪了一遍fopen的原理,这次我们来跟踪分析一下fread从文件描述符读取内容的过程。这有助于我们进一步了解_IO_FILE结构体,源码如下: weak_alias (_IO_fread, fread) #define _IO_size_t size_t …

_IO_FILE | fopen原理跟踪分析

环境:glibc2.23   在Linux下我们可能听说过open函数比较多,open函数由POSIX实现,但C语言标准实现了一个叫fopen的函数,其返回值不是一个可供系统调用的文件句柄,而是一个_IO_FILE指针,本节我们就主要剖析一下C是如何利用这个文件指针来进行文件读写的。老样子先写一个h…

how2pwn | double-free利用剖析

环境:glibc2.23 demo   老样子首先从一个demo程序开始看起: #include <stdio.h> #include <stdlib.h> int main() { void *p1,*p2,*p3; unsigned long* ptr; p1=mallo…

how2pwn | unsafe-unlink利用剖析

环境:glibc2.23 demo   看到这了我就假设你已经看过我的malloc四部曲和free了,接下来我们将利用这些利用技巧来更深层次的理解内存管理。首先还是从简单的入手,假设有如下代码: #include <stdio.h> #include <stdlib.h> i…

Linux堆结构 | free原理跟踪分析

  free函数的讲解我们同样以hello,world程序开始,有如下代码: #include <stdio.h> #include <stdlib.h> int main() { free(malloc(0x100)); return 0; }   我们之前已经分析过了第一…

Linux堆结构 | malloc原理跟踪分析(二)

  在上一个章节,我们已经大致认识到了malloc的堆块在内存中的结构,接下来我们就开始从源码角度分析内存分配的原理: void * __libc_malloc (size_t bytes) { mstate ar_ptr; void *victim; void *(*hook) (size_t, …