2015-10-13 23:21:27 +08:00
|
|
|
```
|
2019-02-02 20:20:13 +08:00
|
|
|
____ ___ ___ ___ ____ ___ ____
|
|
|
|
| _ \/ \| \/ \ _ \/ _ \ (__ \
|
|
|
|
| ( - | | ) - | ( _/ / __/
|
|
|
|
|__\__|_|__|___/__|__|_\__|___| |____|
|
2012-10-23 07:03:26 +08:00
|
|
|
|
2019-02-02 20:20:13 +08:00
|
|
|
https://www.radare.org
|
2012-10-23 07:03:26 +08:00
|
|
|
|
2019-02-02 20:20:13 +08:00
|
|
|
--pancake
|
2015-10-13 23:21:27 +08:00
|
|
|
```
|
2012-10-23 07:03:26 +08:00
|
|
|
|
2018-05-19 19:25:36 +08:00
|
|
|
|
|
|
|
|
2015-07-28 06:38:43 +08:00
|
|
|
| | |
|
2015-07-26 18:38:59 +08:00
|
|
|
|----------|---------------------------------------------------------------------|
|
2015-07-28 06:38:43 +08:00
|
|
|
| **Jenkins** | [![Build Status](http://ci.rada.re/buildStatus/icon?job=radare2)](http://ci.rada.re/job/radare2)|
|
|
|
|
| **TravisCI** | [![Build Status](https://travis-ci.org/radare/radare2.svg?branch=master)](https://travis-ci.org/radare/radare2)|
|
2016-02-29 17:41:27 +08:00
|
|
|
| **AppVeyor** | [![Build Status](https://ci.appveyor.com/api/projects/status/v9bxvsb1p6c3cmf9/branch/master?svg=true)](https://ci.appveyor.com/project/radare/radare2-shvdd)|
|
2015-07-28 06:38:43 +08:00
|
|
|
| **Coverity** | [![Build Status](https://scan.coverity.com/projects/416/badge.svg)](https://scan.coverity.com/projects/416) |
|
2018-08-24 10:09:46 +08:00
|
|
|
| **Infrastructure** | [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/741/badge)](https://bestpractices.coreinfrastructure.org/projects/741) |
|
2018-09-14 20:39:46 +08:00
|
|
|
| **Codecov** | [![codecov](https://codecov.io/gh/radare/radare2/branch/master/graph/badge.svg)](https://codecov.io/gh/radare/radare2)
|
2018-05-19 19:25:36 +08:00
|
|
|
<a href="https://repology.org/metapackage/radare2">
|
2018-09-19 04:56:50 +08:00
|
|
|
<img src="https://repology.org/badge/vertical-allrepos/radare2.svg" alt="Packaging status" align="right" width="150px">
|
2018-05-19 19:25:36 +08:00
|
|
|
</a>
|
|
|
|
|
2012-10-23 07:03:26 +08:00
|
|
|
# Introduction
|
|
|
|
|
|
|
|
r2 is a rewrite from scratch of radare in order to provide
|
2015-07-28 06:38:43 +08:00
|
|
|
a set of libraries and tools to work with binary files.
|
2012-10-23 07:03:26 +08:00
|
|
|
|
2016-04-06 22:33:51 +08:00
|
|
|
Radare project started as a forensics tool, a scriptable
|
2018-10-31 00:50:09 +08:00
|
|
|
command-line hexadecimal editor able to open disk files,
|
|
|
|
but later added support for analyzing binaries, disassembling
|
|
|
|
code, debugging programs, attaching to remote gdb servers...
|
2012-10-23 07:03:26 +08:00
|
|
|
|
2018-06-24 01:38:05 +08:00
|
|
|
radare2 is portable.
|
|
|
|
|
|
|
|
## Architectures
|
|
|
|
|
2019-03-04 04:24:09 +08:00
|
|
|
i386, x86-64, ARM, MIPS, PowerPC, SPARC, RISC-V, SH, m68k, m680x, AVR,
|
|
|
|
XAP, System Z, XCore, CR16, HPPA, ARC, Blackfin, Z80, H8/300, V810,
|
|
|
|
V850, CRIS, XAP, PIC, LM32, 8051, 6502, i4004, i8080, Propeller,
|
|
|
|
Tricore, CHIP-8, LH5801, T8200, GameBoy, SNES, SPC700, MSP430, Xtensa,
|
|
|
|
NIOS II, Java, Dalvik, WebAssembly, MSIL, EBC, TMS320 (c54x, c55x,
|
|
|
|
c55+, c66), Hexagon, Brainfuck, Malbolge, whitespace, DCPU16, LANAI,
|
|
|
|
MCORE, mcs96, RSP, SuperH-4, VAX.
|
2018-06-24 01:38:05 +08:00
|
|
|
|
|
|
|
## File Formats
|
|
|
|
|
|
|
|
ELF, Mach-O, Fatmach-O, PE, PE+, MZ, COFF, OMF, TE, XBE, BIOS/UEFI,
|
|
|
|
Dyldcache, DEX, ART, CGC, Java class, Android boot image, Plan9 executable,
|
|
|
|
ZIMG, MBN/SBL bootloader, ELF coredump, MDMP (Windows minidump),
|
|
|
|
WASM (WebAssembly binary), Commodore VICE emulator,
|
|
|
|
Game Boy (Advance), Nintendo DS ROMs and Nintendo 3DS FIRMs, various filesystems.
|
|
|
|
|
|
|
|
## Operating Systems
|
|
|
|
|
|
|
|
Windows (since XP), GNU/Linux, OS X, [Net|Free|Open]BSD,
|
2018-10-31 00:50:09 +08:00
|
|
|
Android, iOS, OSX, QNX, Solaris, Haiku, FirefoxOS.
|
2018-06-24 01:38:05 +08:00
|
|
|
|
|
|
|
## Bindings
|
|
|
|
|
|
|
|
Vala/Genie, Python (2, 3), NodeJS, Lua, Go, Perl,
|
2018-10-31 00:50:09 +08:00
|
|
|
Guile, PHP, Newlisp, Ruby, Java, OCaml...
|
2012-10-23 07:03:26 +08:00
|
|
|
|
|
|
|
# Dependencies
|
|
|
|
|
|
|
|
radare2 can be built without any special dependency, just
|
2018-10-31 00:50:09 +08:00
|
|
|
get a working toolchain (gcc, clang, tcc...) and use make.
|
2012-10-23 07:03:26 +08:00
|
|
|
|
|
|
|
Optionally you can use libewf for loading EnCase disk images.
|
|
|
|
|
2013-06-14 08:51:33 +08:00
|
|
|
To build the bindings you need latest valabind, g++ and swig2.
|
2012-10-23 07:03:26 +08:00
|
|
|
|
|
|
|
# Install
|
|
|
|
|
2014-11-23 03:13:02 +08:00
|
|
|
The easiest way to install radare2 from git is by running
|
2012-10-23 07:03:26 +08:00
|
|
|
the following command:
|
|
|
|
|
2017-05-15 07:17:29 +08:00
|
|
|
$ sys/install.sh
|
2012-10-23 07:03:26 +08:00
|
|
|
|
2015-08-31 05:26:35 +08:00
|
|
|
If you want to install radare2 in the home directory without
|
|
|
|
using root privileges and sudo, simply run:
|
|
|
|
|
2017-05-15 07:17:29 +08:00
|
|
|
$ sys/user.sh
|
2015-08-31 05:26:35 +08:00
|
|
|
|
2017-05-15 06:39:41 +08:00
|
|
|
# Building with meson + ninja
|
|
|
|
|
2018-10-02 21:23:59 +08:00
|
|
|
If you don't already have meson and ninja, you can install them
|
2018-05-30 19:17:27 +08:00
|
|
|
with your distribution package manager or with r2pm:
|
2017-05-15 08:53:10 +08:00
|
|
|
|
|
|
|
$ r2pm -i meson
|
|
|
|
|
2018-05-30 19:17:27 +08:00
|
|
|
If you already have them installed, you can run this line to
|
|
|
|
compile radare2:
|
2018-02-24 21:41:22 +08:00
|
|
|
|
2018-05-30 19:19:28 +08:00
|
|
|
$ python ./sys/meson.py --prefix=/usr --shared --install
|
2018-02-24 21:41:22 +08:00
|
|
|
|
2018-05-30 19:17:27 +08:00
|
|
|
This method is mostly useful on Windows because the initial building
|
|
|
|
with Makefile is not suitable. If you are lost in any way, just type:
|
2017-05-15 06:39:41 +08:00
|
|
|
|
2018-05-30 19:19:28 +08:00
|
|
|
$ python ./sys/meson.py --help
|
2017-05-15 06:39:41 +08:00
|
|
|
|
2017-09-29 04:06:58 +08:00
|
|
|
# Update
|
|
|
|
|
2018-10-02 21:23:59 +08:00
|
|
|
To update Radare2 system-wide, you don't need to uninstall or pull.
|
|
|
|
Just re-run:
|
2017-09-29 04:06:58 +08:00
|
|
|
|
|
|
|
$ sys/install.sh
|
|
|
|
|
2017-11-14 01:57:22 +08:00
|
|
|
If you installed Radare2 in the home directory,
|
|
|
|
just re-run:
|
|
|
|
|
|
|
|
$ sys/user.sh
|
|
|
|
|
2012-10-24 00:44:32 +08:00
|
|
|
# Uninstall
|
|
|
|
|
2018-10-02 21:23:59 +08:00
|
|
|
In case of a polluted filesystem, you can uninstall the current
|
2013-06-14 08:51:33 +08:00
|
|
|
version or remove all previous installations:
|
2012-10-24 00:44:32 +08:00
|
|
|
|
2017-05-15 07:17:29 +08:00
|
|
|
$ make uninstall
|
|
|
|
$ make purge
|
2018-08-10 22:06:41 +08:00
|
|
|
|
|
|
|
To remove all stuff including libraries, use
|
|
|
|
|
|
|
|
$ make system-purge
|
2012-10-24 00:44:32 +08:00
|
|
|
|
2016-06-09 16:45:47 +08:00
|
|
|
# Package manager
|
|
|
|
|
2018-10-02 21:23:59 +08:00
|
|
|
Radare2 has its own package manager - r2pm. Its packages
|
2016-06-09 16:45:47 +08:00
|
|
|
repository is on [GitHub too](https://github.com/radare/radare2-pm).
|
2018-10-02 21:23:59 +08:00
|
|
|
To start to using it for the first time, you need to initialize packages:
|
2016-06-09 16:45:47 +08:00
|
|
|
|
2017-05-15 07:17:29 +08:00
|
|
|
$ r2pm init
|
2016-06-09 16:45:47 +08:00
|
|
|
|
2017-05-15 09:22:04 +08:00
|
|
|
Refresh the packages database before installing any package:
|
2016-06-09 16:45:47 +08:00
|
|
|
|
2017-05-15 07:17:29 +08:00
|
|
|
$ r2pm update
|
2016-06-09 16:45:47 +08:00
|
|
|
|
2018-10-02 21:23:59 +08:00
|
|
|
To install a package, use the following command:
|
2016-06-09 16:45:47 +08:00
|
|
|
|
2017-05-15 07:17:29 +08:00
|
|
|
$ r2pm install [package name]
|
2016-06-09 16:45:47 +08:00
|
|
|
|
2012-10-23 07:03:26 +08:00
|
|
|
# Bindings
|
|
|
|
|
|
|
|
All language bindings are under the r2-bindings directory.
|
2015-07-27 00:05:39 +08:00
|
|
|
You will need to install swig and valabind in order to
|
2017-05-14 21:05:29 +08:00
|
|
|
build the bindings for Python, Lua, etc..
|
2012-10-23 07:03:26 +08:00
|
|
|
|
|
|
|
APIs are defined in vapi files which are then translated
|
|
|
|
to swig interfaces, nodejs-ffi or other and then compiled.
|
|
|
|
|
2014-11-23 03:13:02 +08:00
|
|
|
The easiest way to install the python bindings is to run:
|
2012-10-23 07:03:26 +08:00
|
|
|
|
2017-08-15 19:01:08 +08:00
|
|
|
$ r2pm install lang-python2 #lang-python3 for python3 bindings
|
2017-05-15 09:22:04 +08:00
|
|
|
$ r2pm install r2api-python
|
2017-11-15 23:44:24 +08:00
|
|
|
$ r2pm install r2pipe-py
|
2012-10-23 07:03:26 +08:00
|
|
|
|
2018-10-02 21:23:59 +08:00
|
|
|
In addition there are `r2pipe` bindings, which is an API
|
2015-07-27 00:05:39 +08:00
|
|
|
interface to interact with the prompt, passing commands
|
|
|
|
and receivent the output as a string, many commands support
|
2018-10-02 21:23:59 +08:00
|
|
|
JSON output, so its integrated easily with many languages
|
2015-07-27 00:05:39 +08:00
|
|
|
in order to deserialize it into native objects.
|
2012-10-23 07:03:26 +08:00
|
|
|
|
2017-05-15 07:17:29 +08:00
|
|
|
$ npm install r2pipe # NodeJS
|
|
|
|
$ gem install r2pipe # Ruby
|
|
|
|
$ pip install r2pipe # Python
|
|
|
|
$ opam install radare2 # OCaml
|
2012-10-23 07:03:26 +08:00
|
|
|
|
2015-07-28 06:38:43 +08:00
|
|
|
And also for Go, Rust, Swift, D, .NET, Java, NewLisp, Perl, Haskell,
|
2016-09-25 06:59:55 +08:00
|
|
|
Vala, OCaml, and many more to come!
|
2012-10-23 07:03:26 +08:00
|
|
|
|
2015-07-27 00:05:39 +08:00
|
|
|
# Regression Testsuite
|
2012-10-23 07:03:26 +08:00
|
|
|
|
2018-10-02 21:23:59 +08:00
|
|
|
Running `make tests` will fetch the radare2-regressions
|
2015-07-27 00:05:39 +08:00
|
|
|
repository and run all the tests in order to verify that no
|
2018-10-02 21:23:59 +08:00
|
|
|
changes break any functionality.
|
2012-10-23 07:03:26 +08:00
|
|
|
|
2015-07-27 00:05:39 +08:00
|
|
|
We run those tests on every commit, and they are also
|
|
|
|
executed with ASAN and valgrind on different platforms
|
|
|
|
to catch other unwanted 'features'.
|
2012-10-23 07:03:26 +08:00
|
|
|
|
|
|
|
# Documentation
|
|
|
|
|
|
|
|
There is no formal documentation of r2 yet. Not all commands
|
|
|
|
are compatible with radare1, so the best way to learn how to
|
|
|
|
do stuff in r2 is by reading the examples from the web and
|
2014-11-23 03:13:02 +08:00
|
|
|
appending '?' to every command you are interested in.
|
2012-10-23 07:03:26 +08:00
|
|
|
|
|
|
|
Commands are small mnemonics of few characters and there is
|
|
|
|
some extra syntax sugar that makes the shell much more pleasant
|
2018-10-02 21:23:59 +08:00
|
|
|
for scripting and interacting with the APIs.
|
2012-10-23 07:03:26 +08:00
|
|
|
|
2015-09-15 23:16:43 +08:00
|
|
|
You could also checkout the [radare2 book](https://radare.gitbooks.io/radare2book/content/).
|
2015-07-26 18:38:59 +08:00
|
|
|
|
2015-08-05 06:03:54 +08:00
|
|
|
# Coding Style
|
|
|
|
|
2015-10-03 21:09:10 +08:00
|
|
|
Look at [CONTRIBUTING.md](https://github.com/radare/radare2/blob/master/CONTRIBUTING.md).
|
2015-08-05 06:03:54 +08:00
|
|
|
|
2012-10-23 07:03:26 +08:00
|
|
|
# Webserver
|
|
|
|
|
2018-10-02 21:23:59 +08:00
|
|
|
radare2 comes with an embedded webserver which serves a pure
|
2012-10-23 07:03:26 +08:00
|
|
|
html/js interface that sends ajax queries to the core and
|
|
|
|
aims to implement an usable UI for phones, tablets and desktops.
|
|
|
|
|
2017-05-15 07:17:29 +08:00
|
|
|
$ r2 -c=H /bin/ls
|
2015-09-21 20:22:08 +08:00
|
|
|
|
|
|
|
To use the webserver on Windows, you require a cmd instance
|
2018-10-02 21:23:59 +08:00
|
|
|
with administrator rights. To start the webserver, use the following command
|
2015-04-27 16:39:36 +08:00
|
|
|
in the project root.
|
|
|
|
|
2017-05-15 07:17:29 +08:00
|
|
|
> radare2.exe -c=H rax2.exe
|
2012-10-23 07:03:26 +08:00
|
|
|
|
|
|
|
# Pointers
|
|
|
|
|
2018-03-08 06:55:05 +08:00
|
|
|
Website: https://www.radare.org/
|
2012-10-23 07:03:26 +08:00
|
|
|
|
|
|
|
IRC: irc.freenode.net #radare
|
|
|
|
|
2017-05-15 07:17:29 +08:00
|
|
|
Telegram: https://t.me/radare
|
|
|
|
|
|
|
|
Matrix: @radare2:matrix.org
|
|
|
|
|
2018-10-31 00:50:09 +08:00
|
|
|
Twitter: [@radareorg](https://twitter.com/radareorg)
|