# retdec-rust [![docs.rs](https://docs.rs/retdec/badge.svg)](https://docs.rs/retdec) [![crates.io](https://img.shields.io/crates/v/retdec.svg)](https://crates.io/crates/retdec) A Rust library and tools providing easy access to the [retdec.com](https://retdec.com) decompilation service through their public [REST API](https://retdec.com/api/). You can either incorporate the library in your own tools: ```rust extern crate retdec; use retdec::{Decompiler, DecompilationArguments, File, Settings}; let decompiler = Decompiler::new( Settings::new() .with_api_key("YOUR-API-KEY") ); let mut decompilation = decompiler.start_decompilation( DecompilationArguments::new() .with_input_file(File::from_path("hello.exe")?) )?; decompilation.wait_until_finished()?; let output_code = decompilation.get_output_hll_code()?; print!("{}", output_code); ``` or you can use the provided tool for stand-alone decompilations: ```text $ decompiler -k YOUR-API-KEY hello.exe ``` Either way, you get the decompiled C code: ```text // // This file was generated by the Retargetable Decompiler // Website: https://retdec.com // Copyright (c) 2017 Retargetable Decompiler // int main(int argc, char ** argv) { printf("Hello, world!\n"); return 0; } ``` Additionally, the crate provides access to the [fileinfo](https://retdec.com/api/docs/fileinfo.html) service (analysis of binary files). ## Status Currently, the crate only provides very basic support for the [decompilation](https://retdec.com/api/docs/decompiler.html) and [file-analyzing](https://retdec.com/api/docs/fileinfo.html) services. **Support for more features is under way as the crate is under development.** A summary of all the currently supported parts of the [retdec.com's API](https://retdec.com/api/docs/index.html) is available [here](https://github.com/s3rvac/retdec-rust/tree/master/STATUS.md). ## Installation To include the crate into your project so you can use it as a library, add the following lines into your `Cargo.toml` file: ``` [dependencies] retdec = "0.1.0" ``` If you want to use the development version (current `master` branch), use these two lines instead: ```text [dependencies] retdec = { git = "https://github.com/s3rvac/retdec-rust" } ``` If you just want to use the command-line tools (`decompiler`, `fileinfo`), install the project as follows: ```text cargo install retdec ``` ## Documentation An automatically generated API documentation is available here: * [master](https://projects.petrzemek.net/retdec-rust/doc/master/retdec/index.html) (development version) * [0.1.0](https://docs.rs/retdec/0.1.0/retdec/) (latest stable version) ## Contributions Contributions are welcome. Notes: * To generate API documentation, run ```text cargo doc --lib --no-deps ``` * To run unit tests, execute ```text cargo test --lib ``` * To run documentation tests, execute ```text cargo test --doc ``` * To run all tests, including integration tests, execute ```text RETDEC_API_KEY=YOUR-API-KEY cargo test ``` *Note*: Before running integration tests, you need to set the `RETDEC_API_KEY` environment variable to your API key. Integrations tests communicate with the `retdec.com`'s API, which is why a valid API key is needed. ## License Licensed under either of * Apache License, Version 2.0, ([LICENSE-APACHE](https://github.com/s3rvac/retdec-rust/tree/master/LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0) * MIT License ([LICENSE-MIT](https://github.com/s3rvac/retdec-rust/tree/master/LICENSE-APACHE) or http://opensource.org/licenses/MIT) at your option. ## Access from Other Languages If you want to access the [retdec.com](https://retdec.com) decompilation service from other languages, check out the following projects: * [retdec-python](https://github.com/s3rvac/retdec-python) - A library and tools for accessing the service from Python. * [retdec-cpp](https://github.com/s3rvac/retdec-cpp) - A library and tools for accessing the service from C++. * [retdec-sh](https://github.com/s3rvac/retdec-sh) - Scripts for accessing the service from shell.