diff --git a/binr/rabin2/rabin2.c b/binr/rabin2/rabin2.c index 1ac68a8246..78203246d2 100644 --- a/binr/rabin2/rabin2.c +++ b/binr/rabin2/rabin2.c @@ -997,24 +997,20 @@ int main(int argc, char **argv) { r_bin_force_plugin (bin, forcebin); r_bin_load_filter (bin, action); - RBinOptions *bo = r_bin_options_new (0LL, baddr, rawstr); - if (!bo) { - eprintf ("Could not create RBinOptions\n"); - r_core_file_free (fh); - r_core_fini (&core); - return 1; - } + RBinOptions bo = { + .offset = 0LL, + .baseaddr = baddr, + .rawstr = rawstr, + .loadaddr = laddr, + .xtr_idx = xtr_idx, + .iofd = fd, + }; - bo->loadaddr = laddr; - bo->xtr_idx = xtr_idx; - bo->iofd = fd; - - if (!r_bin_open (bin, file, bo)) { + if (!r_bin_open (bin, file, &bo)) { //if this return null means that we did not return a valid bin object //but we have yet the chance that this file is a fat binary if (!bin->cur || !bin->cur->xtr_data) { eprintf ("r_bin: Cannot open file\n"); - r_bin_options_free (bo); r_core_file_free (fh); r_core_fini (&core); return 1; @@ -1045,7 +1041,6 @@ int main(int argc, char **argv) { sdb_query (bin->cur->sdb, query); } } - r_bin_options_free (bo); r_core_file_free (fh); r_core_fini (&core); return 0; @@ -1090,9 +1085,8 @@ int main(int argc, char **argv) { r_config_set (core.config, "pdb.symstore", tmp); R_FREE (tmp); } - pdbopts.symbol_store_path = (char*) r_config_get (core.config, "pdb.symstore"); + pdbopts.symbol_store_path = (char *)r_config_get (core.config, "pdb.symstore"); int r = r_bin_pdb_download (&core, isradjson, &actions_done, &pdbopts); - r_bin_options_free (bo); r_core_file_free (fh); r_core_fini (&core); return r; @@ -1144,7 +1138,6 @@ int main(int argc, char **argv) { r_cons_print ("}"); } r_cons_flush (); - r_bin_options_free (bo); r_core_file_free (fh); r_core_fini (&core); free (stdin_buf); diff --git a/libr/bin/bfile.c b/libr/bin/bfile.c index 56c62dc0a3..d1cfc0f46b 100644 --- a/libr/bin/bfile.c +++ b/libr/bin/bfile.c @@ -261,7 +261,7 @@ static char *swiftField(const char *dn, const char *cn) { return NULL; } -R_API RList *r_bin_classes_from_symbols (RBinFile *bf, RBinObject *o) { +R_API RList *r_bin_classes_from_symbols(RBinFile *bf, RBinObject *o) { RBinSymbol *sym; RListIter *iter; RList *symbols = o->symbols; @@ -324,13 +324,13 @@ R_API RBinFile *r_bin_file_new(RBin *bin, const char *file, const ut8 *bytes, ut } int res = r_bin_file_set_bytes (binfile, bytes, sz, steal_ptr); if (!res && steal_ptr) { // we own the ptr, free on error - free((void*) bytes); + free ((void *)bytes); } binfile->rbin = bin; - binfile->file = file? strdup (file): NULL; + binfile->file = file ? strdup (file) : NULL; binfile->rawstr = rawstr; binfile->fd = fd; - binfile->curxtr = r_bin_get_xtrplugin_by_name (bin, xtrname); + binfile->curxtr = xtrname ? r_bin_get_xtrplugin_by_name (bin, xtrname) : NULL; binfile->sdb = sdb; binfile->size = file_sz; binfile->xtr_data = r_list_newf ((RListFree)r_bin_xtrdata_free); diff --git a/libr/bin/bin.c b/libr/bin/bin.c index 8b35ce3243..d5cf7404cd 100644 --- a/libr/bin/bin.c +++ b/libr/bin/bin.c @@ -32,17 +32,9 @@ static RBinPlugin *bin_static_plugins[] = { R_BIN_STATIC_PLUGINS, NULL }; static RBinXtrPlugin *bin_xtr_static_plugins[] = { R_BIN_XTR_STATIC_PLUGINS, NULL }; static RBinLdrPlugin *bin_ldr_static_plugins[] = { R_BIN_LDR_STATIC_PLUGINS, NULL }; -// TODO: try to deprecate and just call the r_bin_load_io_at_offset_as_az -R_API bool r_bin_load_io (RBin *bin, int fd, ut64 baseaddr, ut64 loadaddr, int xtr_idx, ut64 offset, const char *name) { - // adding file_sz to help reduce the performance impact on the system - // in this case the number of bytes read will be limited to 2MB - // (MIN_LOAD_SIZE) - // if it fails, the whole file is loaded. - const ut64 MAX_LOAD_SIZE = 0; // 0xfffff; //128 * (1 << 10 << 10); - int res = r_bin_load_io2 (bin, fd, baseaddr, - loadaddr, xtr_idx, offset, name, MAX_LOAD_SIZE); - return res? res: r_bin_load_io2 (bin, fd, baseaddr, - loadaddr, xtr_idx, offset, name, UT64_MAX); +R_API bool r_bin_load_io(RBin *bin, int fd, ut64 baseaddr, ut64 loadaddr, int xtr_idx, ut64 offset, const char *name) { + r_return_val_if_fail (bin, false); + return r_bin_load_io2 (bin, fd, baseaddr, loadaddr, xtr_idx, offset, name, 0); } static int getoffset(RBin *bin, int type, int idx) { @@ -64,11 +56,7 @@ static const char *getname(RBin *bin, int type, int idx) { } static ut64 binobj_a2b(RBinObject *o, ut64 addr) { - return addr + (o? o->baddr_shift: 0); -} - -R_API void r_bin_iobind(RBin *bin, RIO *io) { - r_io_bind (io, &bin->iob); + return o ? addr + o->baddr_shift : addr; } // TODO: move these two function do a different file @@ -97,7 +85,7 @@ R_API RBinXtrData *r_bin_xtrdata_new(RBuffer *buf, ut64 offset, ut64 size, return data; } -R_API const char *r_bin_string_type (int type) { +R_API const char *r_bin_string_type(int type) { switch (type) { case 'a': return "ascii"; case 'u': return "utf8"; @@ -123,16 +111,20 @@ R_API void r_bin_xtrdata_free(void /*RBinXtrData*/ *data_) { } } -R_API RList* r_bin_raw_strings(RBinFile *bf, int min) { +R_API RList *r_bin_raw_strings(RBinFile *bf, int min) { + r_return_val_if_fail (bf, NULL); return r_bin_file_get_strings (bf, min, 0, 2); } -R_API RList* r_bin_dump_strings(RBinFile *a, int min, int raw) { - return r_bin_file_get_strings (a, min, 1, raw); +R_API RList *r_bin_dump_strings(RBinFile *bf, int min, int raw) { + r_return_val_if_fail (bf, NULL); + return r_bin_file_get_strings (bf, min, 1, raw); } /* This is very slow if there are lot of symbols */ R_API int r_bin_load_languages(RBinFile *binfile) { + r_return_val_if_fail (binfile, R_BIN_NM_NONE); + if (r_bin_lang_rust (binfile)) { return R_BIN_NM_RUST; } @@ -175,6 +167,8 @@ R_API void r_bin_info_free(RBinInfo *rb) { } R_API RBinImport *r_bin_import_clone(RBinImport *o) { + r_return_val_if_fail (o, NULL); + RBinImport *res = r_mem_dup (o, sizeof (*o)); if (res) { res->name = R_STR_DUP (o->name); @@ -195,6 +189,8 @@ R_API void r_bin_import_free(void *_imp) { } R_API RBinSymbol *r_bin_symbol_clone(RBinSymbol *o) { + r_return_val_if_fail (o, NULL); + RBinSymbol *res = r_mem_dup (o, sizeof (*o)); if (!res) { return NULL; @@ -226,57 +222,21 @@ R_API void r_bin_string_free(void *_str) { // XXX - this is a rather hacky way to do things, there may need to be a better // way. R_API int r_bin_load(RBin *bin, const char *file, ut64 baseaddr, ut64 loadaddr, int xtr_idx, int fd, int rawstr) { - if (!bin) { - return false; - } - // ALIAS? return r_bin_load_as (bin, file, baseaddr, loadaddr, - // xtr_idx, fd, rawstr, 0, file); + r_return_val_if_fail (bin && bin->iob.io, false); + RIOBind *iob = &(bin->iob); - if (!iob) { - return false; - } - if (!iob->io) { - iob->io = r_io_new (); //wtf - if (!iob->io) { - return false; - } - bin->io_owned = true; - r_io_bind (iob->io, &bin->iob); //memleak? - iob = &bin->iob; - } if (!iob->desc_get (iob->io, fd)) { fd = iob->fd_open (iob->io, file, R_PERM_R, 0644); } bin->rawstr = rawstr; // Use the current RIODesc otherwise r_io_map_select can swap them later on if (fd < 0) { - if (bin->io_owned) { - r_io_free (iob->io); - memset (&bin->iob, 0, sizeof (bin->iob)); - bin->io_owned = false; - } return false; } //Use the current RIODesc otherwise r_io_map_select can swap them later on return r_bin_load_io (bin, fd, baseaddr, loadaddr, xtr_idx, 0, NULL); } -R_API int r_bin_load_as(RBin *bin, const char *file, ut64 baseaddr, - ut64 loadaddr, int xtr_idx, int fd, int rawstr, - int fileoffset, const char *name) { - RIOBind *iob = &(bin->iob); - if (!iob || !iob->io) { - return false; - } - if (fd < 0) { - fd = iob->fd_open (iob->io, file, R_PERM_R, 0644); - } - if (fd < 0) { - return false; - } - return r_bin_load_io (bin, fd, baseaddr, loadaddr, xtr_idx, fileoffset, name); -} - R_API int r_bin_reload(RBin *bin, int fd, ut64 baseaddr) { RIOBind *iob = &(bin->iob); RList *the_obj_list = NULL; @@ -285,10 +245,8 @@ R_API int r_bin_reload(RBin *bin, int fd, ut64 baseaddr) { ut8 *buf_bytes = NULL; ut64 sz = UT64_MAX; - if (!iob || !iob->io) { - res = false; - goto error; - } + r_return_val_if_fail (bin && iob && iob->io, false); + const char *name = iob->fd_get_name (iob->io, fd); bf = r_bin_file_find_by_name (bin, name); if (!bf) { @@ -309,8 +267,7 @@ R_API int r_bin_reload(RBin *bin, int fd, ut64 baseaddr) { res = false; goto error; } -// TODO: deprecate, the code in the else should be enough -#if 1 + // TODO: deprecate, the code in the else should be enough if (sz == UT64_MAX && iob->fd_is_dbg (iob->io, fd)) { // attempt a local open and read // This happens when a plugin like debugger does not have a @@ -359,9 +316,6 @@ R_API int r_bin_reload(RBin *bin, int fd, ut64 baseaddr) { } bool yes_plz_steal_ptr = true; r_bin_file_set_bytes (bf, buf_bytes, sz, yes_plz_steal_ptr); -#else - bf->buf = r_buf_new_with_io (iob, fd); -#endif if (r_list_length (the_obj_list) == 1) { RBinObject *old_o = (RBinObject *)r_list_get_n (the_obj_list, 0); @@ -392,9 +346,8 @@ R_API bool r_bin_load_io2(RBin *bin, int fd, ut64 baseaddr, ut64 loadaddr, int x RBinFile *binfile = NULL; int tfd = -1; - if (!io || (fd < 0) || (st64)sz < 0) { - return false; - } + r_return_val_if_fail (bin && io && fd >= 0 && (st64)sz >= 0, false); + bool is_debugger = iob->fd_is_dbg (io, fd); const char *fname = iob->fd_get_name (io, fd); if (loadaddr == UT64_MAX) { @@ -494,11 +447,12 @@ R_API bool r_bin_load_io2(RBin *bin, int fd, ut64 baseaddr, ut64 loadaddr, int x R_API RBinPlugin *r_bin_get_binplugin_by_name(RBin *bin, const char *name) { RBinPlugin *plugin; RListIter *it; - if (bin && name) { - r_list_foreach (bin->plugins, it, plugin) { - if (!strcmp (plugin->name, name)) { - return plugin; - } + + r_return_val_if_fail (bin && name, NULL); + + r_list_foreach (bin->plugins, it, plugin) { + if (!strcmp (plugin->name, name)) { + return plugin; } } return NULL; @@ -507,9 +461,9 @@ R_API RBinPlugin *r_bin_get_binplugin_by_name(RBin *bin, const char *name) { R_API RBinPlugin *r_bin_get_binplugin_by_bytes(RBin *bin, const ut8 *bytes, ut64 sz) { RBinPlugin *plugin; RListIter *it; - if (!bin || !bytes) { - return NULL; - } + + r_return_val_if_fail (bin && bytes, NULL); + r_list_foreach (bin->plugins, it, plugin) { if (plugin->check_bytes && plugin->check_bytes (bytes, sz)) { return plugin; @@ -521,9 +475,9 @@ R_API RBinPlugin *r_bin_get_binplugin_by_bytes(RBin *bin, const ut8 *bytes, ut64 R_API RBinXtrPlugin *r_bin_get_xtrplugin_by_name(RBin *bin, const char *name) { RBinXtrPlugin *xtr; RListIter *it; - if (!bin || !name) { - return NULL; - } + + r_return_val_if_fail (bin && name, NULL); + // TODO: use a hashtable here r_list_foreach (bin->binxtrs, it, xtr) { if (!strcmp (xtr->name, name)) { @@ -537,6 +491,7 @@ R_API RBinXtrPlugin *r_bin_get_xtrplugin_by_name(RBin *bin, const char *name) { // TODO: deprecate R_API RBinPlugin *r_bin_get_binplugin_any(RBin *bin) { + r_return_val_if_fail (bin, NULL); return r_bin_get_binplugin_by_name (bin, "any"); } @@ -551,6 +506,9 @@ static void r_bin_plugin_free(RBinPlugin *p) { R_API bool r_bin_add(RBin *bin, RBinPlugin *foo) { RListIter *it; RBinPlugin *plugin; + + r_return_val_if_fail (bin && foo, false); + if (foo->init) { foo->init (bin->user); } @@ -569,6 +527,8 @@ R_API bool r_bin_ldr_add(RBin *bin, RBinLdrPlugin *foo) { RListIter *it; RBinLdrPlugin *ldr; + r_return_val_if_fail (bin && foo, false); + if (foo->init) { foo->init (bin->user); } @@ -586,6 +546,8 @@ R_API bool r_bin_xtr_add(RBin *bin, RBinXtrPlugin *foo) { RListIter *it; RBinXtrPlugin *xtr; + r_return_val_if_fail (bin && foo, false); + if (foo->init) { foo->init (bin->user); } @@ -603,9 +565,6 @@ R_API void *r_bin_free(RBin *bin) { if (!bin) { return NULL; } - if (bin->io_owned) { - r_io_free (bin->iob.io); - } bin->file = NULL; free (bin->force); free (bin->srcdir); @@ -734,6 +693,8 @@ R_API int r_bin_list_plugin(RBin *bin, const char* name, int json) { RBinPlugin *bp; RBinXtrPlugin *bx; + r_return_val_if_fail (bin && name, false); + r_list_foreach (bin->plugins, it, bp) { if (!r_str_cmp (name, bp->name, strlen (name))) { continue; @@ -753,28 +714,33 @@ R_API int r_bin_list_plugin(RBin *bin, const char* name, int json) { /* returns the base address of bin or UT64_MAX in case of errors */ R_API ut64 r_bin_get_baddr(RBin *bin) { + r_return_val_if_fail (bin, UT64_MAX); RBinObject *o = r_bin_cur_object (bin); return r_bin_object_get_baddr (o); } /* returns the load address of bin or UT64_MAX in case of errors */ R_API ut64 r_bin_get_laddr(RBin *bin) { + r_return_val_if_fail (bin, UT64_MAX); RBinObject *o = r_bin_cur_object (bin); - return o? o->loadaddr: UT64_MAX; + return o ? o->loadaddr : UT64_MAX; } R_API void r_bin_set_baddr(RBin *bin, ut64 baddr) { + r_return_if_fail (bin); RBinObject *o = r_bin_cur_object (bin); r_bin_object_set_baddr (o, baddr); // XXX - update all the infos? } R_API ut64 r_bin_get_boffset(RBin *bin) { + r_return_val_if_fail (bin, UT64_MAX); RBinObject *o = r_bin_cur_object (bin); - return o? o->boffset: UT64_MAX; + return o ? o->boffset : UT64_MAX; } R_API RBinAddr *r_bin_get_sym(RBin *bin, int sym) { + r_return_val_if_fail (bin, NULL); RBinObject *o = r_bin_cur_object (bin); if (sym < 0 || sym >= R_BIN_SYM_LAST) { return NULL; @@ -784,31 +750,37 @@ R_API RBinAddr *r_bin_get_sym(RBin *bin, int sym) { // XXX: those accessors are redundant R_API RList *r_bin_get_entries(RBin *bin) { + r_return_val_if_fail (bin, NULL); RBinObject *o = r_bin_cur_object (bin); - return o? o->entries: NULL; + return o ? o->entries : NULL; } R_API RList *r_bin_get_fields(RBin *bin) { + r_return_val_if_fail (bin, NULL); RBinObject *o = r_bin_cur_object (bin); - return o? o->fields: NULL; + return o ? o->fields : NULL; } R_API RList *r_bin_get_imports(RBin *bin) { + r_return_val_if_fail (bin, NULL); RBinObject *o = r_bin_cur_object (bin); - return o? o->imports: NULL; + return o ? o->imports : NULL; } R_API RBinInfo *r_bin_get_info(RBin *bin) { + r_return_val_if_fail (bin, NULL); RBinObject *o = r_bin_cur_object (bin); - return o? o->info: NULL; + return o ? o->info : NULL; } R_API RList *r_bin_get_libs(RBin *bin) { + r_return_val_if_fail (bin, NULL); RBinObject *o = r_bin_cur_object (bin); - return o? o->libs: NULL; + return o ? o->libs : NULL; } -R_API RList * r_bin_patch_relocs(RBin *bin) { +R_API RList *r_bin_patch_relocs(RBin *bin) { + r_return_val_if_fail (bin, NULL); static bool first = true; RBinObject *o = r_bin_cur_object (bin); if (!o) { @@ -834,13 +806,15 @@ R_API RList * r_bin_patch_relocs(RBin *bin) { } R_API RList *r_bin_get_relocs(RBin *bin) { + r_return_val_if_fail (bin, NULL); RBinObject *o = r_bin_cur_object (bin); - return o? o->relocs: NULL; + return o ? o->relocs : NULL; } R_API RList *r_bin_get_sections(RBin *bin) { + r_return_val_if_fail (bin, NULL); RBinObject *o = r_bin_cur_object (bin); - return o? o->sections: NULL; + return o ? o->sections : NULL; } // TODO: Move into section.c and rename it to r_io_section_get_at () @@ -848,15 +822,14 @@ R_API RBinSection *r_bin_get_section_at(RBinObject *o, ut64 off, int va) { RBinSection *section; RListIter *iter; ut64 from, to; - if (o) { - // TODO: must be O(1) .. use sdb here - r_list_foreach (o->sections, iter, section) { - from = va? binobj_a2b (o, section->vaddr): section->paddr; - to = va? (binobj_a2b (o, section->vaddr) + section->vsize) : - (section->paddr + section->size); - if (off >= from && off < to) { - return section; - } + + r_return_val_if_fail (o, NULL); + // TODO: must be O(1) .. use sdb here + r_list_foreach (o->sections, iter, section) { + from = va ? binobj_a2b (o, section->vaddr) : section->paddr; + to = va ? (binobj_a2b (o, section->vaddr) + section->vsize) : (section->paddr + section->size); + if (off >= from && off < to) { + return section; } } return NULL; @@ -892,8 +865,9 @@ R_API RList *r_bin_reset_strings(RBin *bin) { } R_API RList *r_bin_get_strings(RBin *bin) { + r_return_val_if_fail (bin, NULL); RBinObject *o = r_bin_cur_object (bin); - return o? o->strings: NULL; + return o ? o->strings : NULL; } R_API int r_bin_is_string(RBin *bin, ut64 va) { @@ -916,6 +890,7 @@ R_API int r_bin_is_string(RBin *bin, ut64 va) { //callee must not free the symbol R_API RBinSymbol *r_bin_get_symbol_at_vaddr(RBin *bin, ut64 addr) { + r_return_val_if_fail (bin, NULL); //use skiplist here RList *symbols = r_bin_get_symbols (bin); RListIter *iter; @@ -930,6 +905,7 @@ R_API RBinSymbol *r_bin_get_symbol_at_vaddr(RBin *bin, ut64 addr) { //callee must not free the symbol R_API RBinSymbol *r_bin_get_symbol_at_paddr(RBin *bin, ut64 addr) { + r_return_val_if_fail (bin, NULL); //use skiplist here RList *symbols = r_bin_get_symbols (bin); RListIter *iter; @@ -943,26 +919,31 @@ R_API RBinSymbol *r_bin_get_symbol_at_paddr(RBin *bin, ut64 addr) { } R_API RList *r_bin_get_symbols(RBin *bin) { + r_return_val_if_fail (bin, NULL); RBinObject *o = r_bin_cur_object (bin); - return o? o->symbols: NULL; + return o ? o->symbols : NULL; } R_API RList *r_bin_get_mem(RBin *bin) { + r_return_val_if_fail (bin, NULL); RBinObject *o = r_bin_cur_object (bin); - return o? o->mem: NULL; + return o ? o->mem : NULL; } R_API int r_bin_is_big_endian(RBin *bin) { + r_return_val_if_fail (bin, -1); RBinObject *o = r_bin_cur_object (bin); - return (o && o->info)? o->info->big_endian: -1; + return (o && o->info) ? o->info->big_endian : -1; } R_API int r_bin_is_stripped(RBin *bin) { + r_return_val_if_fail (bin, -1); RBinObject *o = r_bin_cur_object (bin); - return o? (R_BIN_DBG_STRIPPED & o->info->dbg_info): 1; + return o ? (R_BIN_DBG_STRIPPED & o->info->dbg_info) : 1; } R_API int r_bin_is_static(RBin *bin) { + r_return_val_if_fail (bin, false); RBinObject *o = r_bin_cur_object (bin); if (o && r_list_length (o->libs) > 0) { return R_BIN_DBG_STATIC & o->info->dbg_info; @@ -972,18 +953,21 @@ R_API int r_bin_is_static(RBin *bin) { // TODO: Integrate with r_bin_dbg */ R_API int r_bin_has_dbg_linenums(RBin *bin) { + r_return_val_if_fail (bin, false); RBinObject *o = r_bin_cur_object (bin); - return o? (R_BIN_DBG_LINENUMS & o->info->dbg_info): false; + return o ? (R_BIN_DBG_LINENUMS & o->info->dbg_info) : false; } R_API int r_bin_has_dbg_syms(RBin *bin) { + r_return_val_if_fail (bin, false); RBinObject *o = r_bin_cur_object (bin); - return o? (R_BIN_DBG_SYMS & o->info->dbg_info): false; + return o ? (R_BIN_DBG_SYMS & o->info->dbg_info) : false; } R_API int r_bin_has_dbg_relocs(RBin *bin) { + r_return_val_if_fail (bin, false); RBinObject *o = r_bin_cur_object (bin); - return o? (R_BIN_DBG_RELOCS & o->info->dbg_info): false; + return o ? (R_BIN_DBG_RELOCS & o->info->dbg_info) : false; } R_API RBin *r_bin_new() { @@ -1003,7 +987,6 @@ R_API RBin *r_bin_new() { bin->strpurge = NULL; bin->want_dbginfo = true; bin->cur = NULL; - bin->io_owned = false; bin->ids = r_id_storage_new (0, ST32_MAX); /* bin parsers */ @@ -1039,6 +1022,8 @@ R_API RBin *r_bin_new() { } R_API int r_bin_use_arch(RBin *bin, const char *arch, int bits, const char *name) { + r_return_val_if_fail (bin && arch, false); + RBinFile *binfile = r_bin_file_find_by_arch_bits (bin, arch, bits, name); RBinObject *obj = NULL; if (binfile) { @@ -1078,9 +1063,11 @@ R_API int r_bin_use_arch(RBin *bin, const char *arch, int bits, const char *name } R_API int r_bin_select(RBin *bin, const char *arch, int bits, const char *name) { + r_return_val_if_fail (bin, false); + RBinFile *cur = r_bin_cur (bin); RBinObject *obj = NULL; - name = !name && cur? cur->file: name; + name = !name && cur ? cur->file : name; RBinFile *binfile = r_bin_file_find_by_arch_bits (bin, arch, bits, name); if (binfile && name) { obj = r_bin_object_find_by_arch_bits (binfile, arch, bits, name); @@ -1089,11 +1076,14 @@ R_API int r_bin_select(RBin *bin, const char *arch, int bits, const char *name) } R_API int r_bin_select_object(RBinFile *binfile, const char *arch, int bits, const char *name) { + r_return_val_if_fail (binfile, false); RBinObject *obj = r_bin_object_find_by_arch_bits (binfile, arch, bits, name); return r_bin_file_set_cur_binfile_obj (binfile->rbin, binfile, obj); } R_API int r_bin_select_by_ids(RBin *bin, ut32 binfile_id, ut32 binobj_id) { + r_return_val_if_fail (bin, false); + RBinFile *binfile = NULL; RBinObject *obj = NULL; @@ -1177,6 +1167,8 @@ static void list_xtr_archs(RBin *bin, int mode) { } R_API void r_bin_list_archs(RBin *bin, int mode) { + r_return_if_fail (bin); + RListIter *iter; int i = 0; char unk[128]; @@ -1330,30 +1322,8 @@ R_API RBuffer *r_bin_create(RBin *bin, const ut8 *code, int codelen, R_API RBuffer *r_bin_package(RBin *bin, const char *type, const char *file, RList *files) { if (!strcmp (type, "zip")) { -#if 0 - int zep = 0; - struct zip * z = zip_open (file, 8 | 1, &zep); - if (z) { - RListIter *iter; - const char *f; - eprintf ("zip file created\n"); - r_list_foreach (files, iter, f) { - struct zip_source *zs = NULL; - zs = zip_source_file (z, f, 0, 1024); - if (zs) { - eprintf ("ADD %s\n", f); - zip_add (z, f, zs); - zip_source_free (zs); - } else { - eprintf ("Cannot find file %s\n", f); - } - eprintf ("zS %p\n", zs); - } - zip_close (z); - } else { - eprintf ("Cannot create zip file\n"); - } -#endif + // XXX: implement me + r_warn_if_reached (); } else if (!strcmp (type, "fat")) { const char *f; RListIter *iter; @@ -1412,6 +1382,7 @@ R_API RBuffer *r_bin_package(RBin *bin, const char *type, const char *file, RLis } R_API RBinObject *r_bin_get_object(RBin *bin) { + r_return_val_if_fail (bin, NULL); RBinObject *o = r_bin_cur_object (bin); if (o) { o->referenced++; @@ -1420,8 +1391,9 @@ R_API RBinObject *r_bin_get_object(RBin *bin) { } R_API RList * /**/ r_bin_get_classes(RBin *bin) { + r_return_val_if_fail (bin, NULL); RBinObject *o = r_bin_cur_object (bin); - return o? o->classes: NULL; + return o ? o->classes : NULL; } R_API void r_bin_class_free(RBinClass *c) { @@ -1470,9 +1442,8 @@ R_API RBinClass *r_bin_class_new(RBinFile *binfile, const char *name, } R_API RBinClass *r_bin_class_get(RBinFile *binfile, const char *name) { - if (!binfile || !binfile->o || !name) { - return NULL; - } + r_return_val_if_fail (binfile && binfile->o && name, NULL); + RBinClass *c; RListIter *iter; RList *list = binfile->o->classes; @@ -1485,6 +1456,8 @@ R_API RBinClass *r_bin_class_get(RBinFile *binfile, const char *name) { } R_API RBinSymbol *r_bin_class_add_method(RBinFile *binfile, const char *classname, const char *name, int nargs) { + r_return_val_if_fail (binfile, NULL); + RBinClass *c = r_bin_class_get (binfile, classname); if (!c) { c = r_bin_class_new (binfile, classname, NULL, 0); @@ -1517,22 +1490,20 @@ R_API void r_bin_class_add_field(RBinFile *binfile, const char *classname, const /* returns vaddr, rebased with the baseaddr of binfile, if va is enabled for * bin, paddr otherwise */ R_API ut64 r_bin_file_get_vaddr(RBinFile *binfile, ut64 paddr, ut64 vaddr) { + r_return_val_if_fail (binfile, paddr); + int use_va = 0; - if (binfile && binfile->o && binfile->o->info) { + if (binfile->o && binfile->o->info) { use_va = binfile->o->info->has_va; } - return use_va? binobj_a2b (binfile->o, vaddr): paddr; + return use_va ? binobj_a2b (binfile->o, vaddr) : paddr; } /* returns vaddr, rebased with the baseaddr of bin, if va is enabled for bin, * paddr otherwise */ R_API ut64 r_bin_get_vaddr(RBin *bin, ut64 paddr, ut64 vaddr) { - if (!bin) { - return UT64_MAX; - } - if (paddr == UT64_MAX) { - return UT64_MAX; - } + r_return_val_if_fail (bin && paddr != UT64_MAX, UT64_MAX); + if (!bin->cur) { return paddr; } @@ -1552,34 +1523,37 @@ R_API ut64 r_bin_get_vaddr(RBin *bin, ut64 paddr, ut64 vaddr) { } R_API ut64 r_bin_a2b(RBin *bin, ut64 addr) { + r_return_val_if_fail (bin, UT64_MAX); RBinObject *o = r_bin_cur_object (bin); - return o? o->baddr_shift + addr: addr; + return binobj_a2b (o, addr); } R_API ut64 r_bin_get_size(RBin *bin) { + r_return_val_if_fail (bin, UT64_MAX); RBinObject *o = r_bin_cur_object (bin); return o ? o->size : 0; } R_API RBinFile *r_bin_cur(RBin *bin) { - return bin? bin->cur: NULL; + r_return_val_if_fail (bin, NULL); + return bin->cur; } R_API RBinObject *r_bin_cur_object(RBin *bin) { + r_return_val_if_fail (bin, NULL); RBinFile *binfile = r_bin_cur (bin); - return binfile? binfile->o: NULL; + return binfile ? binfile->o : NULL; } R_API void r_bin_force_plugin(RBin *bin, const char *name) { + r_return_if_fail (bin); free (bin->force); - bin->force = (name && *name)? strdup (name): NULL; + bin->force = (name && *name) ? strdup (name) : NULL; } R_API int r_bin_read_at(RBin *bin, ut64 addr, ut8 *buf, int size) { - RIOBind *iob; - if (!bin || !(iob = &(bin->iob))) { - return false; - } + r_return_val_if_fail (bin, false); + RIOBind *iob = &(bin->iob); return iob->read_at (iob->io, addr, buf, size); } diff --git a/libr/bin/obj.c b/libr/bin/obj.c index f1019bcded..61a9b23d20 100644 --- a/libr/bin/obj.c +++ b/libr/bin/obj.c @@ -105,11 +105,9 @@ R_API int r_bin_object_set_items(RBinFile *binfile, RBinObject *o) { RBinObject *old_o; RBinPlugin *cp; int i, minlen; - // int type; - if (!binfile || !o || !o->plugin) { - return false; - } + r_return_val_if_fail (binfile && o && o->plugin, false); + RBin *bin = binfile->rbin; old_o = binfile->o; cp = o->plugin; @@ -264,6 +262,7 @@ R_API int r_bin_object_set_items(RBinFile *binfile, RBinObject *o) { } R_API RBinObject *r_bin_object_get_cur(RBin *bin) { + r_return_val_if_fail (bin, NULL); return r_bin_file_object_get_cur (r_bin_cur (bin)); } @@ -321,10 +320,13 @@ R_API RBinObject *r_bin_object_find_by_arch_bits(RBinFile *binfile, const char * RBinObject *obj = NULL; RListIter *iter = NULL; RBinInfo *info = NULL; + + r_return_val_if_fail (binfile && arch && name, NULL); + r_list_foreach (binfile->objs, iter, obj) { info = obj->info; if (info && info->arch && info->file && - (bits == info->bits) && + (bits == info->bits) && !strcmp (info->arch, arch) && !strcmp (info->file, name)) { break; @@ -335,7 +337,8 @@ R_API RBinObject *r_bin_object_find_by_arch_bits(RBinFile *binfile, const char * } R_API ut64 r_bin_object_get_baddr(RBinObject *o) { - return o? o->baddr + o->baddr_shift: UT64_MAX; + r_return_val_if_fail (o, UT64_MAX); + return o->baddr + o->baddr_shift; } R_API int r_bin_object_delete(RBin *bin, ut32 binfile_id, ut32 binobj_id) { @@ -343,15 +346,17 @@ R_API int r_bin_object_delete(RBin *bin, ut32 binfile_id, ut32 binobj_id) { RBinObject *obj = NULL; int res = false; + r_return_val_if_fail (bin, false); + if (binfile_id == UT32_MAX) { binfile = r_bin_file_find_by_object_id (bin, binobj_id); - obj = binfile? r_bin_file_object_find_by_id (binfile, binobj_id): NULL; + obj = binfile ? r_bin_file_object_find_by_id (binfile, binobj_id) : NULL; } else if (binobj_id == UT32_MAX) { binfile = r_bin_file_find_by_id (bin, binfile_id); - obj = binfile? binfile->o: NULL; + obj = binfile ? binfile->o : NULL; } else { binfile = r_bin_file_find_by_id (bin, binfile_id); - obj = binfile? r_bin_file_object_find_by_id (binfile, binobj_id): NULL; + obj = binfile ? r_bin_file_object_find_by_id (binfile, binobj_id) : NULL; } if (binfile && bin->cur == binfile) { bin->cur = NULL; @@ -371,13 +376,15 @@ R_API int r_bin_object_delete(RBin *bin, ut32 binfile_id, ut32 binobj_id) { } R_API void r_bin_object_set_baddr(RBinObject *o, ut64 baddr) { - if (!o || baddr == UT64_MAX) { - return; + r_return_if_fail (o); + if (baddr != UT64_MAX) { + o->baddr_shift = baddr - o->baddr; } - o->baddr_shift = baddr - o->baddr; } -R_API void r_bin_object_filter_strings (RBinObject *bo) { +R_API void r_bin_object_filter_strings(RBinObject *bo) { + r_return_if_fail (bo); + RList *strings = bo->strings; RBinString *ptr; RListIter *iter; @@ -407,4 +414,3 @@ R_API void r_bin_object_filter_strings (RBinObject *bo) { } } } - diff --git a/libr/bin/open.c b/libr/bin/open.c index 0170b986fc..a43609d30a 100644 --- a/libr/bin/open.c +++ b/libr/bin/open.c @@ -2,33 +2,17 @@ #include -R_API RBinOptions *r_bin_options_new (ut64 offset, ut64 baddr, int rawstr) { - RBinOptions *bo = R_NEW0 (RBinOptions); - if (bo) { - bo->loadaddr = UT64_MAX; - bo->offset = offset; - bo->baseaddr = baddr; - bo->rawstr = rawstr; - bo->iofd = -1; - } - return bo; -} - -R_API void r_bin_options_free(RBinOptions *bo) { - free (bo->name); - free (bo); -} - R_API int r_bin_open(RBin *bin, const char *filename, RBinOptions *bo) { ut64 baddr = 0LL, laddr = 0LL; int iofd = -1, rawstr = 0, xtr_idx = 0; - if (bo) { - baddr = bo->baseaddr; - laddr = bo->loadaddr; - xtr_idx = bo->xtr_idx; - iofd = bo->iofd; - rawstr = bo->rawstr; - } + + r_return_val_if_fail (bin && filename && bo, -1); + + baddr = bo->baseaddr; + laddr = bo->loadaddr; + xtr_idx = bo->xtr_idx; + iofd = bo->iofd; + rawstr = bo->rawstr; if (r_bin_load (bin, filename, baddr, laddr, xtr_idx, iofd, rawstr)) { int id = bin->cur->id; // TODO rename to bd? r_id_storage_set (bin->ids, bin->cur, id); @@ -37,7 +21,7 @@ R_API int r_bin_open(RBin *bin, const char *filename, RBinOptions *bo) { return -1; } -R_API RBinFile *r_bin_get_file (RBin *bin, int bd) { +R_API RBinFile *r_bin_get_file(RBin *bin, int bd) { return r_id_storage_take (bin->ids, bd); } @@ -50,50 +34,3 @@ R_API bool r_bin_close(RBin *bin, int bd) { } return false; } - -#if 0 -// usage example - -var bin = new RBin (); -int fd = bin.open("/bin/ls", null); -var binfile = bin.get_file(fd); -binfile.symbols.foreach(sym => { - print(sym.name); -}); -bin.close(fd); -// binfile is invalid here - -int bd = bin->cur; -r_list_foreach (r_bin_list (bin, bd, R_BIN_REQ_SYMBOLS), iter, sym) { - eprintf ("Symbol: %s\n", sym->name); -} - -bool cb(void *user, void *data) { -} -r_bin_foreach (bin, bd, R_BIN_REQ_SYMBOLS, cb, user); -#if 0 -// TODO: rename to r_bin_cmd() to match r2 commands ? -// TODO: use this api in r2 -// TODO: add queryf api (or cmdf) -R_API bool r_bin_query(RBin *bin, const char *query) { - bool ret = false; - char *q = strdup (query); - const char *at = strchr (q, '@'); - if (at) { - *at++ = 0; - } - if (!strcmp (q, "s")) { - // symbols - ret = true; - } else { - eprintf ("Unknown command\n"); - } - return ret; - // r_bin_query (bin, "o@0x8048080"); // return symbol at given address - // r_bin_query (bin, "s@0x8048080"); // return symbol at given address - // r_bin_query (bin, "z/str/"); // return list subset of strings matching - // r_bin_query (bin, "i\"printf\""); // imports -} -#endif - -#endif diff --git a/libr/core/cfile.c b/libr/core/cfile.c index f09193f63b..69968ea2a4 100644 --- a/libr/core/cfile.c +++ b/libr/core/cfile.c @@ -291,7 +291,6 @@ static int r_core_file_do_load_for_debug(RCore *r, ut64 baseaddr, const char *fi RIODesc *desc = cf ? r_io_desc_get (r->io, cf->fd) : NULL; RBinFile *binfile = NULL; RBinPlugin *plugin; - RBinOptions *bo = NULL; int xtr_idx = 0; // if 0, load all if xtr is used // TODO : Honor file.path eval var too? @@ -314,21 +313,20 @@ static int r_core_file_do_load_for_debug(RCore *r, ut64 baseaddr, const char *fi } #endif int fd = cf ? cf->fd : -1; + RBinOptions bo = { + .offset = 0LL, + .baseaddr = baseaddr, + .rawstr = false, + .xtr_idx = xtr_idx, + .iofd = fd, + .loadaddr = UT64_MAX, + }; - bo = r_bin_options_new (0LL, baseaddr, false); - if (!bo) { - eprintf ("Failed to create bin options\n"); - return false; - } - - bo->xtr_idx = xtr_idx; - bo->iofd = fd; - if (r_bin_open (r->bin, filenameuri, bo) == -1) { + if (r_bin_open (r->bin, filenameuri, &bo) == -1) { eprintf ("RBinLoad: Cannot open %s\n", filenameuri); if (r_config_get_i (r->config, "bin.rawstr")) { - bo->rawstr = true; - if (r_bin_open (r->bin, filenameuri, bo) == -1) { - r_bin_options_free (bo); + bo.rawstr = true; + if (r_bin_open (r->bin, filenameuri, &bo) == -1) { return false; } } @@ -367,7 +365,6 @@ static int r_core_file_do_load_for_debug(RCore *r, ut64 baseaddr, const char *fi r_core_cmd0 (r, "\"(fix-dex,wx `ph sha1 $s-32 @32` @12 ; wx `ph adler32 $s-12 @12` @8)\"\n"); } - r_bin_options_free (bo); return true; } diff --git a/libr/core/cmd_search.c b/libr/core/cmd_search.c index 8e731287cd..e7184b5710 100644 --- a/libr/core/cmd_search.c +++ b/libr/core/cmd_search.c @@ -256,8 +256,7 @@ static void cmd_search_bin(RCore *core, RInterval itv) { r_io_read_at (core->io, from, buf, sz); plug = r_bin_get_binplugin_by_bytes (core->bin, buf, sz); if (plug) { - r_cons_printf ("0x%08"PFMT64x " %s\n", from, plug->name); - // TODO: load the bin and calculate its size + r_cons_printf ("0x%08" PFMT64x " %s\n", from, plug->name); if (plug->size) { r_bin_load_io2 (core->bin, core->file->fd, 0, 0, 0, core->offset, plug->name, 4096); @@ -2477,10 +2476,10 @@ static ut8 *v_writebuf(RCore *core, RList *nums, int len, char ch, int bsize) { } // maybe useful as in util/big.c .? -static void incBuffer (ut8 *buf, int bufsz) { +static void incBuffer(ut8 *buf, int bufsz) { int i = 0; while (i < bufsz) { - buf[i] ++; + buf[i]++; if (!buf[i]) { i++; continue; @@ -2490,7 +2489,7 @@ static void incBuffer (ut8 *buf, int bufsz) { // may overflow/hang/end/stop/whatever here } -static void search_collisions (RCore *core, const char *hashName, const ut8 *hashValue, int hashLength) { +static void search_collisions(RCore *core, const char *hashName, const ut8 *hashValue, int hashLength) { ut8 R_ALIGNED(8) cmphash[128]; int i, algoType = R_HASH_CRC32; int bufsz = core->blocksize; diff --git a/libr/include/r_bin.h b/libr/include/r_bin.h index 2a8ee96c69..93e0aa88a5 100644 --- a/libr/include/r_bin.h +++ b/libr/include/r_bin.h @@ -320,7 +320,6 @@ typedef struct r_bin_t { ut64 filter_rules; bool demanglercmd; bool verbose; - bool io_owned; bool use_xtr; // use extract plugins when loading a file? bool use_ldr; // use loader plugins when loading a file? } RBin; @@ -347,9 +346,9 @@ typedef struct r_bin_xtr_extract_t { RBinXtrMetadata *metadata; } RBinXtrData; -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); -R_API void r_bin_info_free (RBinInfo *rb); +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); +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 void r_bin_string_free(void *_str); @@ -607,27 +606,22 @@ typedef struct r_bin_options_t { ut64 offset; // starting physical address to read from the target file ut64 baseaddr; // where the linker maps the binary in memory ut64 loadaddr; // the desired offset where the binary should be loaded - ut64 size; // restrict the size of the target fd int xtr_idx; // load Nth binary int rawstr; int iofd; - char *name; // or comment :? } RBinOptions; R_API RBinImport *r_bin_import_clone(RBinImport *o); R_API RBinSymbol *r_bin_symbol_clone(RBinSymbol *o); -R_API RBinOptions *r_bin_options_new (ut64 offset, ut64 baddr, int rawstr); -R_API void r_bin_options_free(RBinOptions *bo); R_API int r_bin_open(RBin *bin, const char *filename, RBinOptions *bo); -R_API RBinFile *r_bin_get_file (RBin *bin, int bd); +R_API RBinFile *r_bin_get_file(RBin *bin, int bd); R_API bool r_bin_close(RBin *bin, int bd); R_API bool r_bin_query(RBin *bin, const char *query); /* load */ R_API int r_bin_load(RBin *bin, const char *file, ut64 baseaddr, ut64 loadaddr, int xtr_idx, int fd, int rawstr); -R_API int r_bin_load_as(RBin *bin, const char *file, ut64 baseaddr, ut64 loadaddr, int xtr_idx, int fd, int rawstr, int fileoffset, const char *name); -R_API bool r_bin_load_io (RBin *bin, int fd, ut64 baseaddr, ut64 loadaddr, int xtr_idx, ut64 offset, const char *name); +R_API bool r_bin_load_io(RBin *bin, int fd, ut64 baseaddr, ut64 loadaddr, int xtr_idx, ut64 offset, const char *name); R_API bool r_bin_load_io2(RBin *bin, int fd, ut64 baseaddr, ut64 loadaddr, int xtr_idx, ut64 offset, const char *name, ut64 sz); /* bin.c */ @@ -643,8 +637,8 @@ R_API void* r_bin_free(RBin *bin); R_API RList *r_bin_raw_strings(RBinFile *a, int min); R_API RList *r_bin_dump_strings(RBinFile *a, int min, int raw); //io-wrappers -R_API int r_bin_read_at (RBin *bin, ut64 addr, ut8 *buf, int size); -R_API int r_bin_write_at (RBin *bin, ut64 addr, const ut8 *buf, int size); +R_API int r_bin_read_at(RBin *bin, ut64 addr, ut8 *buf, int size); +R_API int r_bin_write_at(RBin *bin, ut64 addr, const ut8 *buf, int size); /* file.c */ R_API RBinFile *r_bin_file_new(RBin *bin, const char *file, const ut8 *bytes, ut64 sz, ut64 file_sz, int rawstr, int fd, const char *xtrname, Sdb *sdb, bool steal_ptr); @@ -681,7 +675,7 @@ R_API void r_bin_section_free(RBinSection *bs); /* obj.c */ R_API void r_bin_object_free(void /*RBinObject*/ *o_); R_API ut64 r_bin_object_get_baddr(RBinObject *o); -R_API void r_bin_object_filter_strings (RBinObject *bo); +R_API void r_bin_object_filter_strings(RBinObject *bo); R_API void r_bin_object_set_baddr(RBinObject *o, ut64 baddr); R_API RBinObject *r_bin_object_new(RBinFile *binfile, RBinPlugin *plugin, ut64 baseaddr, ut64 loadaddr, ut64 offset, ut64 sz); R_API int r_bin_object_set_items(RBinFile *binfile, RBinObject *o); @@ -691,21 +685,20 @@ R_API int r_bin_object_delete(RBin *bin, ut32 binfile_id, ut32 binobj_id); R_API void r_bin_object_delete_items(RBinObject *o); // ref -R_API int r_bin_file_deref_by_bind (RBinBind * binb); -R_API int r_bin_file_deref (RBin *bin, RBinFile * a); -R_API int r_bin_file_ref_by_bind (RBinBind * binb); -R_API int r_bin_file_ref (RBin *bin, RBinFile * a); -R_API bool r_bin_file_object_new_from_xtr_data(RBin *bin, RBinFile *bf, ut64 baseaddr, ut64 loadaddr, +R_API int r_bin_file_deref_by_bind(RBinBind *binb); +R_API int r_bin_file_deref(RBin *bin, RBinFile *a); +R_API int r_bin_file_ref_by_bind(RBinBind *binb); +R_API int r_bin_file_ref(RBin *bin, RBinFile *a); +R_API bool r_bin_file_object_new_from_xtr_data(RBin *bin, RBinFile *bf, ut64 baseaddr, ut64 loadaddr, RBinXtrData *xtr_data); #define MODE_PRINT 0x000 #define MODE_RADARE 0x001 #define MODE_SIMPLE 0x004 - RBinXtrData *xtr_data); R_API int r_bin_list(RBin *bin, int json); -R_API int r_bin_list_plugin(RBin *bin, const char* name, int json); +R_API int r_bin_list_plugin(RBin *bin, const char *name, int json); R_API RBinObject *r_bin_get_object(RBin *bin); -R_API ut64 r_binfile_get_baddr (RBinFile *binfile); +R_API ut64 r_binfile_get_baddr(RBinFile *binfile); R_API ut64 r_bin_get_baddr(RBin *bin); R_API void r_bin_set_baddr(RBin *bin, ut64 baddr); R_API ut64 r_bin_get_laddr(RBin *bin); @@ -717,8 +710,8 @@ R_API RBinXtrPlugin *r_bin_get_xtrplugin_by_name(RBin *bin, const char *name); R_API RBinPlugin *r_bin_get_binplugin_by_name(RBin *bin, const char *name); R_API RBinPlugin *r_bin_get_binplugin_any(RBin *bin); -R_API char* r_bin_demangle(RBinFile *binfile, const char *lang, const char *str, ut64 vaddr); -R_API int r_bin_demangle_type (const char *str); +R_API char *r_bin_demangle(RBinFile *binfile, const char *lang, const char *str, ut64 vaddr); +R_API int r_bin_demangle_type(const char *str); R_API char *r_bin_demangle_java(const char *str); R_API char *r_bin_demangle_cxx(RBinFile *binfile, const char *str, ut64 vaddr); R_API char *r_bin_demangle_msvc(const char *str); @@ -734,30 +727,30 @@ R_API bool r_bin_lang_dlang(RBinFile *binfile); R_API bool r_bin_lang_rust(RBinFile *binfile); R_API const char *r_bin_get_meth_flag_string(ut64 flag, bool compact); -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 RBinInfo* r_bin_get_info(RBin *bin); -R_API RList* r_bin_get_libs(RBin *bin); -R_API ut64 r_bin_get_size (RBin *bin); -R_API RList* r_bin_patch_relocs(RBin *bin); -R_API RList* r_bin_get_relocs(RBin *bin); -R_API RList* r_bin_get_sections(RBin *bin); -R_API RList* /**/r_bin_get_classes(RBin *bin); +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 RBinInfo *r_bin_get_info(RBin *bin); +R_API RList *r_bin_get_libs(RBin *bin); +R_API ut64 r_bin_get_size(RBin *bin); +R_API RList *r_bin_patch_relocs(RBin *bin); +R_API RList *r_bin_get_relocs(RBin *bin); +R_API RList *r_bin_get_sections(RBin *bin); +R_API RList * /**/ r_bin_get_classes(RBin *bin); // TODO: rename to r_bin_file_get_class() etc -R_API RBinClass *r_bin_class_get (RBinFile *binfile, const char *name); -R_API RBinClass *r_bin_class_new (RBinFile *binfile, const char *name, const char *super, int view); +R_API RBinClass *r_bin_class_get(RBinFile *binfile, const char *name); +R_API RBinClass *r_bin_class_new(RBinFile *binfile, const char *name, const char *super, int view); R_API void r_bin_class_free(RBinClass *c); -R_API RBinSymbol *r_bin_class_add_method (RBinFile *binfile, const char *classname, const char *name, int nargs); -R_API void r_bin_class_add_field (RBinFile *binfile, const char *classname, const char *name); -R_API RList *r_bin_classes_from_symbols (RBinFile *bf, RBinObject *o); +R_API RBinSymbol *r_bin_class_add_method(RBinFile *binfile, const char *classname, const char *name, int nargs); +R_API void r_bin_class_add_field(RBinFile *binfile, const char *classname, const char *name); +R_API RList *r_bin_classes_from_symbols(RBinFile *bf, RBinObject *o); -R_API RBinSection* r_bin_get_section_at(RBinObject *o, ut64 off, int va); -R_API RList* r_bin_get_strings(RBin *bin); +R_API RBinSection *r_bin_get_section_at(RBinObject *o, ut64 off, int va); +R_API RList *r_bin_get_strings(RBin *bin); R_API int r_bin_is_string(RBin *bin, ut64 va); -R_API RList* r_bin_reset_strings(RBin *bin); -R_API RList* r_bin_get_symbols(RBin *bin); +R_API RList *r_bin_reset_strings(RBin *bin); +R_API RList *r_bin_get_symbols(RBin *bin); R_API RBinSymbol *r_bin_get_symbol_at_vaddr(RBin *bin, ut64 addr); R_API RBinSymbol *r_bin_get_symbol_at_paddr(RBin *bin, ut64 addr); R_API int r_bin_is_big_endian(RBin *bin); @@ -766,32 +759,31 @@ R_API int r_bin_is_static(RBin *bin); R_API int r_bin_has_dbg_linenums(RBin *bin); R_API int r_bin_has_dbg_syms(RBin *bin); R_API int r_bin_has_dbg_relocs(RBin *bin); -R_API RBin* r_bin_new(void); -R_API void r_bin_iobind(RBin *bin, RIO *io); -R_API RBinFile * r_bin_cur(RBin *bin); -R_API RBinObject * r_bin_cur_object(RBin *bin); +R_API RBin *r_bin_new(void); +R_API RBinFile *r_bin_cur(RBin *bin); +R_API RBinObject *r_bin_cur_object(RBin *bin); R_API int r_bin_io_load(RBin *bin, RIO *io, int fd, ut64 baseaddr, ut64 loadaddr, int dummy); R_API int r_bin_select(RBin *bin, const char *arch, int bits, const char *name); R_API int r_bin_select_idx(RBin *bin, const char *name, int idx); R_API int r_bin_select_by_ids(RBin *bin, ut32 binfile_id, ut32 binobj_id); R_API int r_bin_use_arch(RBin *bin, const char *arch, int bits, const char *name); -R_API RBinFile * r_bin_file_find_by_arch_bits(RBin *bin, const char *arch, int bits, const char *name); +R_API RBinFile *r_bin_file_find_by_arch_bits(RBin *bin, const char *arch, int bits, const char *name); R_API void r_bin_list_archs(RBin *bin, int mode); R_API void r_bin_set_user_ptr(RBin *bin, void *user); -R_API RBuffer *r_bin_create (RBin *bin, const ut8 *code, int codelen, const ut8 *data, int datalen); -R_API RBuffer *r_bin_package (RBin *bin, const char *type, const char *file, RList *files); -R_API ut64 r_bin_get_vaddr (RBin *bin, ut64 paddr, ut64 vaddr); -R_API ut64 r_bin_a2b (RBin *bin, ut64 addr); +R_API RBuffer *r_bin_create(RBin *bin, const ut8 *code, int codelen, const ut8 *data, int datalen); +R_API RBuffer *r_bin_package(RBin *bin, const char *type, const char *file, RList *files); +R_API ut64 r_bin_get_vaddr(RBin *bin, ut64 paddr, ut64 vaddr); +R_API ut64 r_bin_a2b(RBin *bin, ut64 addr); R_API int r_bin_file_delete(RBin *bin, ut32 bin_fd); R_API int r_bin_file_delete_all(RBin *bin); -R_API int r_bin_file_set_cur_by_fd (RBin *bin, ut32 bin_fd); -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); -R_API RBinFile * r_bin_file_find_by_name_n (RBin * bin, const char * name, int idx); -R_API RBinPlugin * r_bin_file_cur_plugin (RBinFile *binfile); -R_API void r_bin_force_plugin (RBin *bin, const char *pname); -R_API const char *r_bin_string_type (int type); +R_API int r_bin_file_set_cur_by_fd(RBin *bin, ut32 bin_fd); +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); +R_API RBinFile *r_bin_file_find_by_name_n(RBin *bin, const char *name, int idx); +R_API RBinPlugin *r_bin_file_cur_plugin(RBinFile *binfile); +R_API void r_bin_force_plugin(RBin *bin, const char *pname); +R_API const char *r_bin_string_type(int type); /* dbginfo.c */ R_API int r_bin_addr2line(RBin *bin, ut64 addr, char *file, int len, int *line); @@ -809,18 +801,18 @@ R_API RList *r_bin_dwarf_parse_line(RBin *a, int mode); R_API RList *r_bin_dwarf_parse_aranges(RBin *a, int mode); R_API RBinDwarfDebugAbbrev *r_bin_dwarf_parse_abbrev(RBin *a, int mode); -R_API RBinPlugin * r_bin_get_binplugin_by_bytes (RBin *bin, const ut8* bytes, ut64 sz); +R_API RBinPlugin *r_bin_get_binplugin_by_bytes(RBin *bin, const ut8 *bytes, ut64 sz); R_API void r_bin_demangle_list(RBin *bin); R_API char *r_bin_demangle_plugin(RBin *bin, const char *name, const char *str); -R_API RList *r_bin_get_mem (RBin *bin); +R_API RList *r_bin_get_mem(RBin *bin); /* filter.c */ R_API void r_bin_filter_name(Sdb *db, ut64 addr, char *name, int maxlen); -R_API void r_bin_filter_symbols (RList *list); -R_API void r_bin_filter_sections (RList *list); -R_API void r_bin_filter_classes (RList *list); +R_API void r_bin_filter_symbols(RList *list); +R_API void r_bin_filter_sections(RList *list); +R_API void r_bin_filter_classes(RList *list); 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); R_API bool r_bin_is_cxx(RBinFile *binfile); diff --git a/libr/include/r_io.h b/libr/include/r_io.h index b921f26db3..09a8990532 100644 --- a/libr/include/r_io.h +++ b/libr/include/r_io.h @@ -346,7 +346,7 @@ R_API char *r_io_system (RIO *io, const char* cmd); R_API bool r_io_resize (RIO *io, ut64 newsize); R_API int r_io_extend_at (RIO *io, ut64 addr, ut64 size); R_API bool r_io_set_write_mask (RIO *io, const ut8 *mask, int len); -R_API int r_io_bind (RIO *io, RIOBind *bnd); +R_API void r_io_bind(RIO *io, RIOBind *bnd); R_API int r_io_shift (RIO *io, ut64 start, ut64 end, st64 move); R_API ut64 r_io_seek (RIO *io, ut64 offset, int whence); R_API int r_io_fini (RIO *io); diff --git a/libr/io/io.c b/libr/io/io.c index f4e3635f9a..4f1f669feb 100644 --- a/libr/io/io.c +++ b/libr/io/io.c @@ -529,10 +529,9 @@ R_API bool r_io_set_write_mask(RIO* io, const ut8* mask, int len) { return true; } -R_API int r_io_bind(RIO* io, RIOBind* bnd) { - if (!io || !bnd) { - return false; - } +R_API void r_io_bind(RIO *io, RIOBind *bnd) { + r_return_if_fail (io && bnd); + bnd->io = io; bnd->init = true; bnd->desc_use = r_io_use_fd; @@ -564,7 +563,6 @@ R_API int r_io_bind(RIO* io, RIOBind* bnd) { #if HAVE_PTRACE bnd->ptrace = r_io_ptrace; #endif - return true; } /* moves bytes up (+) or down (-) within the specified range */ diff --git a/sys/clang-format-diff.py b/sys/clang-format-diff.py index f3128670bc..579dfe4f2c 100755 --- a/sys/clang-format-diff.py +++ b/sys/clang-format-diff.py @@ -40,7 +40,6 @@ try: except ImportError: from io import StringIO - def main(): parser = argparse.ArgumentParser(description= 'Reformat changed lines in diff. Without -i ' @@ -130,9 +129,6 @@ def main(): # handle functions definitions/declarations: do not use space before ( for i, l in enumerate(formatted_code): - if lines and i + 1 not in modified_lines: - continue - if l.startswith('R_API ') or l.startswith('static '): formatted_code[i] = l.replace(' (', '(')