GithubHelp home page GithubHelp logo

rmnattas / averroes Goto Github PK

View Code? Open in Web Editor NEW

This project forked from themaplelab/averroes

0.0 0.0 0.0 1012.54 MB

Java bytecode generator for sound and precise partial program analysis

License: Eclipse Public License 2.0

Java 98.47% Scala 1.53%

averroes's Introduction

Averroes logo

Averroes is Java bytecode generator that enables sound and precise analysis of the application part of a program without analyzing its library dependencies. It achieves that by generating a placeholder/stub library for those dependencies that models the original library code with respect to:

  • class instantiations
  • callbacks to application methods
  • handled exceptions (caught or thrown)
  • field and array accesses

Dependencies

The code bas for Averroes is in the form of an Eclipse project. It is setup with the following dependencies:

  • Project dependencies (needs to be available in your Eclipse workspace)
    • Soot: you need to check out the develop branch
    • Probe: you need to check out the master branch
  • Library dependencies (ships with Averroes)

Build

Averroes uses Gradle as its build system. To build a fat JAR that includes all the dependencies, you need to run ./gradlew fatJar. This command will generate averroes-all-<version>.jar in build/libs, which you can use to run Averroes. If you'd rather generate a JAR file for Averroes itself, simply use ./gradlew jar.

Usage

jar -jar averroes.jar <required parameters> [optional parameters]

where required parameters include:
 -a,--application-jars <path>              A list of the application JAR
                                           files separated by path separator.

 -j,--java-runtime-directory <directory>   The directory that contains the
                                           Java runtime environment that
                                           Averroes should model.

 -m,--main-class <class>                   The main class that runs the
                                           application when the program
                                           executes.

 -o,--output-directory <directory>         The directory to which Averroes
                                           will write any output files/folders.

 -r,--application-regex <regex>            A list of regular expressions
                                           for application packages or classes
                                           separated by path separator. Use
                                           <package_name>.* to include classes
                                           in a package, <package_name>.** to
                                           include classes in a package and all
                                           its subpackages, ** to include the
                                           default package, <full_class_name> to
                                           include a single class.

and optional parameters include:
 -d,--dynamic-classes-file <file>          A file that contains a list of
                                           classes that are loaded
                                           dynamically by Averroes (e.g.,
                                           classes instantiated through
                                           reflection).

 -h,--help                                 Prints out this help message.

 -l,--library-jars <path>                  A list of the JAR files for
                                           library dependencies separated
                                           by path separator.

 -t,--tamiflex-facts-file <file>           A file that contains reflection
                                           facts generated for this application
                                           in the TamiFlex format.

Output

After running averroes on some input program, the output directory directory should contain the following:

  • averroes-lib-class.jar: the main averroes library class for the input program.
  • placeholder-lib.jar: the stubs averroes generates for the library classes of the given input program.
  • organized-app.jar: the original application code of the input program as is (i.e., not altered by averroes in any way).
  • organized-lib.jar: the original library code of the input program as is (i.e., not altered by averroes in any way).
  • classes: a directory that contains the class files that averroes generates.

The JAR files averroes-lib-class.jar and placeholder-lib.jar together form the placeholder library generated by averroes. So for example, if you would like to generate the call graph for a that input program using averroes, you need to supply a whole-program analysis tool (e.g., Soot) with 2 JAR files as the library: averroes-lib-class.jar and placeholder-lib.jar, and JAR file as the application: organized-app.jar.

License

Averroes is available as Open Source under the Eclipse Public License.

averroes's People

Contributors

karimhamdanali avatar dseekatz avatar olhotak avatar

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.