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

      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

```sh
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

```sh
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

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

### rafind2

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

### rax2

```sh
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](https://github.com/radareorg/radare2/blob/master/man)
and help messages for more information.

## Scripting

There are native API bindings available for many programming languages,
but it is recommended to use [r2pipe](https://github.com/radareorg/radare2-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...

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

### HTTP commands

Start the HTTP server with `r2 -e http.port=9999 -c '=h' -`. These requests
all execute `echo hello`:

```sh
curl http://localhost:9999/cmd/echo%20hello
curl -d 'echo hello' http://localhost:9999/cmd/
curl -d hello http://localhost:9999/cmd/echo
```

POST requests join the URL-decoded command after `/cmd/` and the raw body
with one space when both are nonempty. An empty body runs only the URL command;
an empty URL command runs only the body. Body-only POSTs to `/cmd` also work.
