Memory ASAN指令化代码中的AccessSize重要性
我最近一直在处理地址消毒剂(ASAN)的内部问题,我开始了解ASAN的代码插装 当检测1,2,4字节访问时,检测为: 我无法理解第3行的AccessSize是什么,以及为什么在那里使用它。如阴影内存的每个字节中所述,对相应的7字节用户内存的状态进行编码:Memory ASAN指令化代码中的AccessSize重要性,memory,memory-management,address-sanitizer,Memory,Memory Management,Address Sanitizer,我最近一直在处理地址消毒剂(ASAN)的内部问题,我开始了解ASAN的代码插装 当检测1,2,4字节访问时,检测为: 我无法理解第3行的AccessSize是什么,以及为什么在那里使用它。如阴影内存的每个字节中所述,对相应的7字节用户内存的状态进行编码: 0表示所有8个字节都有效 k=1..7表示k个字节有效 (其他值也有意义,但为了简洁起见,我们省略了它们) 因此条件 if (k != 0 && ((Addr & 7) + AccessSize > k))
- 0表示所有8个字节都有效
- k=1..7表示k个字节有效
- (其他值也有意义,但为了简洁起见,我们省略了它们)
if (k != 0 && ((Addr & 7) + AccessSize > k))
ReportAndCrash(Addr);
表示如果小于8个字节是有效的(k!=0
),并且访问的内存范围不适合有效字节((Addr&7)+AccessSize>k
),则访问不正确,应报告
if (k != 0 && ((Addr & 7) + AccessSize > k))
ReportAndCrash(Addr);