2014-03-27 16:34:17 +01:00
|
|
|
#ifndef R2_BIN_H
|
|
|
|
#define R2_BIN_H
|
2009-02-05 22:08:46 +01:00
|
|
|
|
2010-02-07 14:11:05 +01:00
|
|
|
#include <r_util.h>
|
2009-03-08 16:49:15 +01:00
|
|
|
#include <r_types.h>
|
2013-12-09 04:56:13 +01:00
|
|
|
#include <r_io.h>
|
2019-07-25 14:37:46 +02:00
|
|
|
#include <r_cons.h>
|
2010-01-14 12:13:48 +01:00
|
|
|
#include <r_list.h>
|
2020-07-06 13:43:48 +02:00
|
|
|
|
|
|
|
typedef struct r_bin_t RBin;
|
|
|
|
|
2012-07-12 02:47:04 +02:00
|
|
|
#include <r_bin_dwarf.h>
|
2014-10-13 11:20:45 +03:00
|
|
|
#include <r_pdb.h>
|
2009-02-05 22:08:46 +01:00
|
|
|
|
2013-06-18 12:09:23 +02:00
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
2013-06-14 02:51:33 +02:00
|
|
|
R_LIB_VERSION_HEADER (r_bin);
|
|
|
|
|
2014-06-13 15:19:09 +02:00
|
|
|
#define R_BIN_DBG_STRIPPED 0x01
|
|
|
|
#define R_BIN_DBG_STATIC 0x02
|
|
|
|
#define R_BIN_DBG_LINENUMS 0x04
|
|
|
|
#define R_BIN_DBG_SYMS 0x08
|
|
|
|
#define R_BIN_DBG_RELOCS 0x10
|
2009-02-05 22:08:46 +01:00
|
|
|
|
2016-03-11 07:56:30 +05:30
|
|
|
#define R_BIN_ENTRY_TYPE_PROGRAM 0
|
2016-03-12 11:16:42 +01:00
|
|
|
#define R_BIN_ENTRY_TYPE_MAIN 1
|
|
|
|
#define R_BIN_ENTRY_TYPE_INIT 2
|
|
|
|
#define R_BIN_ENTRY_TYPE_FINI 3
|
|
|
|
#define R_BIN_ENTRY_TYPE_TLS 4
|
2018-04-09 14:32:51 +08:00
|
|
|
#define R_BIN_ENTRY_TYPE_PREINIT 5
|
2016-03-11 07:56:30 +05:30
|
|
|
|
2013-04-25 03:42:17 +02:00
|
|
|
#define R_BIN_SIZEOF_STRINGS 512
|
2010-10-01 04:26:52 +02:00
|
|
|
#define R_BIN_MAX_ARCH 1024
|
2009-02-05 22:08:46 +01:00
|
|
|
|
2016-04-23 00:47:00 +02:00
|
|
|
#define R_BIN_REQ_ALL UT64_MAX
|
|
|
|
#define R_BIN_REQ_UNK 0x000000
|
|
|
|
#define R_BIN_REQ_ENTRIES 0x000001
|
|
|
|
#define R_BIN_REQ_IMPORTS 0x000002
|
|
|
|
#define R_BIN_REQ_SYMBOLS 0x000004
|
|
|
|
#define R_BIN_REQ_SECTIONS 0x000008
|
|
|
|
#define R_BIN_REQ_INFO 0x000010
|
|
|
|
#define R_BIN_REQ_OPERATION 0x000020
|
|
|
|
#define R_BIN_REQ_HELP 0x000040
|
|
|
|
#define R_BIN_REQ_STRINGS 0x000080
|
|
|
|
#define R_BIN_REQ_FIELDS 0x000100
|
|
|
|
#define R_BIN_REQ_LIBS 0x000200
|
|
|
|
#define R_BIN_REQ_SRCLINE 0x000400
|
|
|
|
#define R_BIN_REQ_MAIN 0x000800
|
|
|
|
#define R_BIN_REQ_EXTRACT 0x001000
|
|
|
|
#define R_BIN_REQ_RELOCS 0x002000
|
|
|
|
#define R_BIN_REQ_LISTARCHS 0x004000
|
|
|
|
#define R_BIN_REQ_CREATE 0x008000
|
|
|
|
#define R_BIN_REQ_CLASSES 0x010000
|
|
|
|
#define R_BIN_REQ_DWARF 0x020000
|
|
|
|
#define R_BIN_REQ_SIZE 0x040000
|
|
|
|
#define R_BIN_REQ_PDB 0x080000
|
|
|
|
#define R_BIN_REQ_PDB_DWNLD 0x100000
|
|
|
|
#define R_BIN_REQ_DLOPEN 0x200000
|
|
|
|
#define R_BIN_REQ_EXPORTS 0x400000
|
|
|
|
#define R_BIN_REQ_VERSIONINFO 0x800000
|
2017-08-09 10:21:52 +02:00
|
|
|
#define R_BIN_REQ_PACKAGE 0x1000000
|
|
|
|
#define R_BIN_REQ_HEADER 0x2000000
|
|
|
|
#define R_BIN_REQ_LISTPLUGINS 0x4000000
|
|
|
|
#define R_BIN_REQ_RESOURCES 0x8000000
|
2019-06-29 01:45:44 +02:00
|
|
|
#define R_BIN_REQ_INITFINI 0x10000000
|
|
|
|
#define R_BIN_REQ_SEGMENTS 0x20000000
|
|
|
|
#define R_BIN_REQ_HASHES 0x40000000
|
2019-01-24 17:22:53 +01:00
|
|
|
#define R_BIN_REQ_SIGNATURE 0x80000000
|
2019-06-29 01:45:44 +02:00
|
|
|
#define R_BIN_REQ_TRYCATCH 0x100000000
|
2020-03-02 12:44:49 +07:00
|
|
|
#define R_BIN_REQ_SECTIONS_MAPPING 0x200000000
|
2016-04-23 00:47:00 +02:00
|
|
|
|
2017-04-12 02:27:27 +02:00
|
|
|
/* RBinSymbol->method_flags : */
|
|
|
|
#define R_BIN_METH_CLASS 0x0000000000000001L
|
|
|
|
#define R_BIN_METH_STATIC 0x0000000000000002L
|
|
|
|
#define R_BIN_METH_PUBLIC 0x0000000000000004L
|
|
|
|
#define R_BIN_METH_PRIVATE 0x0000000000000008L
|
|
|
|
#define R_BIN_METH_PROTECTED 0x0000000000000010L
|
|
|
|
#define R_BIN_METH_INTERNAL 0x0000000000000020L
|
|
|
|
#define R_BIN_METH_OPEN 0x0000000000000040L
|
|
|
|
#define R_BIN_METH_FILEPRIVATE 0x0000000000000080L
|
|
|
|
#define R_BIN_METH_FINAL 0x0000000000000100L
|
|
|
|
#define R_BIN_METH_VIRTUAL 0x0000000000000200L
|
|
|
|
#define R_BIN_METH_CONST 0x0000000000000400L
|
|
|
|
#define R_BIN_METH_MUTATING 0x0000000000000800L
|
|
|
|
#define R_BIN_METH_ABSTRACT 0x0000000000001000L
|
|
|
|
#define R_BIN_METH_SYNCHRONIZED 0x0000000000002000L
|
|
|
|
#define R_BIN_METH_NATIVE 0x0000000000004000L
|
|
|
|
#define R_BIN_METH_BRIDGE 0x0000000000008000L
|
|
|
|
#define R_BIN_METH_VARARGS 0x0000000000010000L
|
|
|
|
#define R_BIN_METH_SYNTHETIC 0x0000000000020000L
|
|
|
|
#define R_BIN_METH_STRICT 0x0000000000040000L
|
|
|
|
#define R_BIN_METH_MIRANDA 0x0000000000080000L
|
|
|
|
#define R_BIN_METH_CONSTRUCTOR 0x0000000000100000L
|
|
|
|
#define R_BIN_METH_DECLARED_SYNCHRONIZED 0x0000000000200000L
|
|
|
|
|
2018-06-26 13:48:53 +02:00
|
|
|
#define R_BIN_BIND_LOCAL_STR "LOCAL"
|
|
|
|
#define R_BIN_BIND_GLOBAL_STR "GLOBAL"
|
|
|
|
#define R_BIN_BIND_WEAK_STR "WEAK"
|
|
|
|
#define R_BIN_BIND_NUM_STR "NUM"
|
|
|
|
#define R_BIN_BIND_LOOS_STR "LOOS"
|
|
|
|
#define R_BIN_BIND_HIOS_STR "HIOS"
|
|
|
|
#define R_BIN_BIND_LOPROC_STR "LOPROC"
|
|
|
|
#define R_BIN_BIND_HIPROC_STR "HIPROC"
|
|
|
|
#define R_BIN_BIND_UNKNOWN_STR "UNKNOWN"
|
|
|
|
|
|
|
|
#define R_BIN_TYPE_NOTYPE_STR "NOTYPE"
|
|
|
|
#define R_BIN_TYPE_OBJECT_STR "OBJ"
|
|
|
|
#define R_BIN_TYPE_FUNC_STR "FUNC"
|
2018-11-14 17:30:38 +01:00
|
|
|
#define R_BIN_TYPE_METH_STR "METH"
|
2019-03-28 14:38:11 +05:30
|
|
|
#define R_BIN_TYPE_STATIC_STR "STATIC"
|
2018-06-26 13:48:53 +02:00
|
|
|
#define R_BIN_TYPE_SECTION_STR "SECT"
|
|
|
|
#define R_BIN_TYPE_FILE_STR "FILE"
|
|
|
|
#define R_BIN_TYPE_COMMON_STR "COMMON"
|
|
|
|
#define R_BIN_TYPE_TLS_STR "TLS"
|
|
|
|
#define R_BIN_TYPE_NUM_STR "NUM"
|
|
|
|
#define R_BIN_TYPE_LOOS_STR "LOOS"
|
|
|
|
#define R_BIN_TYPE_HIOS_STR "HIOS"
|
|
|
|
#define R_BIN_TYPE_LOPROC_STR "LOPROC"
|
|
|
|
#define R_BIN_TYPE_HIPROC_STR "HIPROC"
|
2019-05-09 11:35:01 +02:00
|
|
|
#define R_BIN_TYPE_SPECIAL_SYM_STR "SPCL"
|
2018-06-26 13:48:53 +02:00
|
|
|
#define R_BIN_TYPE_UNKNOWN_STR "UNK"
|
|
|
|
|
2010-11-17 21:15:34 +01:00
|
|
|
enum {
|
|
|
|
R_BIN_SYM_ENTRY,
|
|
|
|
R_BIN_SYM_INIT,
|
|
|
|
R_BIN_SYM_MAIN,
|
2010-11-18 11:41:17 +01:00
|
|
|
R_BIN_SYM_FINI,
|
|
|
|
R_BIN_SYM_LAST
|
2010-11-17 21:15:34 +01:00
|
|
|
};
|
|
|
|
|
2011-02-23 20:53:56 +01:00
|
|
|
// name mangling types
|
2015-06-15 05:04:29 +02:00
|
|
|
// TODO: Rename to R_BIN_LANG_
|
2011-02-23 20:53:56 +01:00
|
|
|
enum {
|
2012-08-04 23:48:06 +02:00
|
|
|
R_BIN_NM_NONE = 0,
|
|
|
|
R_BIN_NM_JAVA = 1,
|
2019-06-16 18:36:33 +02:00
|
|
|
R_BIN_NM_C = 1<<1,
|
|
|
|
R_BIN_NM_GO = 1<<2,
|
|
|
|
R_BIN_NM_CXX = 1<<3,
|
|
|
|
R_BIN_NM_OBJC = 1<<4,
|
|
|
|
R_BIN_NM_SWIFT = 1<<5,
|
|
|
|
R_BIN_NM_DLANG = 1<<6,
|
|
|
|
R_BIN_NM_MSVC = 1<<7,
|
|
|
|
R_BIN_NM_RUST = 1<<8,
|
2019-07-22 20:44:20 +02:00
|
|
|
R_BIN_NM_KOTLIN = 1<<9,
|
2019-06-16 18:36:33 +02:00
|
|
|
R_BIN_NM_BLOCKS = 1<<31,
|
2012-08-04 23:48:06 +02:00
|
|
|
R_BIN_NM_ANY = -1,
|
2011-02-23 20:53:56 +01:00
|
|
|
};
|
|
|
|
|
2016-11-18 13:28:50 +01:00
|
|
|
enum {
|
|
|
|
R_STRING_TYPE_DETECT = '?',
|
|
|
|
R_STRING_TYPE_ASCII = 'a',
|
|
|
|
R_STRING_TYPE_UTF8 = 'u',
|
2017-06-20 10:57:00 -05:00
|
|
|
R_STRING_TYPE_WIDE = 'w', // utf16 / widechar string
|
|
|
|
R_STRING_TYPE_WIDE32 = 'W', // utf32
|
2016-11-18 13:28:50 +01:00
|
|
|
R_STRING_TYPE_BASE64 = 'b',
|
|
|
|
};
|
|
|
|
|
2011-10-05 02:38:37 +02:00
|
|
|
enum {
|
|
|
|
R_BIN_CLASS_PRIVATE,
|
|
|
|
R_BIN_CLASS_PUBLIC,
|
|
|
|
R_BIN_CLASS_FRIENDLY,
|
|
|
|
R_BIN_CLASS_PROTECTED,
|
|
|
|
};
|
2011-06-26 20:29:24 +02:00
|
|
|
|
2013-07-17 22:18:21 +03:00
|
|
|
enum {
|
2014-04-05 12:09:41 +02:00
|
|
|
R_BIN_RELOC_8 = 8,
|
|
|
|
R_BIN_RELOC_16 = 16,
|
|
|
|
R_BIN_RELOC_32 = 32,
|
|
|
|
R_BIN_RELOC_64 = 64
|
2013-07-17 22:18:21 +03:00
|
|
|
};
|
|
|
|
|
2018-03-15 11:46:07 +01:00
|
|
|
enum {
|
|
|
|
R_BIN_TYPE_DEFAULT = 0,
|
|
|
|
R_BIN_TYPE_CORE = 1
|
|
|
|
};
|
|
|
|
|
2012-07-21 14:11:21 +04:00
|
|
|
typedef struct r_bin_addr_t {
|
2014-05-21 03:18:00 +02:00
|
|
|
ut64 vaddr;
|
|
|
|
ut64 paddr;
|
2018-07-31 21:24:07 +08:00
|
|
|
ut64 hvaddr;
|
2018-08-04 08:17:37 +08:00
|
|
|
ut64 hpaddr;
|
2016-03-11 07:56:30 +05:30
|
|
|
int type;
|
2016-06-18 01:12:19 +02:00
|
|
|
int bits;
|
2012-07-21 14:11:21 +04:00
|
|
|
} RBinAddr;
|
|
|
|
|
2013-04-11 01:25:25 +02:00
|
|
|
typedef struct r_bin_hash_t {
|
|
|
|
const char *type;
|
|
|
|
ut64 addr;
|
|
|
|
int len;
|
|
|
|
ut64 from;
|
|
|
|
ut64 to;
|
|
|
|
ut8 buf[32];
|
|
|
|
const char *cmd;
|
|
|
|
} RBinHash;
|
|
|
|
|
2019-03-21 13:02:48 +03:00
|
|
|
typedef struct r_bin_file_hash_t {
|
|
|
|
const char *type;
|
|
|
|
const char *hex;
|
|
|
|
} RBinFileHash;
|
|
|
|
|
2012-07-21 14:11:21 +04:00
|
|
|
typedef struct r_bin_info_t {
|
2015-03-25 14:49:33 +01:00
|
|
|
char *file;
|
|
|
|
char *type;
|
|
|
|
char *bclass;
|
|
|
|
char *rclass;
|
|
|
|
char *arch;
|
|
|
|
char *cpu;
|
|
|
|
char *machine;
|
2020-08-28 17:11:34 +08:00
|
|
|
char *head_flag;
|
2020-09-21 22:58:07 +08:00
|
|
|
char *features;
|
2015-03-25 14:49:33 +01:00
|
|
|
char *os;
|
|
|
|
char *subsystem;
|
|
|
|
char *rpath;
|
|
|
|
char *guid;
|
|
|
|
char *debug_file_name;
|
2012-11-07 04:25:42 +01:00
|
|
|
const char *lang;
|
2020-05-06 01:00:46 -03:00
|
|
|
char *default_cc;
|
2019-03-21 13:02:48 +03:00
|
|
|
RList/*<RBinFileHash>*/ *file_hashes;
|
2012-07-21 14:11:21 +04:00
|
|
|
int bits;
|
|
|
|
int has_va;
|
2012-11-07 18:18:52 +01:00
|
|
|
int has_pi; // pic/pie
|
2014-04-28 14:45:02 +02:00
|
|
|
int has_canary;
|
2018-08-07 11:07:43 +01:00
|
|
|
int has_retguard;
|
2018-09-13 10:11:09 +00:00
|
|
|
int has_sanitizers;
|
2014-05-14 05:48:03 +02:00
|
|
|
int has_crypto;
|
2014-05-09 19:25:12 +02:00
|
|
|
int has_nx;
|
2012-07-21 14:11:21 +04:00
|
|
|
int big_endian;
|
2017-07-24 01:15:56 +02:00
|
|
|
bool has_lit;
|
2016-03-10 07:09:55 +05:30
|
|
|
char *actual_checksum;
|
|
|
|
char *claimed_checksum;
|
2017-03-06 12:00:44 +01:00
|
|
|
int pe_overlay;
|
2017-03-07 15:54:22 +01:00
|
|
|
bool signature;
|
2012-07-21 14:11:21 +04:00
|
|
|
ut64 dbg_info;
|
2013-10-14 23:28:17 +02:00
|
|
|
RBinHash sum[3];
|
2015-06-17 11:13:03 +02:00
|
|
|
ut64 baddr;
|
2015-10-22 02:13:26 +02:00
|
|
|
char *intrp;
|
2019-03-21 23:44:31 +00:00
|
|
|
char *compiler;
|
2012-07-21 14:11:21 +04:00
|
|
|
} RBinInfo;
|
|
|
|
|
2013-06-27 19:15:59 +02:00
|
|
|
typedef struct r_bin_object_t {
|
|
|
|
ut64 baddr;
|
2019-06-10 11:25:34 +02:00
|
|
|
st64 baddr_shift;
|
2014-01-11 00:56:02 -06:00
|
|
|
ut64 loadaddr;
|
2013-12-19 19:43:44 +01:00
|
|
|
ut64 boffset;
|
2016-07-05 16:16:28 +05:30
|
|
|
ut64 size;
|
2014-05-08 18:35:04 -05:00
|
|
|
ut64 obj_size;
|
2013-06-27 19:15:59 +02:00
|
|
|
RList/*<RBinSection>*/ *sections;
|
|
|
|
RList/*<RBinImport>*/ *imports;
|
|
|
|
RList/*<RBinSymbol>*/ *symbols;
|
|
|
|
RList/*<??>*/ *entries;
|
|
|
|
RList/*<??>*/ *fields;
|
|
|
|
RList/*<??>*/ *libs;
|
2019-01-21 11:40:24 +01:00
|
|
|
RBNode/*<RBinReloc>*/ *relocs;
|
2013-06-27 19:15:59 +02:00
|
|
|
RList/*<??>*/ *strings;
|
|
|
|
RList/*<RBinClass>*/ *classes;
|
2019-05-08 17:05:55 +02:00
|
|
|
HtPP *classes_ht;
|
2019-06-07 03:50:22 +02:00
|
|
|
HtPP *methods_ht;
|
2013-06-27 19:15:59 +02:00
|
|
|
RList/*<RBinDwarfRow>*/ *lines;
|
2018-11-14 10:47:28 +01:00
|
|
|
HtUP *strings_db;
|
2017-02-08 20:40:36 +00:00
|
|
|
RList/*<??>*/ *mem; //RBinMem maybe?
|
2018-03-15 11:46:07 +01:00
|
|
|
RList/*<BinMap*/ *maps;
|
|
|
|
char *regstate;
|
2013-06-27 19:15:59 +02:00
|
|
|
RBinInfo *info;
|
|
|
|
RBinAddr *binsym[R_BIN_SYM_LAST];
|
2014-05-08 14:08:21 -05:00
|
|
|
struct r_bin_plugin_t *plugin;
|
2013-06-27 19:15:59 +02:00
|
|
|
int lang;
|
2013-12-20 01:20:17 +01:00
|
|
|
Sdb *kv;
|
2018-03-23 13:51:47 +01:00
|
|
|
Sdb *addr2klassmethod;
|
2014-01-17 12:40:04 -06:00
|
|
|
void *bin_obj; // internal pointer used by formats
|
2013-06-27 19:15:59 +02:00
|
|
|
} RBinObject;
|
|
|
|
|
2018-08-06 09:27:27 +02:00
|
|
|
// XXX: RbinFile may hold more than one RBinObject
|
|
|
|
/// XX curplugin == o->plugin
|
2014-01-20 03:29:50 +01:00
|
|
|
typedef struct r_bin_file_t {
|
2010-10-01 04:26:52 +02:00
|
|
|
char *file;
|
2014-04-23 03:54:06 +02:00
|
|
|
int fd;
|
2014-09-20 14:43:18 +02:00
|
|
|
int size;
|
2013-04-26 00:04:05 +02:00
|
|
|
int rawstr;
|
2018-01-12 14:02:33 +05:30
|
|
|
int strmode;
|
2014-04-27 02:06:50 -05:00
|
|
|
ut32 id;
|
2014-04-23 03:54:06 +02:00
|
|
|
RBuffer *buf;
|
2011-11-22 00:59:20 +01:00
|
|
|
ut64 offset;
|
2013-06-27 19:15:59 +02:00
|
|
|
RBinObject *o;
|
2014-01-22 16:58:23 -06:00
|
|
|
void *xtr_obj;
|
2014-01-11 00:56:02 -06:00
|
|
|
ut64 loadaddr;
|
2014-10-24 20:13:18 +02:00
|
|
|
/* values used when searching the strings */
|
|
|
|
int minstrlen;
|
|
|
|
int maxstrlen;
|
2014-04-27 02:06:50 -05:00
|
|
|
int narch;
|
2014-01-18 09:26:09 -06:00
|
|
|
struct r_bin_xtr_plugin_t *curxtr;
|
2019-06-29 01:45:44 +02:00
|
|
|
// struct r_bin_plugin_t *curplugin; // use o->plugin
|
2016-07-27 10:01:57 +01:00
|
|
|
RList *xtr_data;
|
2014-04-23 03:54:06 +02:00
|
|
|
Sdb *sdb;
|
2014-05-14 05:48:03 +02:00
|
|
|
Sdb *sdb_info;
|
2014-04-21 19:13:52 +04:00
|
|
|
Sdb *sdb_addrinfo;
|
2014-05-08 18:35:04 -05:00
|
|
|
struct r_bin_t *rbin;
|
2014-01-18 09:26:09 -06:00
|
|
|
} RBinFile;
|
2010-09-24 21:23:13 +02:00
|
|
|
|
2019-02-17 23:55:10 +01:00
|
|
|
typedef struct r_bin_file_options_t {
|
2018-04-03 20:23:26 +02:00
|
|
|
int rawstr;
|
|
|
|
ut64 baddr; // base address
|
|
|
|
ut64 laddr; // load address
|
|
|
|
ut64 paddr; // offset
|
|
|
|
const char *plugname; // force a plugin? why do i need this?
|
|
|
|
// const char *xtrname;
|
|
|
|
} RBinFileOptions;
|
|
|
|
|
2020-07-06 13:43:48 +02:00
|
|
|
struct r_bin_t {
|
2014-01-18 09:26:09 -06:00
|
|
|
const char *file;
|
2019-05-27 18:18:01 +02:00
|
|
|
RBinFile *cur; // TODO: deprecate
|
2010-09-24 21:23:13 +02:00
|
|
|
int narch;
|
2009-03-08 16:49:15 +01:00
|
|
|
void *user;
|
2014-10-24 20:13:18 +02:00
|
|
|
/* preconfigured values */
|
2016-11-18 13:28:50 +01:00
|
|
|
int debase64;
|
2012-12-09 01:39:27 +01:00
|
|
|
int minstrlen;
|
2014-10-21 04:39:37 +02:00
|
|
|
int maxstrlen;
|
2015-10-06 20:52:50 -04:00
|
|
|
ut64 maxstrbuf;
|
2014-05-19 02:41:53 +02:00
|
|
|
int rawstr;
|
2014-04-23 03:54:06 +02:00
|
|
|
Sdb *sdb;
|
2018-05-22 17:48:34 +02:00
|
|
|
RIDStorage *ids;
|
2014-04-23 03:54:06 +02:00
|
|
|
RList/*<RBinPlugin>*/ *plugins;
|
|
|
|
RList/*<RBinXtrPlugin>*/ *binxtrs;
|
2018-01-07 21:54:41 +01:00
|
|
|
RList/*<RBinLdrPlugin>*/ *binldrs;
|
2014-04-23 03:54:06 +02:00
|
|
|
RList/*<RBinFile>*/ *binfiles;
|
2015-08-08 14:15:13 -04:00
|
|
|
PrintfCallback cb_printf;
|
2014-04-27 02:06:50 -05:00
|
|
|
int loadany;
|
2014-04-29 11:10:35 -05:00
|
|
|
RIOBind iob;
|
2019-07-25 14:37:46 +02:00
|
|
|
RConsBind consb;
|
2015-01-11 19:40:26 +01:00
|
|
|
char *force;
|
2017-07-24 01:35:33 +02:00
|
|
|
bool want_dbginfo;
|
2015-10-13 03:50:14 +02:00
|
|
|
int filter; // symbol filtering
|
|
|
|
char strfilter; // string filtering
|
2018-01-18 03:34:53 +08:00
|
|
|
char *strpurge; // purge false positive strings
|
2015-10-29 12:37:14 +01:00
|
|
|
char *srcdir; // dir.source
|
2015-10-22 20:26:24 +02:00
|
|
|
char *prefix; // bin.prefix
|
2020-04-26 22:17:41 +08:00
|
|
|
char *strenc;
|
2016-04-23 00:47:00 +02:00
|
|
|
ut64 filter_rules;
|
2016-05-03 04:31:36 +02:00
|
|
|
bool demanglercmd;
|
2017-01-22 01:50:41 +01:00
|
|
|
bool verbose;
|
2018-01-07 22:08:53 +01:00
|
|
|
bool use_xtr; // use extract plugins when loading a file?
|
|
|
|
bool use_ldr; // use loader plugins when loading a file?
|
2019-10-20 12:31:45 +02:00
|
|
|
RStrConstPool constpool;
|
2020-09-08 09:52:35 +02:00
|
|
|
bool is_reloc_patched; // used to indicate whether relocations were patched or not
|
2020-07-06 13:43:48 +02:00
|
|
|
};
|
2009-03-08 16:49:15 +01:00
|
|
|
|
2016-07-27 10:01:57 +01:00
|
|
|
typedef struct r_bin_xtr_metadata_t {
|
|
|
|
char *arch;
|
|
|
|
int bits;
|
|
|
|
char *libname;
|
|
|
|
char *machine;
|
|
|
|
char *type;
|
2018-08-05 16:22:11 -07:00
|
|
|
const char *xtr_type;
|
2016-07-27 10:01:57 +01:00
|
|
|
} RBinXtrMetadata;
|
|
|
|
|
2014-04-27 02:06:50 -05:00
|
|
|
typedef int (*FREE_XTR)(void *xtr_obj);
|
|
|
|
typedef struct r_bin_xtr_extract_t {
|
|
|
|
char *file;
|
2018-12-17 11:54:46 +01:00
|
|
|
RBuffer *buf;
|
2014-04-27 02:06:50 -05:00
|
|
|
ut64 size;
|
|
|
|
ut64 offset;
|
2017-01-14 16:14:41 +01:00
|
|
|
ut64 baddr;
|
|
|
|
ut64 laddr;
|
2014-04-27 02:06:50 -05:00
|
|
|
int file_count;
|
2016-07-27 10:01:57 +01:00
|
|
|
int loaded;
|
|
|
|
RBinXtrMetadata *metadata;
|
2014-04-27 02:06:50 -05:00
|
|
|
} RBinXtrData;
|
|
|
|
|
2018-10-21 01:27:15 +02:00
|
|
|
R_API RBinXtrData *r_bin_xtrdata_new(RBuffer *buf, ut64 offset, ut64 size, ut32 file_count, RBinXtrMetadata *metadata);
|
|
|
|
R_API void r_bin_xtrdata_free(void /*RBinXtrData*/ *data);
|
2014-04-27 02:06:50 -05:00
|
|
|
|
2010-09-24 21:23:13 +02:00
|
|
|
typedef struct r_bin_xtr_plugin_t {
|
2009-03-08 16:49:15 +01:00
|
|
|
char *name;
|
|
|
|
char *desc;
|
2013-12-10 04:19:04 +01:00
|
|
|
char *license;
|
2009-03-08 16:49:15 +01:00
|
|
|
int (*init)(void *user);
|
|
|
|
int (*fini)(void *user);
|
2019-05-22 17:03:46 +02:00
|
|
|
bool (*check_buffer)(RBuffer *b);
|
2018-01-07 21:54:41 +01:00
|
|
|
|
2019-06-29 01:45:44 +02:00
|
|
|
RBinXtrData *(*extract_from_bytes)(RBin *bin, const ut8 *buf, ut64 size, int idx);
|
|
|
|
RBinXtrData *(*extract_from_buffer)(RBin *bin, RBuffer *buf, int idx);
|
|
|
|
RList *(*extractall_from_bytes)(RBin *bin, const ut8 *buf, ut64 size);
|
|
|
|
RList *(*extractall_from_buffer)(RBin *bin, RBuffer *buf);
|
|
|
|
RBinXtrData *(*extract)(RBin *bin, int idx);
|
|
|
|
RList *(*extractall)(RBin *bin);
|
2018-01-07 21:54:41 +01:00
|
|
|
|
2016-02-04 15:44:49 +01:00
|
|
|
bool (*load)(RBin *bin);
|
2012-08-07 10:28:03 +02:00
|
|
|
int (*size)(RBin *bin);
|
2019-05-27 18:18:01 +02:00
|
|
|
void (*destroy)(RBin *bin);
|
|
|
|
void (*free_xtr)(void *xtr_obj);
|
2010-09-24 21:23:13 +02:00
|
|
|
} RBinXtrPlugin;
|
|
|
|
|
2018-01-07 21:54:41 +01:00
|
|
|
typedef struct r_bin_ldr_plugin_t {
|
|
|
|
char *name;
|
|
|
|
char *desc;
|
|
|
|
char *license;
|
|
|
|
int (*init)(void *user);
|
|
|
|
int (*fini)(void *user);
|
|
|
|
bool (*load)(RBin *bin);
|
|
|
|
} RBinLdrPlugin;
|
|
|
|
|
2018-11-22 15:14:37 +01:00
|
|
|
typedef struct r_bin_arch_options_t {
|
|
|
|
const char *arch;
|
|
|
|
int bits;
|
|
|
|
} RBinArchOptions;
|
|
|
|
|
2019-06-29 01:45:44 +02:00
|
|
|
typedef struct r_bin_trycatch_t {
|
|
|
|
ut64 source;
|
|
|
|
ut64 from;
|
|
|
|
ut64 to;
|
|
|
|
ut64 handler;
|
2019-10-04 02:23:24 -03:00
|
|
|
ut64 filter;
|
2019-06-29 01:45:44 +02:00
|
|
|
// TODO: add type/name of exception
|
|
|
|
} RBinTrycatch;
|
|
|
|
|
2019-10-04 02:23:24 -03:00
|
|
|
R_API RBinTrycatch *r_bin_trycatch_new(ut64 source, ut64 from, ut64 to, ut64 handler, ut64 filter);
|
2019-06-29 01:45:44 +02:00
|
|
|
R_API void r_bin_trycatch_free(RBinTrycatch *tc);
|
|
|
|
|
2010-09-24 21:23:13 +02:00
|
|
|
typedef struct r_bin_plugin_t {
|
|
|
|
char *name;
|
|
|
|
char *desc;
|
2017-02-28 02:16:36 +01:00
|
|
|
char *author;
|
|
|
|
char *version;
|
2013-12-10 04:19:04 +01:00
|
|
|
char *license;
|
2010-09-24 21:23:13 +02:00
|
|
|
int (*init)(void *user);
|
|
|
|
int (*fini)(void *user);
|
2017-03-15 00:21:37 +01:00
|
|
|
Sdb * (*get_sdb)(RBinFile *obj);
|
2019-05-27 18:18:01 +02:00
|
|
|
bool (*load_buffer)(RBinFile *bf, void **bin_obj, RBuffer *buf, ut64 loadaddr, Sdb *sdb);
|
2016-07-05 16:16:28 +05:30
|
|
|
ut64 (*size)(RBinFile *bin); // return ut64 maybe? meh
|
2019-06-29 01:45:44 +02:00
|
|
|
void (*destroy)(RBinFile *bf);
|
2017-03-08 23:16:46 +01:00
|
|
|
bool (*check_bytes)(const ut8 *buf, ut64 length);
|
2019-03-12 15:28:16 +01:00
|
|
|
bool (*check_buffer)(RBuffer *buf);
|
2019-06-29 01:45:44 +02:00
|
|
|
ut64 (*baddr)(RBinFile *bf);
|
|
|
|
ut64 (*boffset)(RBinFile *bf);
|
|
|
|
RBinAddr* (*binsym)(RBinFile *bf, int num);
|
|
|
|
RList/*<RBinAddr>*/* (*entries)(RBinFile *bf);
|
|
|
|
RList/*<RBinSection>*/* (*sections)(RBinFile *bf);
|
2019-11-28 13:36:30 +01:00
|
|
|
R_BORROW RList/*<RBinDwarfRow>*/* (*lines)(RBinFile *bf);
|
2019-06-29 01:45:44 +02:00
|
|
|
RList/*<RBinSymbol>*/* (*symbols)(RBinFile *bf);
|
|
|
|
RList/*<RBinImport>*/* (*imports)(RBinFile *bf);
|
|
|
|
RList/*<RBinString>*/* (*strings)(RBinFile *bf);
|
|
|
|
RBinInfo/*<RBinInfo>*/* (*info)(RBinFile *bf);
|
|
|
|
RList/*<RBinField>*/* (*fields)(RBinFile *bf);
|
|
|
|
RList/*<char *>*/* (*libs)(RBinFile *bf);
|
|
|
|
RList/*<RBinReloc>*/* (*relocs)(RBinFile *bf);
|
|
|
|
RList/*<RBinTrycatch>*/* (*trycatch)(RBinFile *bf);
|
|
|
|
RList/*<RBinClass>*/* (*classes)(RBinFile *bf);
|
|
|
|
RList/*<RBinMem>*/* (*mem)(RBinFile *bf);
|
2016-09-07 19:18:03 +02:00
|
|
|
RList/*<RBinReloc>*/* (*patch_relocs)(RBin *bin);
|
2019-06-29 01:45:44 +02:00
|
|
|
RList/*<RBinMap>*/* (*maps)(RBinFile *bf);
|
2020-02-20 15:20:33 -08:00
|
|
|
RList/*<RBinFileHash>*/* (*hashes)(RBinFile *bf);
|
2019-06-29 01:45:44 +02:00
|
|
|
void (*header)(RBinFile *bf);
|
|
|
|
char* (*signature)(RBinFile *bf, bool json);
|
2011-02-27 20:30:41 +01:00
|
|
|
int (*demangle_type)(const char *str);
|
2014-03-10 02:27:32 +01:00
|
|
|
struct r_bin_dbginfo_t *dbginfo;
|
2010-03-08 19:40:21 +01:00
|
|
|
struct r_bin_write_t *write;
|
2019-06-29 01:45:44 +02:00
|
|
|
int (*get_offset)(RBinFile *bf, int type, int idx);
|
2021-01-09 17:30:10 +01:00
|
|
|
const char* (*get_name)(RBinFile *bf, int type, int idx, bool simplified);
|
2019-06-29 01:45:44 +02:00
|
|
|
ut64 (*get_vaddr)(RBinFile *bf, ut64 baddr, ut64 paddr, ut64 vaddr);
|
2018-11-22 15:14:37 +01:00
|
|
|
RBuffer* (*create)(RBin *bin, const ut8 *code, int codelen, const ut8 *data, int datalen, RBinArchOptions *opt);
|
2015-02-11 02:05:22 +01:00
|
|
|
char* (*demangle)(const char *str);
|
2019-06-29 01:45:44 +02:00
|
|
|
char* (*regstate)(RBinFile *bf);
|
|
|
|
int (*file_type)(RBinFile *bf);
|
2014-10-24 20:13:18 +02:00
|
|
|
/* default value if not specified by user */
|
2012-12-09 01:39:27 +01:00
|
|
|
int minstrlen;
|
2015-10-29 13:55:03 +01:00
|
|
|
char strfilter;
|
2014-01-11 00:56:02 -06:00
|
|
|
void *user;
|
2010-05-26 01:42:22 +02:00
|
|
|
} RBinPlugin;
|
2009-02-05 22:08:46 +01:00
|
|
|
|
2018-10-02 05:55:02 +02:00
|
|
|
typedef void (*RBinSymbollCallback)(RBinObject *obj, void *symbol);
|
|
|
|
|
2010-02-08 11:28:17 +01:00
|
|
|
typedef struct r_bin_section_t {
|
2018-11-05 11:52:40 +01:00
|
|
|
char *name;
|
2009-07-08 13:49:55 +02:00
|
|
|
ut64 size;
|
|
|
|
ut64 vsize;
|
2014-05-21 03:18:00 +02:00
|
|
|
ut64 vaddr;
|
|
|
|
ut64 paddr;
|
2018-09-21 02:16:54 +02:00
|
|
|
ut32 perm;
|
2013-03-26 23:37:19 +01:00
|
|
|
// per section platform info
|
|
|
|
const char *arch;
|
2016-02-16 02:58:29 +01:00
|
|
|
char *format;
|
2013-03-26 23:37:19 +01:00
|
|
|
int bits;
|
2015-09-29 00:42:31 +02:00
|
|
|
bool has_strings;
|
2015-12-12 22:27:17 +01:00
|
|
|
bool add; // indicates when you want to add the section to io `S` command
|
2017-04-12 02:27:27 +02:00
|
|
|
bool is_data;
|
2018-06-07 22:10:33 +08:00
|
|
|
bool is_segment;
|
2010-02-08 11:28:17 +01:00
|
|
|
} RBinSection;
|
2009-02-05 22:08:46 +01:00
|
|
|
|
2011-10-05 02:38:37 +02:00
|
|
|
typedef struct r_bin_class_t {
|
|
|
|
char *name;
|
2016-04-25 18:45:10 +02:00
|
|
|
// TODO: char *module;
|
2011-10-05 02:38:37 +02:00
|
|
|
char *super;
|
2019-07-10 18:25:24 +02:00
|
|
|
char *visibility_str; // XXX only used by java
|
2012-08-22 18:02:23 +02:00
|
|
|
int index;
|
2015-07-06 00:05:03 +02:00
|
|
|
ut64 addr;
|
2012-11-07 10:41:12 +01:00
|
|
|
RList *methods; // <RBinSymbol>
|
|
|
|
RList *fields; // <RBinField>
|
2019-07-10 18:25:24 +02:00
|
|
|
// RList *interfaces; // <char *>
|
2011-10-05 02:38:37 +02:00
|
|
|
int visibility;
|
|
|
|
} RBinClass;
|
|
|
|
|
2010-09-01 20:32:24 +02:00
|
|
|
#define RBinSectionName r_offsetof(RBinSection, name)
|
|
|
|
#define RBinSectionOffset r_offsetof(RBinSection, offset)
|
2018-03-04 23:52:45 +01:00
|
|
|
|
|
|
|
#define REBASE_PADDR(o, l, type_t)\
|
|
|
|
do { \
|
|
|
|
RListIter *_it;\
|
|
|
|
type_t *_el;\
|
|
|
|
r_list_foreach ((l), _it, _el) { \
|
|
|
|
_el->paddr += (o)->loadaddr;\
|
|
|
|
}\
|
|
|
|
} while (0)
|
|
|
|
|
2010-09-01 20:32:24 +02:00
|
|
|
|
2010-02-08 11:28:17 +01:00
|
|
|
typedef struct r_bin_symbol_t {
|
2015-11-09 12:12:18 +01:00
|
|
|
/* heap-allocated */
|
|
|
|
char *name;
|
2017-04-10 12:52:42 +02:00
|
|
|
char *dname;
|
2020-01-12 04:09:12 +02:00
|
|
|
char *libname;
|
2015-11-09 03:41:07 +01:00
|
|
|
char *classname;
|
2015-11-09 12:12:18 +01:00
|
|
|
/* const-unique-strings */
|
|
|
|
const char *forwarder;
|
|
|
|
const char *bind;
|
|
|
|
const char *type;
|
2017-08-09 10:21:52 +02:00
|
|
|
const char *rtype;
|
2020-01-12 04:09:12 +02:00
|
|
|
bool is_imported;
|
2015-11-09 12:12:18 +01:00
|
|
|
/* only used by java */
|
|
|
|
const char *visibility_str;
|
|
|
|
// ----------------
|
2015-11-09 03:41:07 +01:00
|
|
|
//char descriptor[R_BIN_SIZEOF_STRINGS+1];
|
2014-05-21 03:18:00 +02:00
|
|
|
ut64 vaddr;
|
|
|
|
ut64 paddr;
|
2014-06-14 00:01:58 +02:00
|
|
|
ut32 size;
|
|
|
|
ut32 ordinal;
|
2013-09-04 22:32:24 -05:00
|
|
|
ut32 visibility;
|
2015-02-26 02:48:54 +01:00
|
|
|
int bits;
|
2017-04-12 02:27:27 +02:00
|
|
|
/* see R_BIN_METH_* constants */
|
|
|
|
ut64 method_flags;
|
2017-05-03 01:06:56 +02:00
|
|
|
int dup_count;
|
2010-02-08 11:28:17 +01:00
|
|
|
} RBinSymbol;
|
2009-02-05 22:08:46 +01:00
|
|
|
|
2010-02-08 11:28:17 +01:00
|
|
|
typedef struct r_bin_import_t {
|
2015-11-09 04:41:31 +01:00
|
|
|
char *name;
|
2020-01-12 04:09:12 +02:00
|
|
|
char *libname;
|
2015-11-09 04:41:31 +01:00
|
|
|
const char *bind;
|
|
|
|
const char *type;
|
|
|
|
char *classname;
|
|
|
|
char *descriptor;
|
2014-06-14 00:01:58 +02:00
|
|
|
ut32 ordinal;
|
2013-09-04 22:32:24 -05:00
|
|
|
ut32 visibility;
|
2010-02-08 11:28:17 +01:00
|
|
|
} RBinImport;
|
2009-02-05 22:08:46 +01:00
|
|
|
|
2010-09-10 11:11:38 +02:00
|
|
|
typedef struct r_bin_reloc_t {
|
2013-07-17 22:18:21 +03:00
|
|
|
ut8 type;
|
|
|
|
ut8 additive;
|
2014-11-04 14:17:27 +03:00
|
|
|
RBinSymbol *symbol;
|
2013-07-17 22:18:21 +03:00
|
|
|
RBinImport *import;
|
|
|
|
st64 addend;
|
2014-05-21 03:18:00 +02:00
|
|
|
ut64 vaddr;
|
|
|
|
ut64 paddr;
|
2013-09-04 22:32:24 -05:00
|
|
|
ut32 visibility;
|
2016-02-08 00:26:16 +01:00
|
|
|
/* is_ifunc: indirect function, `addend` points to a resolver function
|
|
|
|
* that returns the actual relocation value, e.g. chooses
|
|
|
|
* an optimized version depending on the CPU.
|
|
|
|
* cf. https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html
|
|
|
|
*/
|
|
|
|
bool is_ifunc;
|
2019-01-21 11:40:24 +01:00
|
|
|
RBNode vrb;
|
2010-09-10 11:11:38 +02:00
|
|
|
} RBinReloc;
|
|
|
|
|
2010-02-08 11:28:17 +01:00
|
|
|
typedef struct r_bin_string_t {
|
2010-11-22 01:22:27 +01:00
|
|
|
// TODO: rename string->name (avoid colisions)
|
2015-11-09 04:41:31 +01:00
|
|
|
char *string;
|
2014-05-21 03:18:00 +02:00
|
|
|
ut64 vaddr;
|
|
|
|
ut64 paddr;
|
2014-06-14 00:01:58 +02:00
|
|
|
ut32 ordinal;
|
|
|
|
ut32 size; // size of buffer containing the string in bytes
|
|
|
|
ut32 length; // length of string in chars
|
2016-11-18 13:28:50 +01:00
|
|
|
char type; // Ascii Wide cp850 utf8 base64 ...
|
2010-02-08 11:28:17 +01:00
|
|
|
} RBinString;
|
2009-03-16 21:07:31 +01:00
|
|
|
|
2010-02-08 11:28:17 +01:00
|
|
|
typedef struct r_bin_field_t {
|
2014-05-21 03:18:00 +02:00
|
|
|
ut64 vaddr;
|
|
|
|
ut64 paddr;
|
2017-02-24 11:05:04 +01:00
|
|
|
int size;
|
2020-03-30 01:45:40 +02:00
|
|
|
int offset;
|
2013-09-04 22:32:24 -05:00
|
|
|
ut32 visibility;
|
2017-02-24 11:05:04 +01:00
|
|
|
char *name;
|
2017-08-09 10:21:52 +02:00
|
|
|
char *type;
|
2017-02-24 11:05:04 +01:00
|
|
|
char *comment;
|
|
|
|
char *format;
|
2019-09-16 19:35:19 +02:00
|
|
|
bool format_named; // whether format is the name of a format or a raw pf format string
|
2017-06-27 17:02:14 +02:00
|
|
|
ut64 flags;
|
2010-02-08 11:28:17 +01:00
|
|
|
} RBinField;
|
2009-04-24 12:12:15 +02:00
|
|
|
|
2019-09-16 19:35:19 +02:00
|
|
|
R_API RBinField *r_bin_field_new(ut64 paddr, ut64 vaddr, int size, const char *name, const char *comment, const char *format, bool format_named);
|
2018-10-24 16:54:57 +02:00
|
|
|
R_API void r_bin_field_free(void *);
|
2017-02-24 11:05:04 +01:00
|
|
|
|
2018-10-24 16:54:57 +02:00
|
|
|
typedef struct r_bin_mem_t {
|
2015-11-09 12:12:18 +01:00
|
|
|
char *name;
|
2015-03-13 21:52:57 +01:00
|
|
|
ut64 addr;
|
|
|
|
int size;
|
|
|
|
int perms;
|
|
|
|
RList *mirrors; //for mirror access; stuff here should only create new maps not new fds
|
|
|
|
} RBinMem;
|
|
|
|
|
2018-03-15 11:46:07 +01:00
|
|
|
typedef struct r_bin_map_t {
|
|
|
|
ut64 addr;
|
|
|
|
ut64 offset;
|
|
|
|
int size;
|
|
|
|
int perms;
|
|
|
|
char *file;
|
|
|
|
} RBinMap;
|
|
|
|
|
2014-03-10 02:27:32 +01:00
|
|
|
typedef struct r_bin_dbginfo_t {
|
2020-06-15 11:24:43 +02:00
|
|
|
bool (*get_line)(RBinFile *arch, ut64 addr, char *file, int len, int *line);
|
2014-03-10 02:27:32 +01:00
|
|
|
} RBinDbgInfo;
|
2010-03-09 15:12:04 +01:00
|
|
|
|
|
|
|
typedef struct r_bin_write_t {
|
2019-05-27 18:18:01 +02:00
|
|
|
ut64 (*scn_resize)(RBinFile *bf, const char *name, ut64 size);
|
|
|
|
bool (*scn_perms)(RBinFile *bf, const char *name, int perms);
|
|
|
|
int (*rpath_del)(RBinFile *bf);
|
|
|
|
bool (*entry)(RBinFile *bf, ut64 addr);
|
|
|
|
bool (*addlib)(RBinFile *bf, const char *lib);
|
2010-03-09 15:12:04 +01:00
|
|
|
} RBinWrite;
|
|
|
|
|
2010-10-04 10:55:43 +02:00
|
|
|
// TODO: deprecate r_bin_is_big_endian
|
|
|
|
// TODO: has_dbg_syms... maybe flags?
|
|
|
|
|
2011-06-26 20:29:24 +02:00
|
|
|
typedef int (*RBinGetOffset)(RBin *bin, int type, int idx);
|
2019-07-30 04:22:19 +02:00
|
|
|
typedef const char *(*RBinGetName)(RBin *bin, int type, int idx, bool sd);
|
2017-08-28 16:44:20 +02:00
|
|
|
typedef RList *(*RBinGetSections)(RBin *bin);
|
|
|
|
typedef RBinSection *(*RBinGetSectionAt)(RBin *bin, ut64 addr);
|
2019-09-22 18:58:42 -03:00
|
|
|
typedef char *(*RBinDemangle)(RBinFile *bf, const char *def, const char *str, ut64 vaddr, bool libs);
|
2011-06-26 20:29:24 +02:00
|
|
|
|
|
|
|
typedef struct r_bin_bind_t {
|
|
|
|
RBin *bin;
|
|
|
|
RBinGetOffset get_offset;
|
2012-12-20 11:31:38 +01:00
|
|
|
RBinGetName get_name;
|
2017-08-28 16:44:20 +02:00
|
|
|
RBinGetSections get_sections;
|
|
|
|
RBinGetSectionAt get_vsect_at;
|
2019-09-22 18:58:42 -03:00
|
|
|
RBinDemangle demangle;
|
2013-09-04 22:32:24 -05:00
|
|
|
ut32 visibility;
|
2011-06-26 20:29:24 +02:00
|
|
|
} RBinBind;
|
|
|
|
|
2019-07-02 04:11:28 +02:00
|
|
|
R_IPI RBinSection *r_bin_section_new(const char *name);
|
|
|
|
R_IPI void r_bin_section_free(RBinSection *bs);
|
|
|
|
R_API void r_bin_info_free(RBinInfo *rb);
|
|
|
|
R_API void r_bin_import_free(void *_imp);
|
|
|
|
R_API void r_bin_symbol_free(void *_sym);
|
|
|
|
R_API RBinSymbol *r_bin_symbol_new(const char *name, ut64 paddr, ut64 vaddr);
|
|
|
|
R_API void r_bin_string_free(void *_str);
|
|
|
|
|
2009-12-24 03:17:53 +01:00
|
|
|
#ifdef R_API
|
2012-08-26 11:07:09 +02:00
|
|
|
|
2018-05-22 17:48:34 +02:00
|
|
|
typedef struct r_bin_options_t {
|
2018-11-07 17:22:41 +01:00
|
|
|
const char *pluginname;
|
2018-05-22 17:48:34 +02:00
|
|
|
ut64 baseaddr; // where the linker maps the binary in memory
|
2019-10-16 14:18:33 +02:00
|
|
|
ut64 loadaddr; // starting physical address to read from the target file
|
2018-11-07 17:22:41 +01:00
|
|
|
ut64 sz;
|
2018-05-22 17:48:34 +02:00
|
|
|
int xtr_idx; // load Nth binary
|
|
|
|
int rawstr;
|
2018-11-07 17:22:41 +01:00
|
|
|
int fd;
|
2019-10-24 14:33:54 +02:00
|
|
|
const char *filename;
|
2018-05-22 17:48:34 +02:00
|
|
|
} RBinOptions;
|
|
|
|
|
2018-06-26 13:48:53 +02:00
|
|
|
R_API RBinImport *r_bin_import_clone(RBinImport *o);
|
2019-05-09 11:08:58 +02:00
|
|
|
R_API const char *r_bin_symbol_name(RBinSymbol *s);
|
2018-10-02 05:55:02 +02:00
|
|
|
typedef void (*RBinSymbolCallback)(RBinObject *obj, RBinSymbol *symbol);
|
2018-06-26 13:48:53 +02:00
|
|
|
|
2018-11-13 13:05:18 +01:00
|
|
|
// options functions
|
2018-11-07 17:22:41 +01:00
|
|
|
R_API void r_bin_options_init(RBinOptions *opt, int fd, ut64 baseaddr, ut64 loadaddr, int rawstr);
|
2018-11-22 15:14:37 +01:00
|
|
|
R_API void r_bin_arch_options_init(RBinArchOptions *opt, const char *arch, int bits);
|
2018-11-07 17:22:41 +01:00
|
|
|
|
2018-11-13 13:05:18 +01:00
|
|
|
// open/close/reload functions
|
2018-10-24 16:54:57 +02:00
|
|
|
R_API RBin *r_bin_new(void);
|
2019-06-17 02:23:58 +02:00
|
|
|
R_API void r_bin_free(RBin *bin);
|
2018-11-07 17:22:41 +01:00
|
|
|
R_API bool r_bin_open(RBin *bin, const char *file, RBinOptions *opt);
|
|
|
|
R_API bool r_bin_open_io(RBin *bin, RBinOptions *opt);
|
2019-10-24 14:33:54 +02:00
|
|
|
R_API bool r_bin_open_buf(RBin *bin, RBuffer *buf, RBinOptions *opt);
|
|
|
|
R_API bool r_bin_reload(RBin *bin, ut32 bf_id, ut64 baseaddr);
|
2018-11-13 13:05:18 +01:00
|
|
|
|
|
|
|
// plugins/bind functions
|
2012-12-20 11:31:38 +01:00
|
|
|
R_API void r_bin_bind(RBin *b, RBinBind *bnd);
|
2018-01-07 21:54:41 +01:00
|
|
|
R_API bool r_bin_add(RBin *bin, RBinPlugin *foo);
|
|
|
|
R_API bool r_bin_xtr_add(RBin *bin, RBinXtrPlugin *foo);
|
|
|
|
R_API bool r_bin_ldr_add(RBin *bin, RBinLdrPlugin *foo);
|
2021-01-02 17:48:49 -05:00
|
|
|
R_API void r_bin_list(RBin *bin, PJ *pj, int format);
|
|
|
|
R_API bool r_bin_list_plugin(RBin *bin, const char *name, PJ *pj, int json);
|
2018-11-13 13:05:18 +01:00
|
|
|
R_API RBinPlugin *r_bin_get_binplugin_by_bytes(RBin *bin, const ut8 *bytes, ut64 sz);
|
2019-05-27 18:18:01 +02:00
|
|
|
R_API RBinPlugin *r_bin_get_binplugin_by_buffer(RBin *bin, RBuffer *buf);
|
2018-11-13 13:05:18 +01:00
|
|
|
R_API void r_bin_force_plugin(RBin *bin, const char *pname);
|
|
|
|
|
|
|
|
// get/set various bin information
|
2019-07-05 18:43:15 +02:00
|
|
|
R_API ut64 r_bin_get_baddr(RBin *bin);
|
|
|
|
R_API ut64 r_bin_file_get_baddr(RBinFile *bf);
|
2018-11-13 13:05:18 +01:00
|
|
|
R_API void r_bin_set_user_ptr(RBin *bin, void *user);
|
|
|
|
R_API RBinInfo *r_bin_get_info(RBin *bin);
|
2018-10-24 16:54:57 +02:00
|
|
|
R_API void r_bin_set_baddr(RBin *bin, ut64 baddr);
|
|
|
|
R_API ut64 r_bin_get_laddr(RBin *bin);
|
2018-11-13 13:05:18 +01:00
|
|
|
R_API ut64 r_bin_get_size(RBin *bin);
|
2018-10-24 16:54:57 +02:00
|
|
|
R_API RBinAddr *r_bin_get_sym(RBin *bin, int sym);
|
2018-06-17 15:12:54 +02:00
|
|
|
R_API RList *r_bin_raw_strings(RBinFile *a, int min);
|
2018-08-09 20:17:43 +01:00
|
|
|
R_API RList *r_bin_dump_strings(RBinFile *a, int min, int raw);
|
2019-06-29 01:45:44 +02:00
|
|
|
|
|
|
|
// use RBinFile instead
|
2018-10-24 16:54:57 +02:00
|
|
|
R_API RList *r_bin_get_entries(RBin *bin);
|
|
|
|
R_API RList *r_bin_get_fields(RBin *bin);
|
|
|
|
R_API RList *r_bin_get_imports(RBin *bin);
|
|
|
|
R_API RList *r_bin_get_libs(RBin *bin);
|
2019-01-21 11:40:24 +01:00
|
|
|
R_API RBNode *r_bin_patch_relocs(RBin *bin);
|
|
|
|
R_API RList *r_bin_patch_relocs_list(RBin *bin);
|
|
|
|
R_API RBNode *r_bin_get_relocs(RBin *bin);
|
|
|
|
R_API RList *r_bin_get_relocs_list(RBin *bin);
|
2018-10-24 16:54:57 +02:00
|
|
|
R_API RList *r_bin_get_sections(RBin *bin);
|
2018-11-13 13:05:18 +01:00
|
|
|
R_API RList *r_bin_get_classes(RBin *bin);
|
2018-10-24 16:54:57 +02:00
|
|
|
R_API RList *r_bin_get_strings(RBin *bin);
|
2019-06-29 01:45:44 +02:00
|
|
|
R_API RList *r_bin_file_get_trycatch(RBinFile *bf);
|
2018-10-24 16:54:57 +02:00
|
|
|
R_API RList *r_bin_get_symbols(RBin *bin);
|
2018-11-13 13:05:18 +01:00
|
|
|
R_API RList *r_bin_reset_strings(RBin *bin);
|
|
|
|
R_API int r_bin_is_string(RBin *bin, ut64 va);
|
2018-10-24 16:54:57 +02:00
|
|
|
R_API int r_bin_is_big_endian(RBin *bin);
|
|
|
|
R_API int r_bin_is_static(RBin *bin);
|
2018-11-13 13:05:18 +01:00
|
|
|
R_API ut64 r_bin_get_vaddr(RBin *bin, ut64 paddr, ut64 vaddr);
|
2019-06-07 03:50:22 +02:00
|
|
|
R_API ut64 r_bin_file_get_vaddr(RBinFile *bf, ut64 paddr, ut64 vaddr);
|
2018-11-13 13:05:18 +01:00
|
|
|
R_API ut64 r_bin_a2b(RBin *bin, ut64 addr);
|
|
|
|
|
|
|
|
R_API int r_bin_load_languages(RBinFile *binfile);
|
2018-10-24 16:54:57 +02:00
|
|
|
R_API RBinFile *r_bin_cur(RBin *bin);
|
|
|
|
R_API RBinObject *r_bin_cur_object(RBin *bin);
|
2018-11-13 13:05:18 +01:00
|
|
|
|
|
|
|
// select/list binfiles functions
|
2019-06-05 19:23:59 -04:00
|
|
|
R_API bool r_bin_select(RBin *bin, const char *arch, int bits, const char *name);
|
|
|
|
R_API bool r_bin_select_bfid(RBin *bin, ut32 bf_id);
|
|
|
|
R_API bool r_bin_use_arch(RBin *bin, const char *arch, int bits, const char *name);
|
2021-01-02 17:48:49 -05:00
|
|
|
R_API void r_bin_list_archs(RBin *bin, PJ *pj, int mode);
|
2018-11-22 15:14:37 +01:00
|
|
|
R_API RBuffer *r_bin_create(RBin *bin, const char *plugin_name, const ut8 *code, int codelen, const ut8 *data, int datalen, RBinArchOptions *opt);
|
2018-10-24 16:54:57 +02:00
|
|
|
R_API RBuffer *r_bin_package(RBin *bin, const char *type, const char *file, RList *files);
|
2018-11-13 13:05:18 +01:00
|
|
|
|
2018-10-24 16:54:57 +02:00
|
|
|
R_API const char *r_bin_string_type(int type);
|
2018-11-13 13:05:18 +01:00
|
|
|
R_API const char *r_bin_entry_type_string(int etype);
|
2015-08-24 00:30:05 +02:00
|
|
|
|
2018-03-04 23:52:45 +01:00
|
|
|
R_API bool r_bin_file_object_new_from_xtr_data(RBin *bin, RBinFile *bf, ut64 baseaddr, ut64 loadaddr, RBinXtrData *data);
|
2019-06-07 03:50:22 +02:00
|
|
|
|
|
|
|
|
|
|
|
// RBinFile lifecycle
|
|
|
|
// R_IPI RBinFile *r_bin_file_new(RBin *bin, const char *file, ut64 file_sz, int rawstr, int fd, const char *xtrname, Sdb *sdb, bool steal_ptr);
|
|
|
|
R_API bool r_bin_file_close(RBin *bin, int bd);
|
|
|
|
R_API void r_bin_file_free(void /*RBinFile*/ *bf_);
|
|
|
|
// RBinFile.get
|
|
|
|
R_API RBinFile *r_bin_file_at(RBin *bin, ut64 addr);
|
|
|
|
R_API RBinFile *r_bin_file_find_by_object_id(RBin *bin, ut32 binobj_id);
|
2019-07-07 12:42:47 +02:00
|
|
|
R_API RList *r_bin_file_get_symbols(RBinFile *bf);
|
2019-06-07 03:50:22 +02:00
|
|
|
//
|
|
|
|
R_API ut64 r_bin_file_get_vaddr(RBinFile *bf, ut64 paddr, ut64 vaddr);
|
|
|
|
// RBinFile.add
|
|
|
|
R_API RBinClass *r_bin_file_add_class(RBinFile *binfile, const char *name, const char *super, int view);
|
|
|
|
R_API RBinSymbol *r_bin_file_add_method(RBinFile *bf, const char *classname, const char *name, int nargs);
|
|
|
|
R_API RBinField *r_bin_file_add_field(RBinFile *binfile, const char *classname, const char *name);
|
|
|
|
// RBinFile.find
|
2018-11-13 13:05:18 +01:00
|
|
|
R_API RBinFile *r_bin_file_find_by_arch_bits(RBin *bin, const char *arch, int bits);
|
2019-01-13 03:07:51 +01:00
|
|
|
R_API RBinFile *r_bin_file_find_by_id(RBin *bin, ut32 bin_id);
|
2018-03-04 23:52:45 +01:00
|
|
|
R_API RBinFile *r_bin_file_find_by_fd(RBin *bin, ut32 bin_fd);
|
|
|
|
R_API RBinFile *r_bin_file_find_by_name(RBin *bin, const char *name);
|
2019-06-07 03:50:22 +02:00
|
|
|
|
2018-11-07 23:57:24 +01:00
|
|
|
R_API bool r_bin_file_set_cur_binfile(RBin *bin, RBinFile *bf);
|
|
|
|
R_API bool r_bin_file_set_cur_by_name(RBin *bin, const char *name);
|
|
|
|
R_API bool r_bin_file_deref(RBin *bin, RBinFile *a);
|
|
|
|
R_API bool r_bin_file_set_cur_by_fd(RBin *bin, ut32 bin_fd);
|
2019-01-13 03:07:51 +01:00
|
|
|
R_API bool r_bin_file_set_cur_by_id(RBin *bin, ut32 bin_id);
|
|
|
|
R_API bool r_bin_file_set_cur_by_name(RBin *bin, const char *name);
|
2019-06-07 13:53:14 +02:00
|
|
|
R_API ut64 r_bin_file_delete_all(RBin *bin);
|
2019-10-24 14:33:54 +02:00
|
|
|
R_API bool r_bin_file_delete(RBin *bin, ut32 bin_id);
|
2020-02-20 15:20:33 -08:00
|
|
|
R_API RList *r_bin_file_compute_hashes(RBin *bin, ut64 limit);
|
|
|
|
R_API RList *r_bin_file_set_hashes(RBin *bin, RList *new_hashes);
|
2019-06-02 11:16:08 -04:00
|
|
|
R_API RBinPlugin *r_bin_file_cur_plugin(RBinFile *binfile);
|
|
|
|
R_API void r_bin_file_hash_free(RBinFileHash *fhash);
|
2018-10-02 00:46:25 +02:00
|
|
|
|
2018-11-13 13:05:18 +01:00
|
|
|
// binobject functions
|
2018-03-04 23:52:45 +01:00
|
|
|
R_API int r_bin_object_set_items(RBinFile *binfile, RBinObject *o);
|
2019-06-05 19:23:59 -04:00
|
|
|
R_API bool r_bin_object_delete(RBin *bin, ut32 binfile_id);
|
2019-06-16 18:36:33 +02:00
|
|
|
R_API void r_bin_mem_free(void *data);
|
2018-03-04 23:52:45 +01:00
|
|
|
|
2018-11-13 13:05:18 +01:00
|
|
|
// demangle functions
|
2019-08-05 10:46:05 -03:00
|
|
|
R_API char *r_bin_demangle(RBinFile *binfile, const char *lang, const char *str, ut64 vaddr, bool libs);
|
2011-02-23 20:53:56 +01:00
|
|
|
R_API char *r_bin_demangle_java(const char *str);
|
2016-11-22 14:58:42 +01:00
|
|
|
R_API char *r_bin_demangle_cxx(RBinFile *binfile, const char *str, ut64 vaddr);
|
2015-02-19 19:39:55 +02:00
|
|
|
R_API char *r_bin_demangle_msvc(const char *str);
|
2016-05-03 04:31:36 +02:00
|
|
|
R_API char *r_bin_demangle_swift(const char *s, bool syscmd);
|
2014-04-27 02:06:50 -05:00
|
|
|
R_API char *r_bin_demangle_objc(RBinFile *binfile, const char *sym);
|
2017-01-05 03:52:13 +04:00
|
|
|
R_API char *r_bin_demangle_rust(RBinFile *binfile, const char *str, ut64 vaddr);
|
2018-11-13 13:05:18 +01:00
|
|
|
R_API int r_bin_demangle_type(const char *str);
|
|
|
|
R_API void r_bin_demangle_list(RBin *bin);
|
|
|
|
R_API char *r_bin_demangle_plugin(RBin *bin, const char *name, const char *str);
|
2017-04-12 02:27:27 +02:00
|
|
|
R_API const char *r_bin_get_meth_flag_string(ut64 flag, bool compact);
|
2012-11-07 04:25:42 +01:00
|
|
|
|
2018-10-21 01:27:15 +02:00
|
|
|
R_API RBinSection *r_bin_get_section_at(RBinObject *o, ut64 off, int va);
|
2014-04-23 18:04:25 -05:00
|
|
|
|
2014-03-10 02:27:32 +01:00
|
|
|
/* dbginfo.c */
|
2020-06-15 11:24:43 +02:00
|
|
|
R_API bool r_bin_addr2line(RBin *bin, ut64 addr, char *file, int len, int *line);
|
2016-11-22 23:59:04 +01:00
|
|
|
R_API char *r_bin_addr2text(RBin *bin, ut64 addr, int origin);
|
2014-03-10 02:27:32 +01:00
|
|
|
R_API char *r_bin_addr2fileline(RBin *bin, ut64 addr);
|
2010-03-08 19:40:21 +01:00
|
|
|
/* bin_write.c */
|
2016-04-07 15:42:06 +02:00
|
|
|
R_API bool r_bin_wr_addlib(RBin *bin, const char *lib);
|
2010-03-11 02:14:34 +01:00
|
|
|
R_API ut64 r_bin_wr_scn_resize(RBin *bin, const char *name, ut64 size);
|
2015-11-27 20:35:40 +01:00
|
|
|
R_API bool r_bin_wr_scn_perms(RBin *bin, const char *name, int perms);
|
|
|
|
R_API bool r_bin_wr_rpath_del(RBin *bin);
|
2016-01-14 14:42:26 +01:00
|
|
|
R_API bool r_bin_wr_entry(RBin *bin, ut64 addr);
|
2017-09-03 17:59:53 -07:00
|
|
|
R_API bool r_bin_wr_output(RBin *bin, const char *filename);
|
2011-02-23 20:53:56 +01:00
|
|
|
|
2018-10-21 01:27:15 +02:00
|
|
|
R_API RList *r_bin_get_mem(RBin *bin);
|
2015-07-04 23:42:48 +02:00
|
|
|
|
|
|
|
/* filter.c */
|
2018-10-24 16:54:57 +02:00
|
|
|
R_API void r_bin_load_filter(RBin *bin, ut64 rules);
|
2018-10-27 05:01:09 +02:00
|
|
|
R_API void r_bin_filter_symbols(RBinFile *bf, RList *list);
|
|
|
|
R_API void r_bin_filter_sections(RBinFile *bf, RList *list);
|
2018-11-12 00:04:41 +01:00
|
|
|
R_API char *r_bin_filter_name(RBinFile *bf, Sdb *db, ut64 addr, char *name);
|
2019-05-09 11:08:58 +02:00
|
|
|
R_API void r_bin_filter_sym(RBinFile *bf, HtPP *ht, ut64 vaddr, RBinSymbol *sym);
|
2018-02-15 20:42:05 +08:00
|
|
|
R_API bool r_bin_strpurge(RBin *bin, const char *str, ut64 addr);
|
|
|
|
R_API bool r_bin_string_filter(RBin *bin, const char *str, ut64 addr);
|
2015-07-04 23:42:48 +02:00
|
|
|
|
2010-05-27 19:58:54 +02:00
|
|
|
/* plugin pointers */
|
2011-09-02 16:45:39 +02:00
|
|
|
extern RBinPlugin r_bin_plugin_any;
|
2011-05-12 09:52:40 +02:00
|
|
|
extern RBinPlugin r_bin_plugin_fs;
|
2015-09-08 20:35:57 +02:00
|
|
|
extern RBinPlugin r_bin_plugin_cgc;
|
2010-05-27 19:58:54 +02:00
|
|
|
extern RBinPlugin r_bin_plugin_elf;
|
|
|
|
extern RBinPlugin r_bin_plugin_elf64;
|
2011-11-12 04:51:45 +01:00
|
|
|
extern RBinPlugin r_bin_plugin_p9;
|
2019-07-17 06:57:50 -03:00
|
|
|
extern RBinPlugin r_bin_plugin_ne;
|
2019-12-28 14:46:14 -03:00
|
|
|
extern RBinPlugin r_bin_plugin_le;
|
2010-05-27 19:58:54 +02:00
|
|
|
extern RBinPlugin r_bin_plugin_pe;
|
2012-03-07 01:34:57 +01:00
|
|
|
extern RBinPlugin r_bin_plugin_mz;
|
2010-05-27 19:58:54 +02:00
|
|
|
extern RBinPlugin r_bin_plugin_pe64;
|
2014-11-30 16:53:36 +01:00
|
|
|
extern RBinPlugin r_bin_plugin_pebble;
|
2013-06-09 02:11:17 +02:00
|
|
|
extern RBinPlugin r_bin_plugin_bios;
|
2013-12-10 03:35:59 +01:00
|
|
|
extern RBinPlugin r_bin_plugin_bf;
|
2013-03-03 03:09:51 +04:00
|
|
|
extern RBinPlugin r_bin_plugin_te;
|
2018-11-19 22:54:58 +01:00
|
|
|
extern RBinPlugin r_bin_plugin_symbols;
|
2010-05-27 19:58:54 +02:00
|
|
|
extern RBinPlugin r_bin_plugin_mach0;
|
|
|
|
extern RBinPlugin r_bin_plugin_mach064;
|
2017-10-26 10:25:11 +01:00
|
|
|
extern RBinPlugin r_bin_plugin_mdmp;
|
2010-05-27 19:58:54 +02:00
|
|
|
extern RBinPlugin r_bin_plugin_java;
|
2011-04-28 02:09:43 +02:00
|
|
|
extern RBinPlugin r_bin_plugin_dex;
|
2014-02-17 00:02:47 +04:00
|
|
|
extern RBinPlugin r_bin_plugin_coff;
|
2014-09-24 23:51:40 +02:00
|
|
|
extern RBinPlugin r_bin_plugin_ningb;
|
2014-03-12 11:36:45 +01:00
|
|
|
extern RBinPlugin r_bin_plugin_ningba;
|
2014-09-24 23:51:40 +02:00
|
|
|
extern RBinPlugin r_bin_plugin_ninds;
|
2016-01-03 22:53:00 +01:00
|
|
|
extern RBinPlugin r_bin_plugin_nin3ds;
|
2014-05-26 20:07:24 +02:00
|
|
|
extern RBinPlugin r_bin_plugin_xbe;
|
2016-12-14 10:34:11 +01:00
|
|
|
extern RBinPlugin r_bin_plugin_bflt;
|
2018-01-07 21:54:41 +01:00
|
|
|
extern RBinXtrPlugin r_bin_xtr_plugin_xtr_fatmach0;
|
2016-02-04 15:44:49 +01:00
|
|
|
extern RBinXtrPlugin r_bin_xtr_plugin_xtr_dyldcache;
|
2019-03-08 02:03:47 +01:00
|
|
|
extern RBinXtrPlugin r_bin_xtr_plugin_xtr_pemixed;
|
2019-12-13 15:49:35 +01:00
|
|
|
extern RBinXtrPlugin r_bin_xtr_plugin_xtr_sep64;
|
2018-01-07 21:54:41 +01:00
|
|
|
extern RBinLdrPlugin r_bin_ldr_plugin_ldr_linux;
|
2015-04-06 21:48:21 -04:00
|
|
|
extern RBinPlugin r_bin_plugin_zimg;
|
2015-05-11 17:00:37 +02:00
|
|
|
extern RBinPlugin r_bin_plugin_omf;
|
2015-06-17 11:13:03 +02:00
|
|
|
extern RBinPlugin r_bin_plugin_art;
|
2015-12-18 20:08:05 +01:00
|
|
|
extern RBinPlugin r_bin_plugin_bootimg;
|
2015-09-16 12:59:52 +02:00
|
|
|
extern RBinPlugin r_bin_plugin_dol;
|
2015-09-19 20:48:38 +02:00
|
|
|
extern RBinPlugin r_bin_plugin_nes;
|
2019-03-06 00:57:44 +05:30
|
|
|
extern RBinPlugin r_bin_plugin_qnx;
|
2015-09-29 00:42:31 +02:00
|
|
|
extern RBinPlugin r_bin_plugin_mbn;
|
2015-10-29 13:55:03 +01:00
|
|
|
extern RBinPlugin r_bin_plugin_smd;
|
2015-10-27 09:19:34 +08:00
|
|
|
extern RBinPlugin r_bin_plugin_sms;
|
2015-11-22 23:00:50 +01:00
|
|
|
extern RBinPlugin r_bin_plugin_psxexe;
|
2015-11-27 13:42:08 -08:00
|
|
|
extern RBinPlugin r_bin_plugin_vsf;
|
2016-02-04 15:44:49 +01:00
|
|
|
extern RBinPlugin r_bin_plugin_dyldcache;
|
2019-03-08 02:03:47 +01:00
|
|
|
extern RBinPlugin r_bin_plugin_xnu_kernelcache;
|
2016-07-01 15:08:13 +02:00
|
|
|
extern RBinPlugin r_bin_plugin_avr;
|
2016-11-03 23:38:15 +01:00
|
|
|
extern RBinPlugin r_bin_plugin_menuet;
|
2017-03-02 14:42:05 +01:00
|
|
|
extern RBinPlugin r_bin_plugin_wasm;
|
2017-03-14 20:02:59 +01:00
|
|
|
extern RBinPlugin r_bin_plugin_nro;
|
2017-11-05 19:40:16 +09:00
|
|
|
extern RBinPlugin r_bin_plugin_nso;
|
2017-04-17 23:37:04 +02:00
|
|
|
extern RBinPlugin r_bin_plugin_sfc;
|
2018-01-10 23:20:18 +01:00
|
|
|
extern RBinPlugin r_bin_plugin_z64;
|
2019-11-11 21:54:46 +01:00
|
|
|
extern RBinPlugin r_bin_plugin_prg;
|
2020-03-02 10:20:27 -08:00
|
|
|
extern RBinPlugin r_bin_plugin_dmp64;
|
2020-05-13 10:37:09 +08:00
|
|
|
extern RBinPlugin r_bin_plugin_pyc;
|
2013-06-18 12:09:23 +02:00
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2010-05-27 19:58:54 +02:00
|
|
|
#endif
|
2009-02-05 22:08:46 +01:00
|
|
|
#endif
|