No description
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-05-06 12:38:02 +02:00
arch-rs fixup: tests: lint fixes 2026-01-19 07:58:23 +01:00
esil-rs rune: explorer error handling 2026-01-21 05:46:00 +01:00
radeco fixup: radeco: lint fixes 2026-01-19 07:58:23 +01:00
radeco-lib The old bin.minstr is now bin.str.min 2026-05-06 12:38:02 +02:00
rune rune: remove explicit panic 2026-02-03 22:41:59 +01:00
scripts Radeco - integrate into the Travis build 2019-06-18 17:03:20 +08:00
specs Initial commit towards CFG and SSA Unification 2015-12-10 00:45:33 +05:30
.appveyor.yml Update dependencies, CI fixes 2020-03-31 16:11:39 +08:00
.gitignore fixup: compiler error fixes 2026-01-18 06:11:24 +01:00
.travis.yml Update dependencies, CI fixes 2020-03-31 16:11:39 +08:00
Cargo.toml Improve radeco integration 2019-06-18 17:03:20 +08:00
README.md Fix AppVeyor badge 2019-06-18 23:07:52 +08:00

Radeco

Appveyor Status Build Status Coverage Status

A radare2 based binary analysis framework consisting from the Radeco client, in ./radeco/ directory, ./radeco-lib/ - library where whole high-level logic is located, ./arch-rs/ to abstract the architectures intricacies, ./esil-rs/ to parse the radare2 ESIL, and ./rune/ to perform symbolic execution on top of ESIL. Radeco uses its own intermediate representation, which also has a text representation - RadecoIL.

Is this ready yet?

Nope. There is still a ton of work to do before this can be considered ready. That said, parts of the library are already stable enough to write your own analysis passes and use in your projects.

Usage

Build like a regular rust project, using cargo:

cargo build

To include in your rust project, add to Cargo.toml:

[dependencies.radeco-lib]
git = "https://github.com/radare/radeco"

See examples for usage.

Trace Log

To debug, you may want to enable trace output from various parts of radeco. Build with trace_log feature to enable this:

cargo build --features 'trace_log'

Profiling

Requires gperftools . Check the cpuprofiler repository for more details.

To enable profiling, build with profile feature:

cargo build --features 'profiler'

Wrap the code you want to profile with:

use cpuprofiler::PROFILER;

PROFILER.lock().unwrap().start("./my-prof.profile").unwrap();
// Code you want to sample goes here!
PROFILER.lock().unwrap().stop().unwrap();

Radeco-lib project layout

src/
├── analysis/               Analyzers on SSA form Radeco-IR
├── backend/                Analyzers on C-pseudo code
│   ├── ctrl_flow_struct/   Implementation of `No More Gotos`
│   └── lang_c/             Coverter of C-pseudo code from RadecoFunction
├── frontend/               Loaders of RadecoFunction, RadecoProject
├── middle/                 Constructer, writer, parser of Radeco-IR
│   ├── regfile/            Profile of registers
│   └── ssa/                SSA form of Radeco-IR
└── utils/                  Logger, etc

License

Licensed under The BSD 3-Clause License. Please check COPYING file for complete license.