6 个版本
0.5.2 | 2021 年 8 月 28 日 |
---|---|
0.4.10 | 2020 年 4 月 17 日 |
0.4.9 | 2020 年 2 月 24 日 |
0.4.6 | 2019 年 11 月 11 日 |
#834 在 开发工具
370KB
9K SLoC
raptor 是 Falcon IL 的高级 IL
不稳定性
未知的调用和废弃的变量
当 raptor 检测到调用时,它根据调用约定设置废弃的变量。这允许常数传播分析在调用期间传播某些变量,这对于恢复未来的调用是必需的。
想象一下在 MIPS 中,我们在堆栈上保存了 $gp
寄存器。为了确定函数的位置,我们从堆栈中加载 $gp
,向它添加一个偏移量,并从该地址加载一个函数指针到 $t9
。然后我们转到 $t9
。如果我们有一个循环中的多个调用,并且在未知函数调用后将所有变量设置为 Top,那么从读取 $gp
的堆栈变量将变为 Top
,我们将无法进一步传播常数和解析函数调用。
预定义的某些函数
某些函数,如 printf/sprintf,接受可变数量的参数。在这些情况下,假设有 8 个参数。如果向这些函数传递更多参数,这将是不稳定性的来源。
依赖项
~35MB
~747K SLoC