A Static Analyzer for Large Safety-Critical Software
我们表明,抽象的解释为基础的静态程序分析,可以有效和精确到足以正式验证一个家庭的大型程序很少或没有假警报的一类属性。这是通过通用静态分析器的改进以及最终用户通过参数化对该系列的特定程序进行调整来实现的。这是适用于在机器级的定期同步安全关键嵌入式软件的数据操作操作的可靠性的证明。主要的新颖性是静态分析器的设计原理,通过参数化进行细化和自适应,对表达式进行符号操作以提高抽象传递函数的精度,八边形,椭圆形和决策树抽象域,所有这些都具有浮点计算中舍入错误的良好处理,扩展策略(具有阈值,延迟)和参数的自动确定(参数化包装)。
2007-01-30 cs.PF cs.PL
A Static Analyzer for Detecting Tensor Shape Errors in Deep Neural Network Training Code
Seoul National University(首尔大学)
我们提出了一个自动静态分析器PyTea,它可以检测PyTorch代码中的张量形状错误。张量形状错误在深度神经网络代码中至关重要;一旦在训练阶段中间发生张量形状不匹配,大部分训练成本和中间结果都会丢失。给定输入PyTorch源,PyTea静态跟踪每个可能的执行路径,收集路径的张量操作序列所需的张量形状约束,并决定约束是否不可满足(因此可能发生形状错误)。PyTea的可扩展性和精度取决于真实世界PyTorch应用程序的特性:PyTea保守修剪后的执行路径数量很少爆炸,循环足够简单,可以通过我们的符号抽象来限制。我们针对官方PyTorch存储库中的项目和StackOverflow中质疑的一些tensor-error代码测试了PyTea。PyTea成功地检测到这些代码中的张量形状错误,每次都在几秒钟内。
2021-12-16 cs.LG cs.PL
On the Design of Generic Static Analyzers for Modern Imperative Languages
为现代命令式语言(如C、C++、Java和Python)的重要片段设计和实现精确的静态分析器是一个具有挑战性的问题。在本文中,我们考虑一个核心的命令式语言,有几个功能,如包括递归函数,运行时系统和用户定义的异常,以及一个现实的数据和内存模型中发现的主流语言。对于这种语言,我们提供了一个具体的语义-表征有限和无限的计算-和一个通用的抽象语义,我们证明声音相对于具体的。我们说抽象语义是通用的,因为它被设计为在分析域上完全参数化:特别地,它提供了对\emph{relational}域的支持(即,可以捕获不同数据对象之间的关系的抽象域)。我们还勾画了如何提出的方法可以扩展到适应一个更大的语言,包括指针,复合数据对象和非结构化的控制流机制。该方法基于结构化的大步骤$\mathrm{G}^\infty\mathrm{SOS}$操作语义和抽象解释,是模块化的,因为整个静态分析器被自然地划分为具有明确标识的职责和接口的组件,这大大简化了正确性证明和实现。
2007-06-28 cs.LO cs.PL
SMT-Based Refutation of Spurious Bug Reports in the Clang Static Analyzer
我们描述并评估了一个错误反驳扩展的Clang静态分析器(CSA),解决了现有的内置约束求解器的局限性。特别是,我们补充CSA现有的消除虚假错误报告的方法。我们编码的路径约束CSA产生的可满足性模理论(SMT)的问题,使用SMT求解器,以精确地检查它们的可满足性,并删除错误报告,其相关的路径约束是不可满足的。我们的反驳扩展反驳了12个广泛使用的开源应用程序中的8个中的虚假错误报告;平均而言,它反驳了ca。所有bug报告的7%,并且从不反驳任何真正的bug报告。它只会带来微不足道的性能开销,平均为整个Clang/LLVM工具链的运行时间增加1.2%。可在{ \tt https://www.youtube.com/watch?}上获得演示v= ylW51RYNsGA}。
2018-11-30 cs.LO cs.PL cs.SE
Testing Neural Program Analyzers
University of Houston(休斯顿大学);Visa Research(Visa研究院)
深度神经网络越来越多地用于软件工程和程序分析任务。他们通常采取一个程序,并作出一些预测,例如,bug预测我们称这些模型为神经程序分析器。神经程序的可靠性可能会影响包含分析的可靠性。在本文中,我们描述了我们正在努力开发有效的测试神经程序的技术。我们讨论了开发这些工具所面临的挑战和我们未来的计划。在我们对文献中最近提出的神经模型进行的初步实验中,我们发现该模型非常脆弱,输入中的简单扰动可能导致模型在预测中出错。
2019-09-25 cs.LG cs.PL cs.SE
Modular Construction of Shape-Numeric Analyzers
静态分析的目的是推断程序的不变量,这些不变量足够精确以建立语义属性,例如不存在运行时错误。一般来说,命令式程序的静态分析有两个主要分支。指针和形状分析侧重于推断指针、动态分配的内存和递归数据结构的属性,而数值分析则寻求导出数值的不变量。虽然通常需要同时推断形状-数值不变量,但这种情况特别具有挑战性,并且没有得到特别好的探索。值得注意的是,同时的形状-数值推理在静态分析器本身的设计中提出了复杂的问题。在本文中,我们研究的建设,这样的形状数值,静态分析。我们建立了一个抽象的解释框架,使我们能够推理的形状和数字的抽象组合成一个模块化的,富有表现力的抽象域的同时形状数值属性。这种模块化结构是非常可取的,使其形式化和实现更容易做,并得到正确的。为了实现这一点,我们选择了一个具体的语义,可以一步一步地抽象,同时保持高水平的表达能力。抽象操作的结构(即,transfer、join和comparison)遵循该语义的结构。这种构造的优点是将分析器划分为模块和函数,这些模块和函数实现了不同特性的抽象。
2013-09-20 cs.LO cs.PL
Easing Maintenance of Academic Static Analyzers
本文介绍自2017年以来为简化Mopsa静态分析平台维护而设计的工具与技术,包括自动精度测量、抽象执行观察工具及测试用例缩减,以提升透明度并发现回归。
2024-11-05 cs.PL cs.SE
JSAI: Designing a Sound, Configurable, and Efficient Static Analyzer for JavaScript
我们描述JSAI,一个JavaScript的抽象解释器。JSAI使用新颖的抽象域来计算类型推断、指针分析、字符串分析、整数和布尔常量传播以及控制流分析的简化产品。此外,JSAI允许分析控制流灵敏度(即,上下文敏感性、路径敏感性和堆敏感性)被模块化地配置,而不需要对分析实现进行任何改变。JSAI被设计为在JavaScript的特定具体语义方面是可靠的,它已经针对现有的生产质量JavaScript实现进行了广泛的测试。我们提供了一个全面的评估JSAI的性能和精度使用广泛的基准套件。该基准测试套件包括真实世界的JavaScript应用程序、通过Emscripten生成的机器生成的JavaScript代码以及浏览器插件。我们使用JSAI的可配置性来评估大量的分析灵敏度(一些众所周知的,一些新颖的),并观察到一些令人惊讶的结果。我们相信,JSAI的可配置性和它的正式规范定位它作为一个有用的研究平台,实验新的敏感性,抽象域,和客户端分析JavaScript。
2014-03-17 cs.PL
Non-termination Analysis of Logic Programs with Integer arithmetics
在过去的几年中,分析器已被引入到检测类的非终止查询的明确的逻辑程序。虽然这些非终止性分析器已经被证明是相当精确的,但它们在现实生活中的Prolog程序上的适用性是有限的,因为大多数Prolog程序使用非逻辑功能。作为分析Prolog程序的第一步,本文给出了含整数运算的逻辑程序的不可终止条件。该分析仪基于我们在ICLP 2009上展示的非终止分析仪。分析从一类查询开始,并推断出一个子类的非终止的。在第一阶段,我们忽略算术运算的结果(成功或失败),假设所有算术调用都成功。在第二阶段中,我们成功的算术调用的特点作为一个约束问题,其解决方案确定的非终止查询。
2011-09-15 cs.LO cs.PL
Pifthon: A Compile-Time Information Flow Analyzer For An Imperative Language
实时信息流分析是保护私有数据机密性和完整性的一种很有前途的技术。在过去的几十年中,大量的信息流安全工具的运行时执行监视器或静态类型的系统的形式已经开发的程序设计语言来分析信息流的安全策略。然而,现有的流分析工具缺乏准确性和可用性,这是在实际应用开发中没有被广泛采用的主要原因。在本文中,我们提出了一个编译时的信息流分析的强制性程序的基础上的混合(可变+不可变)标签的方法,使用户能够检测到信息流的政策违反和修改程序,以克服违规行为。我们已经开发了一个信息流安全分析器的方言的Python语言,PyX,称为Pifthon使用上述方法。流分析器有助于识别与给定信息流策略(IFP)相对应的顺序PyX程序中可能的信息滥用。与文献中的其他方法相比,Pifthon具有明显的优势,例如减少了标签开销,改善了可用性,涵盖了广泛的PyX程序,包括终止和进展敏感通道。在经典无干扰条件下,证明了所提出的流动分析方法是合理的。最后,给出了使用Pifthon的案例和经验。
2021-03-10 cs.CR cs.PL
Checkification: A Practical Approach for Testing Static Analysis Truths
本文提出一种基于Ciao断言框架的静态/动态混合检查方法,通过组合静态分析器、运行时断言检查、随机测试生成和单元测试来测试抽象解释静态分析器,并在CiaoPP上成功发现并修复多个缺陷。
2025-05-07 cs.PL cs.SE
Data-Driven Synthesis of Provably Sound Side Channel Analyses
我们提出了一种数据驱动的方法来合成一个静态分析器,以检测侧信道信息泄漏的加密软件。与手工制作这种静态分析仪的传统方法相比,这种方法可能是劳动密集型的,容易出错并且不理想,我们基于学习的技术不仅是自动化的,而且可以证明是合理的。我们的分析器由一组从训练数据中学习的类型推理规则组成,即,示例代码片段用地面实况注释。在内部,我们使用语法指导合成(SyGuS)生成新的功能和决策树学习(DTL)生成基于这些功能的类型推理规则。我们保证健全的正式证明每个学习规则通过一种技术称为Datasheet查询包含检查。我们已经在LLVM编译器中实现了我们的技术,并使用它来检测C程序中的电源侧通道。我们的研究结果表明,除了在合成过程中自动化和可证明的声音之外,学习的分析器还具有与两个最先进的手动制作的分析器相同的经验准确性,同时分别快300倍和900倍。
2021-02-12 cs.PL cs.SE
Galois Transformers and Modular Abstract Interpreters
静态分析器的设计和实现已经变得越来越系统化。然而,对于一个给定的语言或分析功能,它往往需要繁琐和容易出错的工作,以实现分析器,并证明它的声音。简而言之,静态分析特性和它们的可靠性证明不能很好地组合,导致在实现和元理论中缺乏重用。我们通过引入伽罗瓦变换器解决了系统地构建静态分析器的问题:单子变换器传输伽罗瓦连接属性。与一个单子解释器相配合,我们定义了一个单子转换器库,这些转换器实现了经典分析参数(如上下文、路径和堆(入)敏感性)的构建块。此外,这些可以独立于被分析的语言组合在一起。重要的是,Galois Transformer可以被证明是可靠的,使其成为可重用的分析组件。随着新的分析特征和抽象的开发和混合,可靠性证明不需要重建,因为单子Transformer堆栈的组成凭借其成分是可靠的。伽罗瓦变换为程序分析的可重用和可组合元理论提供了一个可行的基础。最后,这些伽罗瓦变换器将分析设计和实现中的抽象级别转移到非专业人员能够在多个参数上合成声音分析器的级别。
2015-10-05 cs.PL
A Transformational Approach to Resource Analysis with Typed-norms Inference
为了自动推断程序的资源消耗,分析器跟踪数据大小如何随着程序的执行而变化。通常,分析器通过应用范数来测量数据的大小,范数是从数据到表示相应数据大小的自然数的映射。当规范是通过考虑类型信息来定义的,它们被称为类型规范。本文提出了一种转换的方法,资源分析与类型化规范,推断出的数据流分析。该分析是基于一个转换的程序到一个中间的抽象程序,其中每个变量被抽象的所有考虑的规范是有效的,其类型。我们还提出了数据流分析,自动推断所需的,有用的,类型规范的程序。我们的分析是在一个简单的基于规则的表示上形式化的,以不同的编程范式编写的程序(例如,功能性、逻辑性、命令性)可以自动翻译。在其他基于类型的分析器使用的标准基准测试上的实验结果表明,我们的方法在实践中是有效和准确的。逻辑程序设计理论与实践(TPLP)
2019-08-06 cs.LO cs.PL
Evaluation of the Implementation of an Abstract Interpretation Algorithm using Tabled CLP
CiaoPP是Ciao Prolog系统中逻辑程序的分析器和优化器。它包括PLAI,一个不动点算法的抽象解释的逻辑程序,我们适应使用表格约束逻辑编程。在这种适应中,制表引擎驱动定点计算,而约束求解器处理不同子句的抽象替换的LUB。这简化了代码并提高了性能,因为终止,依赖关系和一些关键操作(例如,分支切换和恢复)由制表引擎直接处理。确定是否已经达到不动点使用语义等价,这可以决定两个语法不同的抽象替换表示抽象域中的同一元素。因此,与使用语法相等的分析器相比,制表分析器可以在更多情况下重用答案。这有助于实现更好的性能,即使考虑到与这些检查相关的额外成本。我们的实现基于Ciao Prolog中的TCLP框架,并且是CiaoPP中初始定点实现的三分之一大小。它的性能进行了评估,通过分析几个程序使用不同的抽象域。这篇论文正在考虑发表在《逻辑程序设计理论与实践》(TPLP)上。
2019-07-31 cs.PL
Sound, Precise, and Fast Abstract Interpretation with Tristate Numbers
扩展伯克利包过滤器(BPF)是一种语言和运行时系统,允许非超级用户通过将用户代码下载到内核中来扩展Linux和Windows操作系统。为了确保用户代码在内核上下文中安全运行,BPF依赖于一个静态分析器来证明代码的属性,例如有界内存访问和不存在崩溃的操作。BPF静态分析器使用具有多个抽象域的抽象解释来检查安全性。其中,tnums(三态数)域是用于推理程序值中的按位不确定性的关键域。本文对tnum抽象域及其算术运算符进行了形式化的定义。我们首次证明了BPF分析器中使用的tnum加法和减法抽象算术运算符的合理性和最优性。此外,我们还描述了一种新的tnum乘法算法,它比Linux内核的算法更精确、更高效(平均运行速度快33%)。我们的tnum乘法现在合并到Linux内核中。
2021-12-15 cs.PL
Retargeting an Abstract Interpreter for a New Language by Partial Evaluation
本文提出利用部分求值技术,以源语言编写的目标语言语义对现有抽象解释器进行特化,从而自动将抽象解释器重定向到新语言,避免从零开发分析器,并验证了所得分析器的正确性。
2025-07-06 cs.PL
Abstract interpretation of Michelson smart-contracts
智能合约的静态分析在区块链平台上变得越来越普遍。分析器依赖于符号执行或模型检验等技术,但很少有分析器能同时提供强可靠性和保证分析的终止性。由于智能合约经常操纵经济资产,因此证明数字属性超出了运行时错误的情况也是可取的。智能合约执行模型与主流程序设计语言有很大不同,并且因区块链而异,使得最先进的分析难以适应。例如,智能合约调用可能会修改影响后续调用的持久性存储。这使得工具很难推断出正式确保不存在可利用漏洞所需的不变量。Tezos区块链中使用的Michelson智能合约语言是强类型的,基于堆栈的,并且具有严格的执行模型,几乎没有隐式运行时错误的机会。我们提出了一个正在进行的静态分析迈克尔逊的基础上抽象解释和MOPSA,一个模块化的静态分析器内实现。我们的工具支持迈克尔逊语义特征,包括对外部契约的内部调用。它可以证明不存在运行时错误,并在无限数量的调用上推断持久存储上的不变量。它也被扩展到证明高级别的数值和安全属性。CCS概念:$\bullet$安全和隐私$\rightarrow$逻辑和验证; $\bullet$软件及其工程$\rightarrow$自动化静态分析。
2022-10-11 cs.CR cs.PL cs.SE
Sawja: Static Analysis Workshop for Java
静态分析是一种强大的程序自动验证技术,但在为Java等现实语言开发全面的分析器时,它会带来重大的工程挑战。本文介绍了Sawja库:一个完全兼容Java 6的静态分析框架,它提供了OCaml模块,用于有效地操作Java字节码程序。我们提出的库的主要特点,包括(一)高效的功能数据结构表示程序与隐式共享和懒惰的解析,(二)一个中间的无栈表示,(三)快速计算和操纵完整的程序。
2010-07-20 cs.PL
SPARK: Static Program Analysis Reasoning and Retrieving Knowledge
School of Information Technologies, University of Sydney(悉尼大学信息技术学院);Department of Computer Science, Yonsei University(延世大学计算机科学系);Qatar Computing Research Institute(卡塔尔计算研究所)
程序分析是一种不用执行程序就能对程序进行推理的技术,它在编译器、集成开发环境和安全性方面有各种应用。在这项工作中,我们提出了一个机器学习管道,诱导程序的安全分析器的例子。安全分析器根据我们的机器学习管道推导出的符号规则来确定程序是安全还是不安全。机器流水线分为两个阶段,包括一个递归神经网络(RNN)和一个将RNN转换为符号规则的提取器。为了评估学习的符号规则的质量,我们提出了一个基于采样的两个无限正则语言之间的相似性度量。我们使用真实世界的数据进行案例研究。在这项工作中,我们讨论了现有技术的局限性和未来可能的改进。结果表明,在有足够的训练数据和合理分布的程序路径的情况下,对数百万行代码的OpenJDK库进行符号安全规则推导是可行的。
2017-11-03 cs.AI cs.CR cs.PL
Analyzing the Analyzers: Model Counting Meets Abstract Interpretation
The State Key Laboratory of Blockchain and Data Security, Zhejiang University(浙江大学区块链与数据安全全国重点实验室)
提出MCAI方法,利用模型计数量化抽象域的精度,通过符号抽象评估四个域的转换器精度,发现区间域精度接近八边形域,位级域优于字级域。
2026-06-23 cs.PL
Polar: An Algebraic Analyzer for (Probabilistic) Loops
TU Wien(维也纳工业大学)
Polar通过代数推理自动化分析经典和概率循环,能够推导不变量和参数敏感性,适用于包含if语句、多项式运算和概率分布的循环。
2026-02-16 cs.PL
Abstract Environment Trimming
本文提出受编译器优化启发的变量修剪等技术,在不影响精度的前提下提升逻辑程序共享分析效率,实验显示显著加速且超时模块减半。
2024-08-19 cs.PL
Symbolic Methods to Enhance the Precision of Numerical Abstract Domains
本文提出了一种轻量级的通用符号化方法来提高基于抽象解释的数值静态分析的精度。其主要思想是在将数值表达式转化为抽象传递函数之前对其进行简化。一个重要的新颖之处在于,这些简化是使用分析器动态收集的信息实时执行的。第一种方法称为“线性化”,允许将任意表达式抽象为具有区间系数的仿射形式,同时简化它们。第二种方法,称为“符号常数传播”,通过以符号方式传播指定的表达式来增强线性化的简化特征。结合在一起,这些方法增加了数值抽象域的关系水平,使它们对程序转换更强大。我们展示了如何将它们整合在经典的区间,八角形和多面体域。这些方法已被纳入Astronée静态分析仪中,用于检查嵌入式关键航空电子软件中是否存在运行时错误。我们提出了一个实验证明其实用性。
2007-03-16 cs.PL
Static Analysis Under Non-Deterministic Program Assumptions
本文提出一种非确定性程序假设下的静态分析方法,通过引入局部程序假设来提高分析精度,从而扩展其应用范围。
2026-02-07 cs.PL
Correctness Witnesses for Concurrent Programs: Bridging the Semantic Divide with Ghosts (Extended Version)
本文提出一种基于幽灵的并发程序正确性见证格式,使交错语义与线程模块化语义下的见证有效性一致,并在SV-COMP基准上验证了其可行性。
2024-11-25 cs.PL
OpenTracer: A Dynamic Transaction Trace Analyzer for Smart Contract Invariant Generation and Beyond
针对现有智能合约交易动态分析开源工具无法全面追踪完整交易信息的问题,本文提出OpenTracer工具,可完整追踪执行步骤,已用于分析35万余笔以太坊交易并推断出23类不变量,且已完全开源。
2024-07-14 cs.CR cs.PL cs.SE
Agentic Interpretation: Lattice-Structured Evidence for LLM-Based Program Analysis
University of Southern California, Los Angeles, California, USA(美国南加州大学)
本文提出代理解释框架,结合格结构静态分析与LLM程序推理,通过分解分析目标为局部断言并跟踪LLM判断,改进程序分析的灵活性和准确性。
2026-05-12 cs.AI cs.PL cs.SE
Program Analysis with Local Policy Iteration
我们提出了一种新的算法,用于推导数值不变量,结合了最大策略迭代的精度与传统Kleene迭代的灵活性和可扩展性。它在可配置程序分析(CPA)框架中定义,因此允许分析间通信。它使用可调块编码来遍历无循环的程序部分,可能包含分支,而不引入额外的抽象。我们的技术操作在任何模板线性约束域,包括区间和八角形域;模板也可以从程序源代码中导出。的实施进行了评估,从软件验证比赛(SV-Comp)的一组基准。它可以与最先进的分析仪竞争。
2015-11-03 cs.LO cs.PL
Eventual Linear Ranking Functions
程序终止性是程序分析中的一个研究热点。在过去的几年里,已经见证了用于程序设计语言(如C和Java)的终止分析器的发展,其具有显著的精度和性能。这些系统在很大程度上是基于来自声明式约束编程领域的技术和工具。在本文中,我们首先回顾了一个算法的基础上法卡斯引理发现线性排名功能证明终止的某一类循环。然后,我们提出了一个扩展的方法来显示存在的最终线性排名功能,即,线性函数,在循环的有限展开之后成为排名函数。证明了算法的正确性和完备性。
2013-06-08 cs.PL
Synthesizing Abstract Transformers
本文讨论了自动创建抽象Transformers的问题。我们提出的方法以类似于$\textit{yacc}$自动构造解析器的方式自动构造静态分析器。我们的方法对待的问题作为一个程序合成问题。用户提供(i)给定操作$\textit{op}$的具体语义,(ii)分析器要使用的抽象域A,以及(iii)域专用语言$L$的语义的规范,其中抽象Transformer要被表达。作为输出,我们的方法在抽象域A中为$\textit{op}$创建了一个抽象Transformer,用$L$表示(“A上的$\textit{op}$的$L$ -Transformer”)。此外,所获得的抽象Transformer是用于A上的$\textit{op}$的最精确的$L$ -Transformer;也就是说,不存在严格更精确的用于A上的$\textit{op}$的其他$L$ -Transformer。我们在一个名为AMURTH的工具中实现了我们的方法。我们使用AMURTH来创建用于两个现有分析仪的替换抽象Transformers,并获得了基本相同的性能。然而,当我们将现有的Transformers与使用AMURTH获得的Transformers进行比较时,我们发现现有的Transformers中有四个不可靠,这表明使用手动创建的Transformers存在风险。
2022-08-15 cs.PL
Thread-Modular Static Analysis for Relaxed Memory Models
提出了一种内存模型感知的静态程序分析方法,用于精确分析运行在具有弱一致性模型(如x86-TSO、SPARC-PSO和SPARC-RMO)的处理器上的并发软件的行为。在我们的方法的中心是一个统一的框架,用于决定线程间干扰的可行性,以避免传播虚假的数据流在静态分析,从而提高静态分析器的性能。我们制定的检查干扰的可行性作为一组数据库规则,这是有效的解决和一般足以捕捉一系列的硬件级内存模型。与现有技术相比,我们的方法可以显着减少虚假警报的数量,以及不健全的证据。我们实现了该方法,并评估了一个大的多线程的C程序集。我们的实验表明,该方法显着优于国家的最先进的技术在准确性方面只有适度的运行时开销。
2017-09-28 cs.PL cs.SE
Functional Logic Program Transformations
Institut für Informatik, Kiel University(基尔大学);University of Portland(波特兰大学)
本文探讨了函数逻辑编程在实现程序变换中的优势,通过非确定性操作与确定性方法的对比,评估了Curry语言及其中间表示FlatCurry的性能。
2026-01-19 cs.PL
Shared-Context Batched Satisfiability
The State Key Laboratory of Blockchain and Data Security, Zhejiang University(浙江大学区块链与数据安全国家重点实验室)
针对程序分析中共享上下文的批量SMT查询问题,形式化为共享上下文批量可满足性,提出Core-Literal Filter算法,并评估了三种策略的优劣。
2026-06-23 cs.PL
Synthesizing Program-Specific Static Analyses
设计一个静态分析通常是一项实质性的工作,需要在程序分析和程序分析领域的大量专业知识,以及大量的开发资源。因此,大多数程序分析都以普遍感兴趣的属性为目标(例如,不存在空指针解引用)或几乎如此(例如,死锁自由)。然而,许多可以从静态检查中受益的有趣的程序属性是特定于单个程序的,或者有时是特定于使用某个库的程序的。将程序分析和验证专家投入到这些问题中是不切实际的。我们建议,而不是工作的程序分析的基于实例的合成在很好理解的领域,如类型限定符系统和效果系统。这些系统阻止的问题类别背后的动态行为对应于缺乏静态分析专业知识的开发人员可以容易地提供的示例(数据流路径或堆栈跟踪)。
2018-10-15 cs.PL
What Programs Want: Automatic Inference of Input Data Specifications
如今,随着机器学习软件迅速渗透到我们的社会中,我们越来越容易受到数据预处理或训练软件中的编程错误以及数据本身错误的影响。在本文中,我们提出了一个静态形状分析框架的输入数据的数据处理程序。我们的分析会自动推断数据处理程序读取的数据的结构和值的必要条件。我们的框架建立在一个家庭的底层抽象域,扩展到间接的原因,而不是简单的推理程序变量的输入数据。这些抽象域的选择是分析的参数。我们描述了从现有的抽象域构建的各种实例。所提出的方法是在一个开源的Python程序的静态分析器。我们展示了其潜力的一些代表性的例子。
2020-07-21 cs.LO cs.PL
pymwp: A Tool for Guaranteeing Complexity Bounds for C Programs
复杂性分析提供了程序运行时行为的保证,但现有的自动化技术仍然无法分析大类程序,mwp流分析避开了现有方法的许多困难,并提供了有趣的特征,如组合性,多变量边界,适用于非终止程序。它分析资源使用情况,并确定程序的变量增长率是否仅与其输入大小多项式相关。这听起来然而,微积分是计算昂贵的操作,并提供没有反馈,如果程序没有多项式bounds.That两个默认值在以前的工作中解决,并准备为我们在这里介绍的工具:pymwp,一个静态复杂性分析器为C程序的基础上,我们改进的mwp流分析。
2023-03-20 cs.CC cs.LO cs.PL
Static Analysis of File-Processing Programs using File Format Specifications
处理驻留在文件中的数据的程序广泛用于各种领域,例如银行,医疗保健和网络流量分析。在软件验证和转换任务的背景下,对这些程序进行精确的静态分析是一个具有挑战性的问题。我们的主要见解是,文件处理程序的静态分析可以更有用的,如果这些程序的输入文件格式的知识是提供给分析。我们提出了一个通用的框架,它能够执行任何给定的底层抽象解释的程序,同时限制的注意力分析程序路径时,可能是可行的程序的输入符合给定的文件格式规范。我们描述了我们的方法的实现,并提出了实证结果,使用真实和现实的程序,显示我们的方法如何使新的验证和转换任务,也提高了标准分析问题的精度。
2015-04-03 cs.PL
Size-Change Termination as a Contract
终止性是一个重要的但不可判定的程序属性,这导致了大量的静态方法保守预测或强制终止的工作。其中一种方法是Lee、Jones和Ben-Amram的大小变化终止方法,它分为两个阶段:(1)将程序抽象为“大小变化图”,(2)检查这些图的大小变化性质:存在导致无限递减序列的路径。我们转置这两个阶段的操作语义,占运行时执行的大小更改属性,推迟(或完全避免)程序抽象。这种选择有两个关键的后果:(1)大小变化终止可以在运行时检查和(2)终止可以被重新表述为使用现有的系统抽象方法分析的安全属性。我们制定运行时的大小变化检查合同的风格Findler和Felleisen。结果恭维现有的合同,强制执行部分正确性规范,以获得合同的总正确性。我们的方法结合了鲁棒性的大小变化的原则终止与运行时提供的精确信息。它具有可调的开销,并且可以检查非终止性,而无需静态检查中所需的保守性。为了获得一个健全的和可计算的终止分析,我们直接应用现有的抽象解释技术的操作语义,避免了需要自定义的抽象终止。由此产生的分析仪与现有的专用分析仪相比具有竞争力。
2019-04-25 cs.PL
Failure-Directed Program Trimming (Extended Version)
本文介绍了一种新的程序简化技术,称为程序修剪,旨在提高安全检查工具的可扩展性和精度。给定程序${\mathcal P}$,程序修整生成新程序${\mathcal P}'$,使得${\mathcal P}$和${\mathcal P}'$是同等安全的(即,${\mathcal P}'$有bug当且仅当${\mathcal P}$有bug时),但${\mathcal P}'$的执行路径比${\mathcal P}$少。由于许多程序分析器是敏感的执行路径的数量,程序修剪有可能提高安全检查工具的有效性。除了引入程序修剪的概念,本文还提出了一个轻量级的静态分析,可以作为一个预处理步骤,删除程序路径,同时保持等安全性。我们已经实现了所提出的技术在一个工具,称为修剪和评估它的上下文中的两个程序分析技术,即抽象解释和动态符号执行。我们的实验表明,程序修剪显着提高了这两种技术的有效性。
2017-06-14 cs.PL cs.SE
Naturalistic Static Program Analysis
静态程序分析开发是一项重要且耗时的任务。我们提出了一个框架,通过它开发人员可以定义静态程序分析在自然语言。我们展示了这个框架的应用程序,以确定密码学在Java程序中的误用,我们讨论了它如何促进静态程序分析开发人员。
2023-01-12 cs.CR cs.PL cs.SE
Logics for XML
本文描述了XML处理语言的静态分析系统的理论和实践基础。该系统依赖于一个不动点的时间逻辑与逆,来自μ演算,其中模型是有限的树。这种演算的表现力足以捕捉规则的树类型以及树中的多向导航,同时具有单一的指数时间复杂度。具体地说,证明了该逻辑的可判定性在时间上为2^O(n),其中n是输入公式的大小。主要的XML概念被线性地转换为逻辑:XML导航和节点选择语义,以及常规树语言(包括DTD和XML模式)。基于这些嵌入,在XML应用程序中的几个主要重要的问题被减少到满足的逻辑。这些问题包括包含、空、等价、重叠、覆盖、存在或不存在常规树类型约束以及带注释查询的静态类型检查。然后重点是一个健全的和完整的算法来决定逻辑,以及详细的复杂性分析,和关键的实现技术,以建立一个有效的求解器。使用该系统的完整实现的实际实验。该系统似乎是有效的,在实践中的几个现实的情况。这项工作的主要应用是一个新的静态分析器类的程序设计语言使用的XML表达式和XML类型注释(输入和输出)。这样的分析器允许在编译时确保有价值的属性,如类型安全和优化,以实现更安全和更有效的XML处理。
2014-05-24 cs.DB cs.LO cs.PL
Analyzing Smart Contracts: From EVM to a sound Control-Flow Graph
EVM语言是一种简单的基于堆栈的语言,具有256位的字,EVM和其他虚拟机语言(如Java Bytecode或.Net程序的CLI)之间有一个显著的区别:使用堆栈保存跳转地址,而不是在跳转指令的代码中显式地保存跳转地址。静态分析器需要EVM程序的完整控制流图(CFG),以便能够表示其所有执行路径。此报告解决了通过静态分析获得精确和完整的堆栈敏感CFG的问题,克隆可能使用执行堆栈的不同状态执行的块。证明了分析的合理性。
2020-10-05 cs.PL
Static Trace-Based Deadlock Analysis for Synchronous Mini-Go
我们考虑的问题,静态死锁检测程序在Go程序设计语言,利用同步通道通信。在我们的分析中,用fork操作符扩展的正则表达式捕获程序的通信行为。从一个简单的标准,特点的痕迹无死锁程序,我们开发了基于自动机的方法来检查死锁自由。该方法的实施和评价与一系列的例子。
2016-09-02 cs.PL
cTI: A constraint-based termination inference tool for ISO-Prolog
我们提出了cTI,第一个系统的通用左终止推理的逻辑程序。终止性推理推广了终止性分析和检验。传统上,终止分析器试图证明给定类的查询终止。这个类必须提供给系统,例如通过用户注释的方式。此外,每次更新感兴趣的查询类时,都必须重新进行分析。相反,终止推理既不需要用户注释,也不需要重新计算。在这种方法中,立即推断所有谓词的终止类。我们描述了CTI的体系结构,并报告了一个广泛的实验评估系统,包括许多经典的例子,从逻辑编程终止文学和几个Prolog程序的体面的大小和复杂性。
2003-09-16 cs.PL
Static Analysis for Probabilistic Programs
概率编程是统计机器学习的一个强大的抽象。将静态分析方法应用于概率程序,可以优化学习过程,自动验证模型的性质,改善用户编程界面。这个领域的静态分析的概率规划(SAPP)是年轻的和无组织的,由一个星座的技术与各种目标和限制。这项工作的主要目的是在一个组织结构和背景下综合SAPP领域的主要贡献。我们提供了技术背景的静态分析和概率编程,建议概率程序设计语言的功能分类法,并分析在SAPP领域的主要思想的适用性。我们的结论是,虽然目前的概率程序的静态分析技术有实际的局限性,有一些未来的方向具有很大的潜力,以改善统计机器学习的状态。
2019-09-10 cs.LG cs.PL stat.ML
Operational methods in semantics
本文以编程语言操作语义为核心,从抽象计算步骤出发构建语义等价、规范语言与静态分析,展示了该方法在语言实现与程序验证中的有效性与可扩展性。
2025-10-14 cs.LO cs.PL
Neural Program Generation Modulo Static Analysis
Rice University(莱斯大学);UT Austin(德克萨斯大学奥斯汀分校);University of Wisconsin(威斯康星大学)
最先进的源代码神经模型往往在生成单个表达式和代码行时进行评估,并且通常在生成整个方法体等长期任务时失败。我们建议使用弱监督静态程序分析器来解决这个缺陷。我们的神经符号方法允许深度生成模型通过调用静态分析工具来符号化地计算它已经生成的代码中的长距离语义关系。在训练过程中,模型观察这些关系,并学习生成以它们为条件的程序。我们应用我们的方法来生成整个Java方法的问题,给出了包含该方法的类的其余部分。我们的实验表明,该方法大大优于国家的最先进的变压器和模型,明确尝试学习程序语义在这项任务中,无论是在生产程序的基本语义错误和语法匹配的地面真相。
2021-11-22 cs.AI cs.LG cs.PL
QChecker: Detecting Bugs in Quantum Programs via Static Analysis
本文提出了一种名为QChecker的静态分析工具,通过基于AST提取程序信息和基于模式检测错误的两个模块,有效检测Qiskit量子程序中的错误。
2023-04-10 cs.PL cs.SE
Closing the Gap -- Formally Verifying Dynamically Typed Programs like Statically Typed Ones Using Hoare Logic -- Extended Version --
动态类型的面向对象语言使程序员能够编写优雅的、可重用的和可扩展的程序。然而,在当前的程序验证方法中,静态类型信息的缺失造成了显著的开销。我们的建议有两个方面:首先,我们提出了一个抽象层隐藏的复杂性动态类型时,提供了足够的类型信息。由于这本质上造成了验证静态类型程序的错觉,因此所需的工作量与静态类型的情况相当。其次,我们展示了如何所需的类型信息可以有效地获得所有类型安全的程序集成到霍尔逻辑的类型推断算法,产生一个半自动的过程,让用户专注于那些真正需要他的注意力的打字问题。虽然应用类型推断的动态类型的程序是一个行之有效的方法,现在,我们的方法补充了传统的软类型系统,除了修改程序(静态类型)和接受存在的运行时类型错误(动态类型)提供正式的证明作为第三种选择。
2015-01-12 cs.LO cs.PL cs.SE
Synthesizing Imperative Programs from Examples Guided by Static Analysis
Korea University(高丽大学)
我们提出了一种新的算法,综合了必要的程序介绍编程课程。给定一组输入输出示例和一个部分程序,我们的算法生成与每个示例一致的完整程序。我们的主要思想是结合枚举程序合成和静态分析,积极修剪出一个大的搜索空间,同时保证找到,如果有的话,一个正确的解决方案。我们已经实现了我们的算法在一个工具,称为SIMPL,并评估它的30个问题中使用的入门编程课程。结果表明,SIMPL能够在平均6.6秒内解决基准问题。
2017-06-13 cs.AI cs.PL
Static Race Detection and Mutex Safety and Liveness for Go Programs (extended version)
Go是一种流行的并发程序设计语言,这要归功于它能够有效地结合并发和系统编程。在Go程序中,许多并发错误可能是由数据竞争和通信问题引起的。在本文中,我们开发了一种基于行为类型的理论来静态检测Go程序中的数据竞争和死锁。我们首先使用Go内存模型中定义的happens-before关系,在Go程序模型上指定锁安全性、活动性和数据竞争属性。我们表示这些属性的程序中的$μ$演算模型的类型,并验证它们使用类型级别的模型检查。然后,我们扩展了框架,以考虑Go的通道,并实现了一个静态验证工具,可以检测并发错误。据我们所知,这是Go语言的第一个此类静态验证框架,统一分析了由共享内存访问和异步消息传递通信混合引起的并发错误。
2021-11-18 cs.LO cs.PL
Static Analysis of Lockless Microcontroller C Programs
在不加锁的情况下并发访问共享数据通常会受到竞争条件的影响,从而导致数据不一致或损坏。然而,有些程序通过利用特定硬件上某些操作的原子性,在没有锁定的情况下正确运行。在本文中,我们描述了如何精确地分析无锁微控制器C程序中断考虑到硬件架构。我们评估这种技术在一个基于八边形的值范围分析使用基于访问的本地化,以提高效率。
2012-11-27 cs.AR cs.PL
Live, Rich, and Composable: Qualities for Programming Beyond Static Text
推动编程超越静态文本代码的努力已经寻求向编程注入多种不同的品质。一个长期公认的特性是活跃性:在程序编辑时为程序员提供关于程序动态行为的深入反馈。第二个品质,长期探索但缺乏共同的艺术术语,是丰富性:允许程序员通过特定领域的表示和交互来编辑程序,而不仅仅是通过文本。在本文中,我们映射这两个品质之间的关系,并调查过去的工作,证明他们。我们观察到,结合了活性和丰富性的系统往往是以牺牲传统编程的一个基本品质为代价的:可组合性。我们认为,通过结合活性,丰富性和可组合性,编程系统可以更好地捕捉交互式计算的全部潜力,而不会留下传统代码的表现力。
2023-03-12 cs.HC cs.PL cs.SE