Radare2, often abbreviated as r2, is a free and open-source framework and command-line toolset designed for reverse engineering binaries, providing capabilities for disassembly, debugging, analysis, emulation, and patching across a wide range of architectures and operating systems.[1][2]Originally developed as a simple command-line hexadecimal editor focused on digital forensics tasks, the radare project has evolved into a comprehensive, extensible platform distributed under the LGPLv3 license, supporting scripting in JavaScript and integration with external tools like GDB, WinDbg, and Frida for advanced process manipulation and dynamic analysis.[2] It operates in multiple modes—including batch, command-line, visual, and panel-based interfaces—and includes a pluginecosystem for enhancements such as decompilation (via r2ghidra) and binary lifting, making it suitable for low-level tasks in software security, malware analysis, and vulnerabilityresearch.[1] With native support for architectures like x86, ARM, MIPS, and RISC-V, as well as cross-platform compatibility on UNIX-like systems, Windows, and Android, Radare2 emphasizes modularity through libraries, standalone utilities (e.g., rasm2 for assembly, rabin2 for binaryinformation), and a web-based interface for collaborative workflows.[2] The project maintains regular releases every six weeks, with documentation available in an official book and self-help commands within the tool itself.[1]
Overview
Description and Purpose
Radare2, commonly referred to as r2, is a free and open-source reverse engineering framework and command-line toolset designed for various operating systems, including UNIX-like systems, Windows, and Android.[2] It is distributed under the GNU Lesser General Public License version 3 (LGPLv3), allowing for broad use and modification while requiring derivative works to adhere to compatible licensing terms.[2] As a comprehensive toolkit, Radare2 enables users to perform low-level operations on binaries without relying on proprietary software.The primary purposes of Radare2 include binary analysis, disassembly, debugging, emulation, patching, and forensics, all tailored for software reverse engineering and security research.[1] It supports the dissection of executable files to reveal internal structures, control flows, and behaviors, facilitating tasks such as code navigation, pattern searching, and data modification.[2] Through its extensible architecture, including scripting via r2pipe and integration with debuggers like GDB and Frida, Radare2 serves as a foundational tool for examining software at the assembly level across diverse platforms.[1]Originally developed as a simple command-line hexadecimal editor focused on forensic tasks, Radare2 has evolved into a full-featured framework capable of handling complex binaries through advanced scripting and plugin support.[2] This progression reflects its growth from basic file editing to a versatile system for emulation using the ESIL engine and visual analysis modes, enhancing its utility in intricate reverse engineering workflows.[1]Key applications of Radare2 encompass malware analysis, where it aids in disassembling and inspecting malicious binaries, such as Android trojans, to identify suspicious behaviors and extract embedded data.[3] It is also employed in vulnerability discovery, particularly for IoTfirmware, by enabling the auditing of binaries for security flaws through disassembly and emulation.[4] In exploit development, Radare2 supports the modification and testing of binaries to prototype attacks, leveraging its patching and debugging capabilities.[1] Additionally, it is widely used in embedded systems reverse engineering, providing tools for analyzing firmware and low-level software on constrained devices.[5]
Core Components
Radare2 serves as the central command-line interface (CLI) binary in the framework, enabling users to load binary files, perform analysis, and interact with the system through various modes including command-line, batch, visual, and panels. It acts as the primary entry point for reverse engineering tasks, supporting file editing, kernel memory viewing, and local or remote debugging via protocols like GDB or WinDbg.[2]r2pipe functions as the inter-process communication (IPC) library for Radare2, facilitating scripting and integration by allowing access to Radare2's core functions from external programs in multiple languages. It supports bindings in Python, JavaScript (Node.js), and Go, with backends for pipe, TCP, HTTP, RAP, and JSON protocols to enable synchronous or asynchronous interactions without direct handling of native APIs.[6]The plugin system in Radare2 enhances its extensibility, with core plugins handling essential operations such as disassembly via rasm2, which serves as a standalone assembler and disassembler supporting numerous architectures bidirectionally. Assembly is managed through dedicated asm plugins, while emulation and analysis are supported by io and anal plugins, respectively. For decompilation, the r2ghidra plugin integrates the Ghidra decompiler's C++ logic directly into Radare2, enabling advanced code recovery without requiring the full Ghidra installation. Plugins can be written in C or as external scripts and are managed via the r2pm package manager.[7][8][9]Radare2's modular architecture is built on a collection of LGPLv3-licensed libraries that support plugins for diverse operating systems, architectures, and file formats, allowing seamless extensions through C-based plugins or scripts in other languages. This design promotes portability and customization, enabling the framework to adapt to specialized reverse engineering needs.[2]Key utilities complement the core by providing focused functionalities: rabin2 extracts binary information such as imports, exports, sections, symbols, strings, and dependencies from formats like ELF, PE, Mach-O, and Java CLASS, with output options including JSON for programmatic use. radiff2 performs binary diffing, supporting one-to-one comparisons, delta patches, code analysis, and graph-based diffs across architectures. ragg2, the egg compiler, assembles relocatable code snippets or high-level scripts into minimal binaries for x86, x86-64, ARM, and other architectures, supporting outputs like raw binaries, C arrays, or executable formats with encoding and padding options for shellcode generation.[10][11][12]
History
Origins and Early Development
Radare2 originated from the radare project, initiated in February 2006 by Sergi Alvarez, known by the pseudonym "pancake," as a simple command-line hexadecimal editor designed to handle 64-bit offsets.[13][14] This initial version, often referred to as radare v1, was developed to address needs in low-level file manipulation, particularly for recovering deleted files through manual and interactive carving from disk or RAM.[15] Alvarez, working as a forensic analyst at the time, created the tool while attempting to retrieve data from an older MacBook G3, highlighting its roots in practical forensic challenges.[14]The early focus of radare emphasized forensics and basic binary editing, drawing inspiration from established Unix utilities such as xxd and hexedit for its straightforward, text-based interface.[16] This design choice aligned with the Unix philosophy of small, modular programs that interact via standard input and output, promoting simplicity and ease of integration into pipelines.[13] Motivations for its creation stemmed from the lack of free, open-source alternatives to proprietary reverse engineering tools, with a strong emphasis on portability across UNIX-like systems including Linux, BSD, and macOS.[17] By providing an accessible editor for binary data without licensing restrictions, radare aimed to empower security researchers and analysts in resource-constrained environments.[18]Initial public releases of radare v1 appeared shortly after its inception in 2006, distributed via Mercurial repositories and early documentation like the 2008 radare manual, which outlined its growing capabilities in disassembly and scripting.[13] Around 2008-2010, Alvarez undertook a complete rewrite, resulting in radare2, to improve architectural support, API cleanliness, and cross-platform compatibility, transforming it from a basic editor into a more robust framework.[19][2] This shift laid the groundwork for broader adoption while preserving the project's core commitment to open-source reverse engineering tools.
Major Releases and Evolution
Radare2 achieved its first stable release, version 1.0, in 2016, which introduced foundational multi-architecture support for disassembling and analyzing binaries across various platforms. This milestone marked the project's shift from early prototypes to a robust framework, enabling broader adoption in reverse engineering tasks. Subsequent versions built on this base, with version 3.0 released in 2018 featuring significant improvements to scripting capabilities, including enhanced support for automation through languages like JavaScript and Python. Version 5.0 followed in 2021, focusing on advancements in emulation through the ESIL virtual machine, allowing for more accurate simulation of binary execution paths during analysis.In late 2020, due to disagreements between the original author and a group of contributors, the project experienced a significant fork with the creation of Rizin, a separate reverse engineering framework. This event also led to the forking of the Cutter GUI to support Rizin, prompting the Radare2 team to re-establish its official graphical interface as Iaito in early 2021.[20][21]The project transitioned to the 6.x series starting around 2023, with ongoing releases through 2025 emphasizing performance and architecture-specific enhancements. For instance, version 6.0.5, released in late 2025, included optimizations for RISC-V and ARM64 handling, such as improved disassembly accuracy and support for Plan 9 RISC-V 64 binaries, facilitating analysis of embedded and modern processor workloads. These updates reflect the framework's maturation, with cumulative commits exceeding 24,000 by mid-2025.[2]Community-driven developments have been integral to Radare2's evolution. In 2020, the r2ghidra plugin integrated the Ghidradecompiler natively, enabling high-level decompilation within the Radare2 ecosystem without external dependencies. Additionally, in 2021, following the Rizinfork, the official graphical user interface, previously known as Cutter, was renamed to Iaito to align with the project's original vision and streamline maintenance under the radareorg umbrella.[22]Recent advancements include the introduction of the r2ai extension in 2024-2025, which leverages large language models for assisting in malware analysis, such as generating explanations for disassembled code and automating pattern recognition.[23] This was highlighted in r2con 2025 presentations on automated binary morphing, where tools like r2morph demonstrated semantic-preserving transformations for evasion analytics.[24] Since its inception on GitHub in 2011, Radare2 has been governed as an open-source project, amassing over 800 contributors by 2025 through collaborative pull requests and community events.[25]
Technical Architecture
Command-Line Interface
Radare2's command-line interface (CLI) serves as the primary method for interacting with the tool, providing a lightweight and efficient environment for reverse engineering tasks. Users initiate a session by invoking the r2 command followed by the target file path, such as r2 /bin/ls, which loads the binary into memory for analysis without requiring graphical dependencies.[26] This approach ensures consistency across platforms, including Unix-like systems, Windows, and embedded environments, making it suitable for resource-constrained settings.[2]Once loaded, the CLI supports multiple interaction modes to facilitate navigation and analysis. The visual mode, entered via the V command, offers an interactive disassembly view, while VV displays a graphical representation of control flow. Panel-based layouts are available in visual panels mode, entered via the V! command, where the p command rotates through different layouts combining views like hex dumps and disassembly. Debugging sessions can be managed with commands like dcu, which continues execution until a specified address or breakpoint. Essential analysis commands include aaa for comprehensive program analysis, pdf to disassemble the current function, and afl to list all detected functions. Patching is achieved using wx to write hexadecimal bytes at specific offsets, and strings can be extracted or exported with izz.[27][28]A typical workflow begins with loading the binary (r2 [file]), followed by analysis (aaa), function navigation (afl), and disassembly (pdf @ main). Users can then seek to offsets (s 0xaddress), patch modifications (wx 90 @ 0xdeadbeef), and export results, such as strings to a file (izz > strings.txt). This sequence enables rapid iteration from initial inspection to targeted modifications.[27]Customization enhances CLI efficiency through configuration files, aliases, and keybindings. The primary user configuration file, ~/.radare2rc, loads automatically on startup and accepts e commands to set variables, such as e scr.color=true for colored output. Aliases are defined with the $ prefix, for example, $dis=pdf to shorten disassembly calls, and can be listed with $. Keybindings, particularly in visual mode, allow remapping actions via config directives like e key.v=v for custom navigation. These features support scripting extensions for automated tasks.[29][30]The CLI's advantages lie in its minimal footprint, requiring no additional runtime libraries beyond the core binary, which promotes portability and performance on diverse hardware. Its scriptable nature, via inline commands or external files, integrates seamlessly with pipelines, while uniform syntax ensures reliability across operating systems.[2]
Libraries and Plugins
Radare2's extensibility relies on a modular architecture built around several core libraries that provide foundational functionality for input/output operations, code analysis, assembly, and binary parsing. The primary library, libr_core, manages core input/output (IO) tasks and analysis workflows, including URI-based file handling for local files, process memory, remote connections, and debugging sessions, while also supporting emulation through the ESIL engine.[1] Complementing this, libr_asm handles assembly and disassembly operations across numerous CPU architectures, enabling the conversion of mnemonic instructions to machine code and vice versa.[1] Similarly, libr_bin is responsible for parsing various binary formats, extracting structural elements such as symbols, sections, imports, and headers from executables like ELF and PE files.[1]The plugin ecosystem extends these libraries by allowing dynamic addition of specialized components without recompiling the core framework. Plugins are categorized by type, including analyzers that enhance code analysis (e.g., generating control flow graphs via anal plugins), IO plugins that abstract file system interactions for non-standard sources like network streams or debuggers, and format handlers (e.g., bin plugins) that support additional binary formats beyond the built-in ones.[7] IO plugins, in particular, wrap operations such as open, read, write, and system calls to treat diverse data sources—ranging from malloc-allocated buffers to remote processes—as virtual files, facilitating tasks like remote debugging over GDB or HTTP.[31]Plugins load dynamically at startup when the configuration variable cfg.plugins is set to true, which is the default behavior, enabling seamless integration of both core plugins (bundled with the distribution) and user-added ones installed via the r2pm package manager into directories such as ~/.local/share/radare2/plugins for user-specific extensions or system-wide paths like /usr/share/radare2/plugins.[32][7] This separation allows core plugins to provide essential commands and backends, while user plugins can extend functionality without altering the base installation.Radare2 exposes its internals through a C API for direct embedding in custom applications, offering low-level access to core functions like analysis and IO management. For integration with non-C languages, the r2pipe interface provides bindings that communicate via pipes, HTTP, TCP sockets, or the RAP protocol, supporting scripting in languages such as Python, Node.js, Ruby, and Go to automate tasks like batch analysis or tool chaining.[33][1]Representative examples of this ecosystem include the r2ghidra plugin, which integrates the Ghidra decompiler's C++ backend directly into Radare2 for function decompilation using commands like pdg after analysis, enhancing static code understanding without requiring the full Ghidra suite.[9] Another is the r2frida plugin, which combines Radare2 with Frida for dynamic instrumentation of running processes, allowing memory manipulation, script execution in JavaScript or C, and attachment to local or remote targets via IO URIs like frida://pid.[34] These plugins exemplify how the library and plugin system enables hybrid static-dynamic workflows in reverse engineering.
Key Features
Static Binary Analysis
Radare2 provides robust capabilities for static binary analysis, enabling reverse engineers to examine executable files without execution to uncover structure, logic, and potential vulnerabilities. This includes decoding instructions, recovering higher-level representations, identifying code elements, and modeling program flow, all through a command-line interface and integrated tools. These features rely on the framework's analysis engine, which processes binary data to build internal representations like function boundaries and cross-references.[35]Disassembly in Radare2 is handled primarily by the rasm2 tool and integrated commands within the main interface. Rasm2 serves as a standalone assembler and disassembler supporting numerous architectures, such as x86, ARM, and Java, by converting hexpair or binary input into readable instructions using the -d flag for basic output or -D for detailed views with offsets and bytes. For example, rasm2 -a x86 -b 32 -d '90' disassembles to [nop](/page/NOP). Within Radare2, commands like pd N disassemble N instructions at the current offset, while pD N focuses on N bytes, and pda covers all opcodes for tasks like return-oriented programming analysis.[36] For decompilation, the r2ghidra plugin integrates Ghidra's C++ decompiler to generate pseudo-C code from disassembled functions, invoked via pdg or pdgo for offset-annotated output. Installation occurs through Radare2's package manager with r2pm -i r2ghidra, and configuration options like e r2ghidra.lang=c refine the output language. This yields structured representations of control structures and variables, though accuracy depends on prior analysis.[37]Symbol and function identification begins with auto-analysis commands such as aa to scan entry points and symbols, populating internal data structures. The is command lists imports, exports, and symbols across formats, with is* setting flags for navigation; for instance, is~sym greps for specific symbols like imports. Functions are identified via af for analysis at an address, with afl listing all detected functions including address, size, basic blocks, and names—e.g., aflj outputs in JSON for scripting. Call graphs are generated using agc, which visualizes inter-function relationships; agcd exports to Graphviz DOT format for external rendering, aiding in understanding call hierarchies.[38][39][40]Control flow analysis identifies basic blocks and edges through recursive traversal post-disassembly, configured by options like anal.jmp.indir=true for indirect jumps. The afb command lists basic blocks within a function, showing start/end addresses and jump types, while manual blocks can be added with afb+. Data flow aspects include reference tracking via aar for data refs and axt for code refs to an address. Variable recovery employs afv to list locals and arguments, with afva re-analyzing for stack/register-based vars; types are inferred via afta and modified with afvt, enhancing decompilation readability. Entropy calculation for strings, useful for distinguishing code from data, uses ph entropy [len] on blocks or pze in print modes to quantify randomness—e.g., high entropy indicates encrypted strings. Strings themselves are extracted with iz for data-section listings or izz for raw searches.[38][41][42]Binary patching allows in-place modifications without external tools, using s to seek to an offset (e.g., s 0x8048300) followed by wx <hex> to write bytes—such as wx 123456 to overwrite three bytes. Changes are tracked with wc for a diff list and committed via w or w!! for the full file. This facilitates quick fixes or behavioral alterations during analysis.[43]Tool integration extends static analysis through radiff2, which performs binary diffing for similarity detection, particularly in malware families via opcode (-O) or graph (-g) modes with thresholds (e.g., -t 70%). It supports formats like JSON (-j) or unified diff (-u), enabling comparison of code structures across samples to identify variants.[11]
Dynamic Analysis and Debugging
Radare2 supports dynamic analysis through its integrated debugging capabilities, allowing users to attach to running processes, step through execution, and inspect runtime states on various platforms. Debugging sessions can be initiated in native mode using the ptracesystem call on Linux or equivalent mechanisms on other operating systems, by launching r2 -d <program> to spawn and debug a new process or r2 dbg://<PID> to attach to an existing one.[44] Remote debugging is facilitated via GDB server integration, enabling connections like r2 gdb://localhost:1234 for cross-machine or emulated environments such as QEMU.[44] Additionally, kernel-level debugging is supported through plugins such as the windbg plugin, providing low-level access to process signals and memory in multi-OS environments including GNU/Linux and Windows.[44]For instruction-level simulation without full process execution, Radare2 employs ESIL (Evaluable Strings Intermediate Language), a stack-based intermediate representation that translates CPU opcodes into a Forth-like notation for emulation across multiple architectures.[45] ESIL enables partial or imprecise full emulation to resolve behaviors like indirect branches or syscalls, initialized with commands such as aei for the virtual machine or aes to step through instructions.[46] This multi-architecture support allows simulation of non-native code, with expressions like 0,eax,=,1,zf,= representing operations such as xor eax, eax, facilitating dynamic insights independent of the host CPU.[45]Breakpoints and tracing enhance control over execution flow, with the db command family managing breakpoints—such as db <addr> to set one at a specific address or db sym.main at a function entry—and supporting conditional logic via scripts like dbc <addr> <cmd> to execute commands (e.g., register dumps) upon hit.[47] Tracing, enabled by e asm.trace=1; e dbg.trace=1, uses dt commands to record instruction paths, including dt to list traces, dt+ <addr> <times> to limit traces at an address, and dtg for graphical call/return visualizations, aiding in coverage analysis during debugging or ESIL steps.[48]Runtime inspection is streamlined through dedicated commands for registers and memory. The dr command displays or modifies registers, as in dr for all general-purpose values (e.g., rax = 0x00000000) or dr rip for a specific one, with dr* exporting states for saving and restoration via drp.[49] Memory examination via dm reveals process maps (e.g., dm lists segments like stack and heap), while dm= provides ASCII-art overviews; heap-specific analysis includes dmh to map malloc chunks and dmhg for graphical layouts of bins and pointers.[50][51]To counter anti-debugging measures, Radare2 aids in detecting and evading techniques like timing checks, where execution delays from breakpoints are measured against expected timestamps, and ptrace monitoring, which probes for tracers via syscalls like PTRACE_TRACEME that fail under attachment.[52] Users can intercept such checks by setting breakpoints on ptrace imports, modifying return values with dr to simulate success (e.g., 0), or patching binaries to alter failure conditions, often combined with tools like R2Frida for dynamic interception.[52]
Forensics and Binary Patching
Radare2 provides robust forensics capabilities through commands designed for data extraction and verification in investigative contexts. The izz command extracts printable strings across the entire binary, aiding in the identification of embedded text, URLs, or error messages that may reveal artifacts in malware or corrupted files. Similarly, the ph command computes cryptographic hashes such as MD5 or SHA-256 for specified blocks, enabling integrity checks against known good samples during evidence validation.[42] For data carving, the pc command displays raw bytes in columnar format, facilitating manual recovery of file headers or structures from unstructured disk sectors without relying on file systemmetadata.In binary manipulation, Radare2 supports non-destructive editing via write mode invoked with r2 -w, allowing users to apply patches while preserving the original file through undo mechanisms like seek reversal (u command).[53] Block-based editing uses the b command to define granular sections for modification, such as altering opcodes or injecting payloads, which is essential for firmwarereverse engineering. Firmware extraction leverages these tools by loading raw images and carving embedded binaries, often combining searches for magic bytes with block exports to isolate components like bootloaders.[5]For vulnerability exploitation, Radare2 includes aids like the /R search for ROP gadgets, which scans for instruction sequences ending in returns (e.g., /R pop rdi; ret), supporting chain construction in exploit development.[54] Crypto constant detection employs the /ca command to identify expanded AES or SM4 keys within binaries, helping uncover hardcoded secrets in security assessments.[55]File recovery in Radare2 handles corrupted binaries by parsing partial structures with commands like iS for sections and iz for residual strings, even when headers are damaged. Sector analysis of disk images involves loading raw devices (e.g., r2 /dev/sda) and using offset-based seeks with s to probe for recoverable data, originating from its roots as a carving tool for RAM and disk forensics.[56]Integration with external forensics workflows is facilitated by export options, such as tools in the radare2ida repository for generating IDC scripts importable into IDA Pro, enabling seamless transfer of analysis annotations.[57] For memory forensics, Radare2 can process memory dumps by loading them as binary files, compatible with outputs from tools like Volatility, and outputs hex or JSON data for cross-tool correlation.
Scripting and Automation
Radare2 supports extensive scripting and automation capabilities through its r2pipe API, which enables programmatic interaction with the tool for creating repeatable workflows and custom analysis tasks. The r2pipe API facilitates inter-process communication (IPC) using JSON-formatted output, allowing users to pipe commands to a running Radare2 instance via backends such as spawn pipes (e.g., r2 -0), HTTP queries for cloud environments, or TCP sockets (e.g., r2 -c). This design originated as a NodeJS interface to extend the web-based r2.js API to command-line usage, but it has since been implemented across multiple languages.[33]Scripting in Radare2 is achieved through built-in support for JavaScript via the R2JS runtime, an embedded QuickJS ES6 interpreter introduced in version 5.8.x, which allows execution of .r2.js files using the . command or the -i flag (e.g., r2 -i script.r2.js /bin/ls). For evaluation within the shell, dot commands (prefixed with .) load and run scripts directly, supporting quick prototyping without external dependencies. Python integration occurs via r2pipe bindings, where users can open binaries and issue commands programmatically, such as import r2pipe; r2 = r2pipe.open("/bin/ls"); r2.cmd("aa"); print(r2.cmdj("aflj")) to perform analysis and retrieve JSON-formatted function lists. These mechanisms enable seamless automation of reverse engineering tasks.[58][59][33]Radare2 provides official language bindings generated via Valabind and SWIG for Python, Go, Ruby, JavaScript, Java, Perl, Lua, and Vala, allowing direct access to the core API for embedding in larger applications. Community-maintained bindings extend this to languages like Rust and OCaml. For instance, the Go binding supports r2pipe operations for tasks like binary loading and command execution. These bindings facilitate the development of automated tools that leverage Radare2's analysis engine without relying solely on command-line piping.[60]Automation examples include batch analysis scripts that process multiple binaries, such as iterating over a directory with for i in ./*; do r2pipe_script $i; done, where the script opens each file, runs full analysis (aaa), and extracts data like call graphs or strings. Custom analyzers can be implemented as C plugins in the libr/anal/p/directory, using skeletons from r2skel to extend the analysisframework for specific architectures or logic, which are then loaded dynamically to enhance core functionality.[61][7][62]Advanced automation involves hooking into analysis callbacks through the core API, particularly in emulation and plugin contexts, to enable real-time processing during disassembly or function analysis. For example, ESIL (Radare2's emulator) uses callbacks for interrupt handling and traps, allowing scripts to intercept and modify analysis flows dynamically via bindings or C extensions. This supports custom workflows like on-the-fly data annotation in large-scale binary reviews.[45][63]
User Interfaces
Graphical Interfaces
Iaito serves as the official graphical user interface (GUI) for Radare2, providing a Qt-based frontend that enhances the framework's core capabilities with visual tools for reverse engineering tasks.[22] Originally named Iaito and renamed to Cutter in 2017, following the Rizin fork it was renamed back to Iaito for the Radare2 version, supporting cross-platform operation on Linux, macOS, and Windows, emphasizing simplicity and parity with Radare2's command-line features.[64] Key functionalities include interactive disassembly views, control flow graphs for navigation, hex editors for binary manipulation, and a forensics mode for detailed analysis, all integrated seamlessly with Radare2's backend.[22] Additionally, Iaito accommodates plugin support, allowing users to leverage extensions like r2yara for YARA-based pattern matching directly within its interface.[65]Beyond full GUIs like Iaito, Radare2 incorporates built-in visual modes accessible via terminal commands, offering lightweight graphical extensions for users preferring a command-line environment. The V mode displays an interactive assembly and hex view with cursor navigation, while VV enables graph-based visualization of codeflow, facilitating quick disassembly inspection without external tools.[66] These modes provide essential visual feedback, such as zooming and panel layouts, but remain tied to the CLI paradigm.Other community-developed graphical interfaces include web-based options like the Radare2 WebUI, which enables browser-accessible analysis through HTTP servers, supporting remote disassembly and graphing for collaborative workflows.[67] Compared to the core CLI, these graphical interfaces offer advantages such as drag-and-drop file loading, multi-tabbed sessions for managing multiple binaries, and intuitive navigation tools that lower the entry barrier for beginners while preserving advanced scripting capabilities.[68]Recent developments in Iaito, with version 6.0.4 released in October 2025, align closely with Radare2 6.0.4, incorporating enhancements like improved plugin compatibility and support for AI-assisted analysis through the r2ai extension, which integrates large language models for tasks such as automated decompilation and annotation.[69][23] This evolution maintains Iaito's role as a user-friendly layer atop Radare2's robust architecture, promoting broader adoption in reverse engineering communities.[64]
Integration with Other Tools
Radare2 facilitates integration with external tools through its r2pipe interface, which provides a command-line and API mechanism for scripting and piping data in various programming languages, enabling seamless workflows with reverse engineering software such as IDA Pro, Ghidra, and Binary Ninja.[6] This allows users to automate tasks like importing analysis results or exporting disassembly data via scripts, for instance, using Python bindings to bridge Radare2's output with Ghidra's scripting environment. Such integrations enhance interoperability without requiring native support in the external tools.For dynamic analysis, Radare2 connects with Frida through the r2frida plugin, which combines static disassembly with runtime instrumentation to inspect and manipulate processes across platforms like iOS, Android, and Linux.[70] Additionally, Radare2 supports QEMU for full-system emulation, allowing users to execute and analyze binaries in emulated environments via its ESIL emulator, which can pipe execution traces back into Radare2 sessions.[1]Data sharing is enabled through export and import capabilities in formats like JSON for structured output of symbols, sections, and analysis results, as well as support for importing IDA Pro's IDB databases using the ida2r2.py script based on python-idb.[71] PDB files for Windows executables can be parsed via the rabin2 tool to extract type information and symbols.[10] These features position Radare2 as a backend for custom applications, where its C libraries and r2pipe allow embedding binary analysis into larger pipelines, such as security research tools.In exploit development, Radare2 integrates with Metasploit by using its emulation to unpack and analyze encoded payloads, facilitating the creation of custom exploits through scripted disassembly and patching.[72] For network forensics, it complements tools like Wireshark by exporting binary data for correlation with packet captures in mixed-protocol investigations.The Radare2 ecosystem includes tools like r2dec, a decompilerplugin that generates pseudo-C code from assembly, installable to extend output for integration with higher-level analysis pipelines.[73] Package management is handled by r2pm, which simplifies installing and updating third-party plugins and bindings to maintain compatibility with external workflows.[74]
Supported Platforms
Architectures
Radare2 provides disassembly and emulation support for a wide range of CPU architectures, enabling reverse engineers to analyze binaries across diverse instruction set architectures (ISAs).[75] The framework's architecture plugins leverage libraries such as Capstone for disassembly and custom implementations for assembly and emulation, ensuring compatibility with both big-endian and little-endian byte orders in architectures like ARM and MIPS.[75]Among the core supported ISAs are x86 and x86-64 for Intel and AMD processors, ARM in 32-bit and 64-bit variants (including Thumb mode for compact 16-bit instructions), MIPS in 32-bit and 64-bit forms (with handling for DSP extensions), RISC-V for modern open-source designs, PowerPC for embedded and server systems, SPARC for legacy Unix workstations, and AVR for microcontrollers.[75] These architectures cover a spectrum from general-purpose computing to embedded devices, with Radare2 supporting over 60 ISAs as of 2025.[75] Users can query the full list of supported architectures using the command-line tool rasm2 -L or the in-session command La within Radare2.[75]For emulation, Radare2's ESIL (Radare2 Emulation Standard Intermediate Language) provides partial coverage for key architectures such as ARM and RISC-V, facilitating dynamic analysis and simulation of instruction execution.[75] Ongoing improvements in version 6.x, released starting in 2023, have enhanced ESIL's visual debugging and instruction emulation accuracy for these ISAs. However, support for emerging ISAs like WebAssembly, with disassembly and emulation capabilities.[75]
File Formats and Operating Systems
Radare2 supports a wide array of binary file formats through its core library, libr_bin, enabling comprehensive analysis of executables across various platforms. Key formats include ELF for Linux and Unix-like systems, PE and PE+ for Windows, Mach-O and Fat Mach-O for macOS and iOS, DEX and ART for Android applications, and raw firmware formats such as BIN, UBOOT (via MBN/SBL loaders), BIOS/UEFI, and Android boot images.[2][10]The libr_bin library provides robust parsing capabilities for these formats, extracting structural elements like section headers, symbol tables, and relocations to facilitate detailed binary inspection. It also handles debug information in formats such as DWARF for ELF and Mach-O binaries, and PDB for Windows PE files, allowing users to access variable names, source line mappings, and type information without relying on platform-specific APIs.[76][10]As a host application, Radare2 runs on major operating systems including Linux, Windows (from XP onward), macOS, BSD variants, Android, and iOS, with additional support for niche environments like GNU/Hurd, QNX, Solaris, and Haiku. For target analysis, it accommodates binaries from these hosts as well as embedded operating systems such as real-time OS (RTOS) in firmware, enabling cross-debugging and emulation of diverse runtime environments.[2][44]Radare2's cross-platform nature is bolstered by its build systems, which include Meson paired with Ninja for modern, efficient compilation across architectures, and traditional GNU Make; packaging is streamlined via the sys/install.sh script for major Linux distributions. In version 6.x releases, enhancements have improved Android and iOS integration, such as fixing file-locking regressions on Android to better support mobile reverse engineering workflows.[77]
Community and Extensions
Development Community
The Radare2 project is primarily led by its founder, Sergi Álvarez, known online as "pancake," who initiated development in 2006 as a tool for forensic analysis and has remained the central figure in its evolution into a comprehensive reverse engineeringframework.[78] While pancake handles much of the core architecture and maintenance, the project relies on a distributed group of contributors with expertise in areas such as forensics. For example, the REMnux distribution integrates Radare2 for malwarereverse engineering tasks. This involvement from users and integrators supports ongoing enhancements in areas like binary analysis and debugging, with decisions often coordinated through informal leadership among frequent committers.Contributions to Radare2 follow an open-source model centered on its GitHub repository, where developers submit pull requests and report issues to propose and review changes.[2] Community discussions occur via GitHub Discussions for broader announcements and collaboration, and the IRC channel #radare on Libera.Chat for real-time support.[79] This structure encourages participation from newcomers through labeled "good first issues" and documentation guidelines, fostering incremental improvements in code, plugins, and usability.[80]The development community is notably diverse and international, with over 935 contributors to the GitHub repository as of late 2025, reflecting strong involvement from Europe—rooted in pancake's Spanish origins—and Latin America, alongside global participants from Asia and North America.[2] This broad base has enabled the project's growth, with contributions spanning code enhancements, bug fixes, and feature requests from users worldwide.Sustainability is supported through donations via Open Collective, which funds development time and infrastructure, supplemented by corporate sponsorships for annual events like r2con. Documentation efforts include the official Radare2 book, updated in 2024 to cover version 5.8 and later, alongside a community-maintained wiki and video tutorials available through project channels.[81]
Plugins and Third-Party Tools
Radare2's plugin ecosystem is facilitated by r2pm, its dedicated package manager, which enables users to install and manage external extensions that enhance the framework's capabilities for reverse engineering tasks.[74] Notable official plugins include r2yara, which integrates the Yara pattern-matching tool into Radare2 to identify and classify binary patterns using customizable rules.[82] Another key extension is r2frida, which combines Radare2's static analysis with Frida's dynamic instrumentation to inspect and manipulate running processes locally or remotely.[34] These plugins can be seamlessly installed via r2pm commands within the Radare2 environment, promoting modularity without altering the core framework.[7]Third-party tools extend Radare2's functionality through community-developed integrations and forks. r2dec serves as a decompiler plugin, providing structured code output from disassembled binaries to aid in deeper analysis.[7] Rizin, a fork of Radare2 created due to development disagreements, focuses on improved usability, code cleanliness, and feature stability. The r2ai plugin introduces AI-driven capabilities, leveraging large language models for automated reversing and decompilation, particularly effective in 2024-2025 malware analytics for Linux and IoT samples.[23][83] This tool demonstrates high accuracy in tasks like function naming and vulnerability detection, reducing manual effort in complex binaries.[84]The annual r2con conference fosters innovation in Radare2's ecosystem, with the 2025 edition emphasizing evasion analytics and multi-architecture support through sessions on obfuscation techniques, binary research, and live demonstrations.[24] Community resources for plugins and tools are abundant on GitHub, where repositories like radareorg/radare2 host core code, documentation, and extension development guidelines.[2]Reverse Engineering Stack Exchange provides Q&A forums for troubleshooting plugin integrations and usage scenarios. Integrations with other tools, such as Ghidra's r2 importer via r2ghidra and r4ghidra plugins, allow bidirectional communication for enhanced decompilation and analysis workflows.[9][85]Looking ahead, Radare2's plugin development prioritizes AI and machine learning extensions, building on r2ai for advanced malware dissection, alongside improved WebAssembly support through browser-based builds like r2web for client-side reversing post-2025.[23][24] These directions aim to address emerging challenges in dynamic analysis and cross-platform compatibility.