Release 0.1.0
v0.1.0
Today, we're shipping our first release, Rizin 0.1.0 🚀.
It has been a long ride and we're thankful to all the developers who contributed to Rizin and decided to stick with us. We couldn't have done it without you all.
We're so excited to bring you the first release of Rizin, which is the opening shot of the project and only the beginning. The release is packed with new and robust features. We now have Projects and a plethora of commands switched to our new unified command parser.
Below, you'll find a complete and comprehensive list of what's new and what has changed.
On this first release of Rizin, we put our efforts in refactoring and discarding parts of the code that are not the focus of Rizin as a reverse engineering framework, and those which were unpurposed, outdated or left as proof of concepts. Along with this refactoring, we improved the building and packaging process (see more in our "Why Meson" blog post). Apart from that, the two biggest changes are new, actually working Projects (see more in our "Introducing new Projects" blog post) and migration of many commands and auto-completion feature to the "newshell" (a tree-sitter-based commands parser) which is now set to default. Some of the unnecessary commands were removed, some commands and configuration variables were changed to pursue a better user experience and to smooth the learning curve.
See the more detailed list of the changes below:
-
New features
- New Projects implementation from scratch - see more at our blog: "Introducing Projects"
-
Command changes
- Commands converted to newshell:
uniq
uname
ls
*
_
sleep
.
subcommandsP
subcommands=
subcommandss
subcommands&
subcommandsw
subcommands (not complete)z
subcommandse
subcommands
- Relevant changes to commands
@@
and@@@
commands were unified under@@
. See@@?
for more info.- seek history commands were all moved under
sH
. In particular:s-
(seek undo) becomessHu
;s+
(seek redo) becomessHr
;s*
,s
,s!
are grouped undersH
;s=
is removed sl
(seek line) andprl
were removeds
accepts only an absolute value. Instead of having different behaviour ons +10+3
vss 10+3
, nows
behaves the same. If you want to move relative to the current offset, usesd
(seek delta).ss
(seek silent) subcommands were removed in favour of the new eval varcfg.seek.silent
, that is accepted by all seek commands.e?
was removed in favour ofel
(eval list). Other commands that listed evals in different formats (e*
,ej
, etc.) were moved underel
.e,
was removed becausee
can now accept multiple sets/gets in one shotev
andevj
were removed in favour ofell
andelJ
.ed
was removed since there can be multiple configuration filese
won't accept spaces when assigning a value to a variable.e asm.bytes = true
is not valid anymore, whilee asm.bytes=true
is. This allows the command to support multiple arguments easily, likee asm.bytes=true asm.arch=x86
.- The commands converted to newshell do not accept the syntax without a space between the command name and the argument anymore, in favor of a more rigid approach that splits them, similar to what's done by other shells (e.g.
s+3
,z-zigname
won't work anymore)
- Misc
- Commands that provide different output modes are grouped together
- Commands are defined through a YAML file that describe the command, its arguments, a summary and a longer description.
- The help tree structure is automatically computed based on the YAML definition. For each command, arguments and sub-options in the help are automatically printed most of the times.
- Commands converted to newshell:
-
New commands
opr
,opn
to open next file andopp
to open previous fileLp
to list parser pluginsom.j
for JSON output ofom.
to show the map for the current offsetaecb
to continue backwards in ESIL emulation mode- Add
rz-ax -I
option to convert from/to LONG and IP address
-
Configuration variables' changes
cfg.newshell.autocompletion
to enable/disable autocompletion based on newshell data. This uses the information provided in cmd_descs.yaml to know the type of each argument. Those info are the same used by the shell to know how many arguments a command accepts. It supports autocompletion of all the arguments of a command, not just the first. However it works only for commands converted to newshell and it is currently disabled by defaultcfg.seek.silent
when true, seek commands do not save seek movements in the seek historycfg.seek.histsize
maximum size of the seek historyasm.bytes
set to false by default- Set
asm.tabs
to 6 and enableasm.tabs.once
by default - Rename
asm.filter
toasm.sub.names
- Add
analysis.cc
andanalysis.syscc
to set the current calling convention and syscall convention, remove hardcoded conventions zign.{graph,bytes,offset,refs,hash,types}
moved tozign.match.
dbg.create_new_console
added, to create a new console window for the debugee on debug start- Added
cfg.json.*
variables for JSON encoding settings - Added
asm.hint.call.indirect
to make indirect calls follow the target address - Removed
http.sync
,http.ui
,http.sandbox
scr.tts
,scr.demo
,file.desc
,file.md5
,file.location
,dbg.libc.dbglib
,cmd.xterm
,lines.*
,cmd.pdc
,cmd.log
-
Code cleanup
- Removed WebUI and HTTP server implementation (except pieces required for the RzPipe
http://
to work. - Removed the sandbox feature, donut printing, stiv (image preview), 2048 game
- Removed
scr.demo
mode - Removed
cfg.r2wars
mode - Removed snow from Visual Panels mode
- Removed function folding feature from Visual mode
- Removed
pdc
pseudo decompiler in favor of RzGhidra and JSDec (URL) - Removed
rz-patch
tool (formerrapatch2
) - Removed
citem
(i.
command) - Removed incomplete TTS support (
cfg.fortunes.tts
andscr.tts
, also|T
command) - Removed various outdated and unused scripts from
sys/
- Removed MinGW and Cygwin support from ACR/Makefiles
- Removed Emscripten support
- Removed (some of them moved to the book (URL)) various outdated documentation files from
doc/
- Removed the REIL support (
aetr
command) - Removed
a2f
analysis mode (analysis.a2f
configuration variable) - Removed
io.mmap
plugin and rely onio.default
implementation instead - Removed
afc=
command (useanalysis.cc
instead) - Removed
afil
command - Removed obsolete Windows debugging files (
w32.[ch]
) - Removed unused
callback.c
- Removed filesystems mount support (
m
commands) and outdated GRUB code - Removed
T
commands (logging feature) - Removed
u
commands andQ
alias - Removed
'
and\
(both are an alias for=!
) commands - Removed
:
commands - Removed
p3
command (3D stereogram) - Removed
/me
command (IRC-like feature) - Removed support for the multiline comments (
/* */
) - Removed
join
,head
, andless
commands in favor of the~
subcommands - Removed
afc=
,arS
- Removed WebUI and HTTP server implementation (except pieces required for the RzPipe
-
Refactoring
- SDB switched to use submodule instead of embedding into the repository
- Tree-sitter runtime switched to use submodule instead of embedding into the repository
- Most of the JSON printing migrated to the PJ API
- Extract subprocess API used in
rz-test
to RzUtil, as a preliminary step in re-using those API for all code paths that interact with a child process - Reduce coupling between RzCore and Tasks
- Move seek history processing from RzIO to RzCore
- Refactoring to reduce code duplication of all binutils-based disassembly and assembly plugins (CRIS, HPPA, Lanai, MIPS, PPC, SPARC plugins)
- Remove global variables from
rz-find
tool - Set C99 as the minimum required C standard supported. C99 standard has been used to compile SDB for many years, so we are now just taking full advantage of the standard in the whole project.
- Code style is unified and automated with
clang-format
tool, seesys/clang-format.py
script. - License headers updated to use SPDX machine-friendly format
- Use
meson dist
to create the source tarball and refactor building release artifacts and corresponding CI logic
-
Assembly improvements
- New PowerPC assembly plugin (
asm.ppc
)
- New PowerPC assembly plugin (
-
Analysis improvements
The basic blocks module was completely rewritten resulting in speed and analysis quality improvements for all supported architectures.
Detection of the changes upon write and and refreshing the function graph.
Improved UTF-16 strings autodetection
Added ESIL sign extension operator
~=
The analysis of the following architectures was improved significantly:
- AVR
- SPC700
- V850
- RISC-V (including new
asm.pseudo
plugin) - ARM32 (mostly pseudocode and ESIL improvements, update
arm.winedbg
) - ARM64 (including the major fix for the variable access analysis and syscall support)
- SystemZ (added calling convention support)
- Tricore (added instruction descriptions, see
asm.describe
) - PowerPC (libvle updates)
- x86 (ESIL updates)
-
File formats
- COFF: add ARMNT and ARM64 support
- COFF: various small parsing fixes
- Rewritten
*.ar
parsing to support multifile archives - PE and Windows minidump parsing fixes and performance optimizations
- PE fixes for delayed imports
- PE support for the RISC-V target
- Print additional ELF headers with
rz-bin -H
option - Improvements for DWARF and PDB parsing and information import
-
Debugger
- WinDbg/KD fixes
- FreeBSD and DragonFlyBSD fixes
dts
(debug trace session and reversible debugging feature) improvements- Add support and autodetection of the RISC-V targets for the GDB remote server connection
-
IO
- Cache performance optimizations
-
Tests
- Add an option to store logs with
rz-test
(-o
option)
- Add an option to store logs with
-
Misc:
- Static builds are switched to use Alpine/Musl-based builds to not depend on the GLIBC version
- Show all possible config variable values in the
Ve
menu