LLVM抽象解释与基于区域的内存模型及神经网络控制器形式验证
1. LLVM抽象解释与内存模型相关内容
1.1 地址与单元转换
在内存模型中,地址与单元之间的转换是基础操作。以下是相关的转换函数:
def cell2Addr(c):
match c with ⟨base, o⟩:
return base + o
def addr2Cell(a, objList):
match objList with
nil:
return ⟨0, 0⟩
⟨start, end⟩:: tail:
if (start ≤ a and a < end):
return ⟨start, a - start⟩
else:
return addr2Cell(a, tail)
这两个函数 cell2Addr
和 addr2Cell
分别实现了从单元到地址和从地址到单元的转换。 cell2Addr
函数将单元的基地址与偏移量相加得到地址; addr2Cell
函数则在对象列表中查找地址所在的范围,若找到则返回对应的单元信息,否则继续在剩余列表中查找。
1.2 具体语义辅助函数
为了实现具体语义,还定义了一些辅助函数:
<