Reference

ragg2(1)

Radare2 Frontend for r_egg; Compiles Programs into Tiny Binaries for x86 and ARM Architectures

NAME

ragg2 – Radare2 Frontend for r_egg; Compiles Programs into Tiny Binaries for x86 and ARM Architectures

SYNOPSIS

ragg2 [-FOLsrxhvz] [-a arch] [-b bits] [-k os] [-o file] [-i sc] [-I path] [-E enc] [-B hex] [-c k=v] [-C file] [-p pad] [-q off] [-S string] [-f fmt] [-nN dword] [-dDw off:hex] [-e expr]

DESCRIPTION

Frontend for r_egg, compiling assembly programs into minimal binaries for x86-32, x86-64, and ARM architectures.

Built on top of r_asm and r_bin, it provides a library for generating small standalone binaries across supported platforms.

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

ragg2 can 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.

OPTIONS

-a arch

Select architecture (x86, mips, arm)

-b bits

Register size (32, 64, ..)

-B hexpairs

Append some hexpair bytes

-c k=v

Set configuration options

-C file

Append contents of file

-d off:dword

Patch dword (4 bytes) at given offset

-D off:qword

Patch qword (8 bytes) at given offset

-e egg-expr

Take egg program from string instead of file

-E encoder

Use specific encoder. See -L

-f format

Output format (raw, c, pe, elf, mach0, python, javascript)

-F

Output native format (osx=mach0, linux=elf, ..)

-h

Show usage help message

-H var

Display variable

-i shellcode

Include shellcode plugin, uses options. See -L

-I path

Add include path

-k os

Operating system's kernel (linux,bsd,osx,w32)

-L

List all plugins (shellcodes and encoders)

-n dword

Append 32bit number (4 bytes)

-N dword

Append 64bit number (8 bytes)

-o file

Output file

-O

Use default output file (filename without extension or a.out)

-p padding

Add padding after compilation (padding=n10s32) ntas : begin nop, trap, 'a', sequence NTAS : same as above, but at the end

-P size

Prepend debruijn pattern

-q fragment

Debruijn pattern offset

-r

Show raw bytes instead of hexpairs

-s

Show assembler

-S string

Append a string

-v

Show version information

-w off:hex

Patch hexpairs at given offset

-x

Execute

-X hexpairs

Execute rop chain, using the stack provided

-z

Output in C string syntax

ENVIRONMENT

R2_NOPLUGINS

Do not load any plugin

R2_PLUGINS_ORDER

Plugin load order: i=internal, e=env, h=home, s=system; default=iehs; ? prints help

EXAMPLES

Using r_egg language:

$ 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!

Using C language:

$ cat hi.c
main() {
write(1, "Hello\n", 6);
exit(0);
}
$ ragg2 -O -F hi.c
$ ./hi
Hello

Tiny binary output:

$ wc -c < hi
165

Compiled shellcode with zeroes:

$ ragg2 hi.c | tail -1
eb0748656c6c6f0a00bf01000000488d35edffffffba06000000b8010
000000f0531ffb83c0000000f0531c0c3

Using XOR encoder with key 64:

$ ragg2 -e xor -c key=64 -B $(ragg2 hi.c | tail -1)
6a2d596a405be8ffffffffc15e4883c60d301e48ffc6e2f9ab4708252
c2c2f4a40ff4140404008cd75adbfbfbffa46404040f8414040404f45
71bff87c4040404f45718083

SEE ALSO

radare2(1)

AUTHORS

Written by pancake <[email protected]>.

History

-B since Arch Linux 2026-11-01; -C since Arch Linux 2026-11-01; -D since Arch Linux 2026-11-01; -E since Arch Linux 2026-11-01; -F since Arch Linux 2026-11-01; -H since Arch Linux 2026-11-01; -I since Arch Linux 2026-11-01; -L since Arch Linux 2026-11-01; -N since Arch Linux 2026-11-01; -O since Arch Linux 2026-11-01; -P since Arch Linux 2026-11-01; -S since Arch Linux 2026-11-01; -X since Arch Linux 2026-11-01; -a since Arch Linux 2026-11-01; -b since Arch Linux 2026-11-01; -c since Arch Linux 2026-11-01; -d since Arch Linux 2026-11-01; -e since Arch Linux 2026-11-01; -f since Arch Linux 2026-11-01; -h since Arch Linux 2026-11-01; -i since Arch Linux 2026-11-01; -k since Arch Linux 2026-11-01; -n since Arch Linux 2026-11-01; -o since Arch Linux 2026-11-01; -p since Arch Linux 2026-11-01; -q since Arch Linux 2026-11-01; -r since Arch Linux 2026-11-01; -s since Arch Linux 2026-11-01; -v since Arch Linux 2026-11-01; -w since Arch Linux 2026-11-01; -x since Arch Linux 2026-11-01; -z since Arch Linux 2026-11-01.