Provided by: radare2_6.0.4+dfsg-1_amd64 

NAME
r_bin — Radare2 Binary Analysis Library API
SYNOPSIS
#include <r_bin.h>
DESCRIPTION
High-level helpers for opening, inspecting and manipulating executable files are exposed through the
r_bin API. It hides loader and format differences behind a uniform set of objects (for example RBin ,
RBinFile and RBinObject ) and lets callers enumerate symbols, sections, imports, relocations and other
useful metadata. The implementation relies on format plugins so callers can work with ELF, PE, Mach-O,
DEX and other formats using the same API.
Main responsibilities: probing and opening files, returning parsed metadata, offering demanglers and
helpers to read section bytes or line/debug info. The library does not perform control‑flow analysis —
use r_anal(3) and r_core(3) for higher level analysis.
INITIALIZATION
Allocate an RBin context with r_bin_new () and tear it down with r_bin_free ()
To parse a file, initialise an RBinFileOptions with r_bin_file_options_init () and call r_bin_open ().
Keep a reference to the previously selected file if you will open extra files (see examples below); the
API provides helpers to switch the "current" file and to delete opened binfiles.
RBin * r_bin_new(void)
Create a new binary analysis context. void r_bin_free(RBin *bin)
Free a binary analysis context. bool r_bin_open(RBin *bin, const char *file, RBinFileOptions *opt)
Open a binary file for analysis with given options.
BINARY INFORMATION
After opening a file the API exposes a compact RBinInfo structure that summarises detected architecture,
bits, endianness and a few security-related features (NX, canary, etc.). Use r_bin_get_info () to obtain
it.
Symbol, section and import accessors return either RList or vector types such as RVecRBinSymbol libr/core
RBinInfo * r_bin_get_info(RBin *bin)
Retrieve general information about the binary (architecture, OS, etc.). RList * r_bin_get_sections(RBin
*bin)
Get a list of sections in the binary. RList * r_bin_get_symbols(RBin *bin)
Get a list of symbols in the binary. RVecRBinSymbol * r_bin_get_symbols_vec(RBin *bin)
Get a vector of symbols for efficient iteration. RList * r_bin_get_imports(RBin *bin)
Get a list of imported symbols. RList * r_bin_get_entries(RBin *bin)
Get a list of entry points. RList * r_bin_get_strings(RBin *bin)
Get a list of strings in the binary. RRBTree * r_bin_get_relocs(RBin *bin)
Get relocation information. RList * r_bin_get_classes(RBin *bin)
Get a list of classes (for object-oriented binaries).
PLUGIN MANAGEMENT
Format support is implemented as plugins; the bin API exposes helpers to register or list plugins. Normal
callers do not need to manipulate plugin objects directly — opening a file triggers plugin discovery
automatically based on the file header and configured extract/load plugins.
bool r_bin_plugin_add(RBin *bin, RBinPlugin *plugin)
Add a binary format plugin to the registry. void r_bin_list(RBin *bin, PJ *pj, int format)
List available plugins or loaded binaries (format controls output style).
DEMANGLING
Radare2 exposes several demanglers. Call r_bin_demangle () to attempt demangling with an explicit
language name or use language-specific helpers like r_bin_demangle_cxx (), r_bin_demangle_rust () or
r_bin_demangle_java (). Pass the current RBinFile when the demangler needs context (for example some Rust
and C++ demanglers consult binary metadata or symbol addresses).
Note: these functions return heap-allocated strings that must be freed by the caller.
char * r_bin_demangle(RBinFile *binfile, const char *lang, const char *str, ut64 vaddr, bool libs)
Attempt to demangle a string using the specified language and optional vaddr. char *
r_bin_demangle_java(const char *str)
Demangle a Java symbol. char * r_bin_demangle_cxx(RBinFile *binfile, const char *str, ut64 vaddr)
Demangle a C++ symbol using optional binary context.
FILE OPERATIONS
r_bin keeps a notion of a "current" opened RBinFile that many callers use as implicit context (for
example demanglers and format-specific helpers). Obtain it with r_bin_cur ().
To switch between multiple opened files use r_bin_file_set_cur_binfile () and use r_bin_file_delete () to
close and remove opened binfiles when no longer required. When opening secondary files from a running
program (for example to look up a symbol in libc) save the previous current file, open the new one and
restore the old one when finished — see examples below.
RBinFile * r_bin_cur(RBin *bin)
Get the current binary file. bool r_bin_select(RBin *bin, const char *arch, int bits, const char *name)
Select a binary object by architecture and name. bool r_bin_file_close(RBin *bin, int bd)
Close a binary file descriptor (helper for raw fd-based operations).
ADDRESS LINE INFORMATION
If the binary contains debug information the bin API can return address → source mappings through
r_bin_addrline_at ().
Address line data is stored per RBinFile and callers can reset or iterate the internal storage with
r_bin_addrline_reset () and associated helpers. These facilities are commonly used by frontends to show
filename/line information for a given instruction address.
RBinAddrline * r_bin_addrline_at(RBin *bin, ut64 addr)
Get debug line information for an address. void r_bin_addrline_reset(RBin *bin)
Reset stored address line information for the current file.
BINARY WRITING
Lightweight helpers to patch metadata are provided, such as adding a dependency or changing the entry
point. These are convenience wrappers and do not replace a full binary rewriter; use them for small
modifications exposed in the CLI and plugins.
bool r_bin_wr_addlib(RBin *bin, const char *lib)
Add a library dependency to the binary. bool r_bin_wr_entry(RBin *bin, ut64 addr)
Set the entry point address for the current binary.
FILTERING
Symbol and string filters let callers reduce the amount of reported data (for example hiding platform
runtime symbols). Use r_bin_load_filter () to set filtering rules and r_bin_string_filter () to test
strings against the active filter.
void r_bin_load_filter(RBin *bin, ut64 rules)
Load symbol filtering rules into the current context. bool r_bin_string_filter(RBin *bin, const char
*str, ut64 addr)
Test whether a given string matches the active string filter.
EXAMPLES
The examples below show common patterns found in libr/core —opening a secondary file (for example libc),
iterating symbols with the vector API and restoring the previous current file; and using the demanglers.
/* Open a file and inspect basic info */
RBin *bin = r_bin_new ();
RBinFileOptions opt;
/* helper that fills sensible defaults */
r_bin_file_options_init (&opt, -1, 0, 0, false);
if (!r_bin_open (bin, "/usr/lib/libc.so.6", &opt)) {
fprintf (stderr, "failed to open file0);
r_bin_free (bin);
return;
}
/* RBinInfo summarises arch/bits and security features */
RBinInfo *info = r_bin_get_info (bin);
if (info) {
printf ("file=%s arch=%s bits=%d nx=%d canary=%d0,
info->file, info->arch, info->bits, info->has_nx, info->has_canary);
}
/* Iterate symbols efficiently using the vector API (used in core code) */
RVecRBinSymbol *syms = r_bin_get_symbols_vec (bin);
RBinSymbol *s;
R_VEC_FOREACH (syms, s) {
const char *name = r_bin_name_tostring (s->name);
printf ("%s @ 0x%"PFMT64x"0, name, s->vaddr);
}
/* When opening helper libraries from a running process, remember to close them */
/* Example pattern (used in dmh_glibc.inc.c):
* RBinFile *prev = r_bin_cur (core->bin);
* r_bin_open (core->bin, path, &opt);
* // use core->bin (current) for lookups
* r_bin_file_delete (core->bin, r_bin_cur (core->bin)->id);
* r_bin_file_set_cur_binfile (core->bin, prev);
*/
r_bin_free (bin);
/* Demangle an identifier using the current file context */
RBin *bin = r_bin_new ();
/* open file earlier and make it the current file */
RBinFile *cur = r_bin_cur (bin);
char *dem = r_bin_demangle_cxx (cur, "_ZN4Test4funcEi", 0);
if (dem) {
puts (dem);
free (dem);
}
r_bin_free (bin);
SEE ALSO
r_core(3), r_anal(3), r_flag(3)
AUTHORS
The radare2 project team.
Debian September 20, 2025 R_BIN(3)