Memory ASAN指令化代码中的AccessSize重要性

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))

我最近一直在处理地址消毒剂(ASAN)的内部问题,我开始了解ASAN的代码插装

当检测1,2,4字节访问时,检测为:

我无法理解第3行的AccessSize是什么,以及为什么在那里使用它。

如阴影内存的每个字节中所述,对相应的7字节用户内存的状态进行编码:

  • 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);