1、字节 iOS 端 Memory Corruption 探索与实践吴凯凯字节跳动-开发者服务团队我介绍2020年6加字节跳动,直专注在APM向,负责iOS端稳定性监控和优化作;主要技术建设作:崩溃、慢函数、卡死等系统策略崩溃的监控和归因,相关技术及产品泛应在抖、头条、书等业务中Memory Corruption 介绍线下排查具和适性介绍线上排查案和疑难崩溃案例分析总结回顾纲Memory Corruption 定义对不属于的内存进读写,就是memory corruption Use after freeWild PointerUse after scope Uninitialized pointe
2、rGlobal buffer overflowBuffer overflowHeap buffer overflowStack buffer overflowDouble freeOtherInvalid freeMemory Corruption 类型介绍和触发原因 Use after freeWild PointerUse after scope Uninitialized pointerMemory Corruption 类型介绍和触发原因 Use after freeWild PointerUse after scope Uninitialized pointerMemory Corr
3、uption 类型介绍和触发原因 Use after freeWild PointerUse after scope Uninitialized pointerGlobal buffer overflowBuffer overflowHeap buffer overflowStack buffer overflowMemory Corruption 类型介绍和触发原因Memory Corruption 类型介绍和触发原因Double freeOtherInvalid freeMemory Corruption 危害1.对客户端排查不友好。2.会发不可预期为,如写坏了其它业务线的内存,通常会在今
4、后某个时间点发崩溃,并不是写坏这个时间点。所以崩溃堆栈不定是发的原因,有时候,崩溃堆栈甚都是随机的,较难归因。Memory Corruption 介绍线下排查具和适性介绍线上排查案和疑难崩溃案例分析总结回顾纲线下排查具-ZombieZombie 定义 指的是已经释放的 OC 对象。属于Use after free类型内存问题。缺点 1.线下难复现;线上排查困难。2.只适 OC 对象野指针(use after free)导致的内存问题线下排查具-Zombieobject_dealloc_zombie_NSZombie_XXzombie objectany messageexception rep
5、ortClean线下排查具-Address SanitizerClang-fsanitize=addressasan dylib线下排查具-Address Sanitizer 插桩pIsPoisoned(p)Process memoryShadow memory线下排查具-Address Sanitizer 插桩buffernumberStack线下排查具-Address Sanitizer 插桩buffernumberStack线下排查具-Address Sanitizer 插桩Globals线下排查具-Address Sanitizer 运时线下排查具-Address Sanitizer
6、运时线下排查具-Address Sanitizer 缺点缺点 1.开销:内存使量增加2到3倍,代码的速度降低2到5倍。2.对 Overflow 的检测依赖 redzone。3.对 Use-after-free 检测原理是将释放的内存放个隔离的列表中隔离段时间,但是过了隔离时间再使,检测失效。HWASan:ARMv8 寻址只到了低 48 位,所以剩下的 16 位可以拿来做其它事情。HWASan 8bit 来存储块内存区域的标签(tag)。线下排查具Malloc Scribble:申请内存后在内存上填0 xAA,内存释放后在内存上填0 x55Malloc Guard Edges:申请内存的时候在前