mirror of
https://github.com/radareorg/radare2.git
synced 2024-12-01 17:40:34 +00:00
.. | ||
i | ||
t | ||
config.def.h | ||
config.h | ||
emit_arm.c | ||
emit_x64.c | ||
emit_x86.c | ||
Makefile | ||
osxtest.r | ||
out.c | ||
rarc2-tool | ||
rarc2-tool.1 | ||
rarc2.1 | ||
rarc2.c | ||
rarc2.h | ||
README | ||
test.r |
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