There is increasing interest in applying verification tools to programs that have bitvector operations (eg., binaries). SMT solvers, which serve as a foundation for these tools, have thus increased support for bitvector reasoning through bit-blasting and linear arithmetic approximations. In this paper we show that similar linear arithmetic approximation of bitvector operations can be done at the source level through transformations. Specifically, we introduce new paths that over-approximate bitvector operations with linear conditions/constraints, increasing branching but allowing us to better exploit the well-developed integer reasoning and interpolation of verification tools. We show that, for reachability of bitvector programs, increased branching incurs negligible overhead yet, when combined with integer interpolation optimizations, enables more programs to be verified. We further show this exploitation of integer interpolation in the common case also enables competitive termination verification of bitvector programs and leads to the first effective technique for LTL verification of bitvector programs. Finally, we provide an in-depth case study of decompiled ("lifted") binary programs, which emulate X86 execution through frequent use of bitvector operations. We present a new tool DarkSea, the first tool capable of verifying reachability, termination, and LTL of such lifted binaries.
翻译:使用比位器操作程序(例如,二进制)的核查工具的兴趣日益浓厚。 SMT 解析器作为这些工具的基础,因此增加了对比位器推理的支持。 在本文中,我们显示,比位器操作的类似线性算法近似可以在源一级通过变换完成。 具体地说, 我们引入新的路径, 使比位器操作在线性条件/ 约束下超近似比位器操作, 增加分解器, 并使我们能够更好地利用完善的整数推理和对核查工具的内插法。 我们显示, 为了比位器程序的可达性, 增加的分解分解器产生微不足道的间接成本, 但是, 当与整数的内插优化相结合时, 使得更多的程序能够被验证。 我们还展示了在普通情况下对比位器操作的整数的利用, 还能对比位器程序进行竞争性的终止核查, 并引出第一种对比位器程序进行L 校验的有效技术。 最后, 我们提供了一个深入的分解(“ 提高” 二进式) 二进程序案例研究研究, 我们首先对 X86 进行模拟的可操作进行模拟的 X86, 通过经常的升级的工具来验证。