堆越界--coredump 在malloc函数里

摘要:
//Www.cnblogs.com/onlyforloud/articles/476436.html malloc实际上调用Void_t*public_malloc(size_t)-->受害者=_ int_ Malloc(ar_ptr)。接下来,分析_int_malloc内部进程,并根据size_t传递的大小计算mfastbinptr。(idx=fastbin_index(nb);

一,可执行程序分析: 

objdump -h xxx,可以看到程序内部各个段的内存分布,结果如下(部分): 

 26 .data         0000016c  0000000000879d20  0000000000879d20  00279d20  2**5
                  CONTENTS, ALLOC, LOAD, DATA
 27 .bss          00001000  0000000000879ea0  0000000000879ea0  00279e8c  2**5
                  ALLOC

 实时上,各个段的信息不包括heap和stack的信息。

二,signal 11, Segment Fault。

malloc,内存块实际上是挂在链表上。数据结构包括next,内容,大小。不能被写坏,否则可能造成coredump。

原因见malloc / free 流程图(数据结构)。 

今天看见一篇写得很好的文章可以说明这个问题:-- 

http://www.cnblogs.com/onlyforcloud/articles/4476436.html 
  1. malloc实际是调用Void_t*  public_mALLOc(size_t) --> victim = _int_malloc(ar_ptr, bytes); 接下来分析 _int_malloc内部流程
  2. 根据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]; ... }
  3. 因此实际上public_mALLOc会从 arena_lookup(ar_ptr)里查找出ar_ptr。堆越界--coredump 在malloc函数里第1张 
  4. # define tsd_getspecific(key, vptr) (vptr = (key))
  5. static tsd_key_t arena_key; ar_ptr实际等于arena_key.

  6. typedef struct malloc_chunk* mchunkptr; 

  7. sYSMALLOc -> struct malloc_par

免责声明:文章转载自《堆越界--coredump 在malloc函数里》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇虚拟服务器跟端口映射「微信云托管」首篇实战|极简DEMO入门下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vue 支持 超大上G,多附件上传

之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需求,都能得到满足。小小开心了一把。   但无论插件再怎么灵活,也难以应付所有的需求,比如,你要上传一个2G的文件。以现在我们的网速,恐怕再快也得传半小时。要命...

完美解决php无法上传大文件代码

之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需求,都能得到满足。小小开心了一把。   但无论插件再怎么灵活,也难以应付所有的需求,比如,你要上传一个2G的文件。以现在我们的网速,恐怕再快也得传半小时。要命...

转一篇shared_ptr的小文

原文地址: http://euyuil.com/2344/ 在最近的期中项目“牛奶”里,我大量运用了共享指针。虽然这是一种偷懒的表现,但是对于这个“模拟牛奶生产过程”的项目来说,我们并不在乎它对效率产生的影响。 题外话说完后,说说共享指针。共享指针 (shared_ptr) 是现在的 Boost 库中提供的,并且应该是将来 C++1x 的标准库中提供的一...

mysql 缓存机制

了解mysql缓存吗(顺丰) mysql缓存机制就是缓存sql 文本及缓存结果,用KV形式保存再服务器内存中,如果运行相同的sql,服务器直接从缓存中去获取结果,不需要在再去解析、优化、执行sql。 如果这个表修改了,那么使用这个表中的所有缓存将不再有效,查询缓存值得相关条目将被清空。表中得任何改变是值表中任何数据或者是结构的改变,包括insert,upd...

Qt5之坐标系统

窗口坐标为逻辑坐标,是基于视口坐标系的。 视口坐标为物理坐标,是基于绘图设备坐标系的 窗口坐标始终以视口坐标为最终目标进行映射:  QPainter::setWindow 修改了窗口位置和大小(左上角重新定义了一个数值和长度) QPainter::setViewport 修改了视口位置和像素个数(左上角移动到相应位置和像素个数) -------------...

Tomcat错误之java.lang.OutOfMemoryError:PermGen space解决方案

公司的站点是跑在Tomcat环境下的,运行一段时间后,有时会报这样的错误:java.lang.OutOfMemoryError: PermGen space 在网上查询了一下,大部分都说是jvm虚拟机的内存参数相关,需要调整内存参数。 大致过程如下: vi /jboss/bin/run.bat 找到: set JAVA_OPTS=%JAVA_OPTS% -...