The EVM language is a simple stack-based language with words of 256 bits, with one significant difference between the EVM and other virtual machine languages (like Java Bytecode or CLI for .Net programs): the use of the stack for saving the jump addresses instead of having it explicit in the code of the jumping instructions. Static analyzers need the complete control flow graph (CFG) of the EVM program in order to be able to represent all its execution paths. This report addresses the problem of obtaining a precise and complete stack-sensitive CFG by means of a static analysis, cloning the blocks that might be executed using different states of the execution stack. The soundness of the analysis presented is proved.
翻译:EVM语言是一种简单的堆叠语言,单词为256比特,在EVM与其他虚拟机器语言(如.Net 程序使用 Java Bytecode 或 CLI)之间有很大区别:用堆叠保存跳跃地址,而不是在跳跃指令的代码中加以明确。静态分析器需要EVM程序完整的控制流程图(CFG)才能代表其所有执行路径。本报告述及通过静态分析获得准确和完整的对堆叠敏感的 CFG的问题,通过不同状态的处决堆进行克隆。所提供的分析的正确性得到了证明。