table of contents
- unstable 6.0.4+dfsg-1
- experimental 6.0.2+dfsg-1
RARUN2(1) | General Commands Manual | RARUN2(1) |
NAME¶
rarun2
— radare2
utility to run programs in exotic environments
SYNOPSIS¶
rarun2 |
[-vt ] [directives ...]
[script.rr2] [Fl- program
args ...] |
DESCRIPTION¶
A launcher for executing programs with custom environments, arguments, permissions, working directories, and redirected file descriptors.
Supports inline directive arguments, script files, or program specifications after the '--' separator.
Ideal for simplifying complex command lines, preparing specialized environments, and automating testing or exploitation scenarios.
OPTIONS¶
DIRECTIVES¶
The rr2 (rarun2) configuration file accepts the following directives, described as key=value entries and comments defined as lines starting with '#'.
- program=
- Path to program to be executed
- arg0=..argN=
- Set values for arguments passed to the program
- aslr=
- Enable or disable ASLR (yes|no)
- bits=
- Set 32 or 64 bit (if the architecture supports it)
- chdir=
- Change directory before executing the program
- chroot=
- Run the program in chroot (requires some previous setup)
- clearenv=
- Unset the whole environment (true|false)
- connect=
- Connect stdin/stdout/stderr to a socket (host:port)
- core=
- Set no limit to the core file size (true|false)
- daemon=
- Run in background, detached from terminal (default: false)
- envfile=
- Set a file with lines like 'var=value' to be used as env
- execve=
- Use execve instead of posix_spawn (osx tricks)
- fork=
- Allow spawning different process for each connection with 'listen'
- input=
- Set string to be passed to the program via stdin
- libpath=
- Override path where the dynamic loader looks for shared libraries
- listen=
- Bind stdin/stdout/stderr to a listening socket (port)
- maxfd=
- Set the maximum number of file descriptors
- maxproc=
- Set the maximum number of processes
- maxstack=
- Set the maximum size for the stack
- nice=
- Set the niceness level of the process
- pid=
- Set process pid
- pidfile=
- Write pid to a file
- preload=
- Preload a library (not supported on Windows, only linux,osx,bsd)
- pty=
- Use a pty for connection over socket (true|false)
- r2preload=
- Preload with libr2, kill -USR1 for r2 shell, -USR2 for webserver
- r2preweb=
- Run webserver in a thread at start with r2preload
- runlib=
- Path to the library to be executed
- runlib.fcn=
- Function name to call from runlib library
- setegid=
- Set effective process group id
- seteuid=
- Set effective process uid
- setenv=
- Set value for given environment variable (NAME=VALUE)
- setgid=
- Set process group id
- setuid=
- Set process uid
- sleep=
- Sleep for the given amount of seconds before execution
- stderrout=
- Redirect stderr file descriptor to stdout (true|false)
- stdio=
- Select file or terminal for stdout/stderr/stdin
- stdin=
- Select file to read data from stdin
- stdout=
- Select file to replace stdout file descriptor
- stderr=
- Select file to replace stderr file descriptor
- system=
- Execute the given command
- timeout=
- Set a timeout in seconds
- timeoutsig=
- Signal to use when killing child on timeout (SIGTERM)
- times=
- Print runtime in milliseconds to stderr (true|false)
- unsetenv=
- Unset one environment variable
VALUE PREFIXES¶
Every value in this configuration file can contain a special prefix:
- @filename
- Slurp contents of file and put them inside the key
- text
- Escape characters useful for hex chars
- 'string'
- Escape characters useful for hex chars
- !cmd
- Run command to store the output in the variable
- :102030
- Parse hexpair string and store it in the variable
- :!cmd
- Parse hexpair string from output of command and store it in the variable
- %1234
- Parses the input string and returns it as integer
- @300@ABCD
- 300 characters filled with ABCD pattern
ENVIRONMENT¶
RARUN2_ARGS
- Useful to run "rarun2" but parse arguments from environment var
EXAMPLES¶
Sample rarun2 script:
$ cat foo.rr2
#!/usr/bin/rarun2
program=./pp400
arg0=10
stdin=foo.txt
chdir=/tmp
clearenv=true
setenv=EGG=eggsy
setenv=NOFUN=nogames
unsetenv=NOFUN
# EGG will be the only env variable
#chroot=.
$ ./foo.rr2
Connecting a program to a socket:
$ nc -l 9999
$ rarun2 program=/bin/ls connect=localhost:9999
Debugging a program redirecting IO to another terminal:
## open a new terminal and type 'tty' to get
$ tty ; clear ; sleep 999999
/dev/ttyS010
## in another terminal run r2
$ r2 -r foo.rr2 -d ls
$ cat foo.rr2
#!/usr/bin/rarun2
stdio=/dev/ttys010
## Or you can use -R to set a key=value
r2 -R stdio=/dev/ttys010 -d ls
You can also use the -- flag to specify program and arguments:
$ rarun2 timeout=2 -- sleep 4
Run a library function:
$ rarun2 runlib=/lib/libc-2.25.so runlib.fcn=system arg1="ls /"
SEE ALSO¶
AUTHORS¶
Written by pancake <pancake@nopcode.org>
July 10, 2025 |