Giter Club home page Giter Club logo

symbolic-execution's Introduction

Timelines

  • Symbolic execution timeline highlights some major tools and ideas of pure symbolic execution, dynamic symbolic execution (concolic) as well as related ideas of model checking, SAT/SMT solving, black-box fuzzing, taint data tracking, and other dynamic analysis techniques.
  • Solving timeline highlights major SAT and SMT techniques and solvers (including solvers not related to symbolic execution).

There is also temporary timeline of some tools not displayed in the diagrams above.

Symbolic execution

⚠️ PNG preview could be outdated. See symbolic-execution.svg for the latest version.

Preview

SAT and SMT solving

⚠️ PNG preview could be outdated. See solving.svg for the latest version.

Preview

Building PNG or PDF

Please, install fonts for correct SVG display:

Use Inkscape to build PNG or PDF. Example for symbolic-execution diagram:

  • PNG: inkscape diagram/symbolic-execution.svg --export-png diagram/symbolic-execution.png --export-dpi 150,
  • PDF: inkscape diagram/symbolic-execution.svg --export-pdf diagram/symbolic-execution.pdf.

Design

We use colors from GitHub Linguist for input languages.

Contribution

Feel free to suggest changes or add new information. If your change is minor (like typo), you can just edit source code of symbolic-execution.svg. If change is major, you are encouraged to either create new issue, or edit symbolic-execution.svg (Inkscape editor is strongly recommended due to source code issues).

Before commiting

Please, use SVGO for diagram optimization before commiting (to get more clean diff):

svgo diagram/symbolic-execution.svg \
    --pretty \
    --enable=sortAttrs \
    --disable=removeEditorsNSData \
    --disable=cleanupIDs \
    --indent=2

Tools structure

File tools.yml contains tools YAML description. E.g.:

DART:
  since: 2005
  input: C
  uses: lp_solve
  based: CIL
  description: random testing and direct execution

symbolic-execution's People

Contributors

enzet avatar rhelmot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

symbolic-execution's Issues

Challenge: symbolic execution with higher-order values

One challenge the article omits is that of handling behavioral values such as first-class functions. This is addressed in the following papers:

  • Higher-Order Symbolic Execution via Contracts. Sam Tobin-Hochstadt and David Van Horn.
    The ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA'12), Tuscon, Arizona, October 2012. http://dl.acm.org/citation.cfm?id=2384655

  • Soft Contract Verification. With Phuc C. Nguyen, Sam Tobin-Hochstadt, and David Van Horn.
    The ACM SIGPLAN International Conference on Functional Programming (ICFP'14), Gothenburg, Sweden, September 2014. http://dl.acm.org/citation.cfm?id=2628156

  • Relatively Complete Counterexamples for Higher-Order Programs. Phuc C. Nguyen and David Van Horn. The 36th ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI'15), Portland, Oregon, June, 2015. https://dl.acm.org/citation.cfm?id=2737971

Add DyTa

See DyTa: Dynamic Symbolic Execution Guided with Static Verification Results.

Symbolic Execution for Concurrent Programs

ConCrest (or just Crest https://www.burn.im/crest/)

  • Farzan, Azadeh, et al. "Con2colic testing." Proceedings of the 2013 9th Joint Meeting on Foundations of Software Engineering. ACM, 2013.

Cortex (https://github.com/nunomachado/cortex-tool)

  • Machado, Nuno, Brandon Lucia, and Luís Rodrigues. "Production-guided concurrency debugging." Proceedings of the 21st ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming. ACM, 2016.

Conc-iSE

  • Guo, Shengjian, Markus Kusano, and Chao Wang. "Conc-iSE: Incremental symbolic execution of concurrent software." Automated Software Engineering (ASE), 2016 31st IEEE/ACM International Conference on. IEEE, 2016.

Add ponce for IDA

https://github.com/illera88/Ponce

"Provides users the ability to perform taint analysis and symbolic execution over binaries in an easy and intuitive fashion. With Ponce you are one click away from getting all the power from cutting edge symbolic execution. Entirely written in C/C++"

Add BuzzFuzz

Main paper: Taint-based Directed Whitebox Fuzzing.

Inclusion of foundational Symbolic Execution research

Some extend the honor of "first" to a symbolic execution program called EFFIGY (1976) . Others acknowledge a program called SELECT (1976).

Both would be great additions who also contain bibliographies with lots of references to earlier work in program verification (most notably the verification of avionics in the United States Air Force - a kind of proto-cyberwarfare fear that the Russians, known for their technical prowess, could "hack" airplanes).

It's unclear how you might combine more modern innovations like "VSIDS", but it would be fantastic to see such a thing as well.

Thanks for putting this together!!

Some additions

This is awesome! Some minor additions (as a disclaimer, I worked on all of these projects, but I feel they're worth mentioning nonetheless as the first is, to the best of my knowledge, the first AEG system of its kind, while the second two are the first reverse engineering/symex hybrid tools of their kind). I would make the chances myself but I'm fairly certain I would break everything ;)

Sep 2009: Thesis publication: "Automatic Generation of Control Flow Hijacking Exploits for Software Vulnerabilities" - Utilised symbolic execution to generate exploits. The implementation was titled AXGEN.
(Authors: S. Heelan, D. Kroening @ University of Oxford)

Dec 6th 2010: Immunity Debugger v1.8 released, embedding a symbolic execution engine into Immunity Debugger for use during reverse engineering (http://seclists.org/dailydave/2010/q4/23) (Authors: P. Sole, S. Heelan @ Immunity Inc.)

Dec 2nd 2013: ILLITHID (also by Immunity, DARPA funded), a standalone tool focused on finding software vulnerabilities combining compositional symbolic execution, function annotations and manual reverse engineering https://lists.immunityinc.com/pipermail/dailydave/2013-December/000539.html (Authors: S. Heelan, P. Sole, R. Huizer @ Immunity Inc)

Add string solvers

Add string solvers:

  • Z3str → Z3str2 → Z3str3,
  • CVC4,
  • Norn,
  • S3 → S3P,
  • Stranger → ABC,
  • DPRLE,
  • Rex,
  • Hampi.

Add Kudzu

Kudzu, a symbolic execution framework for JavaScript (paper).

Add paper

Add Generalized symbolic execution for model checking and testing.

Floating-Point Numbers

Here are a few papers/tools that deal with floating-point numbers. I think their addition would be interesting!

  • Lakhotia, Kiran, et al. "Flopsy-search-based floating point constraint solving for symbolic execution." IFIP International Conference on Testing Software and Systems. Springer Berlin Heidelberg, 2010.
  • https://srg.doc.ic.ac.uk/projects/klee-cl/
  • Barr, Earl T., et al. "Automatic detection of floating-point exceptions." ACM SIGPLAN Notices. Vol. 48. No. 1. ACM, 2013.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.