ARCHER
- 1 September 2003
- conference paper
- Published by Association for Computing Machinery (ACM)
- Vol. 28 (5) , 327-336
- https://doi.org/10.1145/940071.940115
Abstract
Memory corruption errors lead to non-deterministic, elusive crashes. This paper describes ARCHER () a static, effective memory access checker. ARCHER uses path-sensitive, interprocedural symbolic analysis to bound the values of both variables and memory sizes. It evaluates known values using a constraint solver at every array access, pointer dereference, or call to a function that expects a size parameter. Accesses that violate constraints are flagged as errors. Those that are exploitable by malicious attackers are marked as security holes.We carefully designed ARCHER to work well on large bodies of source code. It requires no annotations to use (though it can use them). Its solver has been built to be powerful in the ways that real code requires, while backing off on the places that were irrelevant. Selective power allows it to gain efficiency while avoiding classes of false positives that arise when a complex analysis interacts badly with statically undecidable program properties. ARCHER uses statistical code analysis to automatically infer the set of functions that it should track --- this inference serves as a robust guard against omissions, especially in large systems which can have hundreds of such functions.In practice ARCHER is effective: it finds many errors; its analysis scales to systems of millions of lines of code and the average false positive rate of our results is below 35%. We have run ARCHER over several large open source software projects --- such as Linux, OpenBSD, Sendmail, and PostgreSQL --- and have found errors in all of them (118 in the case of Linux, including 21 security holes).Keywords
This publication has 11 references indexed in Scilit:
- CSSVPublished by Association for Computing Machinery (ACM) ,2003
- Effective use of Boolean satisfiability procedures in the formal verification of superscalar and VLIW microprocessorsJournal of Symbolic Computation, 2003
- A system and language for building system-specific, static analysesPublished by Association for Computing Machinery (ACM) ,2002
- Extended static checking for JavaPublished by Association for Computing Machinery (ACM) ,2002
- CCuredPublished by Association for Computing Machinery (ACM) ,2002
- Predicate abstraction for software verificationPublished by Association for Computing Machinery (ACM) ,2002
- Bugs as deviant behaviorPublished by Association for Computing Machinery (ACM) ,2001
- ABCDPublished by Association for Computing Machinery (ACM) ,2000
- Interprocedural modification side effect analysis with pointer aliasingPublished by Association for Computing Machinery (ACM) ,1993
- The Omega test: a fast and practical integer programming algorithm for dependence analysisPublished by Association for Computing Machinery (ACM) ,1991