radare2/USAGE.md

1.9 KiB

 ___  __  ___  __ ___  ___   ____
| _ \/  \|   \/  \ _ \/ _ \ (__  \
|   (  - | |  ) - |  (   _/ /  __/
|_\__|_|_|___/__|_|_\_|___| |____|

      https://www.radare.org

                        --pancake

Usage

All r2 tools and commands support printing the output in different formats by appending a character at the end or using the -r (*r2) and -j (json) flags.

radare2

r2 -       # same as r2 malloc://4096; "the playground"
r2 /bin/ls # standard way to run r2
r2 -w ls   # open in read-write
r2 -d ls   # start debugging the ls in PATH

rasm2

rasm2 -L                 # list all supported assembler/disassembler/emulator plugins
rasm2 -a arm -b 64 'nop' # assemble a nop in 64-bit ARM
rasm2 -d 90              # disassemble 0x90; nop, if you're using x86

rabin2

rabin2 -s /bin/ls # list symbols in a binary
rabin2 -z /bin/ls # find strings

rafind2

rafind2 -s lib /bin/ls # search for strings matching 'lib' in /bin/ls

rax2

rax2 '10+0x20' # compute the result
rax2 -k 10+32  # keep the same base as input (10)
rax2 -h        # convert between (hex, octal, decimal.. bases)

Other tools

Check out the manpages and help messages for more information.

Scripting

There are native API bindings available for many programming languages, but it is recommended to use r2pipe which is a simple interface to execute r2 commands and get the output in result. Appending a j in the commands the output will be in JSON, so it can be parsed with .cmdj()

Some of the languages supported by r2 are: Python, Ruby, JavaScript, Lua, Perl, PHP, V, Go, Rust, Swift, C#, Java, Shell, OCaml, Haskell, Scheme (Guile), Common Lisp, Clojure, Erlang, D, Vala/Genie, Prolog, Nim, Newlisp...

import r2pipe
r2 = r2pipe.open("/bin/ls")
print(r2.cmd("pd 10"))
r2.quit()