Provided by: radare2_2.3.0+dfsg-2_amd64 bug

NAME

       ragg2 — radare2 frontend for r_egg, compile programs into tiny binaries for x86-32/64 and arm.

SYNOPSIS

       ragg2  [-a  arch]  [-b  bits]  [-k  kernel]  [-f  format] [-o file] [-i shellcode] [-I path] [-e encoder]
             [-B  hexpairs]  [-c  k=v]  [-C  file]  [-n  num32]  [-N  num64]  [-d  off:dword]   [-D   off:qword]
             [-w off:hexpair] [-p padding] [-P pattern] [-q fragment] [-FOLsrxvhz]

DESCRIPTION

       ragg2 is a frontend for r_egg, compile programs into tiny binaries for x86-32/64 and arm.

       This  tool  is experimental and it is a rewrite of the old rarc2 and rarc2-tool programs as a library and
       integrated with r_asm and r_bin.

       Programs generated by r_egg are relocatable and can be injected in a running process  or  on-disk  binary
       file.

       ragg2-cc  is another tool that comes with r2 and it is used to generate shellcodes from C code. The final
       code can be linked with rabin2 and it is relocatable, so it can be  used  to  inject  it  on  any  remote
       process.

       ragg2-cc is conceptually based on shellforge4, but only linux/osx x86-32/64 platforms are supported.

DIRECTIVES

       The  rr2  (ragg2) configuration file accepts the following directives, described as key=value entries and
       comments defined as lines starting with '#'.

       -a arch     set architecture x86, arm

       -b bits     32 or 64

       -k kernel   windows, linux or osx

       -f format   select binary format (pe, elf, mach0)

       -o file     output file to write result of compilation

       -i shellcode
                   specify shellcode name to be used (see -L)

       -e encoder  specify encoder name to be used (see -L)

       -B hexpair  specify shellcode as hexpairs

       -c k=v      set configure option for the shellcode encoder. The argument must be key=value.

       -C file     include contents of file

       -d off:dword
                   Patch final buffer with given dword at specified offset

       -D off:qword
                   Patch final buffer with given qword at specified offset

       -w off:hexpairs
                   Patch final buffer with given hexpairs at specified offset

       -n num32    Append a 32bit number in little endian

       -N num64    Append a 64bit number in little endian

       -p padding  Specify generic paddings with a format string. Use lowercase letters to prefix, and uppercase
                   to suffix, keychars are. 'n' for nop, 't' for trap, 'a' for sequence and 's' for zero.

       -P size     Prepend debruijn sequence of given length.

       -q fragment
                   Output offset of debruijn sequence fragment.

       -F          autodetect native file format (osx=mach0, linux=elf, ..)

       -O          use default output file (filename without extension or a.out)

       -I path     add include path

       -s          show assembler code

       -r          show raw bytes instead of hexpairs

       -x          execute (just-in-time)

       -z          output in C string syntax

EXAMPLE

         $ cat hi.r
         /* hello world in r_egg */
         write@syscall(4); //x64 write@syscall(1);
         exit@syscall(1); //x64 exit@syscall(60);

         main@global(128) {
           .var0 = "hi!\n";
           write(1,.var0, 4);
           exit(0);
         }
         $ ragg2 -O -F hi.r
         $ ./hi
         hi!

         $ cat hi.c
         main() {
           write(1, "Hello0, 6);
           exit(0);
         }
         $ ragg2 hi.c
         $ ./hi.c.bin
         Hello

SEE ALSO

       radare2(1), rahash2(1), rafind2(1), rabin2(1), rafind2(1), radiff2(1), rasm2(1),

AUTHORS

       Written by pancake <pancake@nopcode.org>.

                                                  Sep 30, 2014                                          RAGG2(1)