Introducing Projects in Rizin
Article on rizin.re:
When manually analyzing a complex binary, possibly over the course of days, weeks or even months, it is crucial to be able to keep track of the gained knowledge through annotations such as comments, function and variable names. As such, the tool one is working with also need to provide a reliable and future-proof way to save and restore this information. One of the biggest additions in Rizin surely is the new projects feature, which provides exactly this functionality in both rizin on the command line and Cutter. In this article, we would like to give an overview of how it was designed, what exactly it promises to you, as well as the current limitations you should be aware of when using it right now.
tl;dr
- Projects can be used in rizin using the
Ps [<project.rzdb>]andPo <project.rzdb>commands and in Cutter through its regular user interface.
- Projects are currently in beta, including in any
0.x.yreleases of Rizin, and will be considered stable starting with release1.0.0.- Beta means that all functionality is implemented and ready to use, but there is no guarantee that the format itself will not further change slightly and thus maybe break loading a project saved right now in a future version of Rizin.
- Stable means that the format is finalized and all changes inside of it will come with migrations and tests ensuring that all projects saved before are still be loaded correctly.
- Projects may be conceptually split into two parts: the binary that is being analyzed, and
any info that has been put on top by automatic analysis or the user.
- Saving and loading of all analysis data on top of a binary, including flags, functions, variables, types, comments is implemented.
- Automatic reloading of the underlying binary is currently limited to only a single binary available as a regular file,
but this will be extended to arbitrarily complex IO mappings in the future.
However, even with the current state, it is possible to manually reconstruct more complex mappings and then load
any analysis data on top using the
Poo <project.rzdb>command.