UE4 内存写坏导致异常崩溃问题记录_天天日报
(相关资料图)
1. 问题表现经常出现进程崩溃,崩溃堆栈较为底层
原因基本上都是 read write memory 时触发了异常,盘查后初步怀疑是内存写坏了。
2. 排查期UE 支持各种内存分配器:
TBBAnsiJemallocStomp还有自带的内存分配器:BinnedBinned2Binned3可以参考文章 UE 中的内存分配器。其中 Stomp 是引擎提供的排查内存写坏的工具之一,通过增加参数-stompmalloc
可以让 UE 默认采用该内存分配器,启用了之后崩溃的第一现场就是内存写坏的代码地址。通过排查发现崩溃原因是遍历迭代器时删除元素后没有及时 continue,大致示例如下:for(TArray::TIterator Iter(Actors); Iter; ++ Iter){if (xxx){Iter.RemoveCurrent(); //没有 continue}if (xxx){Iter.RemoveCurrent();//没有 continue}}
当数组元素只剩一个时,如果触发了两次 RemoveCurrent,就会导致写到数组之外的内存空间,RemoveCurrent 的机制会把后面的数组元素迁移到删除的位置上,保证数据连贯。同时 RemoveCurrent 完毕后会自动把迭代器的下标前移一位。
3. Stomp 原理3.1 内存覆盖Stomp 其主要的功能是在写坏内存时可以马上捕获到第一现场。内存写坏了通常指程序在操作内存时写入了非法的数据或超出了内存分配的范围,导致程序出现错误或崩溃。这种情况通常被称为越界访问或非法访问内存。大部分情况下有内存池的技术,且操作系统分配内存往往会向上按页对其分配,所以一时的内存越界读写有可能不会马上出现问题。而 Stomp 是在内存越界时就对其抛出异常。
3.2 实现原理开启 Stomp 之后,内存分配基本上由 FMallocStomp::Malloc
和 FMallocStomp::Free
接管。
void* FMallocStomp::Malloc(SIZE_T Size, uint32 Alignment)void FMallocStomp::Free(void* InPtr)
要做到写坏内存后能直接触发异常,需要在内存分配上做手脚,这里主要用到了两点:
操作系统支持的 Pagefault 和 Page 权限控制哨兵机制Stomp 在给用户分配内存的时候会额外分配 2 个 Page 出来,分别在返回给用户的指针地址空间前后。当用户超出分配给他的内存上读写时,就会触发异常。其分配内存的流程大致如下:这里有个问题是 FAllocationData 只有 32 个字节,但是其分配了一个 Page 给其使用,这里主要是由于分配内存都需要对齐 Page。到此内存分配完毕,接下来有 2 种情况:
从 Page2 写数据一直写到 Page3,由于 Page3 被标记为不可读不可写,因此一旦出现越界,就会直接抛出异常从 Page1 写数据一直写到 Page0,由于 Page0 末端分配了一个 FAllocationData,因此一旦越界,哨兵值会被覆盖,当释放内存时FMallocStomp::Free
就会对内存块的 FAllocationData 进行检查,一旦哨兵比对异常就抛出异常 关键词:
责任编辑:hnmd004
- UE4 内存写坏导致异常崩溃问题记录_天天日报2023-04-22
- 湖北省黄石市2023-04-22 04:49发布雷电黄2023-04-22
- 熊出没之夺宝熊兵下载 mp4 熊出没之夺宝2023-04-22
- 天天热点评!元始天尊是道教三清的哪一位 2023-04-22
- 元祖雪月饼哪款最好吃又健康 元祖雪月饼哪2023-04-22
- 美国三大股指初步微幅收涨约0.1%2023-04-22
- 大立科技(002214.SZ):一季度业绩预亏39002023-04-22
- 甘肃金昌发挥“三酸两碱”资源优势 打造化2023-04-22
- 全球动态:西部陆海新通道金融服务联合体在2023-04-22
- 「绿色中国」无限好“风光”:江苏太仓零碳2023-04-22
- 2023上海车展:捷尼赛思G90国内首发并开启2023-04-22
- 【全球聚看点】华夏基金华夏全球精选_华夏2023-04-22
- 价格歧视名词解释答案_价格歧视名词解释 2023-04-22
- 环球看点!红烧带鱼怎么做好吃又简单窍门_2023-04-22
- 环球今头条!山东省公安厅举办习近平新时代2023-04-22
- 泓博医药:2022年净利同比降8.7% 拟10转42023-04-22
- 观天下!首创证券2023年一季报:归母净利润2023-04-22
- 保险理赔收入会计分录_保险赔偿收入会计分2023-04-22
- 环球信息:以练代战!夯实消防安全“硬实力2023-04-22
- 馆校携手奉上“阅读大礼”,让书香溢满校园2023-04-22
- 强能力重实效 雨花区组织开展应急管理系统2023-04-22
- 婚车开AP连环追尾?小鹏辟谣:去年的事,有2023-04-22
- 土耳其实现黑海天然气供应 将满足本国约302023-04-22
- 巢湖市旗山水郡安置点工程获“安徽省建筑安2023-04-22
- 世界通讯!多措并举 让勤俭节约落实见效2023-04-22
- 恒星科技2022年净利1.87亿同比增长33.5% 2023-04-22
- 六博棋哑舍_六博棋-世界快资讯2023-04-22
- 全球观点:杭银理财收成立以来首张罚单,因2023-04-22
- 广东乐昌:白毛茶品质评鉴活动暨区域公共品2023-04-22
- CBN Friday Special丨Sizzling Zibo: H2023-04-22