Release Notes
- Version: 5.1.0 (2021-01-26)
- Previous: 5.0.0 (2020-12-21)
- Commits: 291
- CommitsFromRizin: 35
- TotalContributors: 45
I will try to be more verbose with the release notes this time, it could help everyone to understand better the changes that happen, project directions and new features, as well as be more entertaining, even readable by Siri.
As I'm writing these lines I know I will be missing something, so please, if you think this summary is missing any important details let us know and our apologize in advance!
This is the second release after the fork, we are still putting things in place and optimizing the development for what we had in mind. Probably many people expected a public statement about the events, but this post end up being used as a therapy and focused on spending the time for what it matters: have fun, move fast and code for what matters most for the users and contributors without losing time and nerves in personal conflicts or strict roadmaps, just fixing, improving and keep vibing the amazing community in r2land.
There are frequent back and forth pulls of changes from both projects (see sys/derizin.sh for more details), and future directions of both projects will probably differ enough to lower that pace. If you are curious about other side projects:
About r2ghidra, it was rebranded (previously named r2ghidra-dec), and has been updated with all the changes in rz-ghidra, but adds ACR build support (which works on FreeBSD), removes the need for bison and flex, See https://github.com/radareorg/r2ghidra for more details about the 5.1.0 release.
On r2cutter, the repository, project and icon has been renamed from Cutter to r2Cutter as well as updated the r2 dependency to the latest 5.1.0, but the CI hasnt been massaged yet r2dec is still available and working, just remember to update your package database with
Alexander von Gluck IV Alexis Ehret Allen McIntosh Anton Kochkov Aswin C Briand Djoko Carson McManus ChD1 Dennis Goodlett Eduard Eduard MURESAN Fangrui Song Florian Maerkl Francesco Tamagni Fredrik Fornwall Giovanni GustavoLCR Kamil Rytarowski Khairul Azhar Kasmiran Liumeo Murphy Paul I Qijia Liu RHL120 Riccardo Schirone Riccardo Schirone Sahil Siddiq Sylvain Pelissier aemmitt-ns aemmitt-ns condret eagleoflqj gogo gogo2464 ivan tkachenko laohuai liumeo mrglm pancake pancake pancake ratijas wargio yossizap yossizap
This release comes with a large list of bug fixes, many of them you may probably not even noticed, but some of them are important for users and packagers, it has been Projects: One of the most awaited feature is now finally available for testing, the git The CI have been rewritten for simplicity and it's now building and publishing Android, iOS, macOS, Linux and Windows artifacts on every commit, ASAN, LGTM and COVERITY are still there, but all jobs run in github actions.
Lots of improvements in the support for JSON have been added by @liumeo also, several memory leaks have been cutted down, which are always welcome.
Support for streaming large files over mg, and added support in r2frida is now available thanks to @as0ler!
The r2wars game runs on top of r2, but it needs some tweaks for the esil vm to work, Those 'hacks' will be eventually removed when r2wars gets able to emulate syscalls, The arm64 assembler has been extended support more instructions and be more formal and correct.
It's always great to welcome a new supported architecture for assembling code (disassembler for i4004 was already available). Kudos to Liumeo for this nice addition!
COFF: handle empty sections (#447)
Dont demangle with libs unless requested
Add bin.cache evar to use io.cache when bins need to patch relocs
Fix Mach-O rebase on fat slices
Add additional ELF header fields to rz-bin output
Fix PE Delay Imports for multiple delayed DLLs (rizin)
Lowercase DEX method attributes and move r_num_bit_count()
Initial implementation of the DEX annotation parser
The DEX annotation metadata is now parsed in the DEX plugin, this means, that parsing is actually a bit slower (it's parsing more information) but provides more context and information of the application classes and methods. Use bin.verbose=true to get that information.
This metadata must be imported into r2 somehow, but this interface hasnt been defined yet, so only plaintext representation is supported at load time. Probably finding a good tree representation for an Sdb instance could work.
Some confusing usage and documentation have been updated and the default diffing algorithm is now faster. (Thanks MaskRay for spotting it and Liumeo for massaging it)
The whole CI scripts have been rewritten to run everything in GithubActions, and adjust the test of PRs to 20min, ASAN is only running in master (takes 1h), and every commit is compiled for linux, macos, windows, ios and android. No breaking commits can be merged. And all artifacts are available to download for every single commit and architecture.
As long as the Sanitized build takes 1h to run the testsuite we decided to make it run only in the master branch, if any regression happens there it's easy to fix with the crash logs in GHA.
This is the setup of jobs in the current CI:
You may not know about RTable yet, but it's an api and command modifier that will be used more and more over time. In short, RTable provides an API to create tables with columns with types and rows with data and an api and query syntax to operate over those tables in the same way as you would do in an SQL database but using the cryptic syntax of commands we like in r2land.
This release introduces a new output for SQL. This means that any information stored in r2 can be exported in SQL statements and processed in your favourite SQL database. This is an example usage:
Native support for Linux/RISC-V is now available as well as remote debugging via GDB, @condret find out (and fixed) a bug in the way rep instructions were constructed in ESIL in x86.
Thanks to @aemmitt-ns (Austin Emmitt) for implementing support for floating point arithmetics in ESIL as well as adding support for most FPU instructions for ARM64. That's an important move forward in order to improve the language to handle more instructions and architectures.
A work in progress support for RIOBanks is not yet included in this release. Those new types of plugins are right now just a place holder to call init/fini and do whatever you want from there. But in the next release ESIL plugins will provide the ability to expose some functionalities to the ESIL VM, syscall implementations in userland, libc emulation functions, custom esil operations, hardware devices, etc. Join the Discord, Telegram or IRC channels to raise the topic if you are interested on more details.
This feature has been added pair to pair with the r2frida implementation, this Support for uploading is not yet implemented, but it is planned in the near future.
Thanks Murphy for that great contrib!
Those changes and new command are required for the projects to be able to save and The refactoring of the io.ar plugin spotted a regression in open_many() which is not yet The most requested feature for r2 has been reworked to actually this means that everytime you run As long as projects are in plain text they are readable in Improved support to ease the workflow to support multiple users sharing As long as the user can create custom maps on specific files, the projects The P command is now much more stable and all the subcommands work as expected, some tests have been added and project renaming can be done via command or via evar Projects are working, but they are far from perfect, one of these missing corners is the In any case, it's always recommended to have your own manually writen scripts to do setup some flags, memory patches or breakpoints, so you are more in control of what you run in a living process.
Some improvements in the way calling conventions are handled inside r2 enabled the use of anal.cc like it's done in prj.name, with a 'live' evar. default calling convention is This includes honoring the settings defined by the user in the cfg.json evars, One of the changes introduced in Rizin is the ability to use regexps to check the output of an r2r test, but after doing some cleanup in the regex code some issues were spotted in the logic, so it's not encouraged to write tests using regexps yet. Unit tests has been added, but it still requires to be fixed.
The bugs are logic bugs, not exploitable, but some match expressions won't work. But at least the feature is in sync.
Other commits taken from RZ grouped by author are:
Paul I
xvilka
wargio
ret2libc
kazarmi
yossizap
Florian
Sometimes a shellcode or a piece of program is doing some operations with IP addresses and it stores the IP address on a 32 bit register value. rax2 now provides a handy commandline option to ease this conversion. This feature was already available as a hint for the disassembly to convert instruction arguments to ip addresses.
Those two variables have been added in order to ease writing some scripts that navigate thru So $i is the address of the next instruction and $I of the previous. Things get more interesting when the braces join the game: Using $i{3} gives you the address of 3 instructions forward. and the same goes for $I{3} to go backward.
The asl command has been modified to use RNum when parsing the argument, so its possible to
Plugin delegates return int instead of RFSFile to avoid leaks and uafs, needed for streaming largs files over mg.
Add esil.dummy in your plugins.cfg if the build fail with missing R_ESIL_PLUGINS error.
In human words: rotating color themes is working again!
This new API is wrapping eprintf() but its also able to buffer the FUTURE: The need for this API is to improve the r2pipe API and handle Those commits improve the experience in panels, fixing an anoying The heavy webuis were removed in 5.0, but we are still shipping The bindings have been also updated with some more valadoc documentation This documentation and API can be used for any bindings generated by As usual, every release of r2 comes with a large list of security vulnerabilities, bugs and crash fixes. The list below sumarizes the most relevant ones:
Merged some patches coming from Termux to improve the debugger support on android-x86. The r2r testsuite executable is always built and should be available to all the user installations.
Also, some issues has been fixed in sys/install as well as new CI jobs to verify no regressions happen on install/uninstall/spacesinpaths, etc.
Updates from r2land
to do the release builds, so no release of r2cutter is planned until this issue gets fixed.
r2pm update
.
Contributors
TLDR
Highlights
tested on a large list of platforms, not just in the CI, but also in sparc, mips, powerpc and other funky hardware (Thanks @unixfreaxjp !). We are not forgetting the new Macs, and
this release comes with few fixes for fat binaries, kernel caches and arm64 floating point emulation (kudos to @mrmacete and @aemmitt-ns for them!).
support has been enabled by default and some options and backward compatibility transitional
code have been removed. Please test this out and let us know if you spot any issue! thanks @trufae for this!
r2wars
this version optimizes this by checking configuration options outside hot loops.
traps and low level stepping for context switching at esil-expression level.
bin
radiff2
ci
RTable
$ r2 -AA /bin/ls
> afl,:sql > functions.sql
> !sqlite3
sqlite> .read functions.sql
sqlite> .tables
fcns
sqlite> select count(name) from fcns;
128
RISCV
the ESIL emulation have been improved a little bit.
disasm
ESIL
But hopefully in the next release @condret and @trufae will be manage to finish the new API and commands and integrate them into the ESIL to support memory banks in GameBoy emulation for example (as well as add support later for other archs).
fs
way enables r2 to download all the files and its contents without any file size
limitation from the remote device to your host. All the RFS plugins API has been
changed to if you are using custom RFS plugins you may take care of that.
io
restore the status of files, binfile and iomaps in proper order and reference.
fixed, brave volunteers are welcome!
Projects
make it work and improved several use cases that weren't handled
before:
git
is in path
Ps
after saving the changes
in will prompt you for a commit message. The ability to rollback
to any previous state of the project by just calling git reset
and Po
becomes very handy when bad things happen or you just
want to track your progress.
git diff
.
the same project via git will be implemented in future releases.
o*
output
need to determine if there's any binobject associated with a specific
file for processing a map. This puzzle is solved by the o* command which
now prints the right commands to reconstruct the same IO environment starting
from a clean session.
prj.name
. The magic behind this evar-project-action is done by using the RConfig.getter APIs that have been there for a while but barely used, the value is updated at get time from the project instance details. This way it's possible to rename a project like this:
> e prj.name
test
> e prj.name=case1
debugging support, the main reason for that is the lack of integration of aslr rebasing in projects, this will be eventually implemented, but for now it's better to avoid the user to mess the thing.
k anal/cc/default.cc
defined by the architecture but can be redefined by the rbin plugin or the analysis information. In addition the user can also specify a custom CC for each function, all those details are preserved with the anal.cc evar and the tc and afc commands.
Refactor
this nice feature was introduced by @hexploitable in the previous 5.0 release.
[0x00000000]> e cfg.json.num =?
none
string
hex
Rizin
shell
$ rax2 -I 192.168.1.32
0x2001a8c0
$ rax2 -I 0x2001a8c0
192.168.1.32
$
the code moving forward and backward honoring the instruction boundaries of the current analysis information.
asl
command
API
Visual
results and flush them after r_cons_flush().
a 3rd communication pipe to handle asyncronous error messages. This is
a long term plan and should be backward compatible, so no r2pipe scripts may break.
bug in the menus, improving the cursor mode. The default color
theme for the frames makes it easier the eye.
t/iled and p/anel ones, it's known that the webui repo needs some
attention
bindings
that can be read in here:
valabind, this is: python, nodejs, ruby, go, v, ... the work to stabilize
the apis in this module focused in RConfig, some fixes have been done in
this module.
security
build
symstall
config