Refactor the <entries> in RzBinPlugin from list to pvector (#4118)
This commit is contained in:
parent
8b21371b8d
commit
5d053f0448
66 changed files with 297 additions and 370 deletions
|
|
@ -598,13 +598,6 @@ RZ_API void rz_bin_set_baddr(RzBin *bin, ut64 baddr) {
|
|||
}
|
||||
}
|
||||
|
||||
// XXX: those accessors are redundant
|
||||
RZ_DEPRECATE RZ_API RZ_BORROW RzList /*<RzBinAddr *>*/ *rz_bin_get_entries(RZ_NONNULL RzBin *bin) {
|
||||
rz_return_val_if_fail(bin, NULL);
|
||||
RzBinObject *o = rz_bin_cur_object(bin);
|
||||
return o ? (RzList *)rz_bin_object_get_entries(o) : NULL;
|
||||
}
|
||||
|
||||
RZ_DEPRECATE RZ_API RZ_BORROW RzBinInfo *rz_bin_get_info(RzBin *bin) {
|
||||
rz_return_val_if_fail(bin, NULL);
|
||||
RzBinObject *o = rz_bin_cur_object(bin);
|
||||
|
|
|
|||
|
|
@ -194,7 +194,7 @@ RZ_IPI void rz_bin_object_free(RzBinObject *o) {
|
|||
rz_bin_source_line_info_free(o->lines);
|
||||
rz_bin_string_database_free(o->strings);
|
||||
rz_pvector_free(o->classes);
|
||||
rz_list_free(o->entries);
|
||||
rz_pvector_free(o->entries);
|
||||
rz_pvector_free(o->fields);
|
||||
rz_pvector_free(o->imports);
|
||||
rz_pvector_free(o->libs);
|
||||
|
|
@ -657,9 +657,9 @@ RZ_API const RzBinAddr *rz_bin_object_get_special_symbol(RzBinObject *o, RzBinSp
|
|||
}
|
||||
|
||||
/**
|
||||
* \brief Get list of \p RzBinAddr representing the entry points of the binary object.
|
||||
* \brief Get pvector of \p RzBinAddr representing the entry points of the binary object.
|
||||
*/
|
||||
RZ_API const RzList /*<RzBinAddr *>*/ *rz_bin_object_get_entries(RZ_NONNULL RzBinObject *obj) {
|
||||
RZ_API RZ_BORROW const RzPVector /*<RzBinAddr *>*/ *rz_bin_object_get_entries(RZ_NONNULL RzBinObject *obj) {
|
||||
rz_return_val_if_fail(obj, NULL);
|
||||
return obj->entries;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,15 +7,16 @@
|
|||
RZ_IPI void rz_bin_set_and_process_entries(RzBinFile *bf, RzBinObject *o) {
|
||||
RzBinPlugin *plugin = o->plugin;
|
||||
|
||||
rz_list_free(o->entries);
|
||||
rz_pvector_free(o->entries);
|
||||
if (!plugin->entries || !(o->entries = plugin->entries(bf))) {
|
||||
o->entries = rz_list_newf(free);
|
||||
o->entries = rz_pvector_new(free);
|
||||
return;
|
||||
}
|
||||
|
||||
RzListIter *it;
|
||||
void **it;
|
||||
RzBinAddr *element;
|
||||
rz_list_foreach (o->entries, it, element) {
|
||||
rz_pvector_foreach (o->entries, it) {
|
||||
element = *it;
|
||||
// rebase physical address
|
||||
element->paddr += o->opts.loadaddr;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1688,12 +1688,12 @@ RZ_API RZ_OWN RzBinAddr *rz_bin_dex_resolve_symbol(RZ_NONNULL RzBinDex *dex, RzB
|
|||
return ret;
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *dex_resolve_entrypoints_in_class(RzBinDex *dex, DexClassDef *class_def) {
|
||||
static RzPVector /*<RzBinAddr *>*/ *dex_resolve_entrypoints_in_class(RzBinDex *dex, DexClassDef *class_def) {
|
||||
RzListIter *it;
|
||||
DexEncodedMethod *encoded_method = NULL;
|
||||
RzList *entrypoints = NULL;
|
||||
RzPVector *entrypoints = NULL;
|
||||
|
||||
entrypoints = rz_list_newf((RzListFree)free);
|
||||
entrypoints = rz_pvector_new((RzPVectorFree)free);
|
||||
if (!entrypoints) {
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -1732,7 +1732,7 @@ static RzList /*<RzBinAddr *>*/ *dex_resolve_entrypoints_in_class(RzBinDex *dex,
|
|||
entrypoint->vaddr = encoded_method->code_offset;
|
||||
entrypoint->paddr = 0;
|
||||
}
|
||||
if (entrypoint && !rz_list_append(entrypoints, entrypoint)) {
|
||||
if (entrypoint && !rz_pvector_push(entrypoints, entrypoint)) {
|
||||
free(entrypoint);
|
||||
}
|
||||
}
|
||||
|
|
@ -1776,7 +1776,7 @@ static RzList /*<RzBinAddr *>*/ *dex_resolve_entrypoints_in_class(RzBinDex *dex,
|
|||
entrypoint->vaddr = encoded_method->code_offset;
|
||||
entrypoint->paddr = 0;
|
||||
}
|
||||
if (entrypoint && !rz_list_append(entrypoints, entrypoint)) {
|
||||
if (entrypoint && !rz_pvector_push(entrypoints, entrypoint)) {
|
||||
free(entrypoint);
|
||||
}
|
||||
}
|
||||
|
|
@ -1785,27 +1785,26 @@ static RzList /*<RzBinAddr *>*/ *dex_resolve_entrypoints_in_class(RzBinDex *dex,
|
|||
}
|
||||
|
||||
/**
|
||||
* \brief Returns a RzList<RzBinAddr*> containing the dex entripoints
|
||||
* \brief Returns a RzPVector<RzBinAddr*> containing the dex entripoints
|
||||
*/
|
||||
RZ_API RZ_OWN RzList /*<RzBinAddr *>*/ *rz_bin_dex_entrypoints(RZ_NONNULL RzBinDex *dex) {
|
||||
RZ_API RZ_OWN RzPVector /*<RzBinAddr *>*/ *rz_bin_dex_entrypoints(RZ_NONNULL RzBinDex *dex) {
|
||||
rz_return_val_if_fail(dex, NULL);
|
||||
|
||||
DexClassDef *class_def;
|
||||
RzList *list = NULL;
|
||||
RzList *entrypoints = NULL;
|
||||
RzPVector *entrypoints = NULL, *vec = NULL;
|
||||
void **it;
|
||||
|
||||
entrypoints = rz_list_newf((RzListFree)free);
|
||||
entrypoints = rz_pvector_new((RzPVectorFree)free);
|
||||
if (!entrypoints) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
rz_pvector_foreach (dex->class_defs, it) {
|
||||
class_def = (DexClassDef *)*it;
|
||||
list = dex_resolve_entrypoints_in_class(dex, class_def);
|
||||
if (list) {
|
||||
rz_list_join(entrypoints, list);
|
||||
rz_list_free(list);
|
||||
vec = dex_resolve_entrypoints_in_class(dex, class_def);
|
||||
if (vec) {
|
||||
rz_pvector_join(entrypoints, vec);
|
||||
rz_pvector_free(vec);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -215,7 +215,7 @@ RZ_API RZ_OWN RzPVector /*<RzBinSymbol *>*/ *rz_bin_dex_symbols(RZ_NONNULL RzBin
|
|||
RZ_API RZ_OWN RzPVector /*<RzBinImport *>*/ *rz_bin_dex_imports(RZ_NONNULL RzBinDex *dex);
|
||||
RZ_API RZ_OWN RzPVector /*<char *>*/ *rz_bin_dex_libraries(RZ_NONNULL RzBinDex *dex);
|
||||
RZ_API RZ_OWN RzBinAddr *rz_bin_dex_resolve_symbol(RZ_NONNULL RzBinDex *dex, RzBinSpecialSymbol resolve);
|
||||
RZ_API RZ_OWN RzList /*<RzBinAddr *>*/ *rz_bin_dex_entrypoints(RZ_NONNULL RzBinDex *dex);
|
||||
RZ_API RZ_OWN RzPVector /*<RzBinAddr *>*/ *rz_bin_dex_entrypoints(RZ_NONNULL RzBinDex *dex);
|
||||
RZ_API RZ_BORROW RzBuffer *rz_bin_dex_relocations(RZ_NONNULL RzBinDex *dex);
|
||||
|
||||
RZ_API RZ_OWN char *rz_bin_dex_resolve_method_by_idx(RZ_NONNULL RzBinDex *dex, ut32 method_idx);
|
||||
|
|
|
|||
|
|
@ -932,13 +932,13 @@ RZ_API RZ_OWN RzBinAddr *rz_bin_java_class_resolve_symbol(RZ_NONNULL RzBinJavaCl
|
|||
}
|
||||
|
||||
/**
|
||||
* \brief Returns a RzList<RzBinAddr*> containing the entrypoints
|
||||
* \brief Returns a RzPVector<RzBinAddr*> containing the entrypoints
|
||||
*/
|
||||
RZ_API RZ_OWN RzList /*<RzBinAddr *>*/ *rz_bin_java_class_entrypoints(RZ_NONNULL RzBinJavaClass *bin) {
|
||||
RZ_API RZ_OWN RzPVector /*<RzBinAddr *>*/ *rz_bin_java_class_entrypoints(RZ_NONNULL RzBinJavaClass *bin) {
|
||||
rz_return_val_if_fail(bin, NULL);
|
||||
|
||||
RzList *list = rz_list_newf(free);
|
||||
if (!list) {
|
||||
RzPVector *vec = rz_pvector_new(free);
|
||||
if (!vec) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
@ -984,10 +984,10 @@ RZ_API RZ_OWN RzList /*<RzBinAddr *>*/ *rz_bin_java_class_entrypoints(RZ_NONNULL
|
|||
continue;
|
||||
}
|
||||
entrypoint->vaddr = entrypoint->paddr = addr;
|
||||
rz_list_append(list, entrypoint);
|
||||
rz_pvector_push(vec, entrypoint);
|
||||
}
|
||||
}
|
||||
return list;
|
||||
return vec;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@ RZ_API RZ_OWN char *rz_bin_java_class_const_pool_resolve_index(RZ_NONNULL RzBinJ
|
|||
RZ_API void rz_bin_java_class_as_source_code(RZ_NONNULL RzBinJavaClass *bin, RZ_NONNULL RzStrBuf *sb);
|
||||
RZ_API RZ_OWN RzBinAddr *rz_bin_java_class_resolve_symbol(RZ_NONNULL RzBinJavaClass *bin, RzBinSpecialSymbol resolve);
|
||||
RZ_API RZ_OWN RzPVector /*<RzBinString *>*/ *rz_bin_java_class_strings(RZ_NONNULL RzBinJavaClass *bin);
|
||||
RZ_API RZ_OWN RzList /*<RzBinAddr *>*/ *rz_bin_java_class_entrypoints(RZ_NONNULL RzBinJavaClass *bin);
|
||||
RZ_API RZ_OWN RzPVector /*<RzBinAddr *>*/ *rz_bin_java_class_entrypoints(RZ_NONNULL RzBinJavaClass *bin);
|
||||
RZ_API RZ_OWN RzList /*<RzBinSymbol *>*/ *rz_bin_java_class_methods_as_symbols(RZ_NONNULL RzBinJavaClass *bin);
|
||||
RZ_API void rz_bin_java_class_methods_as_text(RZ_NONNULL RzBinJavaClass *bin, RZ_NONNULL RzStrBuf *sb);
|
||||
RZ_API void rz_bin_java_class_methods_as_json(RZ_NONNULL RzBinJavaClass *bin, RZ_NONNULL PJ *j);
|
||||
|
|
|
|||
|
|
@ -1649,14 +1649,14 @@ RZ_OWN RzPVector /*<RzBinSection *>*/ *rz_bin_le_get_sections(RzBinFile *bf) {
|
|||
return sections;
|
||||
}
|
||||
|
||||
RZ_OWN RzList /*<RzBinAddr *>*/ *rz_bin_le_get_entry_points(RzBinFile *bf) {
|
||||
RZ_OWN RzPVector /*<RzBinAddr *>*/ *rz_bin_le_get_entry_points(RzBinFile *bf) {
|
||||
rz_bin_le_obj_t *bin = bf->o->bin_obj;
|
||||
LE_header *h = bin->header;
|
||||
RzBinAddr *addr = NULL;
|
||||
RzList *entries = rz_list_newf((RzListFree)free);
|
||||
RzPVector *entries = rz_pvector_new((RzPVectorFree)free);
|
||||
if (!entries) {
|
||||
fail_cleanup:
|
||||
rz_list_free(entries);
|
||||
rz_pvector_free(entries);
|
||||
free(addr);
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -1667,7 +1667,7 @@ RZ_OWN RzList /*<RzBinAddr *>*/ *rz_bin_le_get_entry_points(RzBinFile *bf) {
|
|||
CHECK(addr = RZ_NEW0(RzBinAddr));
|
||||
addr->vaddr = bin->objects[h->startobj - 1].reloc_base_addr + h->eip;
|
||||
addr->paddr = le_vaddr_to_paddr(bin, addr->vaddr);
|
||||
CHECK(rz_list_append(entries, addr));
|
||||
CHECK(rz_pvector_push(entries, addr));
|
||||
addr = NULL;
|
||||
}
|
||||
|
||||
|
|
@ -1678,7 +1678,7 @@ RZ_OWN RzList /*<RzBinAddr *>*/ *rz_bin_le_get_entry_points(RzBinFile *bf) {
|
|||
CHECK(addr = RZ_NEW0(RzBinAddr));
|
||||
addr->vaddr = e->symbol->vaddr;
|
||||
addr->paddr = le_vaddr_to_paddr(bin, addr->vaddr);
|
||||
CHECK(rz_list_append(entries, addr));
|
||||
CHECK(rz_pvector_push(entries, addr));
|
||||
addr = NULL;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -104,7 +104,7 @@ bool rz_bin_le_check_buffer(RzBuffer *b);
|
|||
bool rz_bin_le_load_buffer(RzBinFile *bf, RzBinObject *obj, RzBuffer *buf, Sdb *sdb);
|
||||
void rz_bin_le_destroy(RzBinFile *bf);
|
||||
RZ_OWN RzPVector /*<RzBinMap *>*/ *rz_bin_le_get_maps(RzBinFile *bf);
|
||||
RZ_OWN RzList /*<RzBinAddr *>*/ *rz_bin_le_get_entry_points(RzBinFile *bf);
|
||||
RZ_OWN RzPVector /*<RzBinAddr *>*/ *rz_bin_le_get_entry_points(RzBinFile *bf);
|
||||
RZ_OWN RzPVector /*<RzBinSection *>*/ *rz_bin_le_get_sections(RzBinFile *bf);
|
||||
RZ_OWN RzPVector /*<RzBinSymbol *>*/ *rz_bin_le_get_symbols(RzBinFile *bf);
|
||||
RZ_OWN RzPVector /*<RzBinImport *>*/ *rz_bin_le_get_imports(RzBinFile *bf);
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ void luac_add_symbol(RzList /*<RzBinSymbol *>*/ *symbol_list, char *name, ut64 o
|
|||
rz_list_append(symbol_list, bin_sym);
|
||||
}
|
||||
|
||||
void luac_add_entry(RzList /*<RzBinAddr *>*/ *entry_list, ut64 offset, int entry_type) {
|
||||
void luac_add_entry(RzPVector /*<RzBinAddr *>*/ *entry_vec, ut64 offset, int entry_type) {
|
||||
RzBinAddr *entry = RZ_NEW0(RzBinAddr);
|
||||
if (!entry) {
|
||||
return;
|
||||
|
|
@ -54,7 +54,7 @@ void luac_add_entry(RzList /*<RzBinAddr *>*/ *entry_list, ut64 offset, int entry
|
|||
entry->paddr = offset;
|
||||
entry->type = entry_type;
|
||||
|
||||
rz_list_append(entry_list, entry);
|
||||
rz_pvector_push(entry_vec, entry);
|
||||
}
|
||||
|
||||
void luac_add_string(RzList /*<RzBinString *>*/ *string_list, char *string, ut64 offset, ut64 size) {
|
||||
|
|
@ -112,7 +112,7 @@ void luac_build_info_free(LuacBinInfo *bin_info) {
|
|||
if (!bin_info) {
|
||||
return;
|
||||
}
|
||||
rz_list_free(bin_info->entry_list);
|
||||
rz_pvector_free(bin_info->entry_vec);
|
||||
rz_list_free(bin_info->symbol_list);
|
||||
rz_pvector_free(bin_info->section_vec);
|
||||
rz_list_free(bin_info->string_list);
|
||||
|
|
@ -130,13 +130,13 @@ LuacBinInfo *luac_build_info(LuaProto *proto) {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
ret->entry_list = rz_list_newf((RzListFree)free_rz_addr);
|
||||
ret->entry_vec = rz_pvector_new((RzPVectorFree)free_rz_addr);
|
||||
ret->symbol_list = rz_list_newf((RzListFree)rz_bin_symbol_free);
|
||||
ret->section_vec = rz_pvector_new((RzPVectorFree)free_rz_section);
|
||||
ret->string_list = rz_list_newf((RzListFree)free_rz_string);
|
||||
|
||||
if (!(ret->entry_list && ret->symbol_list && ret->section_vec && ret->string_list)) {
|
||||
rz_list_free(ret->entry_list);
|
||||
if (!(ret->entry_vec && ret->symbol_list && ret->section_vec && ret->string_list)) {
|
||||
rz_pvector_free(ret->entry_vec);
|
||||
rz_list_free(ret->symbol_list);
|
||||
rz_pvector_free(ret->section_vec);
|
||||
rz_list_free(ret->string_list);
|
||||
|
|
@ -147,7 +147,7 @@ LuacBinInfo *luac_build_info(LuaProto *proto) {
|
|||
// add entry of main
|
||||
ut64 main_entry_offset;
|
||||
main_entry_offset = proto->code_offset + proto->code_skipped;
|
||||
luac_add_entry(ret->entry_list, main_entry_offset, RZ_BIN_ENTRY_TYPE_PROGRAM);
|
||||
luac_add_entry(ret->entry_vec, main_entry_offset, RZ_BIN_ENTRY_TYPE_PROGRAM);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -161,7 +161,7 @@ typedef struct luac_bin_info {
|
|||
st32 minor; ///< minor version
|
||||
RzPVector /*<RzBinSection *>*/ *section_vec; ///< list of sections
|
||||
RzList /*<RzBinSymbol *>*/ *symbol_list; ///< list of symbols
|
||||
RzList /*<RzBinAddr *>*/ *entry_list; ///< list of entries
|
||||
RzPVector /*<RzBinAddr *>*/ *entry_vec; ///< list of entries
|
||||
RzList /*<RzBinString *>*/ *string_list; ///< list of strings
|
||||
RzBinInfo *general_info; ///< general binary info from luac header
|
||||
} LuacBinInfo;
|
||||
|
|
@ -187,9 +187,9 @@ void lua_free_proto_entry(LuaProto *);
|
|||
* Common Operation to RzBinInfo
|
||||
* Implemented in 'bin/format/luac/luac_bin.c'
|
||||
* ======================================================== */
|
||||
void luac_add_section(RzPVector /*<RzBinSection *>*/ *section_list, char *name, ut64 offset, ut32 size, bool is_func);
|
||||
void luac_add_section(RzPVector /*<RzBinSection *>*/ *section_vec, char *name, ut64 offset, ut32 size, bool is_func);
|
||||
void luac_add_symbol(RzList /*<RzBinSymbol *>*/ *symbol_list, char *name, ut64 offset, ut64 size, const char *type);
|
||||
void luac_add_entry(RzList /*<RzBinAddr *>*/ *entry_list, ut64 offset, int entry_type);
|
||||
void luac_add_entry(RzPVector /*<RzBinAddr *>*/ *entry_vec, ut64 offset, int entry_type);
|
||||
void luac_add_string(RzList /*<RzBinString *>*/ *string_list, char *string, ut64 offset, ut64 size);
|
||||
|
||||
LuacBinInfo *luac_build_info(LuaProto *proto);
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
#include "mdmp_pe.h"
|
||||
|
||||
static void PE_(add_tls_callbacks)(struct PE_(rz_bin_pe_obj_t) * bin, RzList /*<RzBinAddr *>*/ *list) {
|
||||
static void PE_(add_tls_callbacks)(struct PE_(rz_bin_pe_obj_t) * bin, RzPVector /*<RzBinAddr *>*/ *vec) {
|
||||
char *key;
|
||||
int count = 0;
|
||||
PE_DWord haddr, paddr, vaddr;
|
||||
|
|
@ -37,22 +37,22 @@ static void PE_(add_tls_callbacks)(struct PE_(rz_bin_pe_obj_t) * bin, RzList /*<
|
|||
ptr->vaddr = vaddr;
|
||||
ptr->hpaddr = haddr;
|
||||
ptr->type = RZ_BIN_ENTRY_TYPE_TLS;
|
||||
rz_list_append(list, ptr);
|
||||
rz_pvector_push(vec, ptr);
|
||||
}
|
||||
count++;
|
||||
} while (vaddr);
|
||||
}
|
||||
|
||||
RzList /*<RzBinAddr *>*/ *PE_(rz_bin_mdmp_pe_get_entrypoint)(struct PE_(rz_bin_mdmp_pe_bin) * pe_bin) {
|
||||
RzPVector /*<RzBinAddr *>*/ *PE_(rz_bin_mdmp_pe_get_entrypoint)(struct PE_(rz_bin_mdmp_pe_bin) * pe_bin) {
|
||||
ut64 offset;
|
||||
struct rz_bin_pe_addr_t *entry = NULL;
|
||||
RzBinAddr *ptr = NULL;
|
||||
RzList *ret;
|
||||
RzPVector *ret;
|
||||
|
||||
if (!(entry = PE_(rz_bin_pe_get_entrypoint)(pe_bin->bin))) {
|
||||
return NULL;
|
||||
}
|
||||
if (!(ret = rz_list_new())) {
|
||||
if (!(ret = rz_pvector_new(NULL))) {
|
||||
free(entry);
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -67,7 +67,7 @@ RzList /*<RzBinAddr *>*/ *PE_(rz_bin_mdmp_pe_get_entrypoint)(struct PE_(rz_bin_m
|
|||
ptr->hpaddr = pe_bin->paddr + entry->haddr;
|
||||
ptr->type = RZ_BIN_ENTRY_TYPE_PROGRAM;
|
||||
|
||||
rz_list_append(ret, ptr);
|
||||
rz_pvector_push(ret, ptr);
|
||||
}
|
||||
|
||||
PE_(add_tls_callbacks)
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ struct PE_(rz_bin_mdmp_pe_bin) {
|
|||
struct PE_(rz_bin_pe_obj_t) * bin;
|
||||
};
|
||||
|
||||
RzList /*<RzBinAddr *>*/ *PE_(rz_bin_mdmp_pe_get_entrypoint)(struct PE_(rz_bin_mdmp_pe_bin) * pe_bin);
|
||||
RzPVector /*<RzBinAddr *>*/ *PE_(rz_bin_mdmp_pe_get_entrypoint)(struct PE_(rz_bin_mdmp_pe_bin) * pe_bin);
|
||||
RzPVector /*<RzBinImport *>*/ *PE_(rz_bin_mdmp_pe_get_imports)(struct PE_(rz_bin_mdmp_pe_bin) * pe_bin);
|
||||
RzPVector /*<RzBinSection *>*/ *PE_(rz_bin_mdmp_pe_get_sections)(struct PE_(rz_bin_mdmp_pe_bin) * pe_bin);
|
||||
RzList /*<RzBinSymbol *>*/ *PE_(rz_bin_mdmp_pe_get_symbols)(RzBin *rbin, struct PE_(rz_bin_mdmp_pe_bin) * pe_bin);
|
||||
|
|
|
|||
|
|
@ -125,7 +125,7 @@ RzPVector /*<RzBinSymbol *>*/ *rz_bin_ne_get_symbols(rz_bin_ne_obj_t *bin) {
|
|||
if (!symbols) {
|
||||
return NULL;
|
||||
}
|
||||
RzList *entries = rz_bin_ne_get_entrypoints(bin);
|
||||
RzPVector *entries = rz_bin_ne_get_entrypoints(bin);
|
||||
bool resident = true, first = true;
|
||||
while (true) {
|
||||
ut8 sz;
|
||||
|
|
@ -170,7 +170,7 @@ RzPVector /*<RzBinSymbol *>*/ *rz_bin_ne_get_symbols(rz_bin_ne_obj_t *bin) {
|
|||
break;
|
||||
}
|
||||
off += 2;
|
||||
RzBinAddr *entry = rz_list_get_n(entries, entry_off);
|
||||
RzBinAddr *entry = (RzBinAddr *)rz_pvector_at(entries, entry_off);
|
||||
if (entry) {
|
||||
sym->paddr = entry->paddr;
|
||||
} else {
|
||||
|
|
@ -180,10 +180,11 @@ RzPVector /*<RzBinSymbol *>*/ *rz_bin_ne_get_symbols(rz_bin_ne_obj_t *bin) {
|
|||
rz_pvector_push(symbols, sym);
|
||||
first = false;
|
||||
}
|
||||
RzListIter *it;
|
||||
void **it;
|
||||
RzBinAddr *en;
|
||||
int i = 1;
|
||||
rz_list_foreach (entries, it, en) {
|
||||
rz_pvector_foreach (entries, it) {
|
||||
en = *it;
|
||||
if (!rz_pvector_find(symbols, &en->paddr, __find_symbol_by_paddr, NULL)) {
|
||||
sym = RZ_NEW0(RzBinSymbol);
|
||||
if (!sym) {
|
||||
|
|
@ -390,28 +391,28 @@ RzPVector /*<RzBinImport *>*/ *rz_bin_ne_get_imports(rz_bin_ne_obj_t *bin) {
|
|||
return imports;
|
||||
}
|
||||
|
||||
RzList /*<RzBinAddr *>*/ *rz_bin_ne_get_entrypoints(rz_bin_ne_obj_t *bin) {
|
||||
RzList *entries = rz_list_newf(free);
|
||||
RzPVector /*<RzBinAddr *>*/ *rz_bin_ne_get_entrypoints(rz_bin_ne_obj_t *bin) {
|
||||
RzPVector *entries = rz_pvector_new(free);
|
||||
if (!entries) {
|
||||
return NULL;
|
||||
}
|
||||
RzBinAddr *entry;
|
||||
RzPVector *segments = rz_bin_ne_get_segments(bin);
|
||||
if (!segments) {
|
||||
rz_list_free(entries);
|
||||
rz_pvector_free(entries);
|
||||
return NULL;
|
||||
}
|
||||
if (bin->ne_header->csEntryPoint) {
|
||||
entry = RZ_NEW0(RzBinAddr);
|
||||
if (!entry) {
|
||||
rz_list_free(entries);
|
||||
rz_pvector_free(entries);
|
||||
rz_pvector_free(segments);
|
||||
return NULL;
|
||||
}
|
||||
entry->bits = 16;
|
||||
RzBinSection *s = (RzBinSection *)rz_pvector_at(segments, bin->ne_header->csEntryPoint - 1);
|
||||
entry->paddr = bin->ne_header->ipEntryPoint + (s ? s->paddr : 0);
|
||||
rz_list_append(entries, entry);
|
||||
rz_pvector_push(entries, entry);
|
||||
}
|
||||
ut32 off = 0;
|
||||
while (off < bin->ne_header->EntryTableLength) {
|
||||
|
|
@ -429,7 +430,7 @@ RzList /*<RzBinAddr *>*/ *rz_bin_ne_get_entrypoints(rz_bin_ne_obj_t *bin) {
|
|||
for (i = 0; i < bundle_length; i++) {
|
||||
entry = RZ_NEW0(RzBinAddr);
|
||||
if (!entry) {
|
||||
rz_list_free(entries);
|
||||
rz_pvector_free(entries);
|
||||
rz_pvector_free(segments);
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -465,7 +466,7 @@ RzList /*<RzBinAddr *>*/ *rz_bin_ne_get_entrypoints(rz_bin_ne_obj_t *bin) {
|
|||
entry->paddr = (ut64)bin->segment_entries[bundle_type - 1].offset * bin->alignment + rz_read_le16(p);
|
||||
}
|
||||
off += 2;
|
||||
rz_list_append(entries, entry);
|
||||
rz_pvector_push(entries, entry);
|
||||
}
|
||||
}
|
||||
end:
|
||||
|
|
@ -479,7 +480,7 @@ RzPVector /*<RzBinReloc *>*/ *rz_bin_ne_get_relocs(rz_bin_ne_obj_t *bin) {
|
|||
if (!segments) {
|
||||
return NULL;
|
||||
}
|
||||
RzList *entries = bin->entries;
|
||||
RzPVector *entries = bin->entries;
|
||||
if (!entries) {
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -589,7 +590,7 @@ RzPVector /*<RzBinReloc *>*/ *rz_bin_ne_get_relocs(rz_bin_ne_obj_t *bin) {
|
|||
offset = -1;
|
||||
}
|
||||
} else {
|
||||
RzBinAddr *entry = rz_list_get_n(entries, rel.entry_ordinal - 1);
|
||||
RzBinAddr *entry = (RzBinAddr *)rz_pvector_at(entries, rel.entry_ordinal - 1);
|
||||
if (entry) {
|
||||
offset = entry->paddr;
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ typedef struct {
|
|||
ut8 *resident_name_table;
|
||||
RzBuffer *buf;
|
||||
RzPVector /*<RzBinSection *>*/ *segments;
|
||||
RzList /*<RzBinAddr *>*/ *entries;
|
||||
RzPVector /*<RzBinAddr *>*/ *entries;
|
||||
RzList /*<rz_ne_resource *>*/ *resources;
|
||||
RzPVector /*<RzBinImport *>*/ *imports;
|
||||
RzPVector /*<RzBinSymbol *>*/ *symbols;
|
||||
|
|
@ -42,6 +42,6 @@ RzPVector /*<RzBinReloc *>*/ *rz_bin_ne_get_relocs(rz_bin_ne_obj_t *bin);
|
|||
RzPVector /*<RzBinImport *>*/ *rz_bin_ne_get_imports(rz_bin_ne_obj_t *bin);
|
||||
RzPVector /*<RzBinSymbol *>*/ *rz_bin_ne_get_symbols(rz_bin_ne_obj_t *bin);
|
||||
RzPVector /*<RzBinSection *>*/ *rz_bin_ne_get_segments(rz_bin_ne_obj_t *bin);
|
||||
RzList /*<RzBinAddr *>*/ *rz_bin_ne_get_entrypoints(rz_bin_ne_obj_t *bin);
|
||||
RzPVector /*<RzBinAddr *>*/ *rz_bin_ne_get_entrypoints(rz_bin_ne_obj_t *bin);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -133,13 +133,13 @@ static bool check_buffer(RzBuffer *buf) {
|
|||
return r == 4 && !strncmp(tmp, "art\n", 4);
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzList *ret = rz_list_newf(free);
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzPVector *ret = rz_pvector_new(free);
|
||||
if (ret) {
|
||||
RzBinAddr *ptr = RZ_NEW0(RzBinAddr);
|
||||
if (ptr) {
|
||||
ptr->paddr = ptr->vaddr = 0;
|
||||
rz_list_append(ret, ptr);
|
||||
rz_pvector_push(ret, ptr);
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
|
|
|
|||
|
|
@ -139,20 +139,19 @@ static RzBinInfo *info(RzBinFile *bf) {
|
|||
return bi;
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzList *ret;
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzPVector *ret;
|
||||
RzBinAddr *ptr = NULL;
|
||||
if (tmp_entry == UT64_MAX) {
|
||||
return false;
|
||||
}
|
||||
if (!(ret = rz_list_new())) {
|
||||
if (!(ret = rz_pvector_new(free))) {
|
||||
return NULL;
|
||||
}
|
||||
ret->free = free;
|
||||
if ((ptr = RZ_NEW0(RzBinAddr))) {
|
||||
ut64 addr = tmp_entry;
|
||||
ptr->vaddr = ptr->paddr = addr;
|
||||
rz_list_append(ret, ptr);
|
||||
rz_pvector_push(ret, ptr);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -98,18 +98,18 @@ static bool check_filename(const char *filename) {
|
|||
return rz_str_endswith_icase(filename, ".bf");
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzList *ret;
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzPVector *ret;
|
||||
RzBinAddr *ptr = NULL;
|
||||
|
||||
if (!(ret = rz_list_newf(free))) {
|
||||
if (!(ret = rz_pvector_new(free))) {
|
||||
return NULL;
|
||||
}
|
||||
if (!(ptr = RZ_NEW0(RzBinAddr))) {
|
||||
return ret;
|
||||
}
|
||||
ptr->paddr = ptr->vaddr = 0;
|
||||
rz_list_append(ret, ptr);
|
||||
rz_pvector_push(ret, ptr);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -16,20 +16,20 @@ static bool load_buffer(RzBinFile *bf, RzBinObject *obj, RzBuffer *buf, Sdb *sdb
|
|||
return obj->bin_obj;
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzBfltObj *obj = bf->o->bin_obj;
|
||||
RzList *ret;
|
||||
RzPVector *ret;
|
||||
RzBinAddr *ptr;
|
||||
|
||||
if (!(ret = rz_list_newf(free))) {
|
||||
if (!(ret = rz_pvector_new(free))) {
|
||||
return NULL;
|
||||
}
|
||||
ptr = rz_bflt_get_entry(obj);
|
||||
if (!ptr) {
|
||||
rz_list_free(ret);
|
||||
rz_pvector_free(ret);
|
||||
return NULL;
|
||||
}
|
||||
rz_list_append(ret, ptr);
|
||||
rz_pvector_push(ret, ptr);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -117,19 +117,18 @@ static RzPVector /*<RzBinSection *>*/ *sections(RzBinFile *bf) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzList *ret;
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzPVector *ret;
|
||||
RzBinAddr *ptr = NULL;
|
||||
if (!(ret = rz_list_new())) {
|
||||
if (!(ret = rz_pvector_new(free))) {
|
||||
return NULL;
|
||||
}
|
||||
ret->free = free;
|
||||
if (!(ptr = RZ_NEW0(RzBinAddr))) {
|
||||
return ret;
|
||||
}
|
||||
ptr->paddr = 0; // 0x70000;
|
||||
ptr->vaddr = 0xffff0;
|
||||
rz_list_append(ret, ptr);
|
||||
rz_pvector_push(ret, ptr);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -152,16 +152,16 @@ static bool check_buffer(RzBuffer *buf) {
|
|||
return r > 12 && !strncmp((const char *)tmp, "ANDROID!", 8);
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
BootImageObj *bio = bf->o->bin_obj;
|
||||
RzBinAddr *ptr = NULL;
|
||||
if (!bio) {
|
||||
return NULL;
|
||||
}
|
||||
BootImage *bi = &bio->bi;
|
||||
RzList *ret;
|
||||
RzPVector *ret;
|
||||
|
||||
if (!(ret = rz_list_newf(free))) {
|
||||
if (!(ret = rz_pvector_new(free))) {
|
||||
return NULL;
|
||||
}
|
||||
if (!(ptr = RZ_NEW0(RzBinAddr))) {
|
||||
|
|
@ -169,7 +169,7 @@ static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
|||
}
|
||||
ptr->paddr = bi->page_size;
|
||||
ptr->vaddr = bi->kernel_addr;
|
||||
rz_list_append(ret, ptr);
|
||||
rz_pvector_push(ret, ptr);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -167,15 +167,15 @@ static RzBinImport *_fill_bin_import(struct rz_bin_coff_obj *bin, int idx) {
|
|||
return ptr;
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
struct rz_bin_coff_obj *obj = (struct rz_bin_coff_obj *)bf->o->bin_obj;
|
||||
RzList *ret;
|
||||
if (!(ret = rz_list_newf(free))) {
|
||||
RzPVector *ret;
|
||||
if (!(ret = rz_pvector_new(free))) {
|
||||
return NULL;
|
||||
}
|
||||
RzBinAddr *ptr = rz_coff_get_entry(obj);
|
||||
if (ptr) {
|
||||
rz_list_append(ret, ptr);
|
||||
rz_pvector_push(ret, ptr);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@ static RzBinAddr *binsym(RzBinFile *bf, RzBinSpecialSymbol sym) {
|
|||
return rz_bin_dex_resolve_symbol(dex, sym);
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entrypoints(RzBinFile *bf) {
|
||||
static RzPVector /*<RzBinAddr *>*/ *entrypoints(RzBinFile *bf) {
|
||||
RzBinDex *dex = rz_bin_file_get_dex(bf);
|
||||
if (!dex) {
|
||||
return NULL;
|
||||
|
|
|
|||
|
|
@ -134,14 +134,14 @@ static RzPVector /*<RzBinSection *>*/ *sections(RzBinFile *bf) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
rz_return_val_if_fail(bf && bf->o && bf->o->bin_obj, NULL);
|
||||
RzList *ret = rz_list_new();
|
||||
RzPVector *ret = rz_pvector_new(NULL);
|
||||
RzBinAddr *addr = RZ_NEW0(RzBinAddr);
|
||||
DolHeader *dol = bf->o->bin_obj;
|
||||
addr->vaddr = (ut64)dol->entrypoint;
|
||||
addr->paddr = addr->vaddr & 0xFFFF;
|
||||
rz_list_append(ret, addr);
|
||||
rz_pvector_push(ret, addr);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -81,14 +81,14 @@ static bool load_buffer(RzBinFile *bf, RzBinObject *obj, RzBuffer *buf, Sdb *sdb
|
|||
return true;
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzBinAddr *ptr = NULL;
|
||||
RzList *ret = rz_list_newf(free);
|
||||
RzPVector *ret = rz_pvector_new(free);
|
||||
if (!ret) {
|
||||
return NULL;
|
||||
}
|
||||
if ((ptr = RZ_NEW0(RzBinAddr))) {
|
||||
rz_list_append(ret, ptr);
|
||||
rz_pvector_push(ret, ptr);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -273,7 +273,7 @@ static RzBinAddr *binsym(RzBinFile *bf, RzBinSpecialSymbol sym) {
|
|||
return rz_bin_addr_new_from_paddr(bin, paddr);
|
||||
}
|
||||
|
||||
static void add_constructor(ELFOBJ *bin, ut64 addr, ut64 size, int type, RzList /*<RzBinAddr *>*/ *result) {
|
||||
static void add_constructor(ELFOBJ *bin, ut64 addr, ut64 size, int type, RzPVector /*<RzBinAddr *>*/ *result) {
|
||||
ut64 constructor_offset = Elf_(rz_bin_elf_v2p)(bin, addr);
|
||||
if (constructor_offset == UT64_MAX) {
|
||||
return;
|
||||
|
|
@ -303,13 +303,13 @@ static void add_constructor(ELFOBJ *bin, ut64 addr, ut64 size, int type, RzList
|
|||
tmp->hvaddr = addr + pos;
|
||||
tmp->type = type;
|
||||
|
||||
rz_list_append(result, tmp);
|
||||
rz_pvector_push(result, tmp);
|
||||
|
||||
pos += sizeof(Elf_(Addr));
|
||||
}
|
||||
}
|
||||
|
||||
static void add_constructors(ELFOBJ *bin, RzList /*<RzBinAddr *>*/ *result) {
|
||||
static void add_constructors(ELFOBJ *bin, RzPVector /*<RzBinAddr *>*/ *result) {
|
||||
ut64 addr, size;
|
||||
|
||||
if (Elf_(rz_bin_elf_get_dt_info)(bin, DT_PREINIT_ARRAY, &addr) && Elf_(rz_bin_elf_get_dt_info)(bin, DT_PREINIT_ARRAYSZ, &size)) {
|
||||
|
|
@ -325,7 +325,7 @@ static void add_constructors(ELFOBJ *bin, RzList /*<RzBinAddr *>*/ *result) {
|
|||
}
|
||||
}
|
||||
|
||||
static void add_entry_offset(ELFOBJ *bin, RzList /*<RzBinAddr *>*/ *result) {
|
||||
static void add_entry_offset(ELFOBJ *bin, RzPVector /*<RzBinAddr *>*/ *result) {
|
||||
ut64 paddr = Elf_(rz_bin_elf_get_entry_offset)(bin);
|
||||
if (paddr == UT64_MAX) {
|
||||
return;
|
||||
|
|
@ -343,28 +343,28 @@ static void add_entry_offset(ELFOBJ *bin, RzList /*<RzBinAddr *>*/ *result) {
|
|||
RZ_LOG_ERROR("Cannot determine entrypoint, using 0x%08" PFMT64x ".\n", tmp->vaddr);
|
||||
}
|
||||
|
||||
rz_list_append(result, tmp);
|
||||
rz_pvector_push(result, tmp);
|
||||
}
|
||||
|
||||
static void add_java_libraries(ELFOBJ *bin, RzList /*<RzBinAddr *>*/ *result) {
|
||||
static void add_java_libraries(ELFOBJ *bin, RzPVector /*<RzBinAddr *>*/ *result) {
|
||||
RzBinElfSymbol *symbol;
|
||||
rz_bin_elf_foreach_symbols(bin, symbol) {
|
||||
if (symbol->name && rz_str_startswith(symbol->name, "Java") && rz_str_endswith(symbol->name, "_init")) {
|
||||
RzBinAddr *tmp = rz_bin_addr_new_from_paddr(bin, symbol->paddr);
|
||||
tmp->type = RZ_BIN_ENTRY_TYPE_INIT;
|
||||
|
||||
rz_list_append(result, tmp);
|
||||
rz_pvector_push(result, tmp);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
rz_return_val_if_fail(bf && bf->o, NULL);
|
||||
|
||||
ELFOBJ *bin = rz_bin_file_get_elf(bf);
|
||||
|
||||
RzList *result = rz_list_newf((RzListFree)free);
|
||||
RzPVector *result = rz_pvector_new((RzPVectorFree)free);
|
||||
if (!result) {
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -149,7 +149,7 @@ static RzBinAddr *binsym(RzBinFile *bf, RzBinSpecialSymbol sym) {
|
|||
return rz_bin_java_class_resolve_symbol(jclass, sym);
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entrypoints(RzBinFile *bf) {
|
||||
static RzPVector /*<RzBinAddr *>*/ *entrypoints(RzBinFile *bf) {
|
||||
RzBinJavaClass *jclass = rz_bin_file_get_java_class(bf);
|
||||
if (!jclass) {
|
||||
return NULL;
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@ static RzPVector /*<RzBinSymbol *>*/ *symbols(RzBinFile *bf) {
|
|||
return vec;
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
if (!bf) {
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -121,7 +121,7 @@ static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
return rz_list_clone(bin_info_obj->entry_list);
|
||||
return rz_pvector_clone(bin_info_obj->entry_vec);
|
||||
}
|
||||
|
||||
static RzPVector /*<RzBinString *>*/ *strings(RzBinFile *bf) {
|
||||
|
|
|
|||
|
|
@ -94,7 +94,7 @@ static RzBinAddr *newEntry(ut64 hpaddr, ut64 paddr, int type, int bits) {
|
|||
return ptr;
|
||||
}
|
||||
|
||||
static void process_constructors(RzBinFile *bf, RzList /*<RzBinAddr *>*/ *ret, int bits) {
|
||||
static void process_constructors(RzBinFile *bf, RzPVector /*<RzBinAddr *>*/ *ret, int bits) {
|
||||
RzPVector *secs = sections(bf);
|
||||
void **iter;
|
||||
RzBinSection *sec;
|
||||
|
|
@ -122,7 +122,7 @@ static void process_constructors(RzBinFile *bf, RzList /*<RzBinAddr *>*/ *ret, i
|
|||
ut32 addr32 = rz_read_le32(buf + i);
|
||||
RzBinAddr *ba = newEntry(sec->paddr + i, (ut64)addr32, type, bits);
|
||||
if (ba) {
|
||||
rz_list_append(ret, ba);
|
||||
rz_pvector_push(ret, ba);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
|
@ -130,7 +130,7 @@ static void process_constructors(RzBinFile *bf, RzList /*<RzBinAddr *>*/ *ret, i
|
|||
ut64 addr64 = rz_read_le64(buf + i);
|
||||
RzBinAddr *ba = newEntry(sec->paddr + i, addr64, type, bits);
|
||||
if (ba) {
|
||||
rz_list_append(ret, ba);
|
||||
rz_pvector_push(ret, ba);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -139,13 +139,13 @@ static void process_constructors(RzBinFile *bf, RzList /*<RzBinAddr *>*/ *ret, i
|
|||
}
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
rz_return_val_if_fail(bf && bf->o, NULL);
|
||||
|
||||
RzBinAddr *ptr = NULL;
|
||||
struct addr_t *entry = NULL;
|
||||
|
||||
RzList *ret = rz_list_newf(free);
|
||||
RzPVector *ret = rz_pvector_new(free);
|
||||
if (!ret) {
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -166,7 +166,7 @@ static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
|||
ptr->vaddr--;
|
||||
}
|
||||
}
|
||||
rz_list_append(ret, ptr);
|
||||
rz_pvector_push(ret, ptr);
|
||||
}
|
||||
|
||||
process_constructors(bf, ret, bits);
|
||||
|
|
|
|||
|
|
@ -85,15 +85,15 @@ static ut64 baddr(RzBinFile *bf) {
|
|||
return sb->vaddr;
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
SblHeader *sb = mbn_file_get_hdr(bf);
|
||||
RzList *ret = rz_list_newf(free);
|
||||
RzPVector *ret = rz_pvector_new(free);
|
||||
if (ret) {
|
||||
RzBinAddr *ptr = RZ_NEW0(RzBinAddr);
|
||||
if (ptr) {
|
||||
ptr->paddr = 40 + sb->code_pa;
|
||||
ptr->vaddr = 40 + sb->code_pa + sb->vaddr;
|
||||
rz_list_append(ret, ptr);
|
||||
rz_pvector_push(ret, ptr);
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
|
|
|
|||
|
|
@ -20,28 +20,28 @@ static void mdmp_destroy(RzBinFile *bf) {
|
|||
rz_bin_mdmp_free((MiniDmpObj *)bf->o->bin_obj);
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *mdmp_entries(RzBinFile *bf) {
|
||||
static RzPVector /*<RzBinAddr *>*/ *mdmp_entries(RzBinFile *bf) {
|
||||
MiniDmpObj *obj;
|
||||
struct Pe32_rz_bin_mdmp_pe_bin *pe32_bin;
|
||||
struct Pe64_rz_bin_mdmp_pe_bin *pe64_bin;
|
||||
RzListIter *it;
|
||||
RzList *ret, *list;
|
||||
RzPVector *ret, *vec;
|
||||
|
||||
if (!(ret = rz_list_newf(free))) {
|
||||
if (!(ret = rz_pvector_new(free))) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
obj = (MiniDmpObj *)bf->o->bin_obj;
|
||||
|
||||
rz_list_foreach (obj->pe32_bins, it, pe32_bin) {
|
||||
list = Pe32_rz_bin_mdmp_pe_get_entrypoint(pe32_bin);
|
||||
rz_list_join(ret, list);
|
||||
rz_list_free(list);
|
||||
vec = Pe32_rz_bin_mdmp_pe_get_entrypoint(pe32_bin);
|
||||
rz_pvector_join(ret, vec);
|
||||
rz_pvector_free(vec);
|
||||
}
|
||||
rz_list_foreach (obj->pe64_bins, it, pe64_bin) {
|
||||
list = Pe64_rz_bin_mdmp_pe_get_entrypoint(pe64_bin);
|
||||
rz_list_join(ret, list);
|
||||
rz_list_free(list);
|
||||
vec = Pe64_rz_bin_mdmp_pe_get_entrypoint(pe64_bin);
|
||||
rz_pvector_join(ret, vec);
|
||||
rz_pvector_free(vec);
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
|
|
|||
|
|
@ -84,8 +84,8 @@ static ut64 menuetEntry(const ut8 *buf, int buf_size) {
|
|||
return UT64_MAX;
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzList *ret;
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzPVector *ret;
|
||||
ut8 buf[64] = { 0 };
|
||||
RzBinAddr *ptr = NULL;
|
||||
const int buf_size = RZ_MIN(sizeof(buf), rz_buf_size(bf->buf));
|
||||
|
|
@ -95,14 +95,13 @@ static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
|||
if (entry == UT64_MAX) {
|
||||
return NULL;
|
||||
}
|
||||
if (!(ret = rz_list_new())) {
|
||||
if (!(ret = rz_pvector_new(free))) {
|
||||
return NULL;
|
||||
}
|
||||
ret->free = free;
|
||||
if ((ptr = RZ_NEW0(RzBinAddr))) {
|
||||
ptr->paddr = rz_read_ble32(buf + 12, false);
|
||||
ptr->vaddr = ptr->paddr + baddr(bf);
|
||||
rz_list_append(ret, ptr);
|
||||
rz_pvector_push(ret, ptr);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -149,15 +149,15 @@ static RzBinAddr *binsym(RzBinFile *bf, RzBinSpecialSymbol type) {
|
|||
return mzaddr;
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzBinAddr *ptr = NULL;
|
||||
RzList *res = NULL;
|
||||
if (!(res = rz_list_newf(free))) {
|
||||
RzPVector *res = NULL;
|
||||
if (!(res = rz_pvector_new(free))) {
|
||||
return NULL;
|
||||
}
|
||||
ptr = rz_bin_mz_get_entrypoint(bf->o->bin_obj);
|
||||
if (ptr) {
|
||||
rz_list_append(res, ptr);
|
||||
rz_pvector_push(res, ptr);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ RzBinInfo *info(RzBinFile *bf) {
|
|||
return i;
|
||||
}
|
||||
|
||||
RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
return rz_bin_ne_get_entrypoints(bf->o->bin_obj);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -199,10 +199,10 @@ static RzPVector /*<RzBinMem *>*/ *mem(RzBinFile *bf) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) { // Should be 3 offsets pointed by NMI, RESET, IRQ after mapping && default = 1st CHR
|
||||
RzList *ret;
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) { // Should be 3 offsets pointed by NMI, RESET, IRQ after mapping && default = 1st CHR
|
||||
RzPVector *ret;
|
||||
RzBinAddr *ptr = NULL;
|
||||
if (!(ret = rz_list_new())) {
|
||||
if (!(ret = rz_pvector_new(NULL))) {
|
||||
return NULL;
|
||||
}
|
||||
if (!(ptr = RZ_NEW0(RzBinAddr))) {
|
||||
|
|
@ -210,7 +210,7 @@ static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) { // Should be 3 offsets
|
|||
}
|
||||
ptr->paddr = INES_HDR_SIZE;
|
||||
ptr->vaddr = ROM_START_ADDRESS;
|
||||
rz_list_append(ret, ptr);
|
||||
rz_pvector_push(ret, ptr);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -161,17 +161,17 @@ static RzPVector /*<RzBinSection *>*/ *n3ds_sections(RzBinFile *bf) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *n3ds_entries(RzBinFile *bf) {
|
||||
static RzPVector /*<RzBinAddr *>*/ *n3ds_entries(RzBinFile *bf) {
|
||||
if (!bf || !bf->o) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
RzBinAddr *ptr9 = NULL, *ptr11 = NULL;
|
||||
RzList *ret = rz_list_newf(free);
|
||||
RzPVector *ret = rz_pvector_new(free);
|
||||
if (!ret ||
|
||||
!(ptr9 = RZ_NEW0(RzBinAddr)) ||
|
||||
!(ptr11 = RZ_NEW0(RzBinAddr))) {
|
||||
rz_list_free(ret);
|
||||
rz_pvector_free(ret);
|
||||
free(ptr9);
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -179,11 +179,11 @@ static RzList /*<RzBinAddr *>*/ *n3ds_entries(RzBinFile *bf) {
|
|||
|
||||
/* ARM9 entry point */
|
||||
ptr9->vaddr = hdr->arm9_ep;
|
||||
rz_list_append(ret, ptr9);
|
||||
rz_pvector_push(ret, ptr9);
|
||||
|
||||
/* ARM11 entry point */
|
||||
ptr11->vaddr = hdr->arm11_ep;
|
||||
rz_list_append(ret, ptr11);
|
||||
rz_pvector_push(ret, ptr11);
|
||||
|
||||
for (size_t i = 0; i < 4; i++) {
|
||||
N3DSFirmSectHdr *shdr = &hdr->sections[i];
|
||||
|
|
|
|||
|
|
@ -150,17 +150,17 @@ static RzPVector /*<RzBinSection *>*/ *nds_sections(RzBinFile *bf) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *nds_entries(RzBinFile *bf) {
|
||||
static RzPVector /*<RzBinAddr *>*/ *nds_entries(RzBinFile *bf) {
|
||||
if (!bf || !bf->buf) {
|
||||
return NULL;
|
||||
}
|
||||
RzBinAddr *ptr9 = NULL, *ptr7 = NULL;
|
||||
RzList *ret = NULL;
|
||||
RzPVector *ret = NULL;
|
||||
|
||||
if (!(ret = rz_list_newf(free)) ||
|
||||
if (!(ret = rz_pvector_new(free)) ||
|
||||
!(ptr9 = RZ_NEW0(RzBinAddr)) ||
|
||||
!(ptr7 = RZ_NEW0(RzBinAddr))) {
|
||||
rz_list_free(ret);
|
||||
rz_pvector_free(ret);
|
||||
free(ptr9);
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -169,12 +169,12 @@ static RzList /*<RzBinAddr *>*/ *nds_entries(RzBinFile *bf) {
|
|||
/* ARM9 entry point */
|
||||
ptr9->vaddr = hdr->arm9_entry_address;
|
||||
ptr9->paddr = hdr->arm9_rom_offset + (hdr->arm9_entry_address - hdr->arm9_ram_address);
|
||||
rz_list_append(ret, ptr9);
|
||||
rz_pvector_push(ret, ptr9);
|
||||
|
||||
/* ARM7 entry point */
|
||||
ptr7->vaddr = hdr->arm7_entry_address;
|
||||
ptr7->paddr = hdr->arm7_rom_offset + (hdr->arm7_entry_address - hdr->arm7_ram_address);
|
||||
rz_list_append(ret, ptr7);
|
||||
rz_pvector_push(ret, ptr7);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -110,20 +110,19 @@ static RzBinAddr *binsym(RzBinFile *bf, RzBinSpecialSymbol type) {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzList *ret = rz_list_new();
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzPVector *ret = rz_pvector_new(free);
|
||||
RzBinAddr *ptr = NULL;
|
||||
|
||||
if (bf && bf->buf != NULL) {
|
||||
if (!ret) {
|
||||
return NULL;
|
||||
}
|
||||
ret->free = free;
|
||||
if (!(ptr = RZ_NEW0(RzBinAddr))) {
|
||||
return ret;
|
||||
}
|
||||
ptr->paddr = ptr->vaddr = ptr->hpaddr = 0x100;
|
||||
rz_list_append(ret, ptr);
|
||||
rz_pvector_push(ret, ptr);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,8 +19,8 @@ static bool load_buffer(RzBinFile *bf, RzBinObject *obj, RzBuffer *buf, Sdb *sdb
|
|||
return check_buffer(buf);
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzList *ret = rz_list_newf(free);
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzPVector *ret = rz_pvector_new(free);
|
||||
RzBinAddr *ptr = NULL;
|
||||
|
||||
if (bf && bf->buf) {
|
||||
|
|
@ -31,7 +31,7 @@ static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
|||
return ret;
|
||||
}
|
||||
ptr->paddr = ptr->vaddr = 0x8000000;
|
||||
rz_list_append(ret, ptr);
|
||||
rz_pvector_push(ret, ptr);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -73,17 +73,16 @@ static RzBinAddr *binsym(RzBinFile *bf, RzBinSpecialSymbol type) {
|
|||
return NULL; // TODO
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzList *ret;
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzPVector *ret;
|
||||
RzBinAddr *ptr = NULL;
|
||||
if (!(ret = rz_list_new())) {
|
||||
if (!(ret = rz_pvector_new(free))) {
|
||||
return NULL;
|
||||
}
|
||||
ret->free = free;
|
||||
if ((ptr = RZ_NEW0(RzBinAddr))) {
|
||||
ptr->paddr = 0x80;
|
||||
ptr->vaddr = ptr->paddr + baddr(bf);
|
||||
rz_list_append(ret, ptr);
|
||||
rz_pvector_push(ret, ptr);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -191,32 +191,30 @@ static RzBinAddr *binsym(RzBinFile *bf, RzBinSpecialSymbol type) {
|
|||
return NULL; // TODO
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzList *ret;
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzPVector *ret;
|
||||
RzBuffer *b = bf->buf;
|
||||
|
||||
if (!(ret = rz_list_new())) {
|
||||
if (!(ret = rz_pvector_new(free))) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ret->free = free;
|
||||
|
||||
RzBinAddr *ptr = RZ_NEW0(RzBinAddr);
|
||||
if (!ptr) {
|
||||
rz_list_free(ret);
|
||||
rz_pvector_free(ret);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ut32 tmp;
|
||||
if (!rz_buf_read_le32_at(b, NSO_OFF(text_memoffset), &tmp)) {
|
||||
rz_list_free(ret);
|
||||
rz_pvector_free(ret);
|
||||
free(ptr);
|
||||
return NULL;
|
||||
}
|
||||
ptr->paddr = tmp;
|
||||
|
||||
if (!rz_buf_read_le32_at(b, NSO_OFF(text_loc), &tmp)) {
|
||||
rz_list_free(ret);
|
||||
rz_pvector_free(ret);
|
||||
free(ptr);
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -224,7 +222,7 @@ static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
|||
|
||||
ptr->vaddr += baddr(bf);
|
||||
|
||||
rz_list_append(ret, ptr);
|
||||
rz_pvector_push(ret, ptr);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -67,21 +67,21 @@ static ut64 baddr(RzBinFile *bf) {
|
|||
return OMF_BASE_ADDR;
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzList *ret;
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzPVector *ret;
|
||||
RzBinAddr *addr;
|
||||
|
||||
if (!(ret = rz_list_newf(free))) {
|
||||
if (!(ret = rz_pvector_new(free))) {
|
||||
return NULL;
|
||||
}
|
||||
if (!(addr = RZ_NEW0(RzBinAddr))) {
|
||||
rz_list_free(ret);
|
||||
rz_pvector_free(ret);
|
||||
return NULL;
|
||||
}
|
||||
if (!rz_bin_omf_get_entry(bf->o->bin_obj, addr)) {
|
||||
RZ_FREE(addr);
|
||||
} else {
|
||||
rz_list_append(ret, addr);
|
||||
rz_pvector_push(ret, addr);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,18 +28,17 @@ static RzBinAddr *binsym(RzBinFile *bf, RzBinSpecialSymbol type) {
|
|||
return NULL; // TODO
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzList *ret;
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzPVector *ret;
|
||||
RzBinAddr *ptr = NULL;
|
||||
|
||||
if (!(ret = rz_list_new())) {
|
||||
if (!(ret = rz_pvector_new(free))) {
|
||||
return NULL;
|
||||
}
|
||||
ret->free = free;
|
||||
if ((ptr = RZ_NEW0(RzBinAddr))) {
|
||||
ptr->paddr = 8 * 4;
|
||||
ptr->vaddr = 8 * 4; // + baddr (bf);
|
||||
rz_list_append(ret, ptr);
|
||||
rz_pvector_push(ret, ptr);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ static RzBinAddr *binsym(RzBinFile *bf, RzBinSpecialSymbol type) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
static void add_tls_callbacks(RzBinFile *bf, RzList /*<RzBinAddr *>*/ *list) {
|
||||
static void add_tls_callbacks(RzBinFile *bf, RzPVector /*<RzBinAddr *>*/ *vec) {
|
||||
PE_DWord paddr, vaddr, haddr;
|
||||
int count = 0;
|
||||
RzBinAddr *ptr = NULL;
|
||||
|
|
@ -91,18 +91,18 @@ static void add_tls_callbacks(RzBinFile *bf, RzList /*<RzBinAddr *>*/ *list) {
|
|||
ptr->vaddr = vaddr;
|
||||
ptr->hpaddr = haddr;
|
||||
ptr->type = RZ_BIN_ENTRY_TYPE_TLS;
|
||||
rz_list_append(list, ptr);
|
||||
rz_pvector_push(vec, ptr);
|
||||
}
|
||||
count++;
|
||||
} while (vaddr);
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
struct rz_bin_pe_addr_t *entry = NULL;
|
||||
RzBinAddr *ptr = NULL;
|
||||
RzList *ret;
|
||||
RzPVector *ret;
|
||||
|
||||
if (!(ret = rz_list_newf(free))) {
|
||||
if (!(ret = rz_pvector_new(free))) {
|
||||
return NULL;
|
||||
}
|
||||
if (!(entry = PE_(rz_bin_pe_get_entrypoint)(bf->o->bin_obj))) {
|
||||
|
|
@ -113,7 +113,7 @@ static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
|||
ptr->vaddr = entry->vaddr;
|
||||
ptr->hpaddr = entry->haddr;
|
||||
ptr->type = RZ_BIN_ENTRY_TYPE_PROGRAM;
|
||||
rz_list_append(ret, ptr);
|
||||
rz_pvector_push(ret, ptr);
|
||||
}
|
||||
free(entry);
|
||||
// get TLS callback addresses
|
||||
|
|
|
|||
|
|
@ -160,24 +160,23 @@ static RzList* relocs(RzBinFile *bf) {
|
|||
}
|
||||
#endif
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzBinAddr *ptr = NULL;
|
||||
RzList *ret;
|
||||
RzPVector *ret;
|
||||
PebbleAppInfo pai;
|
||||
if (!rz_buf_read_at(bf->buf, 0, (ut8 *)&pai, sizeof(pai))) {
|
||||
RZ_LOG_ERROR("Truncated Header\n");
|
||||
return NULL;
|
||||
}
|
||||
if (!(ret = rz_list_new())) {
|
||||
if (!(ret = rz_pvector_new(free))) {
|
||||
return NULL;
|
||||
}
|
||||
ret->free = free;
|
||||
if (!(ptr = RZ_NEW0(RzBinAddr))) {
|
||||
return ret;
|
||||
}
|
||||
ptr->paddr = pai.offset;
|
||||
ptr->vaddr = pai.offset;
|
||||
rz_list_append(ret, ptr);
|
||||
rz_pvector_push(ret, ptr);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -60,8 +60,8 @@ static RzPVector /*<RzBinSection *>*/ *sections(RzBinFile *bf) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzList *ret = rz_list_newf(free);
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzPVector *ret = rz_pvector_new(free);
|
||||
if (!ret) {
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -71,7 +71,7 @@ static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
|||
}
|
||||
binaddr->paddr = 2;
|
||||
binaddr->vaddr = baddr(bf);
|
||||
rz_list_append(ret, binaddr);
|
||||
rz_pvector_push(ret, binaddr);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -80,23 +80,23 @@ static RzPVector /*<RzBinSection *>*/ *sections(RzBinFile *bf) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzList *ret = NULL;
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzPVector *ret = NULL;
|
||||
RzBinAddr *addr = NULL;
|
||||
psxexe_header psxheader;
|
||||
|
||||
if (!(ret = rz_list_new())) {
|
||||
if (!(ret = rz_pvector_new(NULL))) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!(addr = RZ_NEW0(RzBinAddr))) {
|
||||
rz_list_free(ret);
|
||||
rz_pvector_free(ret);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (rz_buf_fread_at(bf->buf, 0, (ut8 *)&psxheader, "8c17i", 1) < sizeof(psxexe_header)) {
|
||||
RZ_LOG_ERROR("Truncated Header\n");
|
||||
rz_list_free(ret);
|
||||
rz_pvector_free(ret);
|
||||
free(addr);
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -104,7 +104,7 @@ static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
|||
addr->paddr = (psxheader.pc0 - psxheader.t_addr) + PSXEXE_TEXTSECTION_OFFSET;
|
||||
addr->vaddr = psxheader.pc0;
|
||||
|
||||
rz_list_append(ret, addr);
|
||||
rz_pvector_push(ret, addr);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -117,26 +117,26 @@ static RzBinInfo *info(RzBinFile *arch) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *arch) {
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *arch) {
|
||||
RzBinPycObj *pyc = arch->o->bin_obj;
|
||||
|
||||
RzList *entries = rz_list_newf((RzListFree)free);
|
||||
RzPVector *entries = rz_pvector_new((RzPVectorFree)free);
|
||||
if (!entries) {
|
||||
return NULL;
|
||||
}
|
||||
RzBinAddr *addr = RZ_NEW0(RzBinAddr);
|
||||
if (!addr) {
|
||||
rz_list_free(entries);
|
||||
rz_pvector_free(entries);
|
||||
return NULL;
|
||||
}
|
||||
ut64 entrypoint = get_entrypoint(arch);
|
||||
addr->paddr = entrypoint;
|
||||
addr->vaddr = entrypoint;
|
||||
rz_buf_seek(arch->buf, entrypoint, RZ_IO_SEEK_SET);
|
||||
rz_list_append(entries, addr);
|
||||
rz_pvector_push(entries, addr);
|
||||
|
||||
if (!init_pyc_cache(pyc, arch->buf)) {
|
||||
rz_list_free(entries);
|
||||
rz_pvector_free(entries);
|
||||
return NULL;
|
||||
}
|
||||
return entries;
|
||||
|
|
|
|||
|
|
@ -336,20 +336,19 @@ static ut64 baddr(RzBinFile *bf) {
|
|||
* Currently both physical and virtual address are set to 0
|
||||
* The memory map has different values for entry
|
||||
*/
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzList *ret;
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzPVector *ret;
|
||||
RzBinAddr *ptr = NULL;
|
||||
QnxObj *qo = bf->o->bin_obj;
|
||||
if (!(ret = rz_list_new())) {
|
||||
if (!(ret = rz_pvector_new(free))) {
|
||||
return NULL;
|
||||
}
|
||||
ret->free = free;
|
||||
if (!(ptr = RZ_NEW0(RzBinAddr))) {
|
||||
return ret;
|
||||
}
|
||||
ptr->paddr = qo->lmfh.code_offset;
|
||||
ptr->vaddr = qo->lmfh.code_offset + baddr(bf);
|
||||
rz_list_append(ret, ptr);
|
||||
rz_pvector_push(ret, ptr);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -267,9 +267,9 @@ static RzPVector /*<RzBinMem *>*/ *mem(RzBinFile *bf) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) { // Should be 3 offsets pointed by NMI, RESET, IRQ after mapping && default = 1st CHR
|
||||
RzList *ret;
|
||||
if (!(ret = rz_list_new())) {
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) { // Should be 3 offsets pointed by NMI, RESET, IRQ after mapping && default = 1st CHR
|
||||
RzPVector *ret;
|
||||
if (!(ret = rz_pvector_new(NULL))) {
|
||||
return NULL;
|
||||
}
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -293,10 +293,10 @@ static RzPVector /*<RzBinSection *>*/ *sections(RzBinFile *bf) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) { // Should be 3 offsets pointed by NMI, RESET, IRQ after mapping && default = 1st CHR
|
||||
RzList *ret;
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) { // Should be 3 offsets pointed by NMI, RESET, IRQ after mapping && default = 1st CHR
|
||||
RzPVector *ret;
|
||||
RzBinAddr *ptr = NULL;
|
||||
if (!(ret = rz_list_new())) {
|
||||
if (!(ret = rz_pvector_new(NULL))) {
|
||||
return NULL;
|
||||
}
|
||||
if (!(ptr = RZ_NEW0(RzBinAddr))) {
|
||||
|
|
@ -305,12 +305,12 @@ static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) { // Should be 3 offsets
|
|||
if (bf->size < sizeof(SMD_Vectors)) {
|
||||
eprintf("ERR: binfile too small!\n");
|
||||
ptr->paddr = ptr->vaddr = 0x100 + sizeof(SMD_Header);
|
||||
rz_list_append(ret, ptr);
|
||||
rz_pvector_push(ret, ptr);
|
||||
} else {
|
||||
SMD_Vectors vectors;
|
||||
rz_buf_read_at(bf->buf, 0, (ut8 *)&vectors, sizeof(vectors));
|
||||
ptr->paddr = ptr->vaddr = rz_read_be32(&vectors.Reset);
|
||||
rz_list_append(ret, ptr);
|
||||
rz_pvector_push(ret, ptr);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -66,14 +66,14 @@ static RzPVector /*<RzBinSection *>*/ *sections(RzBinFile *bf) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzList *ret = rz_list_newf(free);
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzPVector *ret = rz_pvector_new(free);
|
||||
if (ret) {
|
||||
RzBinAddr *ptr = RZ_NEW0(RzBinAddr);
|
||||
if (ptr) {
|
||||
ptr->paddr = RAM_START_ADDRESS;
|
||||
ptr->vaddr = 0;
|
||||
rz_list_append(ret, ptr);
|
||||
rz_pvector_push(ret, ptr);
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
|
|
|
|||
|
|
@ -54,8 +54,8 @@ static RzBinAddr *binsym(RzBinFile *bf, RzBinSpecialSymbol type) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzList *ret = rz_list_newf(free);
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzPVector *ret = rz_pvector_new(free);
|
||||
if (ret) {
|
||||
RzBinAddr *entry = rz_bin_te_get_entrypoint(bf->o->bin_obj);
|
||||
if (entry) {
|
||||
|
|
@ -63,7 +63,7 @@ static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
|||
if (ptr) {
|
||||
ptr->paddr = entry->paddr;
|
||||
ptr->vaddr = entry->vaddr;
|
||||
rz_list_append(ret, ptr);
|
||||
rz_pvector_push(ret, ptr);
|
||||
}
|
||||
free(entry);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -500,16 +500,16 @@ static void destroy(RzBinFile *bf) {
|
|||
free(obj);
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
struct rz_bin_vsf_obj *vsf_obj = (struct rz_bin_vsf_obj *)bf->o->bin_obj;
|
||||
if (!vsf_obj) {
|
||||
return NULL;
|
||||
}
|
||||
const int m_idx = vsf_obj->machine_idx;
|
||||
|
||||
RzList *ret;
|
||||
RzPVector *ret;
|
||||
RzBinAddr *ptr = NULL;
|
||||
if (!(ret = rz_list_new())) {
|
||||
if (!(ret = rz_pvector_new(NULL))) {
|
||||
return NULL;
|
||||
}
|
||||
int offset = _machines[m_idx].offset_mem;
|
||||
|
|
@ -519,7 +519,7 @@ static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
|||
}
|
||||
ptr->paddr = vsf_obj->mem + offset;
|
||||
ptr->vaddr = vsf_obj->maincpu ? vsf_obj->maincpu->pc : 0;
|
||||
rz_list_append(ret, ptr);
|
||||
rz_pvector_push(ret, ptr);
|
||||
|
||||
// IRQ: 0xFFFE or 0x0314 ?
|
||||
// if (!(ptr = RZ_NEW0 (RzBinAddr)))
|
||||
|
|
|
|||
|
|
@ -48,14 +48,14 @@ static RzBinAddr *binsym(RzBinFile *bf, RzBinSpecialSymbol type) {
|
|||
|
||||
static RzPVector /*<RzBinSection *>*/ *sections(RzBinFile *bf);
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzBinWasmObj *bin = bf && bf->o ? bf->o->bin_obj : NULL;
|
||||
// TODO
|
||||
RzList *ret = NULL;
|
||||
RzPVector *ret = NULL;
|
||||
RzBinAddr *ptr = NULL;
|
||||
ut64 addr = 0x0;
|
||||
|
||||
if (!(ret = rz_list_newf((RzListFree)free))) {
|
||||
if (!(ret = rz_pvector_new((RzPVectorFree)free))) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
@ -71,14 +71,14 @@ static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
|||
}
|
||||
}
|
||||
if (!addr) {
|
||||
rz_list_free(ret);
|
||||
rz_pvector_free(ret);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
if ((ptr = RZ_NEW0(RzBinAddr))) {
|
||||
ptr->paddr = addr;
|
||||
ptr->vaddr = addr;
|
||||
rz_list_append(ret, ptr);
|
||||
rz_pvector_push(ret, ptr);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -124,24 +124,23 @@ static RzBinAddr *binsym(RzBinFile *bf, RzBinSpecialSymbol type) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
const rz_bin_xbe_obj_t *obj;
|
||||
RzList *ret;
|
||||
RzPVector *ret;
|
||||
RzBinAddr *ptr = RZ_NEW0(RzBinAddr);
|
||||
if (!bf || !bf->buf || !bf->o->bin_obj || !ptr) {
|
||||
free(ptr);
|
||||
return NULL;
|
||||
}
|
||||
ret = rz_list_new();
|
||||
ret = rz_pvector_new(free);
|
||||
if (!ret) {
|
||||
free(ptr);
|
||||
return NULL;
|
||||
}
|
||||
ret->free = free;
|
||||
obj = bf->o->bin_obj;
|
||||
ptr->vaddr = obj->header.ep ^ obj->ep_key;
|
||||
ptr->paddr = ptr->vaddr - obj->header.base;
|
||||
rz_list_append(ret, ptr);
|
||||
rz_pvector_push(ret, ptr);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -124,8 +124,7 @@ static RKext *rz_kext_index_vget(RKextIndex *index, ut64 vaddr);
|
|||
|
||||
static void process_kmod_init_term(RzXNUKernelCacheObj *obj, RKext *kext, RzPVector /*<RzBinSymbol *>*/ *ret, ut64 **inits, ut64 **terms);
|
||||
static void create_initterm_syms(RKext *kext, RzPVector /*<RzBinSymbol *>*/ *ret, int type, ut64 *pointers);
|
||||
static void process_constructors(RzXNUKernelCacheObj *obj, struct MACH0_(obj_t) * mach0, RzList /*<void *>*/ *ret, ut64 paddr, bool is_first, int mode, const char *prefix);
|
||||
RZ_DEPRECATE static void process_constructors_vector(RzXNUKernelCacheObj *obj, struct MACH0_(obj_t) * mach0, RzPVector /*<void *>*/ *ret, ut64 paddr, bool is_first, int mode, const char *prefix);
|
||||
static void process_constructors(RzXNUKernelCacheObj *obj, struct MACH0_(obj_t) * mach0, RzPVector /*<void *>*/ *ret, ut64 paddr, bool is_first, int mode, const char *prefix);
|
||||
static RzBinAddr *newEntry(ut64 haddr, ut64 vaddr, int type);
|
||||
static void ensure_kexts_initialized(RzXNUKernelCacheObj *obj);
|
||||
|
||||
|
|
@ -776,11 +775,11 @@ static struct MACH0_(obj_t) * create_kext_shared_mach0(RzXNUKernelCacheObj *obj,
|
|||
return mach0;
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzList *ret;
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzPVector *ret;
|
||||
RzBinObject *obj = bf ? bf->o : NULL;
|
||||
|
||||
if (!obj || !obj->bin_obj || !(ret = rz_list_newf(free))) {
|
||||
if (!obj || !obj->bin_obj || !(ret = rz_pvector_new(free))) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
@ -790,7 +789,7 @@ static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
|||
ut64 entry_paddr = entry_vaddr - kobj->pa2va_exec;
|
||||
RzBinAddr *ba = newEntry(entry_paddr, entry_vaddr, 0);
|
||||
if (ba) {
|
||||
rz_list_append(ret, ba);
|
||||
rz_pvector_push(ret, ba);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -904,66 +903,7 @@ static void create_initterm_syms(RKext *kext, RzPVector /*<RzBinSymbol *>*/ *ret
|
|||
}
|
||||
}
|
||||
|
||||
static void process_constructors(RzXNUKernelCacheObj *obj, struct MACH0_(obj_t) * mach0, RzList /*<void *>*/ *ret, ut64 paddr, bool is_first, int mode, const char *prefix) {
|
||||
struct section_t *sections = NULL;
|
||||
if (!(sections = MACH0_(get_sections)(mach0))) {
|
||||
return;
|
||||
}
|
||||
int i, type;
|
||||
for (i = 0; !sections[i].last; i++) {
|
||||
if (sections[i].size == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (strstr(sections[i].name, "_mod_fini_func") || strstr(sections[i].name, "_mod_term_func")) {
|
||||
type = RZ_BIN_ENTRY_TYPE_FINI;
|
||||
} else if (strstr(sections[i].name, "_mod_init_func")) {
|
||||
type = is_first ? 0 : RZ_BIN_ENTRY_TYPE_INIT;
|
||||
is_first = false;
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
|
||||
ut8 *buf = calloc(sections[i].size, 1);
|
||||
if (!buf) {
|
||||
break;
|
||||
}
|
||||
if (rz_buf_read_at(obj->cache_buf, sections[i].offset + paddr, buf, sections[i].size) < sections[i].size) {
|
||||
free(buf);
|
||||
break;
|
||||
}
|
||||
int j;
|
||||
int count = 0;
|
||||
for (j = 0; j < sections[i].size; j += 8) {
|
||||
ut64 addr64 = K_RPTR(buf + j);
|
||||
ut64 paddr64 = sections[i].offset + paddr + j;
|
||||
if (mode == RZ_K_CONSTRUCTOR_TO_ENTRY) {
|
||||
RzBinAddr *ba = newEntry(paddr64, addr64, type);
|
||||
rz_list_append(ret, ba);
|
||||
} else if (mode == RZ_K_CONSTRUCTOR_TO_SYMBOL) {
|
||||
RzBinSymbol *sym = RZ_NEW0(RzBinSymbol);
|
||||
if (!sym) {
|
||||
break;
|
||||
}
|
||||
|
||||
sym->name = rz_str_newf("%s.%s.%d", prefix, (type == RZ_BIN_ENTRY_TYPE_INIT) ? "init" : "fini", count++);
|
||||
sym->vaddr = addr64;
|
||||
sym->paddr = paddr64;
|
||||
sym->size = 0;
|
||||
sym->forwarder = "NONE";
|
||||
sym->bind = "GLOBAL";
|
||||
sym->type = "FUNC";
|
||||
|
||||
rz_list_append(ret, sym);
|
||||
}
|
||||
}
|
||||
free(buf);
|
||||
}
|
||||
free(sections);
|
||||
}
|
||||
|
||||
// this function will be removed once the transition of entries (RzBinPlugin) from RzList to RzPVector is done
|
||||
RZ_DEPRECATE static void process_constructors_vector(RzXNUKernelCacheObj *obj, struct MACH0_(obj_t) * mach0, RzPVector /*<void *>*/ *ret, ut64 paddr, bool is_first, int mode, const char *prefix) {
|
||||
static void process_constructors(RzXNUKernelCacheObj *obj, struct MACH0_(obj_t) * mach0, RzPVector /*<void *>*/ *ret, ut64 paddr, bool is_first, int mode, const char *prefix) {
|
||||
struct section_t *sections = NULL;
|
||||
if (!(sections = MACH0_(get_sections)(mach0))) {
|
||||
return;
|
||||
|
|
@ -1293,7 +1233,7 @@ static RzPVector /*<RzBinSymbol *>*/ *symbols(RzBinFile *bf) {
|
|||
case MH_MAGIC_64:
|
||||
symbols_from_mach0(ret, kext->mach0, bf, kext->range.offset, rz_pvector_len(ret));
|
||||
symbols_from_stubs(ret, kernel_syms_by_addr, obj, bf, kext, rz_pvector_len(ret));
|
||||
process_constructors_vector(obj, kext->mach0, ret, kext->range.offset, false, RZ_K_CONSTRUCTOR_TO_SYMBOL, kext_short_name(kext));
|
||||
process_constructors(obj, kext->mach0, ret, kext->range.offset, false, RZ_K_CONSTRUCTOR_TO_SYMBOL, kext_short_name(kext));
|
||||
process_kmod_init_term(obj, kext, ret, &inits, &terms);
|
||||
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -89,8 +89,8 @@ static bool load_buffer(RzBinFile *bf, RzBinObject *obj, RzBuffer *b, Sdb *sdb)
|
|||
return false;
|
||||
}
|
||||
|
||||
static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzList /*<RzBinAddr *>*/ *ret = rz_list_newf(free);
|
||||
static RzPVector /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
||||
RzPVector /*<RzBinAddr *>*/ *ret = rz_pvector_new(free);
|
||||
if (!ret) {
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -98,7 +98,7 @@ static RzList /*<RzBinAddr *>*/ *entries(RzBinFile *bf) {
|
|||
if (ptr) {
|
||||
ptr->paddr = N64_ROM_START;
|
||||
ptr->vaddr = baddr(bf);
|
||||
rz_list_append(ret, ptr);
|
||||
rz_pvector_push(ret, ptr);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2357,7 +2357,7 @@ static bool isSkippable(RzBinSymbol *s) {
|
|||
}
|
||||
|
||||
RZ_API int rz_core_analysis_all(RzCore *core) {
|
||||
RzList *list;
|
||||
RzPVector *vector;
|
||||
RzListIter *iter;
|
||||
RzFlagItem *item;
|
||||
RzAnalysisFunction *fcni;
|
||||
|
|
@ -2384,10 +2384,9 @@ RZ_API int rz_core_analysis_all(RzCore *core) {
|
|||
RzBinFile *bf = core->bin->cur;
|
||||
RzBinObject *o = bf ? bf->o : NULL;
|
||||
/* Symbols (Imports are already analyzed by rz_bin on init) */
|
||||
RzPVector *vec = NULL;
|
||||
void **it;
|
||||
if (o && (vec = o->symbols) != NULL) {
|
||||
rz_pvector_foreach (vec, it) {
|
||||
if (o && (vector = o->symbols) != NULL) {
|
||||
rz_pvector_foreach (vector, it) {
|
||||
symbol = *it;
|
||||
if (rz_cons_is_breaked()) {
|
||||
break;
|
||||
|
|
@ -2411,8 +2410,11 @@ RZ_API int rz_core_analysis_all(RzCore *core) {
|
|||
}
|
||||
}
|
||||
rz_core_task_yield(&core->tasks);
|
||||
if ((list = rz_bin_get_entries(core->bin))) {
|
||||
rz_list_foreach (list, iter, entry) {
|
||||
RzBinObject *bin = rz_bin_cur_object(core->bin);
|
||||
vector = bin ? (RzPVector *)rz_bin_object_get_entries(bin) : NULL;
|
||||
if (vector) {
|
||||
rz_pvector_foreach (vector, it) {
|
||||
entry = *it;
|
||||
if (entry->paddr == UT64_MAX) {
|
||||
continue;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -737,12 +737,13 @@ RZ_API bool rz_core_bin_apply_entry(RzCore *core, RzBinFile *binfile, bool va) {
|
|||
if (!o) {
|
||||
return false;
|
||||
}
|
||||
RzList *entries = o->entries;
|
||||
RzListIter *iter;
|
||||
RzPVector *entries = o->entries;
|
||||
void **iter;
|
||||
RzBinAddr *entry = NULL;
|
||||
int i = 0, init_i = 0, fini_i = 0, preinit_i = 0;
|
||||
rz_flag_space_push(core->flags, RZ_FLAGS_FS_SYMBOLS);
|
||||
rz_list_foreach (entries, iter, entry) {
|
||||
rz_pvector_foreach (entries, iter) {
|
||||
entry = *iter;
|
||||
ut64 paddr = entry->paddr;
|
||||
ut64 hpaddr = UT64_MAX;
|
||||
ut64 hvaddr = UT64_MAX;
|
||||
|
|
@ -1484,7 +1485,7 @@ RZ_API bool rz_core_bin_apply_symbols(RzCore *core, RzBinFile *binfile, bool va)
|
|||
|
||||
RzBinObject *obj = rz_bin_cur_object(core->bin);
|
||||
RzPVector *symbols = obj ? (RzPVector *)rz_bin_object_get_symbols(obj) : NULL;
|
||||
RzListIter *iter;
|
||||
void **iter;
|
||||
void **it;
|
||||
RzBinSymbol *symbol;
|
||||
rz_pvector_foreach (symbols, it) {
|
||||
|
|
@ -1578,7 +1579,8 @@ RZ_API bool rz_core_bin_apply_symbols(RzCore *core, RzBinFile *binfile, bool va)
|
|||
// handle thumb and arm for entry point since they are not present in symbols
|
||||
if (is_arm) {
|
||||
RzBinAddr *entry;
|
||||
rz_list_foreach (o->entries, iter, entry) {
|
||||
rz_pvector_foreach (o->entries, iter) {
|
||||
entry = *iter;
|
||||
handle_arm_entry(core, o, entry, va);
|
||||
}
|
||||
}
|
||||
|
|
@ -1880,8 +1882,8 @@ static const char *bin_reloc_type_name(RzBinReloc *reloc) {
|
|||
|
||||
static bool entries_initfini_print(RzCore *core, RzBinFile *bf, RzCmdStateOutput *state, bool initfini) {
|
||||
RzBinObject *o = bf->o;
|
||||
const RzList *entries = rz_bin_object_get_entries(o);
|
||||
RzListIter *iter;
|
||||
const RzPVector *entries = rz_bin_object_get_entries(o);
|
||||
void **iter;
|
||||
RzBinAddr *entry = NULL;
|
||||
ut64 baddr = rz_bin_get_baddr(core->bin);
|
||||
ut64 laddr = rz_bin_get_laddr(core->bin);
|
||||
|
|
@ -1890,7 +1892,8 @@ static bool entries_initfini_print(RzCore *core, RzBinFile *bf, RzCmdStateOutput
|
|||
rz_cmd_state_output_array_start(state);
|
||||
rz_cmd_state_output_set_columnsf(state, "XXXXs", "vaddr", "paddr", "hvaddr", "haddr", "type");
|
||||
|
||||
rz_list_foreach (entries, iter, entry) {
|
||||
rz_pvector_foreach (entries, iter) {
|
||||
entry = *iter;
|
||||
ut64 paddr = entry->paddr;
|
||||
ut64 hpaddr = UT64_MAX;
|
||||
ut64 hvaddr = UT64_MAX;
|
||||
|
|
@ -3079,7 +3082,7 @@ RZ_API bool rz_core_bin_info_print(RZ_NONNULL RzCore *core, RZ_NONNULL RzBinFile
|
|||
bool havecode;
|
||||
int bits;
|
||||
|
||||
havecode = is_executable(obj) || rz_list_length(obj->entries) > 0;
|
||||
havecode = is_executable(obj) || rz_pvector_len(obj->entries) > 0;
|
||||
compiled = rz_core_bin_get_compile_time(bf);
|
||||
bits = (plugin && !strcmp(plugin->name, "any")) ? rz_config_get_i(core->config, "asm.bits") : info->bits;
|
||||
const char *endian = info->big_endian ? "BE" : "LE";
|
||||
|
|
|
|||
|
|
@ -43,14 +43,15 @@ static ut64 initializeEsil(RzCore *core) {
|
|||
}
|
||||
}
|
||||
esil->exectrap = exectrap;
|
||||
RzList *entries = rz_bin_get_entries(core->bin);
|
||||
RzBinObject *obj = rz_bin_cur_object(core->bin);
|
||||
RzPVector *entries = obj ? (RzPVector *)rz_bin_object_get_entries(obj) : NULL;
|
||||
RzBinAddr *entry = NULL;
|
||||
RzBinInfo *info = NULL;
|
||||
if (entries && !rz_list_empty(entries)) {
|
||||
entry = (RzBinAddr *)rz_list_pop_head(entries);
|
||||
if (entries && !rz_pvector_empty(entries)) {
|
||||
entry = (RzBinAddr *)rz_pvector_pop_front(entries);
|
||||
info = rz_bin_get_info(core->bin);
|
||||
addr = info->has_va ? entry->vaddr : entry->paddr;
|
||||
rz_list_push(entries, entry);
|
||||
rz_pvector_push(entries, entry);
|
||||
} else {
|
||||
addr = core->offset;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -303,7 +303,7 @@ typedef struct rz_bin_object_t {
|
|||
* This associates the name of every symbol where is_imported == true to the symbol itself.
|
||||
*/
|
||||
HtPP /*<const char *, RzBinSymbol>*/ *import_name_symbols; // currently only used for imports, but could be extended to all symbols if needed.
|
||||
RzList /*<RzBinAddr *>*/ *entries;
|
||||
RzPVector /*<RzBinAddr *>*/ *entries;
|
||||
RzPVector /*<RzBinField *>*/ *fields;
|
||||
RzPVector /*<char *>*/ *libs;
|
||||
RzBinRelocStorage *relocs;
|
||||
|
|
@ -473,7 +473,7 @@ typedef struct rz_bin_plugin_t {
|
|||
RzPVector /*<RzBinVirtualFile *>*/ *(*virtual_files)(RzBinFile *bf);
|
||||
RzPVector /*<RzBinMap *>*/ *(*maps)(RzBinFile *bf);
|
||||
RzBinAddr *(*binsym)(RzBinFile *bf, RzBinSpecialSymbol num);
|
||||
RzList /*<RzBinAddr *>*/ *(*entries)(RzBinFile *bf);
|
||||
RzPVector /*<RzBinAddr *>*/ *(*entries)(RzBinFile *bf);
|
||||
RzPVector /*<RzBinSection *>*/ *(*sections)(RzBinFile *bf);
|
||||
RZ_OWN RzBinSourceLineInfo *(*lines)(RzBinFile *bf); //< only called once on load, ownership is transferred to the caller
|
||||
RzPVector /*<RzBinSymbol *>*/ *(*symbols)(RzBinFile *bf);
|
||||
|
|
@ -865,11 +865,10 @@ RZ_API void rz_bin_string_search_opt_init(RZ_NONNULL RzBinStringSearchOpt *opt);
|
|||
RZ_API RZ_OWN RzPVector /*<RzBinString *>*/ *rz_bin_file_strings(RZ_NONNULL RzBinFile *bf, RZ_NONNULL const RzBinStringSearchOpt *opt);
|
||||
|
||||
// use RzBinFile instead
|
||||
RZ_DEPRECATE RZ_API RZ_BORROW RzList /*<RzBinAddr *>*/ *rz_bin_get_entries(RZ_NONNULL RzBin *bin);
|
||||
RZ_DEPRECATE RZ_API int rz_bin_is_static(RZ_NONNULL RzBin *bin);
|
||||
RZ_API RZ_OWN RzPVector /*<RzBinTrycatch *>*/ *rz_bin_file_get_trycatch(RZ_NONNULL RzBinFile *bf);
|
||||
|
||||
RZ_API const RzList /*<RzBinAddr *>*/ *rz_bin_object_get_entries(RZ_NONNULL RzBinObject *obj);
|
||||
RZ_API RZ_BORROW const RzPVector /*<RzBinAddr *>*/ *rz_bin_object_get_entries(RZ_NONNULL RzBinObject *obj);
|
||||
RZ_API const RzPVector /*<RzBinField *>*/ *rz_bin_object_get_fields(RZ_NONNULL RzBinObject *obj);
|
||||
RZ_API const RzPVector /*<RzBinImport *>*/ *rz_bin_object_get_imports(RZ_NONNULL RzBinObject *obj);
|
||||
RZ_API const RzBinInfo *rz_bin_object_get_info(RZ_NONNULL RzBinObject *obj);
|
||||
|
|
|
|||
|
|
@ -269,7 +269,10 @@ static inline size_t rz_pvector_len(const RzPVector *vec) {
|
|||
}
|
||||
|
||||
static inline void *rz_pvector_at(const RzPVector *vec, size_t index) {
|
||||
rz_return_val_if_fail(vec && index < vec->v.len, NULL);
|
||||
rz_return_val_if_fail(vec, NULL);
|
||||
if (index >= vec->v.len) {
|
||||
return NULL;
|
||||
}
|
||||
return ((void **)vec->v.a)[index];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -727,12 +727,6 @@ static void rz_diff_file_close(DiffFile *file) {
|
|||
|
||||
#define rz_diff_file_get(df, n) ((df)->file->o->n)
|
||||
|
||||
/**************************************** rzlists ***************************************/
|
||||
|
||||
static const void *rz_diff_list_elem_at(const RzList /*<void *>*/ *array, ut32 index) {
|
||||
return rz_list_get_n(array, index);
|
||||
}
|
||||
|
||||
/**************************************** rzpvector ***************************************/
|
||||
|
||||
static const void *rz_diff_pvector_elem_at(const RzPVector /*<void *>*/ *array, ut32 index) {
|
||||
|
|
@ -1073,31 +1067,31 @@ static void entry_stringify(const RzBinAddr *elem, RzStrBuf *sb) {
|
|||
}
|
||||
|
||||
static RzDiff *rz_diff_entries_new(DiffFile *dfile_a, DiffFile *dfile_b) {
|
||||
RzList *list_a = NULL;
|
||||
RzList *list_b = NULL;
|
||||
RzPVector *vec_a = NULL;
|
||||
RzPVector *vec_b = NULL;
|
||||
|
||||
list_a = rz_diff_file_get(dfile_a, entries);
|
||||
if (!list_a) {
|
||||
vec_a = rz_diff_file_get(dfile_a, entries);
|
||||
if (!vec_a) {
|
||||
rz_diff_error_ret(NULL, "cannot get entries from '%s'\n", dfile_a->dio->filename);
|
||||
}
|
||||
|
||||
list_b = rz_diff_file_get(dfile_b, entries);
|
||||
if (!list_b) {
|
||||
vec_b = rz_diff_file_get(dfile_b, entries);
|
||||
if (!vec_b) {
|
||||
rz_diff_error_ret(NULL, "cannot get entries from '%s'\n", dfile_b->dio->filename);
|
||||
}
|
||||
|
||||
rz_list_sort(list_a, (RzListComparator)entry_compare, NULL);
|
||||
rz_list_sort(list_b, (RzListComparator)entry_compare, NULL);
|
||||
rz_pvector_sort(vec_a, (RzPVectorComparator)entry_compare, NULL);
|
||||
rz_pvector_sort(vec_b, (RzPVectorComparator)entry_compare, NULL);
|
||||
|
||||
RzDiffMethods methods = {
|
||||
.elem_at = (RzDiffMethodElemAt)rz_diff_list_elem_at,
|
||||
.elem_at = (RzDiffMethodElemAt)rz_diff_pvector_elem_at,
|
||||
.elem_hash = (RzDiffMethodElemHash)entry_hash,
|
||||
.compare = (RzDiffMethodCompare)entry_compare,
|
||||
.stringify = (RzDiffMethodStringify)entry_stringify,
|
||||
.ignore = NULL,
|
||||
};
|
||||
|
||||
return rz_diff_generic_new(list_a, rz_list_length(list_a), list_b, rz_list_length(list_b), &methods);
|
||||
return rz_diff_generic_new(vec_a, rz_pvector_len(vec_a), vec_b, rz_pvector_len(vec_b), &methods);
|
||||
}
|
||||
|
||||
/**************************************** libraries ***************************************/
|
||||
|
|
|
|||
|
|
@ -458,8 +458,10 @@ RZ_API bool rz_pvector_join(RZ_NONNULL RzPVector *pvec1, RZ_NONNULL RzPVector *p
|
|||
return false;
|
||||
}
|
||||
|
||||
RzVector *vec = &pvec1->v;
|
||||
RESIZE_OR_RETURN_FALSE(RZ_MAX(NEXT_VECTOR_CAPACITY, pvec1->v.len + pvec2->v.len));
|
||||
if (pvec1->v.len + pvec2->v.len > pvec1->v.capacity) {
|
||||
RzVector *vec = &pvec1->v;
|
||||
RESIZE_OR_RETURN_NULL(RZ_MAX(NEXT_VECTOR_CAPACITY, pvec1->v.len + pvec2->v.len));
|
||||
}
|
||||
memmove((void **)pvec1->v.a + pvec1->v.len, pvec2->v.a, pvec2->v.elem_size * pvec2->v.len);
|
||||
pvec1->v.len += pvec2->v.len;
|
||||
|
||||
|
|
|
|||
|
|
@ -29,9 +29,9 @@ bool test_rz_bin(void) {
|
|||
mu_assert_eq(rz_pvector_len(segments), 10, "rz_bin_object_get_segments");
|
||||
rz_pvector_free(segments);
|
||||
|
||||
const RzList *entries = rz_bin_object_get_entries(obj);
|
||||
mu_assert_eq(rz_list_length(entries), 1, "rz_bin_object_get_entries");
|
||||
RzBinAddr *entry = rz_list_first(entries);
|
||||
const RzPVector *entries = rz_bin_object_get_entries(obj);
|
||||
mu_assert_eq(rz_pvector_len(entries), 1, "rz_bin_object_get_entries");
|
||||
RzBinAddr *entry = (RzBinAddr *)rz_pvector_at(entries, 0);
|
||||
mu_assert_eq(entry->vaddr, 0x8048360, "entry virtual address");
|
||||
mu_assert_eq(entry->paddr, 0x360, "entry file offset");
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue