evoasm

An AIMGP (Automatic Induction of Machine code by Genetic Programming) engine


Keywords
aimgp, genetic-algorithm, genetic-programming, jit, program-synthesis, ruby, x64, x86-64
License
AGPL-3.0
Install
gem install evoasm -v 0.1.0.pre1

Documentation

Evoasm

Description

Evoasm is an AIMGP (Automatic Induction of Machine code by Genetic Programming) engine.

You give it a set of examples, that is, several input/output pairs, that describe a program's behavior. It will then try to come up with a short program (in the form of machine code) that follows your specification, by means of genetic programming. Evoasm contains a JIT that executes the generated machine code on the fly.

Currently, the only supported architecture is x86-64.

Features

  • Fast JIT
  • Non-linear control flow
  • x86-64 up to AVX2 (no FPU)
  • Lightweight backend C library with no third-party dependencies
  • Ruby bindings

Installation

$ gem install evoasm --pre

Requirements

  • Ruby (MRI >= 2.3, JRuby >= 9.1.2)
  • Capstone for disassembling (optional).
  • Graphviz (libgraphviz) for visualizing programs (optional).
  • Gnuplot for visualizing loss functions (optional)
  • POSIX-compliant OS (Linux and Mac OS X should both work).

Documentation

Please see the API documentation or have a look at the examples.

Contributing

  1. Fork it ( https://github.com/furunkel/evoasm/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

License

AGPL-3.0