标签:bin tcache stash bk victim unlink tc
tcache stashing unlink +
-
tcache 的入链操作
-
smallbin 入链操作
-
tcache stash
-
源码
#if USE_TCACHE /* While we're here, if we see other chunks of the same size, stash them in the tcache. */ size_t tc_idx = csize2tidx (nb); if (tcache && tc_idx < mp_.tcache_bins) { mchunkptr tc_victim; /* While bin not empty and tcache not full, copy chunks over. */ while (tcache->counts[tc_idx] < mp_.tcache_count && (tc_victim = last (bin)) != bin) //注意这个结束条件 { if (tc_victim != 0) { bck = tc_victim->bk; //这里victim的bk被我们修改了,bck为我们修改的值 &victim — 0x10 set_inuse_bit_at_offset (tc_victim, nb); if (av != &main_arena) set_non_main_arena (tc_victim); bin->bk = bck;//victim 成为small bin的尾节点 bck->fd = bin;//victim的fd被设置为small bin //这里需要注意的是victim + 0x8需要提前设置,作为victim的bk tcache_put (tc_victim, tc_idx); } }
-
实际操作
-
第一次stash,虚线是small bin 解链,绿色是未被攻击的情况, 红色是攻击的情况
-
第二次stash,就会将victim链入tcache,此时malloc就会申请到fake chunk
-
-
标签:bin,tcache,stash,bk,victim,unlink,tc 来源: https://blog.csdn.net/huzai9527/article/details/121233452
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。