rz-run - Man Page
rizin utility to run programs in custom environments
Synopsis
| rz-run | [[directives]] [[script.rz]] [[--] [program] [args]] | 
Description
This command is part of the Rizin project.
This program is used as a launcher for running programs with different environment, arguments, permissions, directories and overridden default filedescriptors.
- -l
 List all the supported profile options.
- -t
 Output a base template profile. Try rz-run -d > profile.rz
- -w
 Show the terminal name and wait for a connection from another process. Try rz-run stdio=<ttypath> program=/bin/sh
The program just accepts a single argument which is the filename of the configuration file to run the program.
It is useful when you have to run a program using long arguments or pass long data to stdin or things like that usually required for exploiting crackmes :)
Directives
The rrz (rz-run) configuration file accepts the following directives, described as key=value entries and comments defined as lines starting with '#'.
- arg[0-511]
 Set value for argument N passed to the program
- aslr
 Enable or disable ASLR
- 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
- core
 Set no limit the core file size
- connect
 Connect stdin/stdout/stderr to a socket
- pty
 Use a pty for connection over socket (with connect/listen)
- envfile
 Set a file with lines like `var=value` to be used as env
- fork
 Used with the listen option, allow to spawn a different process for each connection. Ignored when debugging.
- input
 Set string to be passed to the program via stdin
- libpath
 Override path where the dynamic loader will look for shared libraries
- listen
 Bound stdin/stdout/stderr to a listening socket
- maxstack
 Set the maximum size for the stack
- maxproc
 Set the maximum number of processes
- maxfd
 Set the maximum number of file descriptors
- nice
 Set the niceness level of the process
- preload
 Preload a library (not supported on Windows, only linux,osx,bsd)
- daemon
 Set to false by default, otherwise it will run the program in background, detached from the terminal.
- program
 Path to program to be executed
- pid
 Set to true to print the PID of the process to stderr
- pidfile
 Print the PID of the process to the specified file
- runlib
 Path to the library to be executed
- runlib.fcn
 Function name to call from runlib library
- rzpreload
 Preload with librz, kill -USR1 to get an rizin shell or -USRZ to spawn a webserver in a thread
- setenv
 Set value for given environment variable
- setegid
 Set effective process group id
- seteuid
 Set effective process uid
- setgid
 Set process group id
- setuid
 Set process uid
- sleep
 Sleep for the given amount of seconds
- stdio=value
 Set io streams (stdin, stdout, stderr) to a value
- stdio=!cmd
 Redirect input/output to the process created by the specified command
- stdin
 Set stdin, stdout, and stderr streams to the specified value
- 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
- timeoutsig
 Signal to use when killing the child because the timeout happens
- unsetenv
 Unset one environment variable
Value Prefixes
Every value in this configuration file can contain a special
- @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
Examples
Sample rz-run script
 $ cat foo.rrz 
 #!/usr/bin/rz-run 
 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.rrz
Connecting a program to a socket
nc -l 9999
rz-run 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 rizin 
 $ rizin -r foo.rrz -d ls 
 $ cat foo.rrz 
 #!/usr/bin/rz-run 
 stdio=/dev/ttys010 
 ## Or you can use -R to set a key=value 
 rizin -R stdio=/dev/ttys010 -d ls
You can also use the -- flag to specify program and arguments in a more natural way:
rz-run timeout=2 -- sleep 4
Run a library function
rz-run runlib=/lib/libc-2.25.so runlib.fcn=system arg1="ls /"
See Also
rizin(1), rz-hash(1), rz-find(1), rz-bin(1), rz-diff(1), rz-gg(1), rz-asm(1),
Authors
pancake <pancake@nopcode.org>
byteninjaa0
Referenced By
rizin(1), rz-asm(1), rz-ax(1), rz-bin(1), rz-diff(1), rz-find(1), rz-hash(1), rz-sign(1).