mirror of
https://github.com/radareorg/radare2.git
synced 2024-12-12 23:46:36 +00:00
429a475ac0
- Replaced by ragg2 - the new r_egg based tool for r2 * Add r_egg_assemble as a 2nd step for compilation * Fix memory leak in r_egg_free * Add support for 'cmp' and more 'test' variants for x86.nz - Ignore 'dword ptr' string - More test cases * Fix SCSIZE issue in rasc2 -s --HG-- rename : binr/rarc2/Makefile => binr/old.rarc2/Makefile rename : binr/rarc2/README => binr/old.rarc2/README rename : binr/rarc2/config.def.h => binr/old.rarc2/config.def.h rename : binr/rarc2/config.h => binr/old.rarc2/config.h rename : binr/rarc2/emit_arm.c => binr/old.rarc2/emit_arm.c rename : binr/rarc2/emit_x64.c => binr/old.rarc2/emit_x64.c rename : binr/rarc2/emit_x86.c => binr/old.rarc2/emit_x86.c rename : binr/rarc2/i/libc.r => binr/old.rarc2/i/libc.r rename : binr/rarc2/i/socket.r => binr/old.rarc2/i/socket.r rename : binr/rarc2/osxtest.r => binr/old.rarc2/osxtest.r rename : binr/rarc2/out.c => binr/old.rarc2/out.c rename : binr/rarc2/rarc2-tool => binr/old.rarc2/rarc2-tool rename : binr/rarc2/rarc2.c => binr/old.rarc2/rarc2.c rename : binr/rarc2/rarc2.h => binr/old.rarc2/rarc2.h rename : binr/rarc2/t/Makefile => binr/old.rarc2/t/Makefile rename : binr/rarc2/t/argv.r => binr/old.rarc2/t/argv.r rename : binr/rarc2/t/bytedump.r => binr/old.rarc2/t/bytedump.r rename : binr/rarc2/t/data.r => binr/old.rarc2/t/data.r rename : binr/rarc2/t/dump.r => binr/old.rarc2/t/dump.r rename : binr/rarc2/t/hello.r => binr/old.rarc2/t/hello.r rename : binr/rarc2/t/hi.r => binr/old.rarc2/t/hi.r rename : binr/rarc2/t/if.r => binr/old.rarc2/t/if.r rename : binr/rarc2/t/inline.r => binr/old.rarc2/t/inline.r rename : binr/rarc2/t/input.r => binr/old.rarc2/t/input.r rename : binr/rarc2/t/loop.r => binr/old.rarc2/t/loop.r rename : binr/rarc2/t/ptr.r => binr/old.rarc2/t/ptr.r rename : binr/rarc2/t/rawsys.r => binr/old.rarc2/t/rawsys.r rename : binr/rarc2/t/rawsys64.r => binr/old.rarc2/t/rawsys64.r rename : binr/rarc2/t/regs.r => binr/old.rarc2/t/regs.r rename : binr/rarc2/t/ret.r => binr/old.rarc2/t/ret.r rename : binr/rarc2/t/room.r => binr/old.rarc2/t/room.r rename : binr/rarc2/t/segfault.r => binr/old.rarc2/t/segfault.r rename : binr/rarc2/t/shell.r => binr/old.rarc2/t/shell.r rename : binr/rarc2/t/sub.r => binr/old.rarc2/t/sub.r rename : binr/rarc2/t/syscall.r => binr/old.rarc2/t/syscall.r rename : binr/rarc2/test.r => binr/old.rarc2/test.r rename : libr/egg/t/syscall.r => binr/ragg2/syscall.r
63 lines
1.6 KiB
Plaintext
63 lines
1.6 KiB
Plaintext
RCC : Ralang/Relocatable Code Compiler
|
|
======================================
|
|
|
|
NASM support
|
|
------------
|
|
remove comments | grep -v '^#'
|
|
remove ptr
|
|
section .text \n global main
|
|
|
|
Compiler pipeline: the picture
|
|
------------------------------
|
|
|
|
spp : Simple preprocessor
|
|
| - includes and conditional compilation
|
|
|
|
|
ralang : The language
|
|
| - imperative and simple
|
|
|
|
|
macros : architecture independent assembly-like macro-based
|
|
| - provides calling conventions and syscall definitions
|
|
|
|
|
assembly : macros are then converted into assembly
|
|
| - specific for an OS/arch
|
|
V
|
|
gas/rasm2 : assembler compatible with GNU assembler and r2 asm
|
|
|
|
|
V
|
|
binary : the executable, relocatable code
|
|
- inject it for fun and profit
|
|
|
|
|
|
The language
|
|
------------
|
|
|
|
The ralang language aims to be an imperative high-level language providing
|
|
limited flexibility with some basic rules for parsing to simplify the
|
|
interpretation of the code.
|
|
|
|
Check t/ for examples
|
|
|
|
The compiler is a state machine where every character can modify the
|
|
internal state of itself while directly producing assembly code.
|
|
|
|
A gramatical parser is nothing more or nothing less than that. The language
|
|
must only permit constructions that can be directly mapped to machine code.
|
|
|
|
write($1, .var0, .var4);
|
|
|
|
Strings are encoded in the stack at runtime, variable access is done
|
|
explicitly by giving the delta offset against the base register.
|
|
|
|
.var0 = "Hello";
|
|
|
|
Access modifiers:
|
|
|
|
$1024 = numeric value
|
|
.var0 = get contents of variable
|
|
&.var0 = get address of variable
|
|
*.var0 = get contents of place where the var points to
|
|
|
|
|
|
--pancake
|