堆越界--coredump 在malloc函数里
一,可执行程序分析:
objdump -h xxx,可以看到程序内部各个段的内存分布,结果如下(部分):
26 .data 0000016c 0000000000879d20 0000000000879d20 00279d20 2**5CONTENTS, ALLOC, LOAD, DATA27 .bss 00001000 0000000000879ea0 0000000000879ea0 00279e8c 2**5ALLOC
实时上,各个段的信息不包括heap和stack的信息。
二,signal 11, Segment Fault。
malloc,内存块实际上是挂在链表上。数据结构包括next,内容,大小。不能被写坏,否则可能造成coredump。
原因见malloc / free 流程图(数据结构)。
今天看见一篇写得很好的文章可以说明这个问题:--
http://www.cnblogs.com/onlyforcloud/articles/4476436.html
- malloc实际是调用Void_t* public_mALLOc(size_t) --> victim = _int_malloc(ar_ptr, bytes); 接下来分析 _int_malloc内部流程
- 根据size_t传递的大小计算出mfastbinptr。(idx = fastbin_index(nb);mfastbinptr* fb = &fastbin (av, idx);)| #define fastbin_index(sz) \ ((((unsigned int)(sz)) >> (SIZE_SZ == 8 ? 4 : 3)) - 2) | #define fastbin(ar_ptr, idx) ((ar_ptr)->fastbinsY[idx]) | struct malloc_state { ... mfastbinptr fastbinsY[NFASTBINS]; ... }
- 因此实际上public_mALLOc会从 arena_lookup(ar_ptr)里查找出ar_ptr。
- # define tsd_getspecific(key, vptr) (vptr = (key))
static tsd_key_t arena_key; ar_ptr实际等于arena_key.
typedef struct malloc_chunk* mchunkptr;
sYSMALLOc -> struct malloc_par
堆越界--coredump 在malloc函数里的更多相关文章
- malloc函数的底层实现你是否清楚
malloc函数的底层实现你是否清楚 说起malloc函数,每个人都能说出它的功能,而且我们经常会用到,那么今天我要说的是关于malloc函数在编译器的底层实现,如果你对它的实现已经很清楚了,那么你可 ...
- 如何实现一个malloc函数
一.概述 1.malloc简介 函数所在头文件:<stdlib.h> 函数原型是:void *malloc (size_t n) 函数功能:在内存的动态存储区中分配一个长度为size的连续 ...
- C语言中 malloc函数用法
一.malloc()和free()的基本概念以及基本用法: 1.函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针 ...
- 关于malloc函数的动态分配问题
malloc函数动态分配了一个整型的内存空间,让abc都指向刚申请的空间,所以只有最后一个赋值语句的值保留在了空间里 #include<stdio.h> main() { int *a,* ...
- malloc 函数工作机制(转)
malloc()工作机制 malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表.调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块.然后,将 ...
- C语言malloc()函数:动态分配内存空间
头文件:#include <stdlib.h> malloc() 函数用来动态地分配内存空间(如果你不了解动态内存分配,请查看:C语言动态内存分配及变量存储类别),其原型为:void* m ...
- 在内存充足时malloc函数分配内存失败的原因及解决
昨天在修改自己的代码的时候,碰到了malloc函数内存分配失败,上网翻了翻,一个很可能的原因是之前的代码出现了越界操作,导致malloc分配函数所涉及的一些信息被破坏.在这个思想的指导下,今天又是郁闷 ...
- C语言malloc函数为一维,二维,三维数组分配空间
c语言允许建立内存动态分配区域,以存放一些临时用的数据,这些数据不必在程序的声明部分定义,也不必等到函数结束时才释放,而是需要时随时开辟,不需要时随时释放,这些数据存储在堆区.可以根据需要,向系统申请 ...
- malloc函数详解 C语言逻辑运算符
今天写线性表的实现,又遇到了很多的难题,C语言的指针真的没学扎实.很多基础都忘了. 一是 :malloc 函数的使用. 二是:C语言逻辑运算符. 一.原型:extern void *malloc(un ...
随机推荐
- Java字节码文件结构---概述
一.Class文件的结构概述: 是一连串的字节流(以自节为基本单位划分),里面包含的数据项按照固定的次序依次排列组成Class文件,文件内部不含分割符 当数据项的长度大于1B时候,按照高位在前的方式存 ...
- lnmp配置信息 4核8g优化
MYSQL my.conf# The following options will be passed to all MySQL clients[client]#password = ...
- Xcode8从相册选图片
使用Xcode8写自己的东西有一段时间了,在使用Xcode8编程时不得不说我特别喜欢改后的默认字体,哈哈,当然默认字体是可以调回去的,只不过默认的字体感觉看起来比以前舒服了,毕竟不会像之前那么”字正腔 ...
- Android进阶笔记:AIDL内部实现详解 (一)
AIDL内部实现详解 (一) AIDL的作用是实现跨进程通讯使用方法也非常的简单,他的设计模式是典型的C/S架构.使用AIDL只要在Client端和Server端的项目根目录下面创建一个aidl的文件 ...
- SQL Server 获取某时间点后修改的函数Function 并以文本格式显示
修改查询分析器如下选项 右键=>查询选项 =>结果=>文本=> 取消 在结果集中包括列标题 的勾选 右键=>将结果保存到=> 选择 以文本格式显示结果 执行如下SQ ...
- 【特别好】【位运算】maximum-xor-of-two-numbers-in-an-array
https://leetcode.com/problems/maximum-xor-of-two-numbers-in-an-array/ 利用了异或的”自反性“: a ^ b = c,而a ^ b ...
- RMAN 还原与恢复
一. RMAN 还原与恢复基础 在RMAN 用于中,还原与恢复是两个不同的概念.还原(restore):指访问先前生成的备份,从中得到一个或多个对象,然后在磁盘上的某个位置还原这些对象.恢复(reco ...
- Shadow Map 原理和改进 【转】
http://blog.csdn.net/ronintao/article/details/51649664 参考 1.Common Techniques to Improve Shadow Dept ...
- Mac 快捷键整理(不定期更新)
刚用Mac, 感到有点困难,记录几个快捷键: 1) 在全屏间切换: ctrl + command + F 2)向后删: Fn + delete
- Leetcode--easy系列5
#83 Remove Duplicates from Sorted List Given a sorted linked list, delete all duplicates such that e ...
