Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Document the relation between AST/Frontend/FrontendMixin/Backend #84

Closed
ltfish opened this issue Jun 12, 2018 · 2 comments
Closed

Document the relation between AST/Frontend/FrontendMixin/Backend #84

ltfish opened this issue Jun 12, 2018 · 2 comments

Comments

@ltfish
Copy link
Member

ltfish commented Jun 12, 2018

The following is quoted from @zardus in the Slack channel. We should put them in the documentation.

generally speaking:

  • claripy abstracts expressions using claripy.AST objects
  • Frontends provide different paradigms for handling those expressions. The FullFrontend (should really be named SolverFrontend or something) handles them using something like an SMT solver, LightFrontend (should really be named ApproximationFrontend or something) handles them by using an abstract (and approximating) data domain.
  • each Frontend needs to, at some point, do actual operation and evaluations on the AST. ASTs don't support this on their own. Instead, Backends translate ASTs into BackendObjects (i.e., python primitives, Z3 expressions, strided intervals for VSA, etc) and also handle the appropriate state-tracking objects (such as Z3 solvers)
  • Frontends take ASTs as inputs and use Backends to backend.convert() those ASTs into BackendObjects that can be evaluated and otherwise reasoned about
  • FrontendMixins customize the operation of Frontends. For example, ModelCacheMixin caches solutions from an SMT solver
@zardus
Copy link
Member

zardus commented Jun 12, 2018

Done yesterday :-)

angr/angr-doc@043e50a

This might be a good use-case for some sort of diagram.

@ltfish
Copy link
Member Author

ltfish commented Jun 12, 2018

Awesome!

@ltfish ltfish closed this as completed Jun 12, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants