diff --git a/CODEOWNERS b/CODEOWNERS index 5bb5ed580a..751c2fa898 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1,9 +1,9 @@ * @wargio @XVilka @kazarmy @thestr4ng3r @ret2libc *.js @wargio CODEOWNERS @wargio @XVilka @kazarmy @thestr4ng3r @ret2libc -librz/anal/ @thestr4ng3r -librz/anal/esil* @wargio -librz/anal/xrefs.c @ret2libc +librz/analysis/ @thestr4ng3r +librz/analysis/esil* @wargio +librz/analysis/xrefs.c @ret2libc librz/arch/gb/ @wargio librz/asm/ @wargio librz/asm/p/x86_* @ret2libc diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 939b9907de..c6269a0280 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -82,7 +82,7 @@ rules to make the git history more readable and consistent: ### Commit message hashtag list: -* ##anal - analysis related +* ##analysis - analysis related * ##asm - assembler * ##bin - binary parsing * ##build - build fixes/changes diff --git a/Makefile b/Makefile index 7340f46f5e..e5f1e78bf9 100644 --- a/Makefile +++ b/Makefile @@ -14,7 +14,7 @@ BUILDSEC=$(shell date -u -d "@$(SOURCE_DATE_EPOCH)" "+__%H:%M:%S" 2>/dev/null || else BUILDSEC=$(shell date "+__%H:%M:%S") endif -DATADIRS=librz/cons/d librz/flag/d librz/bin/d librz/asm/d librz/syscall/d librz/magic/d librz/anal/d +DATADIRS=librz/cons/d librz/flag/d librz/bin/d librz/asm/d librz/syscall/d librz/magic/d librz/analysis/d USE_ZIP=YES ZIP=zip @@ -141,7 +141,7 @@ windist: mkdir -p "${WINDIST}/share/rizin/${VERSION}/sysregs" cp -f librz/sysregs/d/*.sdb "${WINDIST}/share/rizin/${VERSION}/sysregs" mkdir -p "${WINDIST}/share/rizin/${VERSION}/fcnsign" - cp -f librz/anal/d/*.sdb "${WINDIST}/share/rizin/${VERSION}/fcnsign" + cp -f librz/analysis/d/*.sdb "${WINDIST}/share/rizin/${VERSION}/fcnsign" mkdir -p "${WINDIST}/share/rizin/${VERSION}/opcodes" cp -f librz/asm/d/*.sdb "${WINDIST}/share/rizin/${VERSION}/opcodes" mkdir -p "${WINDIST}/share/rizin/${VERSION}/flag" @@ -294,7 +294,7 @@ deinstall uninstall: cd binrz && ${MAKE} uninstall cd shlr && ${MAKE} uninstall cd librz/syscall/d && ${MAKE} uninstall - cd librz/anal/d && ${MAKE} uninstall + cd librz/analysis/d && ${MAKE} uninstall @echo @echo "Run 'make purge' to also remove installed files from previous versions of rz" @echo @@ -435,7 +435,7 @@ meson-symstall: symstall-sdb ln -fs $(PWD)/build/librz/parse/librz_parse.$(EXT_SO) ${L}/librz_parse.$(EXT_SO) ln -fs $(PWD)/build/librz/lang/librz_lang.$(EXT_SO) ${L}/librz_lang.$(EXT_SO) ln -fs $(PWD)/build/librz/asm/librz_asm.$(EXT_SO) ${L}/librz_asm.$(EXT_SO) - ln -fs $(PWD)/build/librz/anal/librz_anal.$(EXT_SO) ${L}/librz_anal.$(EXT_SO) + ln -fs $(PWD)/build/librz/analysis/librz_analysis.$(EXT_SO) ${L}/librz_analysis.$(EXT_SO) ln -fs $(PWD)/build/librz/egg/librz_egg.$(EXT_SO) ${L}/librz_egg.$(EXT_SO) ln -fs $(PWD)/build/librz/debug/librz_debug.$(EXT_SO) ${L}/librz_debug.$(EXT_SO) ln -fs $(PWD)/build/librz/core/librz_core.$(EXT_SO) ${L}/librz_core.$(EXT_SO) diff --git a/binrz/blob/Makefile b/binrz/blob/Makefile index c73fbe06a1..2be25fa521 100644 --- a/binrz/blob/Makefile +++ b/binrz/blob/Makefile @@ -36,7 +36,7 @@ LDFLAGS+=-L../../librz/asm -lrz_asm LDFLAGS+=-L../../librz/lang -lrz_lang LDFLAGS+=-L../../librz/egg -lrz_egg LDFLAGS+=-L../../librz/core -lrz_core -LDFLAGS+=-L../../librz/anal -lrz_anal +LDFLAGS+=-L../../librz/analysis -lrz_analysis LDFLAGS+=-L../../librz/crypto -lrz_crypto LDFLAGS+=-L../../librz/flag -lrz_flag LDFLAGS+=-L../../librz/parse -lrz_parse diff --git a/binrz/preload/Makefile b/binrz/preload/Makefile index 8833990c5c..77ebd83494 100644 --- a/binrz/preload/Makefile +++ b/binrz/preload/Makefile @@ -4,7 +4,7 @@ ifeq ($(ISPPC),) BIN=librz ISLIB=1 BINDEPS=rz_core rz_parse rz_search rz_cons rz_config -BINDEPS+=rz_bin rz_debug rz_anal rz_reg rz_bp rz_io +BINDEPS+=rz_bin rz_debug rz_analysis rz_reg rz_bp rz_io BINDEPS+=rz_lang rz_asm rz_syscall rz_hash rz_crypto BINDEPS+=rz_magic rz_socket rz_flag rz_util rz_egg diff --git a/binrz/rizin/Makefile b/binrz/rizin/Makefile index 10f0c7ecda..c2cf01d294 100644 --- a/binrz/rizin/Makefile +++ b/binrz/rizin/Makefile @@ -1,6 +1,6 @@ BIN=rizin BINDEPS=rz_core rz_parse rz_search rz_cons rz_config -BINDEPS+=rz_bin rz_debug rz_anal rz_reg rz_bp rz_io +BINDEPS+=rz_bin rz_debug rz_analysis rz_reg rz_bp rz_io BINDEPS+=rz_lang rz_asm rz_syscall rz_hash rz_main BINDEPS+=rz_magic rz_socket rz_flag rz_egg rz_crypto rz_util diff --git a/binrz/rizin/meson.build b/binrz/rizin/meson.build index c0eadf449a..94c326c933 100644 --- a/binrz/rizin/meson.build +++ b/binrz/rizin/meson.build @@ -15,7 +15,7 @@ executable('rizin', 'rizin.c', rz_bp_dep, rz_reg_dep, rz_syscall_dep, - rz_anal_dep, + rz_analysis_dep, rz_parse_dep, rz_egg_dep, rz_search_dep, diff --git a/binrz/rz-asm/meson.build b/binrz/rz-asm/meson.build index a909106ef8..3f9ec133af 100644 --- a/binrz/rz-asm/meson.build +++ b/binrz/rz-asm/meson.build @@ -4,7 +4,7 @@ executable('rz-asm', 'rz-asm.c', rz_main_dep, rz_util_dep, rz_asm_dep, - rz_anal_dep, + rz_analysis_dep, rz_crypto_dep, rz_syscall_dep, rz_hash_dep diff --git a/binrz/rz-bin/Makefile b/binrz/rz-bin/Makefile index 25d2935853..4e22de31b5 100644 --- a/binrz/rz-bin/Makefile +++ b/binrz/rz-bin/Makefile @@ -1,7 +1,7 @@ BIN=rz-bin BINDEPS=rz_magic rz_core rz_bin rz_egg rz_cons rz_main BINDEPS+=rz_config rz_io rz_flag rz_asm -BINDEPS+=rz_debug rz_hash rz_lang rz_anal rz_parse rz_bp rz_reg +BINDEPS+=rz_debug rz_hash rz_lang rz_analysis rz_parse rz_bp rz_reg BINDEPS+=rz_search rz_syscall rz_socket rz_magic rz_crypto rz_util include ../rules.mk diff --git a/binrz/rz-diff/Makefile b/binrz/rz-diff/Makefile index 4736b6ea54..14d99a10ef 100644 --- a/binrz/rz-diff/Makefile +++ b/binrz/rz-diff/Makefile @@ -1,6 +1,6 @@ BIN=rz-diff -BINDEPS=rz_core rz_config rz_cons rz_search rz_anal +BINDEPS=rz_core rz_config rz_cons rz_search rz_analysis BINDEPS+=rz_bin rz_debug rz_io rz_asm rz_hash rz_crypto BINDEPS+=rz_socket rz_flag rz_lang rz_reg rz_bp rz_parse BINDEPS+=rz_syscall rz_magic rz_util rz_parse rz_egg rz_main diff --git a/binrz/rz-diff/meson.build b/binrz/rz-diff/meson.build index a910c7b765..c510b56093 100644 --- a/binrz/rz-diff/meson.build +++ b/binrz/rz-diff/meson.build @@ -8,7 +8,7 @@ executable('rz-diff', 'rz-diff.c', rz_cons_dep, rz_core_dep, rz_bin_dep, - rz_anal_dep, + rz_analysis_dep, rz_asm_dep, rz_hash_dep, rz_config_dep diff --git a/binrz/rz-find/Makefile b/binrz/rz-find/Makefile index 303d97d9ba..37700242df 100644 --- a/binrz/rz-find/Makefile +++ b/binrz/rz-find/Makefile @@ -1,6 +1,6 @@ BIN=rz-find -BINDEPS=rz_search rz_io rz_asm rz_anal rz_reg rz_cons rz_lang rz_crypto +BINDEPS=rz_search rz_io rz_asm rz_analysis rz_reg rz_cons rz_lang rz_crypto BINDEPS+=rz_socket rz_parse rz_util rz_syscall rz_flag rz_hash rz_main include ../rules.mk diff --git a/binrz/rz-gg/Makefile b/binrz/rz-gg/Makefile index b6f79207b0..61f648b4e9 100644 --- a/binrz/rz-gg/Makefile +++ b/binrz/rz-gg/Makefile @@ -1,7 +1,7 @@ BIN=rz-gg BINDEPS=rz_egg rz_syscall rz_asm BINDEPS+=rz_core rz_hash rz_debug rz_config rz_bp rz_crypto rz_cons -BINDEPS+=rz_lang rz_parse rz_anal rz_reg rz_flag rz_crypto +BINDEPS+=rz_lang rz_parse rz_analysis rz_reg rz_flag rz_crypto BINDEPS+=rz_bin rz_search rz_io rz_socket BINDEPS+=rz_magic rz_util rz_main diff --git a/binrz/rz-sign/Makefile b/binrz/rz-sign/Makefile index 3c6e274546..e800498a84 100644 --- a/binrz/rz-sign/Makefile +++ b/binrz/rz-sign/Makefile @@ -1,5 +1,5 @@ BIN=rz-sign -BINDEPS=rz_anal rz_util rz_core rz_search rz_main +BINDEPS=rz_analysis rz_util rz_core rz_search rz_main LDFLAGS+=$(LINK) include ../../librz/main/deps.mk diff --git a/configure b/configure index 572ed487fb..a5c1476980 100755 --- a/configure +++ b/configure @@ -742,7 +742,7 @@ for A in ${ENVWORDS} ; do SEDFLAGS="${SEDFLAGS}s,@${A}@,${VAR},g;" done SEDFLAGS="${SEDFLAGS}'" -for A in ./config-user.mk librz/include/rz_userconf.h pkgcfg/rz_io.pc pkgcfg/rz_magic.pc pkgcfg/rz_asm.pc pkgcfg/rz_bin.pc pkgcfg/rz_anal.pc pkgcfg/rz_hash.pc pkgcfg/rz_cons.pc pkgcfg/rz_core.pc pkgcfg/rz_lang.pc pkgcfg/rz_socket.pc pkgcfg/rz_debug.pc pkgcfg/rz_reg.pc pkgcfg/rz_config.pc pkgcfg/rz_flag.pc pkgcfg/rz_syscall.pc pkgcfg/rz_util.pc pkgcfg/rz_search.pc pkgcfg/rz_bp.pc pkgcfg/rz_parse.pc pkgcfg/rz_egg.pc pkgcfg/rz_crypto.pc ; do # SUBDIRS +for A in ./config-user.mk librz/include/rz_userconf.h pkgcfg/rz_io.pc pkgcfg/rz_magic.pc pkgcfg/rz_asm.pc pkgcfg/rz_bin.pc pkgcfg/rz_analysis.pc pkgcfg/rz_hash.pc pkgcfg/rz_cons.pc pkgcfg/rz_core.pc pkgcfg/rz_lang.pc pkgcfg/rz_socket.pc pkgcfg/rz_debug.pc pkgcfg/rz_reg.pc pkgcfg/rz_config.pc pkgcfg/rz_flag.pc pkgcfg/rz_syscall.pc pkgcfg/rz_util.pc pkgcfg/rz_search.pc pkgcfg/rz_bp.pc pkgcfg/rz_parse.pc pkgcfg/rz_egg.pc pkgcfg/rz_crypto.pc ; do # SUBDIRS if [ -f "${VPATH}/${A}.acr" ]; then SD_TARGET=${A} else diff --git a/configure.acr b/configure.acr index 723d6a468b..1a482f9e18 100644 --- a/configure.acr +++ b/configure.acr @@ -253,7 +253,7 @@ SUBDIRS ./config-user.mk pkgcfg/rz_magic.pc pkgcfg/rz_asm.pc pkgcfg/rz_bin.pc - pkgcfg/rz_anal.pc + pkgcfg/rz_analysis.pc pkgcfg/rz_hash.pc pkgcfg/rz_cons.pc pkgcfg/rz_core.pc diff --git a/doc/calling-conventions.md b/doc/calling-conventions.md index 5456d26b13..9a28a6dc79 100644 --- a/doc/calling-conventions.md +++ b/doc/calling-conventions.md @@ -13,7 +13,7 @@ Attribute list Note that you will substitute `x` for the calling convention name you will use. -`default.cc=x` : used to set the default calling convention used for all functions in `RAnal` instance for which this key is set, string of this calling convention `"x"` will be returned for every call of `RZ_API const char *r_anal_cc_default(RAnal *anal)`. +`default.cc=x` : used to set the default calling convention used for all functions in `RzAnalysis` instance for which this key is set, string of this calling convention `"x"` will be returned for every call of `RZ_API const char *r_analysis_cc_default(RzAnalysis *analysis)`. `x=cc`: used to initialize calling convention (think of it as their is calling convention called x). @@ -32,8 +32,8 @@ File Path In order to integrate the calling convention profile you created with the rizin source, few set of conventions should be followed: -- Store the unparsed sdb file in `path-to-rizin-source/librz/anal/d`. +- Store the unparsed sdb file in `path-to-rizin-source/librz/analysis/d`. - If you want the sdb to be loaded for specific architecture the file name should follow this convention `cc-arch-bits`, for example to create profile that loads automatically for x86 arch with 16 bits call the file `cc-x86-16` -- In the file `path-to-rizin-source/librz/anal/d/makefile` add entry `F+= cc-arch-bits` with desired arch and bits and you should be ready to go. +- In the file `path-to-rizin-source/librz/analysis/d/makefile` add entry `F+= cc-arch-bits` with desired arch and bits and you should be ready to go. diff --git a/doc/debug-internals.md b/doc/debug-internals.md index 51e999fdf2..328a6d169c 100644 --- a/doc/debug-internals.md +++ b/doc/debug-internals.md @@ -29,10 +29,10 @@ well as setting up profiles. (??profiles??) The functionality lives in the following files: (?? why so many files? can this be simplified??) - librz/reg/arena.c // ?? used by anal and debugger + librz/reg/arena.c // ?? used by analysis and debugger librz/reg/cond.c // condition registers librz/reg/double.c // support for double-precision floating point numbers - librz/reg/profile.c // ?? used by anal and debugger + librz/reg/profile.c // ?? used by analysis and debugger librz/reg/reg.c // top-level register specific code (all of rizin) librz/reg/value.c // dealing with register values librz/reg/t/p.c // test code for printing general-purpose registers @@ -76,7 +76,7 @@ The main top-level debugger functionality lives here. It aims to abstract away the common code flow and integration into Rizin while delegating more nuanced system interactions to plug-ins. - librz/debug/arg.c // used by the anal engine (??) + librz/debug/arg.c // used by the analysis engine (??) librz/debug/desc.c // code for handling file descriptors inside an inferior librz/debug/esil.c // ESIL related debugging code (??) librz/debug/map.c // top-level API for dealing with memory maps diff --git a/doc/esil.md b/doc/esil.md index 01f2f0d4d6..a97762e28c 100644 --- a/doc/esil.md +++ b/doc/esil.md @@ -234,16 +234,16 @@ Disassembly example: │ │││ 0x100001147 48394a38 rdx,56,+,[8],rcx,==,cz,?= ``` -Rizin anal ESIL code example +Rizin analysis ESIL code example ============================== As an example implementation of ESIL analysis for the AVR family of -microcontrollers there is a `avr_op` function in `/librz/anal/p/anal_avr.c` +microcontrollers there is a `avr_op` function in `/librz/analysis/p/analysis_avr.c` which contains information on how the instructions are expressed in ESIL and other opcode information such as cycle counts per instruction: ```` -static int avr_op(RAnal *anal, RAnalOp *op, ut64 addr, const ut8 *buf, int len) { +static int avr_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len) { short ofst; int d, r, k; (...) diff --git a/librz/anal/anal.c b/librz/anal/anal.c deleted file mode 100644 index cd053baf00..0000000000 --- a/librz/anal/anal.c +++ /dev/null @@ -1,725 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only - -#include -#include -#include -#include -#include - -RZ_LIB_VERSION(rz_anal); - -static RzAnalPlugin *anal_static_plugins[] = { - RZ_ANAL_STATIC_PLUGINS -}; - -RZ_API void rz_anal_set_limits(RzAnal *anal, ut64 from, ut64 to) { - free (anal->limit); - anal->limit = RZ_NEW0 (RzAnalRange); - if (anal->limit) { - anal->limit->from = from; - anal->limit->to = to; - } -} - -RZ_API void rz_anal_unset_limits(RzAnal *anal) { - RZ_FREE (anal->limit); -} - -static void meta_unset_for(RzEvent *ev, int type, void *user, void *data) { - RzSpaces *s = (RzSpaces *)ev->user; - RzAnal *anal = container_of (s, RzAnal, meta_spaces); - RzSpaceEvent *se = (RzSpaceEvent *)data; - rz_meta_space_unset_for (anal, se->data.unset.space); -} - -static void meta_count_for(RzEvent *ev, int type, void *user, void *data) { - RzSpaces *s = (RzSpaces *)ev->user; - RzAnal *anal = container_of (s, RzAnal, meta_spaces); - RzSpaceEvent *se = (RzSpaceEvent *)data; - se->res = rz_meta_space_count_for (anal, se->data.count.space); -} - -static void zign_unset_for(RzEvent *ev, int type, void *user, void *data) { - RzSpaces *s = (RzSpaces *)ev->user; - RzAnal *anal = container_of (s, RzAnal, zign_spaces); - RzSpaceEvent *se = (RzSpaceEvent *)data; - rz_sign_space_unset_for (anal, se->data.unset.space); -} - -static void zign_count_for(RzEvent *ev, int type, void *user, void *data) { - RzSpaces *s = (RzSpaces *)ev->user; - RzAnal *anal = container_of (s, RzAnal, zign_spaces); - RzSpaceEvent *se = (RzSpaceEvent *)data; - se->res = rz_sign_space_count_for (anal, se->data.count.space); -} - -static void zign_rename_for(RzEvent *ev, int type, void *user, void *data) { - RzSpaces *s = (RzSpaces *)ev->user; - RzAnal *anal = container_of (s, RzAnal, zign_spaces); - RzSpaceEvent *se = (RzSpaceEvent *)data; - rz_sign_space_rename_for (anal, se->data.rename.space, - se->data.rename.oldname, se->data.rename.newname); -} - -void rz_anal_hint_storage_init(RzAnal *a); -void rz_anal_hint_storage_fini(RzAnal *a); - -static void rz_meta_item_fini(RzAnalMetaItem *item) { - free (item->str); -} - -static void rz_meta_item_free(void *_item) { - if (_item) { - RzAnalMetaItem *item = _item; - rz_meta_item_fini (item); - free (item); - } -} - -RZ_API RzAnal *rz_anal_new(void) { - int i; - RzAnal *anal = RZ_NEW0 (RzAnal); - if (!anal) { - return NULL; - } - if (!rz_str_constpool_init (&anal->constpool)) { - free (anal); - return NULL; - } - anal->bb_tree = NULL; - anal->ht_addr_fun = ht_up_new0 (); - anal->ht_name_fun = ht_pp_new0 (); - anal->os = strdup (RZ_SYS_OS); - anal->esil_goto_limit = RZ_ANAL_ESIL_GOTO_LIMIT; - anal->opt.nopskip = true; // skip nops in code analysis - anal->opt.hpskip = false; // skip `mov reg,reg` and `lea reg,[reg]` - anal->gp = 0LL; - anal->sdb = sdb_new0 (); - anal->cpp_abi = RZ_ANAL_CPP_ABI_ITANIUM; - anal->opt.depth = 32; - anal->opt.noncode = false; // do not analyze data by default - rz_spaces_init (&anal->meta_spaces, "CS"); - rz_event_hook (anal->meta_spaces.event, RZ_SPACE_EVENT_UNSET, meta_unset_for, NULL); - rz_event_hook (anal->meta_spaces.event, RZ_SPACE_EVENT_COUNT, meta_count_for, NULL); - - rz_spaces_init (&anal->zign_spaces, "zs"); - rz_event_hook (anal->zign_spaces.event, RZ_SPACE_EVENT_UNSET, zign_unset_for, NULL); - rz_event_hook (anal->zign_spaces.event, RZ_SPACE_EVENT_COUNT, zign_count_for, NULL); - rz_event_hook (anal->zign_spaces.event, RZ_SPACE_EVENT_RENAME, zign_rename_for, NULL); - rz_anal_hint_storage_init (anal); - rz_interval_tree_init (&anal->meta, rz_meta_item_free); - anal->sdb_types = sdb_ns (anal->sdb, "types", 1); - anal->sdb_fmts = sdb_ns (anal->sdb, "spec", 1); - anal->sdb_cc = sdb_ns (anal->sdb, "cc", 1); - anal->sdb_zigns = sdb_ns (anal->sdb, "zigns", 1); - anal->sdb_classes = sdb_ns (anal->sdb, "classes", 1); - anal->sdb_classes_attrs = sdb_ns (anal->sdb_classes, "attrs", 1); - anal->zign_path = strdup (""); - anal->cb_printf = (PrintfCallback) printf; - (void)rz_anal_pin_init (anal); - (void)rz_anal_xrefs_init (anal); - anal->diff_thbb = RZ_ANAL_THRESHOLDBB; - anal->diff_thfcn = RZ_ANAL_THRESHOLDFCN; - anal->syscall = rz_syscall_new (); - rz_io_bind_init (anal->iob); - rz_flag_bind_init (anal->flb); - anal->reg = rz_reg_new (); - anal->last_disasm_reg = NULL; - anal->stackptr = 0; - anal->lineswidth = 0; - anal->fcns = rz_list_newf (rz_anal_function_free); - anal->leaddrs = NULL; - anal->imports = rz_list_newf (free); - rz_anal_set_bits (anal, 32); - anal->plugins = rz_list_newf ((RzListFree) rz_anal_plugin_free); - if (anal->plugins) { - for (i = 0; anal_static_plugins[i]; i++) { - rz_anal_add (anal, anal_static_plugins[i]); - } - } - return anal; -} - -RZ_API void rz_anal_plugin_free (RzAnalPlugin *p) { - if (p && p->fini) { - p->fini (NULL); - } -} - -void __block_free_rb(RBNode *node, void *user); - -RZ_API RzAnal *rz_anal_free(RzAnal *a) { - if (!a) { - return NULL; - } - /* TODO: Free anals here */ - rz_list_free (a->fcns); - ht_up_free (a->ht_addr_fun); - ht_pp_free (a->ht_name_fun); - set_u_free (a->visited); - rz_anal_hint_storage_fini (a); - rz_interval_tree_fini (&a->meta); - free (a->cpu); - free (a->os); - free (a->zign_path); - rz_list_free (a->plugins); - rz_rbtree_free (a->bb_tree, __block_free_rb, NULL); - rz_spaces_fini (&a->meta_spaces); - rz_spaces_fini (&a->zign_spaces); - rz_anal_pin_fini (a); - rz_syscall_free (a->syscall); - rz_reg_free (a->reg); - ht_up_free (a->dict_refs); - ht_up_free (a->dict_xrefs); - rz_list_free (a->leaddrs); - sdb_free (a->sdb); - if (a->esil) { - rz_anal_esil_free (a->esil); - a->esil = NULL; - } - free (a->last_disasm_reg); - rz_list_free (a->imports); - rz_str_constpool_fini (&a->constpool); - free (a); - return NULL; -} - -RZ_API void rz_anal_set_user_ptr(RzAnal *anal, void *user) { - anal->user = user; -} - -RZ_API int rz_anal_add(RzAnal *anal, RzAnalPlugin *foo) { - if (foo->init) { - foo->init (anal->user); - } - rz_list_append (anal->plugins, foo); - return true; -} - -RZ_API bool rz_anal_use(RzAnal *anal, const char *name) { - RzListIter *it; - RzAnalPlugin *h; - - if (anal) { - rz_list_foreach (anal->plugins, it, h) { - if (!h->name || strcmp (h->name, name)) { - continue; - } -#if 0 - // regression happening here for asm.emu - if (anal->cur && anal->cur == h) { - return true; - } -#endif - anal->cur = h; - rz_anal_set_reg_profile (anal); - return true; - } - } - return false; -} - -RZ_API char *rz_anal_get_reg_profile(RzAnal *anal) { - return (anal && anal->cur && anal->cur->get_reg_profile) - ? anal->cur->get_reg_profile (anal) : NULL; -} - -// deprecate.. or at least reuse get_reg_profile... -RZ_API bool rz_anal_set_reg_profile(RzAnal *anal) { - bool ret = false; - if (anal && anal->cur && anal->cur->set_reg_profile) { - ret = anal->cur->set_reg_profile (anal); - } else { - char *p = rz_anal_get_reg_profile (anal); - if (p && *p) { - rz_reg_set_profile_string (anal->reg, p); - ret = true; - } - free (p); - } - return ret; -} - -RZ_API bool rz_anal_set_triplet(RzAnal *anal, const char *os, const char *arch, int bits) { - rz_return_val_if_fail (anal, false); - if (!os || !*os) { - os = RZ_SYS_OS; - } - if (!arch || !*arch) { - arch = anal->cur? anal->cur->arch: RZ_SYS_ARCH; - } - if (bits < 1) { - bits = anal->bits; - } - free (anal->os); - anal->os = strdup (os); - rz_anal_set_bits (anal, bits); - return rz_anal_use (anal, arch); -} - -// copypasta from core/cbin.c -static void sdb_concat_by_path(Sdb *s, const char *path) { - Sdb *db = sdb_new (0, path, 0); - sdb_merge (s, db); - sdb_close (db); - sdb_free (db); -} - -RZ_API bool rz_anal_set_os(RzAnal *anal, const char *os) { - Sdb *types = anal->sdb_types; - const char *dir_prefix = rz_sys_prefix (NULL); - const char *dbpath = sdb_fmt (RZ_JOIN_3_PATHS ("%s", RZ_SDB_FCNSIGN, "types-%s.sdb"), - dir_prefix, os); - if (rz_file_exists (dbpath)) { - sdb_concat_by_path (types, dbpath); - } - return rz_anal_set_triplet (anal, os, NULL, -1); -} - -RZ_API bool rz_anal_set_bits(RzAnal *anal, int bits) { - switch (bits) { - case 8: - case 16: - case 27: - case 32: - case 64: - if (anal->bits != bits) { - anal->bits = bits; - rz_anal_set_reg_profile (anal); - } - return true; - } - return false; -} - -RZ_API void rz_anal_set_cpu(RzAnal *anal, const char *cpu) { - free (anal->cpu); - anal->cpu = cpu ? strdup (cpu) : NULL; - int v = rz_anal_archinfo (anal, RZ_ANAL_ARCHINFO_ALIGN); - if (v != -1) { - anal->pcalign = v; - } -} - -RZ_API int rz_anal_set_big_endian(RzAnal *anal, int bigend) { - anal->big_endian = bigend; - anal->reg->big_endian = bigend; - return true; -} - -RZ_API ut8 *rz_anal_mask(RzAnal *anal, int size, const ut8 *data, ut64 at) { - RzAnalOp *op = NULL; - ut8 *ret = NULL; - int oplen, idx = 0; - - if (!data) { - return NULL; - } - - if (anal->cur && anal->cur->anal_mask) { - return anal->cur->anal_mask (anal, size, data, at); - } - - if (!(op = rz_anal_op_new ())) { - return NULL; - } - - if (!(ret = malloc (size))) { - rz_anal_op_free (op); - return NULL; - } - - memset (ret, 0xff, size); - - while (idx < size) { - if ((oplen = rz_anal_op (anal, op, at, data + idx, size - idx, RZ_ANAL_OP_MASK_BASIC)) < 1) { - break; - } - if ((op->ptr != UT64_MAX || op->jump != UT64_MAX) && op->nopcode != 0) { - memset (ret + idx + op->nopcode, 0, oplen - op->nopcode); - } - idx += oplen; - at += oplen; - } - - rz_anal_op_free (op); - - return ret; -} - -RZ_API void rz_anal_trace_bb(RzAnal *anal, ut64 addr) { - RzAnalBlock *bbi; - RzAnalFunction *fcni; - RzListIter *iter2; - fcni = rz_anal_get_fcn_in (anal, addr, 0); - if (fcni) { - rz_list_foreach (fcni->bbs, iter2, bbi) { - if (addr >= bbi->addr && addr < (bbi->addr + bbi->size)) { - bbi->traced = true; - break; - } - } - } -} - -RZ_API void rz_anal_colorize_bb(RzAnal *anal, ut64 addr, ut32 color) { - RzAnalBlock *bbi; - bbi = rz_anal_bb_from_offset (anal, addr); - if (bbi) { - bbi->colorize = color; - } -} - -RZ_API RzList* rz_anal_get_fcns (RzAnal *anal) { - // avoid received to free this thing - anal->fcns->free = NULL; - return anal->fcns; -} - -RZ_API RzAnalOp *rz_anal_op_hexstr(RzAnal *anal, ut64 addr, const char *str) { - RzAnalOp *op = RZ_NEW0 (RzAnalOp); - if (!op) { - return NULL; - } - ut8 *buf = calloc (1, strlen (str) + 1); - if (!buf) { - free (op); - return NULL; - } - int len = rz_hex_str2bin (str, buf); - rz_anal_op (anal, op, addr, buf, len, RZ_ANAL_OP_MASK_BASIC); - free (buf); - return op; -} - -RZ_API bool rz_anal_op_is_eob(RzAnalOp *op) { - if (op->eob) { - return true; - } - switch (op->type) { - case RZ_ANAL_OP_TYPE_JMP: - case RZ_ANAL_OP_TYPE_UJMP: - case RZ_ANAL_OP_TYPE_RJMP: - case RZ_ANAL_OP_TYPE_IJMP: - case RZ_ANAL_OP_TYPE_IRJMP: - case RZ_ANAL_OP_TYPE_CJMP: - case RZ_ANAL_OP_TYPE_RET: - case RZ_ANAL_OP_TYPE_TRAP: - return true; - default: - return false; - } -} - -RZ_API void rz_anal_purge(RzAnal *anal) { - rz_anal_hint_clear (anal); - rz_interval_tree_fini (&anal->meta); - rz_interval_tree_init (&anal->meta, rz_meta_item_free); - sdb_reset (anal->sdb_types); - sdb_reset (anal->sdb_zigns); - sdb_reset (anal->sdb_classes); - sdb_reset (anal->sdb_classes_attrs); - rz_anal_pin_fini (anal); - rz_anal_pin_init (anal); - sdb_reset (anal->sdb_cc); - rz_list_free (anal->fcns); - anal->fcns = rz_list_newf (rz_anal_function_free); - rz_anal_purge_imports (anal); -} - -RZ_API int rz_anal_archinfo(RzAnal *anal, int query) { - rz_return_val_if_fail (anal, -1); - switch (query) { - case RZ_ANAL_ARCHINFO_MIN_OP_SIZE: - case RZ_ANAL_ARCHINFO_MAX_OP_SIZE: - case RZ_ANAL_ARCHINFO_ALIGN: - if (anal->cur && anal->cur->archinfo) { - return anal->cur->archinfo (anal, query); - } - break; - } - return -1; -} - -static bool __nonreturn_print_commands(void *p, const char *k, const char *v) { - RzAnal *anal = (RzAnal *)p; - if (!strncmp (v, "func", strlen ("func") + 1)) { - char *query = sdb_fmt ("func.%s.noreturn", k); - if (sdb_bool_get (anal->sdb_types, query, NULL)) { - anal->cb_printf ("tnn %s\n", k); - } - } - if (!strncmp (k, "addr.", 5)) { - anal->cb_printf ("tna 0x%s %s\n", k + 5, v); - } - return true; -} - -static bool __nonreturn_print(void *p, const char *k, const char *v) { - RzAnal *anal = (RzAnal *)p; - if (!strncmp (k, "func.", 5) && strstr (k, ".noreturn")) { - char *s = strdup (k + 5); - char *d = strchr (s, '.'); - if (d) { - *d = 0; - } - anal->cb_printf ("%s\n", s); - free (s); - } - if (!strncmp (k, "addr.", 5)) { - char *off; - if (!(off = strdup (k + 5))) { - return 1; - } - char *ptr = strstr (off, ".noreturn"); - if (ptr) { - *ptr = 0; - anal->cb_printf ("0x%s\n", off); - } - free (off); - } - return true; -} - -RZ_API void rz_anal_noreturn_list(RzAnal *anal, int mode) { - switch (mode) { - case 1: - case '*': - case 'r': - sdb_foreach (anal->sdb_types, __nonreturn_print_commands, anal); - break; - default: - sdb_foreach (anal->sdb_types, __nonreturn_print, anal); - break; - } -} - -#define K_NORET_ADDR(x) sdb_fmt ("addr.%"PFMT64x".noreturn", x) -#define K_NORET_FUNC(x) sdb_fmt ("func.%s.noreturn", x) - -RZ_API bool rz_anal_noreturn_add(RzAnal *anal, const char *name, ut64 addr) { - const char *tmp_name = NULL; - Sdb *TDB = anal->sdb_types; - char *fnl_name = NULL; - if (addr != UT64_MAX) { - if (sdb_bool_set (TDB, K_NORET_ADDR (addr), true, 0)) { - RzAnalFunction *fcn = rz_anal_get_function_at (anal, addr); - if (fcn) { - fcn->is_noreturn = true; - } - return true; - } - } - if (name && *name) { - tmp_name = name; - } else { - RzAnalFunction *fcn = rz_anal_get_fcn_in (anal, addr, -1); - RzFlagItem *fi = anal->flb.get_at (anal->flb.f, addr, false); - if (!fcn && !fi) { - eprintf ("Can't find Function at given address\n"); - return false; - } - tmp_name = fcn ? fcn->name: fi->name; - if (fcn) { - fcn->is_noreturn = true; - } - } - if (rz_type_func_exist (TDB, tmp_name)) { - fnl_name = strdup (tmp_name); - } else if (!(fnl_name = rz_type_func_guess (TDB, (char *)tmp_name))) { - if (addr == UT64_MAX) { - if (name) { - sdb_bool_set (TDB, K_NORET_FUNC (name), true, 0); - } else { - eprintf ("Can't find prototype for: %s\n", tmp_name); - } - } else { - eprintf ("Can't find prototype for: %s\n", tmp_name); - } - //return false; - } - if (fnl_name) { - sdb_bool_set (TDB, K_NORET_FUNC (fnl_name), true, 0); - free (fnl_name); - } - return true; -} - -RZ_API bool rz_anal_noreturn_drop(RzAnal *anal, const char *expr) { - Sdb *TDB = anal->sdb_types; - expr = rz_str_trim_head_ro (expr); - const char *fcnname = NULL; - if (!strncmp (expr, "0x", 2)) { - ut64 n = rz_num_math (NULL, expr); - sdb_unset (TDB, K_NORET_ADDR (n), 0); - RzAnalFunction *fcn = rz_anal_get_fcn_in (anal, n, -1); - if (!fcn) { - // eprintf ("can't find function at 0x%"PFMT64x"\n", n); - return false; - } - fcnname = fcn->name; - } else { - fcnname = expr; - } - sdb_unset (TDB, K_NORET_FUNC (fcnname), 0); -#if 0 - char *tmp; - // unnsecessary checks, imho the noreturn db should be pretty simple to allow forward and custom declarations without having to define the function prototype before - if (rz_type_func_exist (TDB, fcnname)) { - sdb_unset (TDB, K_NORET_FUNC (fcnname), 0); - return true; - } else if ((tmp = rz_type_func_guess (TDB, (char *)fcnname))) { - sdb_unset (TDB, K_NORET_FUNC (fcnname), 0); - free (tmp); - return true; - } - eprintf ("Can't find prototype for %s in types database", fcnname); -#endif - return false; -} - -static bool rz_anal_noreturn_at_name(RzAnal *anal, const char *name) { - if (sdb_bool_get (anal->sdb_types, K_NORET_FUNC(name), NULL)) { - return true; - } - char *tmp = rz_type_func_guess (anal->sdb_types, (char *)name); - if (tmp) { - if (sdb_bool_get (anal->sdb_types, K_NORET_FUNC (tmp), NULL)) { - free (tmp); - return true; - } - free (tmp); - } - if (rz_str_startswith (name, "reloc.")) { - return rz_anal_noreturn_at_name (anal, name + 6); - } - return false; -} - -RZ_API bool rz_anal_noreturn_at_addr(RzAnal *anal, ut64 addr) { - return sdb_bool_get (anal->sdb_types, K_NORET_ADDR (addr), NULL); -} - -static bool noreturn_recurse(RzAnal *anal, ut64 addr) { - RzAnalOp op = {0}; - ut8 bbuf[0x10] = {0}; - ut64 recurse_addr = UT64_MAX; - if (!anal->iob.read_at (anal->iob.io, addr, bbuf, sizeof (bbuf))) { - eprintf ("Couldn't read buffer\n"); - return false; - } - if (rz_anal_op (anal, &op, addr, bbuf, sizeof (bbuf), RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_VAL) < 1) { - return false; - } - switch (op.type & RZ_ANAL_OP_TYPE_MASK) { - case RZ_ANAL_OP_TYPE_JMP: - if (op.jump == UT64_MAX) { - recurse_addr = op.ptr; - } else { - recurse_addr = op.jump; - } - break; - case RZ_ANAL_OP_TYPE_UCALL: - case RZ_ANAL_OP_TYPE_RCALL: - case RZ_ANAL_OP_TYPE_ICALL: - case RZ_ANAL_OP_TYPE_IRCALL: - recurse_addr = op.ptr; - break; - case RZ_ANAL_OP_TYPE_CCALL: - case RZ_ANAL_OP_TYPE_CALL: - recurse_addr = op.jump; - break; - } - if (recurse_addr == UT64_MAX || recurse_addr == addr) { - return false; - } - return rz_anal_noreturn_at (anal, recurse_addr); -} - -RZ_API bool rz_anal_noreturn_at(RzAnal *anal, ut64 addr) { - if (!addr || addr == UT64_MAX) { - return false; - } - if (rz_anal_noreturn_at_addr (anal, addr)) { - return true; - } - /* XXX this is very slow */ - RzAnalFunction *f = rz_anal_get_function_at (anal, addr); - if (f) { - if (rz_anal_noreturn_at_name (anal, f->name)) { - return true; - } - } - RzFlagItem *fi = anal->flag_get (anal->flb.f, addr); - if (fi) { - if (rz_anal_noreturn_at_name (anal, fi->realname ? fi->realname : fi->name)) { - return true; - } - } - if (anal->recursive_noreturn) { - return noreturn_recurse (anal, addr); - } - return false; -} - -RZ_API void rz_anal_bind(RzAnal *anal, RzAnalBind *b) { - if (b) { - b->anal = anal; - b->get_fcn_in = rz_anal_get_fcn_in; - b->get_hint = rz_anal_hint_get; - } -} - -RZ_API RzList *rz_anal_preludes(RzAnal *anal) { - if (anal->cur && anal->cur->preludes ) { - return anal->cur->preludes (anal); - } - return NULL; -} - -RZ_API bool rz_anal_is_prelude(RzAnal *anal, const ut8 *data, int len) { - RzList *l = rz_anal_preludes (anal); - if (l) { - RzSearchKeyword *kw; - RzListIter *iter; - rz_list_foreach (l, iter, kw) { - int ks = kw->keyword_length; - if (len >= ks && !memcmp (data, kw->bin_keyword, ks)) { - rz_list_free (l); - return true; - } - } - rz_list_free (l); - } - return false; -} - -RZ_API void rz_anal_add_import(RzAnal *anal, const char *imp) { - RzListIter *it; - const char *eimp; - rz_list_foreach (anal->imports, it, eimp) { - if (!strcmp (eimp, imp)) { - return; - } - } - char *cimp = strdup (imp); - if (!cimp) { - return; - } - rz_list_push (anal->imports, cimp); -} - -RZ_API void rz_anal_remove_import(RzAnal *anal, const char *imp) { - RzListIter *it; - const char *eimp; - rz_list_foreach (anal->imports, it, eimp) { - if (!strcmp (eimp, imp)) { - rz_list_delete (anal->imports, it); - return; - } - } -} - -RZ_API void rz_anal_purge_imports(RzAnal *anal) { - rz_list_purge (anal->imports); -} diff --git a/librz/anal/arch/hexagon/hexagon_anal.h b/librz/anal/arch/hexagon/hexagon_anal.h deleted file mode 100644 index c0cb241a8f..0000000000 --- a/librz/anal/arch/hexagon/hexagon_anal.h +++ /dev/null @@ -1,2 +0,0 @@ -int hexagon_anal_instruction(HexInsn *hi, RzAnalOp *op); - diff --git a/librz/anal/esil2reil.c b/librz/anal/esil2reil.c deleted file mode 100644 index 6e9a5d4fcb..0000000000 --- a/librz/anal/esil2reil.c +++ /dev/null @@ -1,1263 +0,0 @@ -/* - * Convert from ESIL to REIL (Reverse Engineering Intermediate Language) - * Contributor: sushant94 - */ - -#include - -#define REIL_TEMP_PREFIX "V" -#define REIL_REG_PREFIX "R_" -#define REGBUFSZ 32 - -void reil_flag_spew_inst(RzAnalEsil *esil, const char *flag); -static const char *ops[] = { FOREACHOP(REIL_OP_STRING) }; - -// Get size of a register. -static ut8 esil_internal_sizeof_reg(RzAnalEsil *esil, const char *r) { - if (!esil || !esil->anal || !esil->anal->reg || !r) { - return false; - } - RzRegItem *i = rz_reg_get(esil->anal->reg, r, -1); - return i ? (ut8)i->size : 0; -} - -RzAnalReilArgType reil_get_arg_type(RzAnalEsil *esil, char *s) { - if (!strncmp (s, REIL_TEMP_PREFIX, strlen (REIL_TEMP_PREFIX))) { - return ARG_TEMP; - } - int type = rz_anal_esil_get_parm_type(esil, s); - switch (type) { - case RZ_ANAL_ESIL_PARM_REG: - return ARG_REG; - case RZ_ANAL_ESIL_PARM_NUM: - return ARG_CONST; - default: - return ARG_NONE; - } -} - -// Marshall the struct into a string -void reil_push_arg(RzAnalEsil *esil, RzAnalReilArg *op) { - char *s = rz_str_newf ("%s:%d", op->name, op->size); - rz_anal_esil_push (esil, s); - free (s); -} - -// Unmarshall the string in stack to the struct. -RzAnalReilArg *reil_pop_arg(RzAnalEsil *esil) { - RzAnalReilArg *op; - int i, j = 0, flag = 0, len; - char tmp_buf[REGBUFSZ]; - char *buf = rz_anal_esil_pop(esil); - if (!buf) { - return NULL; - } - len = strlen (buf); - op = RZ_NEW0(RzAnalReilArg); - for (i = 0; i < len; i++) { - if (buf[i] == ':') { - tmp_buf[j] = '\0'; - rz_str_ncpy (op->name, tmp_buf, sizeof (op->name)); - memset (tmp_buf, 0, sizeof (tmp_buf)); - j = 0; - flag = 1; - continue; - } - // Strip all spaces - if (buf[i] == ' ') { - continue; - } - tmp_buf[j] = buf[i]; - j++; - } - tmp_buf[j] = '\0'; - - // If we have not encountered a ':' we don't know the size yet. - if (!flag) { - rz_str_ncpy (op->name, tmp_buf, sizeof (op->name)); - op->type = reil_get_arg_type (esil, op->name); - if (op->type == ARG_REG) { - op->size = esil_internal_sizeof_reg(esil, op->name); - } else if (op->type == ARG_CONST) { - op->size = esil->anal->bits; - } - free(buf); - return op; - } - - op->size = strtoll(tmp_buf, NULL, 10); - op->type = reil_get_arg_type(esil, op->name); - free(buf); - return op; -} - -// Get the next available temp register. -void get_next_temp_reg(RzAnalEsil *esil, char *buf) { - rz_snprintf (buf, REGBUFSZ, REIL_TEMP_PREFIX"_%02"PFMT64u, - esil->Reil->reilNextTemp); - esil->Reil->reilNextTemp++; -} - -void reil_make_arg(RzAnalEsil *esil, RzAnalReilArg *arg, char *name) { - if (!arg) { - return; - } - RzAnalReilArgType type = reil_get_arg_type (esil, name); - arg->size = 0; - arg->type = type; - rz_str_ncpy (arg->name, name, sizeof (arg->name) - 1); -} - -// Free ins and all its arguments -void reil_free_inst(RzAnalReilInst *ins) { - if (!ins) { - return; - } - if (ins->arg[0]) { RZ_FREE (ins->arg[0]); } - if (ins->arg[1]) { RZ_FREE (ins->arg[1]); } - if (ins->arg[2]) { RZ_FREE (ins->arg[2]); } - RZ_FREE(ins); -} - -// Automatically increments the seq_num of the instruction. -void reil_print_inst(RzAnalEsil *esil, RzAnalReilInst *ins) { - int i; - - if (!ins || !esil) { - return; - } - esil->anal->cb_printf("%04"PFMT64x".%02x: %8s", - esil->Reil->addr, esil->Reil->seq_num++, ops[ins->opcode]); - for (i = 0; i < 3; i++) { - if (i > 0) { - esil->anal->cb_printf (" ,"); - } - if (!ins->arg[i]) { - continue; - } - if (ins->arg[i]->type == ARG_NONE) { - esil->anal->cb_printf ("%10s ", ins->arg[i]->name); - continue; - } - if (ins->arg[i]->type == ARG_REG) { - char *tmp_buf = rz_str_newf ("%s%s", REIL_REG_PREFIX, ins->arg[i]->name); - esil->anal->cb_printf ("%10s:%02d", tmp_buf, ins->arg[i]->size); - free (tmp_buf); - continue; - } - esil->anal->cb_printf ("%10s:%02d", ins->arg[i]->name, ins->arg[i]->size); - } - esil->anal->cb_printf("\n"); -} - -// Used to cast sizes during assignment. OR is used for casting. -// Pushes the new *casted* src onto stack. Warning: Frees the original src! -void reil_cast_size(RzAnalEsil *esil, RzAnalReilArg *src, RzAnalReilArg *dst) { - char tmp_buf[REGBUFSZ]; - RzAnalReilInst *ins; - - if (!src || !dst) { - return; - } - // No need to case sizes if dst and src are of same size. - if (src->size == dst->size) { - reil_push_arg(esil, src); - return; - } - snprintf (tmp_buf, REGBUFSZ-1, "0:%d", dst->size); - rz_anal_esil_push (esil, tmp_buf); - ins = RZ_NEW0 (RzAnalReilInst); - if (!ins) { - return; - } - ins->opcode = REIL_OR; - ins->arg[0] = src; - ins->arg[1] = reil_pop_arg (esil); - ins->arg[2] = RZ_NEW0(RzAnalReilArg); - get_next_temp_reg (esil, tmp_buf); - reil_make_arg (esil, ins->arg[2], tmp_buf); - if (ins->arg[2]) { - ins->arg[2]->size = dst->size; - } - reil_print_inst (esil, ins); - if (ins->arg[2]) { - reil_push_arg (esil, ins->arg[2]); - } - reil_free_inst (ins); -} - -// Here start translation functions! -static bool reil_eq(RzAnalEsil *esil) { - RzAnalReilInst *ins; - char tmp_buf[REGBUFSZ]; - RzAnalReilArgType src_type, dst_type; - RzAnalReilArg *dst, *src; - - dst = reil_pop_arg (esil); - if (!dst) { - return false; - } - src = reil_pop_arg (esil); - if (!src) { - RZ_FREE (dst); - return false; - } - - src_type = src->type; - // Check if the src is an internal var. If it is, we need to resolve it. - if (src_type == ARG_ESIL_INTERNAL) { - reil_flag_spew_inst (esil, src->name + 1); - RZ_FREE (src); - src = reil_pop_arg (esil); - } else if (src_type == ARG_REG) { - // No direct register to register transfer. - ins = RZ_NEW0 (RzAnalReilInst); - if (!ins) { - free (src); - free (dst); - return false; - } - ins->opcode = REIL_STR; - ins->arg[0] = src; - ins->arg[1] = RZ_NEW0 (RzAnalReilArg); - if (!ins->arg[1]) { - reil_free_inst (ins); - return false; - } - ins->arg[2] = RZ_NEW0(RzAnalReilArg); - if (!ins->arg[2]) { - reil_free_inst (ins); - return false; - } - reil_make_arg (esil, ins->arg[1], " "); - get_next_temp_reg (esil, tmp_buf); - reil_make_arg (esil, ins->arg[2], tmp_buf); - ins->arg[2]->size = ins->arg[0]->size; - reil_print_inst (esil, ins); - reil_push_arg( esil, ins->arg[2]); - reil_free_inst (ins); - src = reil_pop_arg (esil); - } - - // First, make a copy of the dst. We will need this to set the flags later on. - ins = RZ_NEW0 (RzAnalReilInst); - if (!ins) { - RZ_FREE (dst); - RZ_FREE (src); - return false; - } - dst_type = dst->type; - if (src_type != ARG_ESIL_INTERNAL && dst_type == ARG_REG) { - ins->opcode = REIL_STR; - ins->arg[0] = dst; - ins->arg[1] = RZ_NEW0 (RzAnalReilArg); - if (!ins->arg[1]) { - reil_free_inst (ins); - RZ_FREE (src); - return false; - } - ins->arg[2] = RZ_NEW0 (RzAnalReilArg); - if (!ins->arg[2]) { - reil_free_inst (ins); - RZ_FREE (src); - return false; - } - reil_make_arg (esil, ins->arg[1], " "); - get_next_temp_reg (esil, tmp_buf); - reil_make_arg (esil, ins->arg[2], tmp_buf); - ins->arg[2]->size = ins->arg[0]->size; - reil_print_inst (esil, ins); - - // Used for setting the flags - rz_snprintf (esil->Reil->old, sizeof (esil->Reil->old) - 1, "%s:%d", - ins->arg[2]->name, ins->arg[2]->size); - rz_snprintf (esil->Reil->cur, sizeof (esil->Reil->cur) - 1, "%s:%d", dst->name, - dst->size); - esil->Reil->lastsz = dst->size; - - RZ_FREE (ins->arg[1]); - RZ_FREE (ins->arg[2]); - } - - // If we are modifying the Instruction Pointer, then we need to emit JCC instead. - if (!strcmp(esil->Reil->pc, dst->name)) { - ins->opcode = REIL_JCC; - rz_anal_esil_push (esil, "1:1"); - ins->arg[0] = reil_pop_arg (esil); - ins->arg[1] = RZ_NEW0 (RzAnalReilArg); - reil_make_arg (esil, ins->arg[1], " "); - ins->arg[2] = src; - reil_print_inst (esil, ins); - reil_free_inst (ins); - RZ_FREE (dst); - return true; - } - - reil_cast_size (esil, src, dst); - ins->opcode = REIL_STR; - ins->arg[0] = reil_pop_arg (esil); - if (!ins->arg[0]) { - RZ_FREE (dst); - reil_free_inst (ins); - return false; - } - - ins->arg[2] = dst; - ins->arg[1] = RZ_NEW0 (RzAnalReilArg); - reil_make_arg (esil, ins->arg[1], " "); - reil_print_inst (esil, ins); - reil_free_inst (ins); - return true; -} - -// General function for operations that take 2 operands -static int reil_binop(RzAnalEsil *esil, RzAnalReilOpcode opcode) { - RzAnalReilInst *ins; - char tmp_buf[REGBUFSZ]; - ut8 dst_size; - RzAnalReilArg *op2, *op1; - - op2 = reil_pop_arg(esil); - if (!op2) { - return false; - } - op1 = reil_pop_arg(esil); - if (!op1) { - RZ_FREE (op2); - return false; - } - - ins = RZ_NEW0 (RzAnalReilInst); - if (!ins) { - RZ_FREE (op1); - RZ_FREE (op2); - return false; - } - ins->opcode = opcode; - ins->arg[0] = op2; - ins->arg[1] = op1; - if (!ins->arg[1]) { - reil_free_inst (ins); - return false; - } - ins->arg[2] = RZ_NEW0(RzAnalReilArg); - if (!ins->arg[2]) { - reil_free_inst (ins); - return false; - } - get_next_temp_reg(esil, tmp_buf); - reil_make_arg(esil, ins->arg[2], tmp_buf); - // Choose the larger of the two sizes as the size of dst - dst_size = ins->arg[0]->size; - if (dst_size < ins->arg[1]->size) { - dst_size = ins->arg[1]->size; - } - // REIL_LT has a dst_size of 1. - if (opcode == REIL_LT) { - dst_size = 1; - } - ins->arg[2]->size = dst_size; - reil_print_inst(esil, ins); - reil_push_arg(esil, ins->arg[2]); - reil_free_inst(ins); - return true; -} - -// General function for operations which re-assign to dst. Example, addeq. -static int reil_bineqop(RzAnalEsil *esil, RzAnalReilOpcode opcode) { - int ret = 1; - RzAnalReilArg *op = reil_pop_arg(esil); - if (!op) { - return false; - } - - reil_push_arg(esil, op); - ret &= reil_binop(esil, opcode); - reil_push_arg(esil, op); - ret &= reil_eq(esil); - RZ_FREE(op); - return ret; -} - -static bool reil_add(RzAnalEsil *esil) { return reil_binop (esil, REIL_ADD); } -static bool reil_addeq(RzAnalEsil *esil) { return reil_bineqop (esil, REIL_ADD); } -static bool reil_mul(RzAnalEsil *esil) { return reil_binop (esil, REIL_MUL); } -static bool reil_muleq(RzAnalEsil *esil) { return reil_bineqop (esil, REIL_MUL); } -static bool reil_sub(RzAnalEsil *esil) { return reil_binop (esil, REIL_SUB); } -static bool reil_subeq(RzAnalEsil *esil) { return reil_bineqop (esil, REIL_SUB); } -static bool reil_div(RzAnalEsil *esil) { return reil_binop (esil, REIL_DIV); } -static bool reil_diveq(RzAnalEsil *esil) { return reil_bineqop (esil, REIL_DIV); } -static bool reil_xor(RzAnalEsil *esil) { return reil_binop (esil, REIL_XOR); } -static bool reil_xoreq(RzAnalEsil *esil) { return reil_bineqop (esil, REIL_XOR); } -static bool reil_and(RzAnalEsil *esil) { return reil_binop (esil, REIL_AND); } -static bool reil_andeq(RzAnalEsil *esil) { return reil_bineqop (esil, REIL_AND); } -static bool reil_or(RzAnalEsil *esil) { return reil_binop (esil, REIL_OR); } -static bool reil_oreq(RzAnalEsil *esil) { return reil_bineqop (esil, REIL_OR); } -static bool reil_lsl(RzAnalEsil *esil) { return reil_binop (esil, REIL_SHL); } -static bool reil_lsleq(RzAnalEsil *esil) { return reil_bineqop (esil, REIL_SHL); } -static bool reil_lsr(RzAnalEsil *esil) { return reil_binop (esil, REIL_SHR); } -static bool reil_lsreq(RzAnalEsil *esil) { return reil_bineqop (esil, REIL_SHR); } -static bool reil_smaller(RzAnalEsil *esil) { return reil_binop (esil, REIL_LT); } - -static bool reil_cmp(RzAnalEsil *esil) { - RzAnalReilInst *ins; - char tmp_buf[REGBUFSZ]; - RzAnalReilArg *op2, *op1; - - op2 = reil_pop_arg (esil); - if (!op2) { - return false; - } - op1 = reil_pop_arg (esil); - if (!op1) { - RZ_FREE (op2); - return false; - } - - ins = RZ_NEW0 (RzAnalReilInst); - if (!ins) { - RZ_FREE (op1); - RZ_FREE (op2); - return false; - } - ins->opcode = REIL_EQ; - ins->arg[0] = op2; - ins->arg[1] = op1; - ins->arg[2] = RZ_NEW0 (RzAnalReilArg); - if (!ins->arg[2]) { - reil_free_inst (ins); - return false; - } - get_next_temp_reg (esil, tmp_buf); - reil_make_arg (esil, ins->arg[2], tmp_buf); - ins->arg[2]->size = 1; - reil_print_inst (esil, ins); - // Set vars needed to determine flags. - rz_snprintf (esil->Reil->cur, sizeof (esil->Reil->old) - 1, "%s:%d", - ins->arg[2]->name, ins->arg[2]->size); - rz_snprintf (esil->Reil->old, sizeof (esil->Reil->cur) - 1, "%s:%d", - op2->name, op2->size); - if (rz_reg_get (esil->anal->reg, op2->name, -1)) { - esil->Reil->lastsz = op2->size; - } else if (rz_reg_get (esil->anal->reg, op1->name, -1)) { - esil->Reil->lastsz = op1->size; - } - reil_push_arg (esil, ins->arg[2]); - reil_free_inst (ins); - return true; -} - -static bool reil_smaller_equal(RzAnalEsil *esil) { - RzAnalReilArg *op2, *op1; - - op2 = reil_pop_arg(esil); - if (!op2) { - return false; - } - op1 = reil_pop_arg(esil); - if (!op1) { - RZ_FREE (op2); - return false; - } - - reil_push_arg(esil, op1); - reil_push_arg(esil, op2); - reil_smaller(esil); - reil_push_arg(esil, op1); - reil_push_arg(esil, op2); - reil_cmp(esil); - reil_or(esil); - - RZ_FREE(op1); - RZ_FREE(op2); - return true; -} - -static bool reil_larger(RzAnalEsil *esil) { - RzAnalReilArg *op2 = reil_pop_arg(esil); - if (!op2) { - return false; - } - RzAnalReilArg *op1 = reil_pop_arg(esil); - if (!op1) { - RZ_FREE (op2); - return false; - } - reil_push_arg (esil, op2); - reil_push_arg (esil, op1); - reil_smaller (esil); - RZ_FREE (op1); - RZ_FREE (op2); - return true; -} - -static bool reil_larger_equal(RzAnalEsil *esil) { - RzAnalReilArg *op2, *op1; - - op2 = reil_pop_arg(esil); - if (!op2) { - return false; - } - op1 = reil_pop_arg(esil); - if (!op1) { - RZ_FREE (op2); - return false; - } - - reil_push_arg (esil, op2); - reil_push_arg (esil, op1); - reil_smaller_equal (esil); - RZ_FREE (op1); - RZ_FREE (op2); - return true; -} - -static bool reil_dec(RzAnalEsil *esil) { - RzAnalReilArg *op = reil_pop_arg(esil); - if (!op) { - return false; - } - rz_anal_esil_pushnum (esil, 1); - reil_push_arg (esil, op); - reil_sub (esil); - RZ_FREE (op); - return true; -} - -static bool reil_deceq(RzAnalEsil *esil) { - RzAnalReilArg *op1 = reil_pop_arg(esil); - if (!op1) { - return false; - } - reil_push_arg (esil, op1); - reil_dec (esil); - reil_push_arg (esil, op1); - reil_eq (esil); - RZ_FREE (op1); - return true; -} - -static bool reil_inc(RzAnalEsil *esil) { - RzAnalReilArg *op = reil_pop_arg(esil); - if (!op) { - return false; - } - - rz_anal_esil_pushnum(esil, 1); - reil_push_arg(esil, op); - reil_add(esil); - RZ_FREE(op); - return true; -} - -static bool reil_inceq(RzAnalEsil *esil) { - RzAnalReilArg *op = reil_pop_arg(esil); - if (!op) { - return false; - } - reil_push_arg (esil, op); - reil_inc (esil); - reil_push_arg (esil, op); - reil_eq (esil); - RZ_FREE (op); - return true; -} - -static bool reil_neg(RzAnalEsil *esil) { - char tmp_buf[REGBUFSZ]; - RzAnalReilInst *ins; - RzAnalReilArg *op = reil_pop_arg (esil); - if (!op) { - return false; - } - ins = RZ_NEW0 (RzAnalReilInst); - if (!ins) { - RZ_FREE (op); - return false; - } - ins->opcode = REIL_EQ; - ins->arg[0] = op; - rz_anal_esil_pushnum (esil, 0); - ins->arg[1] = reil_pop_arg(esil); - if (!ins->arg[1]) { - reil_free_inst (ins); - return false; - } - ins->arg[2] = RZ_NEW0 (RzAnalReilArg); - if (!ins->arg[2]) { - reil_free_inst (ins); - return false; - } - get_next_temp_reg (esil, tmp_buf); - reil_make_arg(esil, ins->arg[2], tmp_buf); - if (ins->arg[0]->size < ins->arg[1]->size) { - ins->arg[1]->size = ins->arg[0]->size; - } - - ins->arg[2]->size = 1; - reil_print_inst (esil, ins); - reil_push_arg (esil, ins->arg[2]); - reil_free_inst (ins); - return true; -} - -static bool reil_negeq(RzAnalEsil *esil) { - RzAnalReilArg *op = reil_pop_arg(esil); - if (!op) { - return false; - } - reil_push_arg (esil, op); - reil_neg (esil); - reil_push_arg (esil, op); - reil_eq (esil); - free (op); - return true; -} - -static bool reil_not(RzAnalEsil *esil) { - char tmp_buf[REGBUFSZ]; - RzAnalReilInst *ins; - RzAnalReilArg *op = reil_pop_arg (esil); - if (!op) { - return false; - } - - ins = RZ_NEW0 (RzAnalReilInst); - if (!ins) { - RZ_FREE (op); - return false; - } - ins->opcode = REIL_NOT; - ins->arg[0] = op; - ins->arg[1] = RZ_NEW0 (RzAnalReilArg); - if (!ins->arg[1]) { - reil_free_inst (ins); - return false; - } - ins->arg[2] = RZ_NEW0 (RzAnalReilArg); - if (!ins->arg[2]) { - reil_free_inst (ins); - return false; - } - reil_make_arg (esil, ins->arg[1], " "); - get_next_temp_reg (esil, tmp_buf); - reil_make_arg (esil, ins->arg[2], tmp_buf); - ins->arg[2]->size = ins->arg[0]->size; - reil_print_inst (esil, ins); - reil_push_arg (esil, ins->arg[2]); - reil_free_inst (ins); - return true; -} - -static bool reil_if(RzAnalEsil *esil) { - RzAnalReilInst *ins; - RzAnalReilArg *op2, *op1; - - op2 = reil_pop_arg (esil); - if (!op2) { - return false; - } - op1 = reil_pop_arg (esil); - if (!op1) { - RZ_FREE (op2); - return false; - } - - ins = RZ_NEW0 (RzAnalReilInst); - if (!ins) { - RZ_FREE (op2); - RZ_FREE (op1); - return false; - } - ins->opcode = REIL_JCC; - ins->arg[0] = op1; - ins->arg[2] = op2; - ins->arg[1] = RZ_NEW0 (RzAnalReilArg); - if (!ins->arg[1]) { - reil_free_inst (ins); - return false; - } - reil_make_arg (esil, ins->arg[1], " "); - reil_print_inst (esil, ins); - reil_free_inst (ins); - return true; -} - -static bool reil_if_end(RzAnalEsil *esil) { return true; } - -static bool reil_peek(RzAnalEsil *esil) { - RzAnalReilInst *ins; - char tmp_buf[REGBUFSZ]; - RzAnalReilArg *op1 = reil_pop_arg(esil); - if (!op1) { - return false; - } - - ins = RZ_NEW0 (RzAnalReilInst); - if (!ins) { - RZ_FREE (op1); - return false; - } - ins->opcode = REIL_LDM; - ins->arg[0] = op1; - ins->arg[1] = RZ_NEW0(RzAnalReilArg); - if (!ins->arg[1]) { - reil_free_inst (ins); - return false; - } - ins->arg[2] = RZ_NEW0(RzAnalReilArg); - if (!ins->arg[2]) { - reil_free_inst (ins); - return false; - } - reil_make_arg(esil, ins->arg[1], " "); - get_next_temp_reg(esil, tmp_buf); - reil_make_arg(esil, ins->arg[2], tmp_buf); - ins->arg[2]->size = ins->arg[0]->size; - reil_print_inst(esil, ins); - reil_push_arg(esil, ins->arg[2]); - reil_free_inst(ins); - return true; -} - -// n = 8, 4, 2, 1 -static bool reil_peekn(RzAnalEsil *esil, ut8 n) { - RzAnalReilArg *op2; - RzAnalReilArg *op1 = reil_pop_arg (esil); - if (!op1) { - return false; - } - - reil_push_arg (esil, op1); - reil_peek (esil); - // No need to cast if n = 0 - if (n == 0) { - RZ_FREE (op1); - return true; - } - - RZ_FREE (op1); - op1 = reil_pop_arg (esil); - if (!op1) { - return false; - } - - op2 = RZ_NEW0 (RzAnalReilArg); - if (!op2) { - RZ_FREE (op1); - return false; - } - op2->size = n * 8; - op2->type = ARG_TEMP; - get_next_temp_reg (esil, op2->name); - reil_cast_size (esil, op1, op2); - esil->Reil->lastsz = 8 * n; - - RZ_FREE (op2); - return true; -} - -static bool reil_peek1(RzAnalEsil *esil) { return reil_peekn(esil, 1); } -static bool reil_peek2(RzAnalEsil *esil) { return reil_peekn(esil, 2); } -static bool reil_peek4(RzAnalEsil *esil) { return reil_peekn(esil, 4); } -static bool reil_peek8(RzAnalEsil *esil) { return reil_peekn(esil, 8); } - -// n = 8, 4, 2, 1 -static bool reil_poken(RzAnalEsil *esil, ut8 n) { - char tmp_buf[REGBUFSZ]; - RzAnalReilInst *ins; - RzAnalReilArg *op2, *op1; - - op2 = reil_pop_arg (esil); - if (!op2) { - return false; - } - op1 = reil_pop_arg (esil); - if (!op1) { - RZ_FREE (op2); - return false; - } - - if (op1->type != ARG_ESIL_INTERNAL) { - ins = RZ_NEW0 (RzAnalReilInst); - if (!ins) { - RZ_FREE (op2); - RZ_FREE (op1); - return false; - } - ins->opcode = REIL_LDM; - ins->arg[0] = op2; - ins->arg[1] = RZ_NEW0(RzAnalReilArg); - if (!ins->arg[1]) { - RZ_FREE (op1); - reil_free_inst (ins); - return false; - } - ins->arg[2] = RZ_NEW0(RzAnalReilArg); - if (!ins->arg[2]) { - RZ_FREE (op1); - reil_free_inst (ins); - return false; - } - reil_make_arg (esil, ins->arg[1], " "); - get_next_temp_reg (esil, tmp_buf); - reil_make_arg (esil, ins->arg[2], tmp_buf); - ins->arg[2]->size = ins->arg[0]->size; - reil_print_inst (esil, ins); - rz_snprintf (esil->Reil->old, sizeof (esil->Reil->old) - 1, "%s:%d", - ins->arg[2]->name, ins->arg[2]->size); - rz_snprintf (esil->Reil->cur, sizeof (esil->Reil->cur) - 1, "%s:%d", - op2->name, op2->size); - esil->lastsz = n * 8; - reil_push_arg (esil, op1); - reil_push_arg (esil, op2); - RZ_FREE (op1); - reil_free_inst (ins); - } else { - reil_flag_spew_inst (esil, op1->name + 1); - RZ_FREE (op1); - op1 = reil_pop_arg (esil); - reil_push_arg (esil, op2); - reil_push_arg (esil, op1); - RZ_FREE (op2); - RZ_FREE (op1); - } - - ins = RZ_NEW0 (RzAnalReilInst); - if (!ins) { - return false; - } - ins->opcode = REIL_STM; - ins->arg[2] = reil_pop_arg (esil); - ins->arg[0] = reil_pop_arg (esil); - ins->arg[1] = RZ_NEW0 (RzAnalReilArg); - if (!ins->arg[1]) { - reil_free_inst (ins); - return false; - } - reil_make_arg(esil, ins->arg[1], " "); - reil_print_inst(esil, ins); - reil_free_inst(ins); - return true; -} - -static bool reil_poke(RzAnalEsil *esil) { - return reil_poken (esil, esil->anal->bits / 8); -} - -static bool reil_poke1(RzAnalEsil *esil) { return reil_poken(esil, 1); } -static bool reil_poke2(RzAnalEsil *esil) { return reil_poken(esil, 2); } -static bool reil_poke4(RzAnalEsil *esil) { return reil_poken(esil, 4); } -static bool reil_poke8(RzAnalEsil *esil) { return reil_poken(esil, 8); } - -// Generic function to handle all mem_*eq_n functions. Example, mem_oreq_n -static bool reil_mem_bineq_n(RzAnalEsil *esil, RzAnalReilOpcode opcode, ut8 size) { - int ret = 1; - RzAnalReilArg *op2, *op1; - - op2 = reil_pop_arg (esil); - if (!op2) { - return false; - } - op1 = reil_pop_arg (esil); - if (!op1) { - RZ_FREE (op2); - return false; - } - - reil_push_arg(esil, op2); - ret &= reil_peekn(esil, size); - reil_push_arg(esil, op1); - ret &= reil_binop(esil, opcode); - reil_push_arg(esil, op2); - ret &= reil_poken(esil, size); - - free (op2); - free (op1); - return ret; -} - -static bool reil_mem_oreq(RzAnalEsil *esil) { return reil_mem_bineq_n(esil, REIL_OR, esil->anal->bits / 8); } -static bool reil_mem_oreq1(RzAnalEsil *esil) { return reil_mem_bineq_n(esil, REIL_OR, 1); } -static bool reil_mem_oreq2(RzAnalEsil *esil) { return reil_mem_bineq_n(esil, REIL_OR, 2); } -static bool reil_mem_oreq4(RzAnalEsil *esil) { return reil_mem_bineq_n(esil, REIL_OR, 4); } -static bool reil_mem_oreq8(RzAnalEsil *esil) { return reil_mem_bineq_n(esil, REIL_OR, 8); } - -static bool reil_mem_andeq(RzAnalEsil *esil) { return reil_mem_bineq_n(esil, REIL_AND, esil->anal->bits / 8); } -static bool reil_mem_andeq1(RzAnalEsil *esil) { return reil_mem_bineq_n(esil, REIL_AND, 1); } -static bool reil_mem_andeq2(RzAnalEsil *esil) { return reil_mem_bineq_n(esil, REIL_AND, 2); } -static bool reil_mem_andeq4(RzAnalEsil *esil) { return reil_mem_bineq_n(esil, REIL_AND, 4); } -static bool reil_mem_andeq8(RzAnalEsil *esil) { return reil_mem_bineq_n(esil, REIL_AND, 8); } - -static bool reil_mem_xoreq(RzAnalEsil *esil) { return reil_mem_bineq_n(esil, REIL_XOR, esil->anal->bits / 8); } -static bool reil_mem_xoreq1(RzAnalEsil *esil) { return reil_mem_bineq_n(esil, REIL_XOR, 1); } -static bool reil_mem_xoreq2(RzAnalEsil *esil) { return reil_mem_bineq_n(esil, REIL_XOR, 2); } -static bool reil_mem_xoreq4(RzAnalEsil *esil) { return reil_mem_bineq_n(esil, REIL_XOR, 4); } -static bool reil_mem_xoreq8(RzAnalEsil *esil) { return reil_mem_bineq_n(esil, REIL_XOR, 8); } - -static bool reil_mem_addeq(RzAnalEsil *esil) { return reil_mem_bineq_n(esil, REIL_ADD, esil->anal->bits / 8); } -static bool reil_mem_addeq1(RzAnalEsil *esil) { return reil_mem_bineq_n(esil, REIL_ADD, 1); } -static bool reil_mem_addeq2(RzAnalEsil *esil) { return reil_mem_bineq_n(esil, REIL_ADD, 2); } -static bool reil_mem_addeq4(RzAnalEsil *esil) { return reil_mem_bineq_n(esil, REIL_ADD, 4); } -static bool reil_mem_addeq8(RzAnalEsil *esil) { return reil_mem_bineq_n(esil, REIL_ADD, 8); } - -static bool reil_mem_subeq(RzAnalEsil *esil) { return reil_mem_bineq_n(esil, REIL_SUB, esil->anal->bits / 8); } -static bool reil_mem_subeq1(RzAnalEsil *esil) { return reil_mem_bineq_n(esil, REIL_SUB, 1); } -static bool reil_mem_subeq2(RzAnalEsil *esil) { return reil_mem_bineq_n(esil, REIL_SUB, 2); } -static bool reil_mem_subeq4(RzAnalEsil *esil) { return reil_mem_bineq_n(esil, REIL_SUB, 4); } -static bool reil_mem_subeq8(RzAnalEsil *esil) { return reil_mem_bineq_n(esil, REIL_SUB, 8); } - -static bool reil_mem_muleq(RzAnalEsil *esil) { return reil_mem_bineq_n(esil, REIL_MUL, esil->anal->bits / 8); } -static bool reil_mem_muleq1(RzAnalEsil *esil) { return reil_mem_bineq_n(esil, REIL_MUL, 1); } -static bool reil_mem_muleq2(RzAnalEsil *esil) { return reil_mem_bineq_n(esil, REIL_MUL, 2); } -static bool reil_mem_muleq4(RzAnalEsil *esil) { return reil_mem_bineq_n(esil, REIL_MUL, 4); } -static bool reil_mem_muleq8(RzAnalEsil *esil) { return reil_mem_bineq_n(esil, REIL_MUL, 8); } - -static bool reil_mem_inceq_n(RzAnalEsil *esil, ut8 size) { - int ret = 1; - RzAnalReilArg *op1 = reil_pop_arg(esil); - if (!op1) { - return false; - } - - rz_anal_esil_pushnum(esil, 1); - reil_push_arg(esil, op1); - ret &= reil_mem_bineq_n(esil, REIL_ADD, size); - - free (op1); - return ret; -} - -static bool reil_mem_inceq(RzAnalEsil *esil) { - return reil_mem_inceq_n(esil, esil->anal->bits / 8); -} -static bool reil_mem_inceq1(RzAnalEsil *esil) { return reil_mem_inceq_n(esil, 1); } -static bool reil_mem_inceq2(RzAnalEsil *esil) { return reil_mem_inceq_n(esil, 2); } -static bool reil_mem_inceq4(RzAnalEsil *esil) { return reil_mem_inceq_n(esil, 4); } -static bool reil_mem_inceq8(RzAnalEsil *esil) { return reil_mem_inceq_n(esil, 8); } - -static int reil_mem_deceq_n(RzAnalEsil *esil, ut8 size) { - int ret = 1; - RzAnalReilArg *op1 = reil_pop_arg(esil); - if (!op1) { - return false; - } - - rz_anal_esil_pushnum(esil, 1); - reil_push_arg(esil, op1); - ret &= reil_mem_bineq_n(esil, REIL_SUB, size); - - free (op1); - return ret; -} - -static bool reil_mem_deceq(RzAnalEsil *esil) { - return reil_mem_deceq_n(esil, esil->anal->bits / 8); -} -static bool reil_mem_deceq1(RzAnalEsil *esil) { return reil_mem_deceq_n(esil, 1); } -static bool reil_mem_deceq2(RzAnalEsil *esil) { return reil_mem_deceq_n(esil, 2); } -static bool reil_mem_deceq4(RzAnalEsil *esil) { return reil_mem_deceq_n(esil, 4); } -static bool reil_mem_deceq8(RzAnalEsil *esil) { return reil_mem_deceq_n(esil, 8); } - -// Functions to resolve internal vars. -// performs (2 << op) - 1 -void reil_generate_mask(RzAnalEsil *esil) { - rz_anal_esil_pushnum(esil, 2); - reil_lsl(esil); - reil_dec(esil); -} - -void reil_generate_borrow_flag(RzAnalEsil *esil, ut8 bit) { - RzAnalReilArg *op1; - - rz_anal_esil_pushnum(esil, bit); - rz_anal_esil_pushnum(esil, 0x3f); - reil_and(esil); - rz_anal_esil_pushnum(esil, 0x3f); - reil_add(esil); - rz_anal_esil_pushnum(esil, 0x3f); - reil_and(esil); - // Generate the mask. 2 << bits - 1 - reil_generate_mask(esil); - op1 = reil_pop_arg(esil); - // old & mask - rz_anal_esil_push(esil, esil->Reil->old); - reil_push_arg(esil, op1); - reil_and(esil); - // cur & mask - rz_anal_esil_push(esil, esil->Reil->cur); - reil_push_arg(esil, op1); - reil_and(esil); - // Check - reil_larger(esil); - - free (op1); -} - -void reil_generate_carry_flag(RzAnalEsil *esil, ut8 bit) { - RzAnalReilArg *op1; - - rz_anal_esil_pushnum(esil, bit); - rz_anal_esil_pushnum(esil, 0x3f); - reil_and(esil); - // Generate the mask. 2 << bits - 1 - reil_generate_mask(esil); - op1 = reil_pop_arg(esil); - // old & mask - rz_anal_esil_push(esil, esil->Reil->old); - reil_push_arg(esil, op1); - reil_and(esil); - // cur & mask - rz_anal_esil_push(esil, esil->Reil->cur); - reil_push_arg(esil, op1); - reil_and(esil); - // Check - reil_smaller(esil); - - free (op1); -} - -void reil_generate_partity_flag(RzAnalEsil *esil) { - // Generation of parity flag taken from openreil README example. - RzAnalReilArg *op; - rz_anal_esil_push(esil, esil->Reil->cur); - rz_anal_esil_pushnum(esil, 0xff); - reil_and(esil); - op = reil_pop_arg(esil); - if (!op) { - return; - } - - rz_anal_esil_pushnum(esil, 7); - reil_push_arg(esil, op); - reil_lsr(esil); - rz_anal_esil_pushnum(esil, 6); - reil_push_arg(esil, op); - reil_lsr(esil); - reil_xor(esil); - rz_anal_esil_pushnum(esil, 5); - reil_push_arg(esil, op); - reil_lsr(esil); - rz_anal_esil_pushnum(esil, 4); - reil_push_arg(esil, op); - reil_lsr(esil); - reil_xor(esil); - reil_xor(esil); - rz_anal_esil_pushnum(esil, 3); - reil_push_arg(esil, op); - reil_lsr(esil); - rz_anal_esil_pushnum(esil, 2); - reil_push_arg(esil, op); - reil_lsr(esil); - reil_xor(esil); - rz_anal_esil_pushnum(esil, 1); - reil_push_arg(esil, op); - reil_lsr(esil); - reil_push_arg(esil, op); - reil_xor(esil); - reil_xor(esil); - reil_xor(esil); - rz_anal_esil_pushnum(esil, 1); - reil_and(esil); - reil_not(esil); - - free (op); -} - -void reil_generate_signature(RzAnalEsil *esil) { - if (!esil->Reil->lastsz || esil->Reil->lastsz == 0) { - rz_anal_esil_pushnum(esil, 0); - return; - } - - RzAnalReilArg *op; - - rz_anal_esil_pushnum(esil, esil->Reil->lastsz - 1); - rz_anal_esil_pushnum(esil, 1); - reil_lsl(esil); - rz_anal_esil_push(esil, esil->Reil->cur); - reil_and(esil); - - op = reil_pop_arg(esil); - if (!op) { - return; - } - - rz_anal_esil_pushnum(esil, esil->Reil->lastsz - 1); - reil_push_arg(esil, op); - reil_lsr(esil); - - free (op); -} - -void reil_generate_overflow_flag(RzAnalEsil *esil) { - if (esil->Reil->lastsz < 2) { - rz_anal_esil_pushnum (esil, 0); - } - - reil_generate_borrow_flag(esil, esil->Reil->lastsz); - reil_generate_carry_flag(esil, esil->Reil->lastsz - 2); - reil_xor(esil); -} - -void reil_flag_spew_inst(RzAnalEsil *esil, const char *flag) { - ut8 bit; - switch (flag[0]) { - case 'z': // zero-flag - rz_anal_esil_push(esil, esil->Reil->cur); - break; - case 'b': - bit = (ut8)rz_num_get(NULL, &flag[1]); - reil_generate_borrow_flag(esil, bit); - break; - case 'c': - bit = (ut8)rz_num_get(NULL, &flag[1]); - reil_generate_carry_flag(esil, bit); - break; - case 'o': - reil_generate_overflow_flag(esil); - break; - case 'p': - reil_generate_partity_flag(esil); - break; - case 'r': - rz_anal_esil_pushnum(esil, esil->anal->bits / 8); - break; - case 's': - reil_generate_signature(esil); - break; - default: - return; - } - - return; -} - -/* Callback hook for command_hook */ -static int setup_reil_ins(RzAnalEsil *esil, const char *op) { - esil->Reil->addr++; // Increment the address location. - esil->Reil->seq_num = 0; // Reset the sequencing. - return 0; -} - -RZ_API int rz_anal_esil_to_reil_setup(RzAnalEsil *esil, RzAnal *anal, int romem, - int stats) { - if (!esil) { - return false; - } - esil->verbose = 2; - esil->anal = anal; - esil->trap = 0; - esil->trap_code = 0; - - /* Set up a callback for hook_command */ - esil->cb.hook_command = setup_reil_ins; - - esil->Reil = RZ_NEW0(RzAnalReil); - if (!esil->Reil) { - return false; - } - esil->Reil->reilNextTemp = 0; - esil->Reil->addr = -1; - esil->Reil->seq_num = 0; - esil->Reil->skip = 0; - - // Store the pc - const char *name = rz_reg_get_name (esil->anal->reg, rz_reg_get_name_idx ("PC")); - strncpy (esil->Reil->pc, name, sizeof (esil->Reil->pc) - 1); - - rz_anal_esil_mem_ro(esil, romem); - -#define OT_UNK RZ_ANAL_ESIL_OP_TYPE_UNKNOWN -#define OT_CTR RZ_ANAL_ESIL_OP_TYPE_CONTROL_FLOW -#define OT_MATH RZ_ANAL_ESIL_OP_TYPE_MATH -#define OT_REGW RZ_ANAL_ESIL_OP_TYPE_REG_WRITE -#define OT_MEMW RZ_ANAL_ESIL_OP_TYPE_MEM_WRITE -#define OT_MEMR RZ_ANAL_ESIL_OP_TYPE_MEM_READ - - rz_anal_esil_set_op(esil, "=", reil_eq, 0, 2, OT_REGW); - rz_anal_esil_set_op(esil, ":=", reil_eq, 0, 2, OT_REGW); - rz_anal_esil_set_op(esil, "+", reil_add, 1, 2, OT_MATH); - rz_anal_esil_set_op(esil, "+=", reil_addeq, 0, 2, OT_MATH | OT_REGW); - rz_anal_esil_set_op(esil, "-", reil_sub, 1, 2, OT_MATH); - rz_anal_esil_set_op(esil, "-=", reil_subeq, 0, 2, OT_MATH | OT_REGW); - rz_anal_esil_set_op(esil, "*", reil_mul, 1, 2, OT_MATH); - rz_anal_esil_set_op(esil, "*=", reil_muleq, 0, 2, OT_MATH | OT_REGW); - rz_anal_esil_set_op(esil, "/", reil_div, 1, 2, OT_MATH); - rz_anal_esil_set_op(esil, "/=", reil_diveq, 0, 2, OT_MATH | OT_REGW); - rz_anal_esil_set_op(esil, "^", reil_xor, 1, 2, OT_MATH); - rz_anal_esil_set_op(esil, "^=", reil_xoreq, 0, 2, OT_MATH | OT_REGW); - rz_anal_esil_set_op(esil, "|", reil_or, 1, 2, OT_MATH); - rz_anal_esil_set_op(esil, "|=", reil_oreq, 0, 2, OT_MATH | OT_REGW); - rz_anal_esil_set_op(esil, "&", reil_and, 1, 2, OT_MATH); - rz_anal_esil_set_op(esil, "&=", reil_andeq, 0, 2, OT_MATH | OT_REGW); - rz_anal_esil_set_op(esil, "<<", reil_lsl, 1, 2, OT_MATH); - rz_anal_esil_set_op(esil, "<<=", reil_lsleq, 0, 2, OT_MATH | OT_REGW); - rz_anal_esil_set_op(esil, ">>", reil_lsr, 1, 2, OT_MATH); - rz_anal_esil_set_op(esil, ">>=", reil_lsreq, 0, 2, OT_MATH | OT_REGW); - rz_anal_esil_set_op(esil, "++=", reil_inceq, 0, 1, OT_MATH | OT_REGW); - rz_anal_esil_set_op(esil, "++", reil_inc, 1, 1, OT_MATH); - rz_anal_esil_set_op(esil, "--=", reil_deceq, 0, 1, OT_MATH | OT_REGW); - rz_anal_esil_set_op(esil, "--", reil_dec, 1, 1, OT_MATH); - rz_anal_esil_set_op(esil, "!", reil_neg, 1, 1, OT_MATH); - rz_anal_esil_set_op(esil, "!=", reil_negeq, 0, 1, OT_MATH); - rz_anal_esil_set_op(esil, "==", reil_cmp, 0, 2, OT_MATH); - rz_anal_esil_set_op(esil, "<", reil_smaller, 1, 2, OT_MATH); - rz_anal_esil_set_op(esil, ">", reil_larger, 1, 2, OT_MATH); - rz_anal_esil_set_op(esil, "<=", reil_smaller_equal, 1, 2, OT_MATH); - rz_anal_esil_set_op(esil, ">=", reil_larger_equal, 1, 2, OT_MATH); - rz_anal_esil_set_op(esil, "[]", reil_peek, 1, 1, OT_MEMR); - rz_anal_esil_set_op(esil, "=[]", reil_poke, 0, 2, OT_MEMW); - rz_anal_esil_set_op(esil, "|=[]", reil_mem_oreq, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "^=[]", reil_mem_xoreq, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "&=[]", reil_mem_andeq, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "+=[]", reil_mem_addeq, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "-=[]", reil_mem_subeq, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "*=[]", reil_mem_muleq, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "++=[]", reil_mem_inceq, 0, 1, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "--=[]", reil_mem_deceq, 0, 1, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "=[1]", reil_poke1, 0, 2, OT_MEMW); - rz_anal_esil_set_op(esil, "=[2]", reil_poke2, 0, 2, OT_MEMW); - rz_anal_esil_set_op(esil, "=[4]", reil_poke4, 0, 2, OT_MEMW); - rz_anal_esil_set_op(esil, "=[8]", reil_poke8, 0, 2, OT_MEMW); - rz_anal_esil_set_op(esil, "[1]", reil_peek1, 1, 1, OT_MEMR); - rz_anal_esil_set_op(esil, "[2]", reil_peek2, 1, 1, OT_MEMR); - rz_anal_esil_set_op(esil, "[4]", reil_peek4, 1, 1, OT_MEMR); - rz_anal_esil_set_op(esil, "[8]", reil_peek8, 1, 1, OT_MEMR); - rz_anal_esil_set_op(esil, "|=[1]", reil_mem_oreq1, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "|=[2]", reil_mem_oreq2, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "|=[4]", reil_mem_oreq4, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "|=[8]", reil_mem_oreq8, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "^=[1]", reil_mem_xoreq1, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "^=[2]", reil_mem_xoreq2, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "^=[4]", reil_mem_xoreq4, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "^=[8]", reil_mem_xoreq8, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "&=[1]", reil_mem_andeq1, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "&=[2]", reil_mem_andeq2, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "&=[4]", reil_mem_andeq4, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "&=[8]", reil_mem_andeq8, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "+=[1]", reil_mem_addeq1, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "+=[2]", reil_mem_addeq2, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "+=[4]", reil_mem_addeq4, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "+=[8]", reil_mem_addeq8, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "-=[1]", reil_mem_subeq1, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "-=[2]", reil_mem_subeq2, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "-=[4]", reil_mem_subeq4, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "-=[8]", reil_mem_subeq8, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "*=[1]", reil_mem_muleq1, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "*=[2]", reil_mem_muleq2, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "*=[4]", reil_mem_muleq4, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "*=[8]", reil_mem_muleq8, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "++=[1]", reil_mem_inceq1, 0, 1, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "++=[2]", reil_mem_inceq2, 0, 1, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "++=[4]", reil_mem_inceq4, 0, 1, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "++=[8]", reil_mem_inceq8, 0, 1, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "--=[1]", reil_mem_deceq1, 0, 1, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "--=[2]", reil_mem_deceq2, 0, 1, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "--=[4]", reil_mem_deceq4, 0, 1, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "--=[8]", reil_mem_deceq8, 0, 1, OT_MATH | OT_MEMR | OT_MEMW); - rz_anal_esil_set_op(esil, "?{", reil_if, 0, 1, OT_CTR); - rz_anal_esil_set_op(esil, "}", reil_if_end, 0, 0, OT_CTR); - - return true; -} diff --git a/librz/anal/p/6502.mk b/librz/anal/p/6502.mk deleted file mode 100644 index 6ad5ad9201..0000000000 --- a/librz/anal/p/6502.mk +++ /dev/null @@ -1,9 +0,0 @@ -OBJ_6502=anal_6502.o - -STATIC_OBJ+=${OBJ_6502} -TARGET_6502=anal_6502.${EXT_SO} - -ALL_TARGETS+=${TARGET_6502} - -${TARGET_6502}: ${OBJ_6502} - ${CC} $(call libname,anal_6502) ${LDFLAGS} ${CFLAGS} -o anal_6502.${EXT_SO} ${OBJ_6502} diff --git a/librz/anal/p/6502_cs.mk b/librz/anal/p/6502_cs.mk deleted file mode 100644 index cd762d926a..0000000000 --- a/librz/anal/p/6502_cs.mk +++ /dev/null @@ -1,9 +0,0 @@ -OBJ_6502_CS=anal_6502_cs.o - -STATIC_OBJ+=${OBJ_6502_CS} -TARGET_6502_CS=anal_6502_cs.${EXT_SO} - -ALL_TARGETS+=${TARGET_6502_CS} - -${TARGET_6502_CS}: ${OBJ_6502_CS} - ${CC} $(call libname,anal_6502_cs) ${LDFLAGS} ${CFLAGS} -o anal_6502_cs.${EXT_SO} ${OBJ_6502_CS} diff --git a/librz/anal/p/amd29k.mk b/librz/anal/p/amd29k.mk deleted file mode 100644 index 891402a65c..0000000000 --- a/librz/anal/p/amd29k.mk +++ /dev/null @@ -1,10 +0,0 @@ -OBJ_AMD29K=anal_amd29k.o ../../asm/arch/amd29k/amd29k.o - -STATIC_OBJ+=${OBJ_AMD29K} -TARGET_AMD29K=anal_amd29k.${EXT_SO} - -ALL_TARGETS+=${TARGET_AMD29K} - -${TARGET_AMD29K}: ${OBJ_AMD29K} - ${CC} ${CFLAGS} $(call libname,anal_amd29k) $(CS_CFLAGS) \ - -o anal_amd29k.${EXT_SO} ${OBJ_AMD29K} $(CS_LDFLAGS) diff --git a/librz/anal/p/arc.mk b/librz/anal/p/arc.mk deleted file mode 100644 index 8cb88710c1..0000000000 --- a/librz/anal/p/arc.mk +++ /dev/null @@ -1,9 +0,0 @@ -OBJ_ARC=anal_arc.o - -STATIC_OBJ+=${OBJ_ARC} -TARGET_ARC=anal_arc.${EXT_SO} - -ALL_TARGETS+=${TARGET_ARC} - -${TARGET_ARC}: ${OBJ_ARC} - ${CC} $(call libname,anal_arc) ${LDFLAGS} ${CFLAGS} -o anal_arc.${EXT_SO} ${OBJ_ARC} diff --git a/librz/anal/p/avr.mk b/librz/anal/p/avr.mk deleted file mode 100644 index cc2920144f..0000000000 --- a/librz/anal/p/avr.mk +++ /dev/null @@ -1,9 +0,0 @@ -OBJ_AVR=anal_avr.o - -STATIC_OBJ+=${OBJ_AVR} -TARGET_AVR=anal_avr.${EXT_SO} - -ALL_TARGETS+=${TARGET_AVR} - -${TARGET_AVR}: ${OBJ_AVR} - ${CC} $(call libname,anal_avr) ${CFLAGS} -o anal_avr.${EXT_SO} ${OBJ_AVR} diff --git a/librz/anal/p/bf.mk b/librz/anal/p/bf.mk deleted file mode 100644 index 584e83abc9..0000000000 --- a/librz/anal/p/bf.mk +++ /dev/null @@ -1,9 +0,0 @@ -OBJ_BF=anal_bf.o - -STATIC_OBJ+=${OBJ_BF} -TARGET_BF=anal_bf.${EXT_SO} - -ALL_TARGETS+=${TARGET_BF} - -${TARGET_BF}: ${OBJ_BF} - ${CC} $(call libname,anal_bf) ${LDFLAGS} ${CFLAGS} -o anal_bf.${EXT_SO} ${OBJ_BF} diff --git a/librz/anal/p/chip8.mk b/librz/anal/p/chip8.mk deleted file mode 100644 index dea64986f9..0000000000 --- a/librz/anal/p/chip8.mk +++ /dev/null @@ -1,9 +0,0 @@ -OBJ_CHIP8=anal_chip8.o - -STATIC_OBJ+=${OBJ_CHIP8} -TARGET_CHIP8=anal_chip8.${EXT_SO} - -ALL_TARGETS+=${TARGET_CHIP8} - -${TARGET_CHIP8}: ${OBJ_CHIP8} - ${CC} $(call libname,anal_chip8) ${CFLAGS} -o anal_chip8.${EXT_SO} ${OBJ_CHIP8} diff --git a/librz/anal/p/cris.mk b/librz/anal/p/cris.mk deleted file mode 100644 index 6af8aa6887..0000000000 --- a/librz/anal/p/cris.mk +++ /dev/null @@ -1,10 +0,0 @@ -OBJ_CRIS=anal_cris.o - -STATIC_OBJ+=$(OBJ_CRIS) -TARGET_CRIS=anal_cris.${EXT_SO} - -ALL_TARGETS+=${TARGET_CRIS} - -${TARGET_CRIS}: ${OBJ_CRIS} - ${CC} ${CFLAGS} $(call libname,anal_cris) \ - -o anal_cris.${EXT_SO} ${OBJ_CRIS} diff --git a/librz/anal/p/dalvik.mk b/librz/anal/p/dalvik.mk deleted file mode 100644 index bac22f9faf..0000000000 --- a/librz/anal/p/dalvik.mk +++ /dev/null @@ -1,9 +0,0 @@ -OBJ_DALVIK=anal_dalvik.o - -STATIC_OBJ+=${OBJ_DALVIK} -TARGET_DALVIK=anal_dalvik.${EXT_SO} - -ALL_TARGETS+=${TARGET_DALVIK} - -${TARGET_DALVIK}: ${OBJ_DALVIK} - ${CC} $(call libname,anal_dalvik) ${LDFLAGS} ${CFLAGS} -o anal_dalvik.${EXT_SO} ${OBJ_DALVIK} diff --git a/librz/anal/p/i4004.mk b/librz/anal/p/i4004.mk deleted file mode 100644 index 616d841a9b..0000000000 --- a/librz/anal/p/i4004.mk +++ /dev/null @@ -1,9 +0,0 @@ -OBJ_I4004=anal_i4004.o - -STATIC_OBJ+=${OBJ_I4004} -TARGET_I4004=anal_i4004.${EXT_SO} - -ALL_TARGETS+=${TARGET_I4004} - -${TARGET_I4004}: ${OBJ_I4004} - ${CC} $(call libname,anal_i4004) ${CFLAGS} -o anal_i4004.${EXT_SO} ${OBJ_I4004} diff --git a/librz/anal/p/i8080.mk b/librz/anal/p/i8080.mk deleted file mode 100644 index 08c9846060..0000000000 --- a/librz/anal/p/i8080.mk +++ /dev/null @@ -1,9 +0,0 @@ -OBJ_I8080=anal_i8080.o - -STATIC_OBJ+=${OBJ_I8080} -TARGET_I8080=anal_i8080.${EXT_SO} - -ALL_TARGETS+=${TARGET_I8080} - -${TARGET_I8080}: ${OBJ_I8080} - ${CC} $(call libname,anal_z80) ${LDFLAGS} ${CFLAGS} -o anal_i8080.${EXT_SO} ${OBJ_I8080} diff --git a/librz/anal/p/m680x_cs.mk b/librz/anal/p/m680x_cs.mk deleted file mode 100644 index aa89312cf9..0000000000 --- a/librz/anal/p/m680x_cs.mk +++ /dev/null @@ -1,13 +0,0 @@ -OBJ_M680X_CS=anal_m680x_cs.o - -include ${CURDIR}capstone.mk - -STATIC_OBJ+=$(OBJ_M680X_CS) - -TARGET_M680X_CS=anal_m680x_cs.${EXT_SO} - -ALL_TARGETS+=${TARGET_M680X_CS} - -${TARGET_M680X_CS}: ${OBJ_M680X_CS} - ${CC} ${CFLAGS} $(call libname,anal_m680x_cs) $(CS_CFLAGS) \ - -o anal_m680x_cs.${EXT_SO} ${OBJ_M680X_CS} $(CS_LDFLAGS) diff --git a/librz/anal/p/m68k_cs.mk b/librz/anal/p/m68k_cs.mk deleted file mode 100644 index 98c320dbd2..0000000000 --- a/librz/anal/p/m68k_cs.mk +++ /dev/null @@ -1,13 +0,0 @@ -OBJ_M68K_CS=anal_m68k_cs.o - -include ${CURDIR}capstone.mk - -STATIC_OBJ+=$(OBJ_M68K_CS) - -TARGET_M68K_CS=anal_m68k_cs.${EXT_SO} - -ALL_TARGETS+=${TARGET_M68K_CS} - -${TARGET_M68K_CS}: ${OBJ_M68K_CS} - ${CC} ${CFLAGS} $(call libname,anal_m68k_cs) $(CS_CFLAGS) \ - -o anal_m68k_cs.${EXT_SO} ${OBJ_M68K_CS} $(CS_LDFLAGS) diff --git a/librz/anal/p/malbolge.mk b/librz/anal/p/malbolge.mk deleted file mode 100644 index e449c21e9c..0000000000 --- a/librz/anal/p/malbolge.mk +++ /dev/null @@ -1,9 +0,0 @@ -OBJ_MALBOLGE=anal_malbolge.o - -STATIC_OBJ+=${OBJ_MALBOLGE} -TARGET_MALBOLGE=anal_malbolge.${EXT_SO} - -ALL_TARGETS+=${TARGET_MALBOLGE} - -${TARGET_MALBOLGE}: ${OBJ_MALBOLGE} - ${CC} $(call libname,anal_malbolge) ${LDFLAGS} ${CFLAGS} -o anal_malbolge.${EXT_SO} ${OBJ_MALBOLGE} diff --git a/librz/anal/p/mcore.mk b/librz/anal/p/mcore.mk deleted file mode 100644 index 54bc7a5da7..0000000000 --- a/librz/anal/p/mcore.mk +++ /dev/null @@ -1,11 +0,0 @@ -OBJ_MCORE=anal_mcore.o ../../asm/arch/mcore/mcore.o - -STATIC_OBJ+=${OBJ_MCORE} - -TARGET_MCORE=anal_mcore.${EXT_SO} - -ALL_TARGETS+=${TARGET_MCORE} - -${TARGET_MCORE}: ${OBJ_MCORE} - ${CC} ${CFLAGS} $(call libname,anal_mcore) $(CS_LDFLAGS) \ - -o anal_mcore.${EXT_SO} ${OBJ_MCORE} diff --git a/librz/anal/p/mips_cs.mk b/librz/anal/p/mips_cs.mk deleted file mode 100644 index fdaa8b74d5..0000000000 --- a/librz/anal/p/mips_cs.mk +++ /dev/null @@ -1,12 +0,0 @@ -OBJ_MIPS_CS=anal_mips_cs.o - -include $(CURDIR)capstone.mk - -STATIC_OBJ+=$(OBJ_MIPS_CS) -TARGET_MIPS_CS=anal_mips_cs.${EXT_SO} - -ALL_TARGETS+=${TARGET_MIPS_CS} - -${TARGET_MIPS_CS}: ${OBJ_MIPS_CS} - ${CC} ${CFLAGS} $(call libname,anal_mips_cs) $(CS_CFLAGS) \ - -o anal_mips_cs.${EXT_SO} ${OBJ_MIPS_CS} $(CS_LDFLAGS) diff --git a/librz/anal/p/nios2.mk b/librz/anal/p/nios2.mk deleted file mode 100644 index c0f713bff8..0000000000 --- a/librz/anal/p/nios2.mk +++ /dev/null @@ -1,10 +0,0 @@ -OBJ_NIOS2=anal_nios2.o - -STATIC_OBJ+=${OBJ_NIOS2} -TARGET_NIOS2=anal_nios2.${EXT_SO} - -ALL_TARGETS+=${TARGET_NIOS2} - -${TARGET_NIOS2}: ${OBJ_NIOS2} - ${CC} $(call libname,anal_nios2) ${LDFLAGS} ${CFLAGS} \ - -o anal_nios2.${EXT_SO} ${OBJ_NIOS2} diff --git a/librz/anal/p/null.mk b/librz/anal/p/null.mk deleted file mode 100644 index 14d8ab5415..0000000000 --- a/librz/anal/p/null.mk +++ /dev/null @@ -1,10 +0,0 @@ -OBJ_NULL=anal_null.o - -STATIC_OBJ+=${OBJ_NULL} -TARGET_NULL=anal_null.${EXT_SO} - -ALL_TARGETS+=${TARGET_NULL} - -${TARGET_NULL}: ${OBJ_NULL} - ${CC} $(call libname,anal_null) ${LDFLAGS} \ - ${CFLAGS} -o anal_null.${EXT_SO} ${OBJ_NULL} diff --git a/librz/anal/p/or1k.mk b/librz/anal/p/or1k.mk deleted file mode 100644 index 3f988a7f28..0000000000 --- a/librz/anal/p/or1k.mk +++ /dev/null @@ -1,12 +0,0 @@ -OBJ_OR1K=anal_or1k.o -OBJ_OR1K+=../../asm/arch/or1k/or1k_disas.o -CFLAGS+=-I../asm/arch/or1k - -STATIC_OBJ+=${OBJ_OR1K} -TARGET_OR1K=anal_or1k.${EXT_SO} - -ALL_TARGETS+=${TARGET_OR1K} - -${TARGET_OR1K}: ${OBJ_OR1K} - ${CC} $(call libname,anal_nios2) ${LDFLAGS} ${CFLAGS} \ - -o anal_or1k.${EXT_SO} ${OBJ_OR1K} diff --git a/librz/anal/p/pic.mk b/librz/anal/p/pic.mk deleted file mode 100644 index 961cf387ef..0000000000 --- a/librz/anal/p/pic.mk +++ /dev/null @@ -1,10 +0,0 @@ -OBJ_PIC=anal_pic.o - -STATIC_OBJ+=$(OBJ_PIC) -OBJ_PIC+=../../asm/arch/pic/pic_midrange.o -TARGET_PIC=anal_pic.$(EXT_SO) - -ALL_TARTGETS+=$(TARGET_PIC) - -$(TARGET_PIC): $(OBJ_PIC) - $(CC) $(call libname,anal_pic) ${LDFLAGS} ${CFLAGS} -o anal_pic.$(EXT_SO) $(OBJ_PIC) diff --git a/librz/anal/p/ppc_cs.mk b/librz/anal/p/ppc_cs.mk deleted file mode 100644 index e616846d7a..0000000000 --- a/librz/anal/p/ppc_cs.mk +++ /dev/null @@ -1,12 +0,0 @@ -OBJ_PPC_CS=anal_ppc_cs.o ../../asm/arch/ppc/libvle/vle.o - -include $(CURDIR)capstone.mk - -STATIC_OBJ+=${OBJ_PPC_CS} -TARGET_PPC_CS=anal_ppc_cs.${EXT_SO} - -ALL_TARGETS+=${TARGET_PPC_CS} - -${TARGET_PPC_CS}: ${OBJ_PPC_CS} - ${CC} ${CFLAGS} $(call libname,anal_ppc_cs) $(CS_CFLAGS) \ - -o anal_ppc_cs.${EXT_SO} ${OBJ_PPC_CS} $(CS_LDFLAGS) diff --git a/librz/anal/p/ppc_gnu.mk b/librz/anal/p/ppc_gnu.mk deleted file mode 100644 index 5269784dc1..0000000000 --- a/librz/anal/p/ppc_gnu.mk +++ /dev/null @@ -1,10 +0,0 @@ -OBJ_PPC=anal_ppc_gnu.o - -STATIC_OBJ+=${OBJ_PPC} -TARGET_PPC=anal_ppc_gnu.${EXT_SO} - -ALL_TARGETS+=${TARGET_PPC} - -${TARGET_PPC}: ${OBJ_PPC} - ${CC} $(call libname,anal_ppc_gnu) ${CFLAGS} \ - -o anal_ppc_gnu.${EXT_SO} ${OBJ_PPC} diff --git a/librz/anal/p/riscv.mk b/librz/anal/p/riscv.mk deleted file mode 100644 index cca198e187..0000000000 --- a/librz/anal/p/riscv.mk +++ /dev/null @@ -1,9 +0,0 @@ -OBJ_RISCV=anal_riscv.o - -STATIC_OBJ+=${OBJ_RISCV} -TARGET_RISCV=anal_riscv.${EXT_SO} - -ALL_TARGETS+=${TARGET_RISCV} - -${TARGET_RISCV}: ${OBJ_RISCV} - ${CC} $(call libname,anal_RISCV) ${LDFLAGS} ${CFLAGS} -o anal_riscv.${EXT_SO} ${OBJ_RISCV} diff --git a/librz/anal/p/riscv_cs.mk b/librz/anal/p/riscv_cs.mk deleted file mode 100644 index 656cb77636..0000000000 --- a/librz/anal/p/riscv_cs.mk +++ /dev/null @@ -1,12 +0,0 @@ -OBJ_RISCV_CS=anal_riscv_cs.o - -include $(CURDIR)capstone.mk - -STATIC_OBJ+=$(OBJ_RISCV_CS) -TARGET_RISCV_CS=anal_riscv_cs.${EXT_SO} - -ALL_TARGETS+=${TARGET_RISCV_CS} - -${TARGET_RISCV_CS}: ${OBJ_RISCV_CS} - ${CC} ${CFLAGS} $(call libname,anal_riscv_cs) $(CS_CFLAGS) \ - -o anal_riscv_cs.${EXT_SO} ${OBJ_RISCV_CS} $(CS_LDFLAGS) diff --git a/librz/anal/p/sh.mk b/librz/anal/p/sh.mk deleted file mode 100644 index 25ecf0d86f..0000000000 --- a/librz/anal/p/sh.mk +++ /dev/null @@ -1,10 +0,0 @@ -OBJ_SH=anal_sh.o - -STATIC_OBJ+=${OBJ_SH} -TARGET_SH=anal_sh.${EXT_SO} - -ALL_TARGETS+=${TARGET_SH} - -${TARGET_SH}: ${OBJ_SH} - ${CC} $(call libname,anal_sh) ${LDFLAGS} \ - ${CFLAGS} -o anal_sh.${EXT_SO} ${OBJ_SH} diff --git a/librz/anal/p/snes.mk b/librz/anal/p/snes.mk deleted file mode 100644 index ea3033d3e7..0000000000 --- a/librz/anal/p/snes.mk +++ /dev/null @@ -1,9 +0,0 @@ -OBJ_SNES=anal_snes.o - -STATIC_OBJ+=${OBJ_SNES} -TARGET_SNES=anal_snes.${EXT_SO} - -ALL_TARGETS+=${TARGET_SNES} - -${TARGET_SNES}: ${OBJ_SNES} - ${CC} $(call libname,anal_snes) ${LDFLAGS} ${CFLAGS} -o anal_snes.${EXT_SO} ${OBJ_SNES} diff --git a/librz/anal/p/sparc_cs.mk b/librz/anal/p/sparc_cs.mk deleted file mode 100644 index f1e0b79357..0000000000 --- a/librz/anal/p/sparc_cs.mk +++ /dev/null @@ -1,12 +0,0 @@ -OBJ_SPARC_CS=anal_sparc_cs.o - -include ${CURDIR}capstone.mk - -STATIC_OBJ+=$(OBJ_SPARC_CS) -TARGET_SPARC_CS=anal_sparc_cs.${EXT_SO} - -ALL_TARGETS+=${TARGET_SPARC_CS} - -${TARGET_SPARC_CS}: ${OBJ_SPARC_CS} - ${CC} ${CFLAGS} $(call libname,anal_sparc_cs) $(CS_CFLAGS) \ - -o anal_sparc_cs.${EXT_SO} ${OBJ_SPARC_CS} $(CS_LDFLAGS) diff --git a/librz/anal/p/sparc_gnu.mk b/librz/anal/p/sparc_gnu.mk deleted file mode 100644 index 906a88a436..0000000000 --- a/librz/anal/p/sparc_gnu.mk +++ /dev/null @@ -1,9 +0,0 @@ -OBJ_SPARC=anal_sparc_gnu.o - -STATIC_OBJ+=${OBJ_SPARC} -TARGET_SPARC=anal_sparc_gnu.${EXT_SO} - -ALL_TARGETS+=${TARGET_SPARC} - -${TARGET_SPARC}: ${OBJ_SPARC} - ${CC} $(call libname,anal_sparc_gnu) ${CFLAGS} -o anal_sparc_gnu.${EXT_SO} ${OBJ_SPARC} diff --git a/librz/anal/p/sysz.mk b/librz/anal/p/sysz.mk deleted file mode 100644 index a278b7faf1..0000000000 --- a/librz/anal/p/sysz.mk +++ /dev/null @@ -1,13 +0,0 @@ -OBJ_SYSTEMZ_CS=anal_sysz.o - -include p/capstone.mk - -STATIC_OBJ+=${OBJ_SYSTEMZ_CS} - -TARGET_SYSTEMZ_CS=anal_sysz.${EXT_SO} - -ALL_TARGETS+=${TARGET_SYSTEMZ_CS} - -${TARGET_SYSTEMZ_CS}: ${OBJ_SYSTEMZ_CS} - ${CC} ${CFLAGS} $(call libname,anal_sysz) $(CS_LDFLAGS) \ - -o anal_sysz.${EXT_SO} ${OBJ_SYSTEMZ_CS} diff --git a/librz/anal/p/tms320c64x.mk b/librz/anal/p/tms320c64x.mk deleted file mode 100644 index 49bae44b3e..0000000000 --- a/librz/anal/p/tms320c64x.mk +++ /dev/null @@ -1,12 +0,0 @@ -OBJ_TMS3264C64X_CS=anal_tms320c64x.o - -include ${CURDIR}capstone.mk - -STATIC_OBJ+=$(OBJ_TMS3264C64X_CS) -TARGET_TMS3264C64X_CS=anal_tms320c64x.${EXT_SO} - -ALL_TARGETS+=${TARGET_TMS3264C64X_CS} - -${TARGET_TMS3264C64X_CS}: ${OBJ_TMS3264C64X_CS} - ${CC} ${CFLAGS} $(call libname,anal_tms320c64x) $(CS_CFLAGS) \ - -o anal_tms320c64x.${EXT_SO} ${OBJ_TMS3264C64X_CS} $(CS_LDFLAGS) diff --git a/librz/anal/p/tricore.mk b/librz/anal/p/tricore.mk deleted file mode 100644 index 5bf4b2ab69..0000000000 --- a/librz/anal/p/tricore.mk +++ /dev/null @@ -1,10 +0,0 @@ -OBJ_TRICORE=anal_tricore.o - -STATIC_OBJ+=${OBJ_TRICORE} -TARGET_TRICORE=anal_tricore.${EXT_SO} - -ALL_TARGETS+=${TARGET_TRICORE} - -${TARGET_TRICORE}: ${OBJ_TRICORE} - ${CC} $(call libname,anal_tricore) ${LDFLAGS} ${CFLAGS} \ - -o $(TARGET_TRICORE) $(OBJ_TRICORE) \ No newline at end of file diff --git a/librz/anal/p/vax.mk b/librz/anal/p/vax.mk deleted file mode 100644 index 63cf678988..0000000000 --- a/librz/anal/p/vax.mk +++ /dev/null @@ -1,9 +0,0 @@ -OBJ_VAX=anal_vax.o - -STATIC_OBJ+=${OBJ_VAX} -TARGET_VAX=anal_vax.${EXT_SO} - -ALL_TARGETS+=${TARGET_VAX} - -${TARGET_VAX}: ${OBJ_VAX} - ${CC} $(call libname,anal_vax) ${CFLAGS} -o anal_vax.${EXT_SO} ${OBJ_VAX} diff --git a/librz/anal/p/ws.mk b/librz/anal/p/ws.mk deleted file mode 100644 index fc92a001b9..0000000000 --- a/librz/anal/p/ws.mk +++ /dev/null @@ -1,10 +0,0 @@ -OBJ_WS=anal_ws.o - -STATIC_OBJ+=${OBJ_WS} -TARGET_WS=anal_ws.${EXT_SO} - -ALL_TARGETS+=${TARGET_WS} - -${TARGET_WS}: ${OBJ_WS} - ${CC} $(call libname,anal_ws) ${LDFLAGS} ${CFLAGS} \ - -o anal_ws.${EXT_SO} ${OBJ_WS} diff --git a/librz/anal/p/x86_cs.mk b/librz/anal/p/x86_cs.mk deleted file mode 100644 index e293d9dbea..0000000000 --- a/librz/anal/p/x86_cs.mk +++ /dev/null @@ -1,13 +0,0 @@ -OBJ_X86_CS=anal_x86_cs.o - -include $(CURDIR)capstone.mk - -STATIC_OBJ+=$(OBJ_X86_CS) - -TARGET_X86_CS=anal_x86_cs.${EXT_SO} - -ALL_TARGETS+=${TARGET_X86_CS} - -${TARGET_X86_CS}: ${OBJ_X86_CS} - ${CC} ${CFLAGS} $(call libname,anal_x86_cs) $(CS_CFLAGS) \ - -o anal_x86_cs.${EXT_SO} ${OBJ_X86_CS} $(CS_LDFLAGS) diff --git a/librz/anal/p/xap.mk b/librz/anal/p/xap.mk deleted file mode 100644 index 45a9102e5d..0000000000 --- a/librz/anal/p/xap.mk +++ /dev/null @@ -1,9 +0,0 @@ -OBJ_XAP=anal_xap.o - -STATIC_OBJ+=${OBJ_XAP} -TARGET_XAP=anal_xap.${EXT_SO} - -ALL_TARGETS+=${TARGET_XAP} - -${TARGET_XAP}: ${OBJ_XAP} - ${CC} $(call libname,anal_xap) ${CFLAGS} -o anal_xap.${EXT_SO} ${OBJ_XAP} diff --git a/librz/anal/p/xcore_cs.mk b/librz/anal/p/xcore_cs.mk deleted file mode 100644 index 11b53ede2c..0000000000 --- a/librz/anal/p/xcore_cs.mk +++ /dev/null @@ -1,12 +0,0 @@ -OBJ_XCORE_CS=anal_xcore_cs.o - -include p/capstone.mk - -STATIC_OBJ+=${OBJ_XCORE_CS} -TARGET_XCORE_CS=anal_xcore_cs.${EXT_SO} - -ALL_TARGETS+=${TARGET_XCORE_CS} - -${TARGET_XCORE_CS}: ${OBJ_XCORE_CS} - ${CC} ${CFLAGS} $(call libname,anal_xcore_cs) $(CS_CFLAGS) \ - -o anal_xcore_cs.${EXT_SO} ${OBJ_XCORE_CS} $(CS_LDFLAGS) diff --git a/librz/anal/p/xtensa.mk b/librz/anal/p/xtensa.mk deleted file mode 100644 index cd2421e46b..0000000000 --- a/librz/anal/p/xtensa.mk +++ /dev/null @@ -1,10 +0,0 @@ -OBJ_XTENSA=anal_xtensa.o - -STATIC_OBJ+=${OBJ_XTENSA} -TARGET_XTENSA=anal_xtensa.${EXT_SO} - -ALL_TARGETS+=$(TARGET_XTENSA) - -$(TARGET_XTENSA): $(OBJ_XTENSA) - $(CC) $(call libname,anal_xtensa) -I$(LTOP)/asm/arch/include/ \ - $(LDFLAGS) $(CFLAGS) -o anal_xtensa.$(EXT_SO) $(OBJ_XTENSA) diff --git a/librz/anal/p/z80.mk b/librz/anal/p/z80.mk deleted file mode 100644 index a4d3ef4a47..0000000000 --- a/librz/anal/p/z80.mk +++ /dev/null @@ -1,10 +0,0 @@ -OBJ_Z80=anal_z80.o - -STATIC_OBJ+=${OBJ_Z80} -TARGET_Z80=anal_z80.${EXT_SO} - -ALL_TARGETS+=${TARGET_Z80} - -${TARGET_Z80}: ${OBJ_Z80} - ${CC} $(call libname,anal_z80) ${LDFLAGS} ${CFLAGS} \ - -o anal_z80.${EXT_SO} ${OBJ_Z80} diff --git a/librz/anal/switch.c b/librz/anal/switch.c deleted file mode 100644 index 88d7f30e15..0000000000 --- a/librz/anal/switch.c +++ /dev/null @@ -1,54 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only - -#include - -static RzAnalSwitchOp *__switch_op_new(void) { - RzAnalSwitchOp * swop = RZ_NEW0 (RzAnalSwitchOp); - if (swop) { - swop->cases = rz_list_new (); - if (!swop->cases) { - free (swop); - return NULL; - } - swop->cases->free = (void *)free; - swop->min_val = swop->def_val = swop->max_val = 0; - } - return swop; -} - -RZ_API RzAnalSwitchOp *rz_anal_switch_op_new(ut64 addr, ut64 min_val, ut64 max_val, ut64 def_val) { - RzAnalSwitchOp *swop = __switch_op_new (); - if (swop) { - swop->addr = addr; - swop->min_val = min_val; - swop->def_val = def_val; - swop->max_val = max_val; - } - return swop; -} - -RZ_API RzAnalCaseOp * rz_anal_case_op_new(ut64 addr, ut64 val, ut64 jump) { - RzAnalCaseOp *c = RZ_NEW0 (RzAnalCaseOp); - if (c) { - c->addr = addr; - c->value = val; - c->jump = jump; - } - return c; -} - -RZ_API void rz_anal_switch_op_free(RzAnalSwitchOp * swop) { - if (swop) { - rz_list_free (swop->cases); - free (swop); - } -} - -RZ_API RzAnalCaseOp* rz_anal_switch_op_add_case(RzAnalSwitchOp * swop, ut64 addr, ut64 value, ut64 jump) { - rz_return_val_if_fail (swop && addr != UT64_MAX, NULL); - RzAnalCaseOp * caseop = rz_anal_case_op_new (addr, value, jump); - if (caseop) { - rz_list_append (swop->cases, caseop); - } - return caseop; -} diff --git a/librz/anal/Makefile b/librz/analysis/Makefile similarity index 86% rename from librz/anal/Makefile rename to librz/analysis/Makefile index 519a5224c9..53629e4b10 100644 --- a/librz/anal/Makefile +++ b/librz/analysis/Makefile @@ -4,7 +4,7 @@ EXTRA_TARGETS+=do EXTRA_CLEAN=doclean CFLAGS+=-I.. -NAME=rz_anal +NAME=rz_analysis RZ_DEPS=rz_util rz_reg rz_syscall rz_search rz_cons rz_flag rz_hash rz_crypto rz_parse CFLAGS+=-DRZ_PLUGIN_INCORE -Iarch -I$(TOP)/shlr CFLAGS+=-I$(LTOP)/asm/arch/include @@ -25,18 +25,18 @@ all: plugins plugins: ${LIBSO} ${LIBAR} @${MAKE} -C p all -include ${STATIC_ANAL_PLUGINS} +include ${STATIC_ANALYSIS_PLUGINS} -STATIC_OBJS=$(addprefix $(LTOP)/anal/p/,$(STATIC_OBJ)) +STATIC_OBJS=$(addprefix $(LTOP)/analysis/p/,$(STATIC_OBJ)) OBJLIBS=meta.o reflines.o op.o fcn.o bb.o var.o block.o OBJLIBS+=cond.o value.o cc.o class.o diff.o type.o type_pdb.o dwarf_process.o -OBJLIBS+=hint.o anal.o data.o xrefs.o esil.o sign.o +OBJLIBS+=hint.o analysis.o data.o xrefs.o esil.o sign.o OBJLIBS+=switch.o cycles.o esil_dfg.o OBJLIBS+=esil_sources.o esil_interrupt.o esil_cfg.o OBJLIBS+=esil_stats.o esil_trace.o flirt.o labels.o OBJLIBS+=esil2reil.o pin.o vtable.o rtti.o OBJLIBS+=rtti_msvc.o rtti_itanium.o jmptbl.o function.o -OBJLIBS+=serialize_anal.o +OBJLIBS+=serialize_analysis.o ASMOBJS+=$(LTOP)/asm/arch/xtensa/gnu/xtensa-modules.o ASMOBJS+=$(LTOP)/asm/arch/xtensa/gnu/xtensa-isa.o ASMOBJS+=$(LTOP)/asm/arch/xtensa/gnu/elf32-xtensa.o diff --git a/librz/analysis/analysis.c b/librz/analysis/analysis.c new file mode 100644 index 0000000000..55a4ad480a --- /dev/null +++ b/librz/analysis/analysis.c @@ -0,0 +1,725 @@ +// SPDX-License-Identifier: LGPL-3.0-only + +#include +#include +#include +#include +#include + +RZ_LIB_VERSION(rz_analysis); + +static RzAnalysisPlugin *anal_static_plugins[] = { + RZ_ANALYSIS_STATIC_PLUGINS +}; + +RZ_API void rz_analysis_set_limits(RzAnalysis *analysis, ut64 from, ut64 to) { + free (analysis->limit); + analysis->limit = RZ_NEW0 (RzAnalysisRange); + if (analysis->limit) { + analysis->limit->from = from; + analysis->limit->to = to; + } +} + +RZ_API void rz_analysis_unset_limits(RzAnalysis *analysis) { + RZ_FREE (analysis->limit); +} + +static void meta_unset_for(RzEvent *ev, int type, void *user, void *data) { + RzSpaces *s = (RzSpaces *)ev->user; + RzAnalysis *analysis = container_of (s, RzAnalysis, meta_spaces); + RzSpaceEvent *se = (RzSpaceEvent *)data; + rz_meta_space_unset_for (analysis, se->data.unset.space); +} + +static void meta_count_for(RzEvent *ev, int type, void *user, void *data) { + RzSpaces *s = (RzSpaces *)ev->user; + RzAnalysis *analysis = container_of (s, RzAnalysis, meta_spaces); + RzSpaceEvent *se = (RzSpaceEvent *)data; + se->res = rz_meta_space_count_for (analysis, se->data.count.space); +} + +static void zign_unset_for(RzEvent *ev, int type, void *user, void *data) { + RzSpaces *s = (RzSpaces *)ev->user; + RzAnalysis *analysis = container_of (s, RzAnalysis, zign_spaces); + RzSpaceEvent *se = (RzSpaceEvent *)data; + rz_sign_space_unset_for (analysis, se->data.unset.space); +} + +static void zign_count_for(RzEvent *ev, int type, void *user, void *data) { + RzSpaces *s = (RzSpaces *)ev->user; + RzAnalysis *analysis = container_of (s, RzAnalysis, zign_spaces); + RzSpaceEvent *se = (RzSpaceEvent *)data; + se->res = rz_sign_space_count_for (analysis, se->data.count.space); +} + +static void zign_rename_for(RzEvent *ev, int type, void *user, void *data) { + RzSpaces *s = (RzSpaces *)ev->user; + RzAnalysis *analysis = container_of (s, RzAnalysis, zign_spaces); + RzSpaceEvent *se = (RzSpaceEvent *)data; + rz_sign_space_rename_for (analysis, se->data.rename.space, + se->data.rename.oldname, se->data.rename.newname); +} + +void rz_analysis_hint_storage_init(RzAnalysis *a); +void rz_analysis_hint_storage_fini(RzAnalysis *a); + +static void rz_meta_item_fini(RzAnalysisMetaItem *item) { + free (item->str); +} + +static void rz_meta_item_free(void *_item) { + if (_item) { + RzAnalysisMetaItem *item = _item; + rz_meta_item_fini (item); + free (item); + } +} + +RZ_API RzAnalysis *rz_analysis_new(void) { + int i; + RzAnalysis *analysis = RZ_NEW0 (RzAnalysis); + if (!analysis) { + return NULL; + } + if (!rz_str_constpool_init (&analysis->constpool)) { + free (analysis); + return NULL; + } + analysis->bb_tree = NULL; + analysis->ht_addr_fun = ht_up_new0 (); + analysis->ht_name_fun = ht_pp_new0 (); + analysis->os = strdup (RZ_SYS_OS); + analysis->esil_goto_limit = RZ_ANAL_ESIL_GOTO_LIMIT; + analysis->opt.nopskip = true; // skip nops in code analysis + analysis->opt.hpskip = false; // skip `mov reg,reg` and `lea reg,[reg]` + analysis->gp = 0LL; + analysis->sdb = sdb_new0 (); + analysis->cpp_abi = RZ_ANAL_CPP_ABI_ITANIUM; + analysis->opt.depth = 32; + analysis->opt.noncode = false; // do not analyze data by default + rz_spaces_init (&analysis->meta_spaces, "CS"); + rz_event_hook (analysis->meta_spaces.event, RZ_SPACE_EVENT_UNSET, meta_unset_for, NULL); + rz_event_hook (analysis->meta_spaces.event, RZ_SPACE_EVENT_COUNT, meta_count_for, NULL); + + rz_spaces_init (&analysis->zign_spaces, "zs"); + rz_event_hook (analysis->zign_spaces.event, RZ_SPACE_EVENT_UNSET, zign_unset_for, NULL); + rz_event_hook (analysis->zign_spaces.event, RZ_SPACE_EVENT_COUNT, zign_count_for, NULL); + rz_event_hook (analysis->zign_spaces.event, RZ_SPACE_EVENT_RENAME, zign_rename_for, NULL); + rz_analysis_hint_storage_init (analysis); + rz_interval_tree_init (&analysis->meta, rz_meta_item_free); + analysis->sdb_types = sdb_ns (analysis->sdb, "types", 1); + analysis->sdb_fmts = sdb_ns (analysis->sdb, "spec", 1); + analysis->sdb_cc = sdb_ns (analysis->sdb, "cc", 1); + analysis->sdb_zigns = sdb_ns (analysis->sdb, "zigns", 1); + analysis->sdb_classes = sdb_ns (analysis->sdb, "classes", 1); + analysis->sdb_classes_attrs = sdb_ns (analysis->sdb_classes, "attrs", 1); + analysis->zign_path = strdup (""); + analysis->cb_printf = (PrintfCallback) printf; + (void)rz_analysis_pin_init (analysis); + (void)rz_analysis_xrefs_init (analysis); + analysis->diff_thbb = RZ_ANAL_THRESHOLDBB; + analysis->diff_thfcn = RZ_ANAL_THRESHOLDFCN; + analysis->syscall = rz_syscall_new (); + rz_io_bind_init (analysis->iob); + rz_flag_bind_init (analysis->flb); + analysis->reg = rz_reg_new (); + analysis->last_disasm_reg = NULL; + analysis->stackptr = 0; + analysis->lineswidth = 0; + analysis->fcns = rz_list_newf (rz_analysis_function_free); + analysis->leaddrs = NULL; + analysis->imports = rz_list_newf (free); + rz_analysis_set_bits (analysis, 32); + analysis->plugins = rz_list_newf ((RzListFree) rz_analysis_plugin_free); + if (analysis->plugins) { + for (i = 0; anal_static_plugins[i]; i++) { + rz_analysis_add (analysis, anal_static_plugins[i]); + } + } + return analysis; +} + +RZ_API void rz_analysis_plugin_free (RzAnalysisPlugin *p) { + if (p && p->fini) { + p->fini (NULL); + } +} + +void __block_free_rb(RBNode *node, void *user); + +RZ_API RzAnalysis *rz_analysis_free(RzAnalysis *a) { + if (!a) { + return NULL; + } + /* TODO: Free anals here */ + rz_list_free (a->fcns); + ht_up_free (a->ht_addr_fun); + ht_pp_free (a->ht_name_fun); + set_u_free (a->visited); + rz_analysis_hint_storage_fini (a); + rz_interval_tree_fini (&a->meta); + free (a->cpu); + free (a->os); + free (a->zign_path); + rz_list_free (a->plugins); + rz_rbtree_free (a->bb_tree, __block_free_rb, NULL); + rz_spaces_fini (&a->meta_spaces); + rz_spaces_fini (&a->zign_spaces); + rz_analysis_pin_fini (a); + rz_syscall_free (a->syscall); + rz_reg_free (a->reg); + ht_up_free (a->dict_refs); + ht_up_free (a->dict_xrefs); + rz_list_free (a->leaddrs); + sdb_free (a->sdb); + if (a->esil) { + rz_analysis_esil_free (a->esil); + a->esil = NULL; + } + free (a->last_disasm_reg); + rz_list_free (a->imports); + rz_str_constpool_fini (&a->constpool); + free (a); + return NULL; +} + +RZ_API void rz_analysis_set_user_ptr(RzAnalysis *analysis, void *user) { + analysis->user = user; +} + +RZ_API int rz_analysis_add(RzAnalysis *analysis, RzAnalysisPlugin *foo) { + if (foo->init) { + foo->init (analysis->user); + } + rz_list_append (analysis->plugins, foo); + return true; +} + +RZ_API bool rz_analysis_use(RzAnalysis *analysis, const char *name) { + RzListIter *it; + RzAnalysisPlugin *h; + + if (analysis) { + rz_list_foreach (analysis->plugins, it, h) { + if (!h->name || strcmp (h->name, name)) { + continue; + } +#if 0 + // regression happening here for asm.emu + if (analysis->cur && analysis->cur == h) { + return true; + } +#endif + analysis->cur = h; + rz_analysis_set_reg_profile (analysis); + return true; + } + } + return false; +} + +RZ_API char *rz_analysis_get_reg_profile(RzAnalysis *analysis) { + return (analysis && analysis->cur && analysis->cur->get_reg_profile) + ? analysis->cur->get_reg_profile (analysis) : NULL; +} + +// deprecate.. or at least reuse get_reg_profile... +RZ_API bool rz_analysis_set_reg_profile(RzAnalysis *analysis) { + bool ret = false; + if (analysis && analysis->cur && analysis->cur->set_reg_profile) { + ret = analysis->cur->set_reg_profile (analysis); + } else { + char *p = rz_analysis_get_reg_profile (analysis); + if (p && *p) { + rz_reg_set_profile_string (analysis->reg, p); + ret = true; + } + free (p); + } + return ret; +} + +RZ_API bool rz_analysis_set_triplet(RzAnalysis *analysis, const char *os, const char *arch, int bits) { + rz_return_val_if_fail (analysis, false); + if (!os || !*os) { + os = RZ_SYS_OS; + } + if (!arch || !*arch) { + arch = analysis->cur? analysis->cur->arch: RZ_SYS_ARCH; + } + if (bits < 1) { + bits = analysis->bits; + } + free (analysis->os); + analysis->os = strdup (os); + rz_analysis_set_bits (analysis, bits); + return rz_analysis_use (analysis, arch); +} + +// copypasta from core/cbin.c +static void sdb_concat_by_path(Sdb *s, const char *path) { + Sdb *db = sdb_new (0, path, 0); + sdb_merge (s, db); + sdb_close (db); + sdb_free (db); +} + +RZ_API bool rz_analysis_set_os(RzAnalysis *analysis, const char *os) { + Sdb *types = analysis->sdb_types; + const char *dir_prefix = rz_sys_prefix (NULL); + const char *dbpath = sdb_fmt (RZ_JOIN_3_PATHS ("%s", RZ_SDB_FCNSIGN, "types-%s.sdb"), + dir_prefix, os); + if (rz_file_exists (dbpath)) { + sdb_concat_by_path (types, dbpath); + } + return rz_analysis_set_triplet (analysis, os, NULL, -1); +} + +RZ_API bool rz_analysis_set_bits(RzAnalysis *analysis, int bits) { + switch (bits) { + case 8: + case 16: + case 27: + case 32: + case 64: + if (analysis->bits != bits) { + analysis->bits = bits; + rz_analysis_set_reg_profile (analysis); + } + return true; + } + return false; +} + +RZ_API void rz_analysis_set_cpu(RzAnalysis *analysis, const char *cpu) { + free (analysis->cpu); + analysis->cpu = cpu ? strdup (cpu) : NULL; + int v = rz_analysis_archinfo (analysis, RZ_ANAL_ARCHINFO_ALIGN); + if (v != -1) { + analysis->pcalign = v; + } +} + +RZ_API int rz_analysis_set_big_endian(RzAnalysis *analysis, int bigend) { + analysis->big_endian = bigend; + analysis->reg->big_endian = bigend; + return true; +} + +RZ_API ut8 *rz_analysis_mask(RzAnalysis *analysis, int size, const ut8 *data, ut64 at) { + RzAnalysisOp *op = NULL; + ut8 *ret = NULL; + int oplen, idx = 0; + + if (!data) { + return NULL; + } + + if (analysis->cur && analysis->cur->analysis_mask) { + return analysis->cur->analysis_mask (analysis, size, data, at); + } + + if (!(op = rz_analysis_op_new ())) { + return NULL; + } + + if (!(ret = malloc (size))) { + rz_analysis_op_free (op); + return NULL; + } + + memset (ret, 0xff, size); + + while (idx < size) { + if ((oplen = rz_analysis_op (analysis, op, at, data + idx, size - idx, RZ_ANAL_OP_MASK_BASIC)) < 1) { + break; + } + if ((op->ptr != UT64_MAX || op->jump != UT64_MAX) && op->nopcode != 0) { + memset (ret + idx + op->nopcode, 0, oplen - op->nopcode); + } + idx += oplen; + at += oplen; + } + + rz_analysis_op_free (op); + + return ret; +} + +RZ_API void rz_analysis_trace_bb(RzAnalysis *analysis, ut64 addr) { + RzAnalysisBlock *bbi; + RzAnalysisFunction *fcni; + RzListIter *iter2; + fcni = rz_analysis_get_fcn_in (analysis, addr, 0); + if (fcni) { + rz_list_foreach (fcni->bbs, iter2, bbi) { + if (addr >= bbi->addr && addr < (bbi->addr + bbi->size)) { + bbi->traced = true; + break; + } + } + } +} + +RZ_API void rz_analysis_colorize_bb(RzAnalysis *analysis, ut64 addr, ut32 color) { + RzAnalysisBlock *bbi; + bbi = rz_analysis_bb_from_offset (analysis, addr); + if (bbi) { + bbi->colorize = color; + } +} + +RZ_API RzList* rz_analysis_get_fcns (RzAnalysis *analysis) { + // avoid received to free this thing + analysis->fcns->free = NULL; + return analysis->fcns; +} + +RZ_API RzAnalysisOp *rz_analysis_op_hexstr(RzAnalysis *analysis, ut64 addr, const char *str) { + RzAnalysisOp *op = RZ_NEW0 (RzAnalysisOp); + if (!op) { + return NULL; + } + ut8 *buf = calloc (1, strlen (str) + 1); + if (!buf) { + free (op); + return NULL; + } + int len = rz_hex_str2bin (str, buf); + rz_analysis_op (analysis, op, addr, buf, len, RZ_ANAL_OP_MASK_BASIC); + free (buf); + return op; +} + +RZ_API bool rz_analysis_op_is_eob(RzAnalysisOp *op) { + if (op->eob) { + return true; + } + switch (op->type) { + case RZ_ANAL_OP_TYPE_JMP: + case RZ_ANAL_OP_TYPE_UJMP: + case RZ_ANAL_OP_TYPE_RJMP: + case RZ_ANAL_OP_TYPE_IJMP: + case RZ_ANAL_OP_TYPE_IRJMP: + case RZ_ANAL_OP_TYPE_CJMP: + case RZ_ANAL_OP_TYPE_RET: + case RZ_ANAL_OP_TYPE_TRAP: + return true; + default: + return false; + } +} + +RZ_API void rz_analysis_purge(RzAnalysis *analysis) { + rz_analysis_hint_clear (analysis); + rz_interval_tree_fini (&analysis->meta); + rz_interval_tree_init (&analysis->meta, rz_meta_item_free); + sdb_reset (analysis->sdb_types); + sdb_reset (analysis->sdb_zigns); + sdb_reset (analysis->sdb_classes); + sdb_reset (analysis->sdb_classes_attrs); + rz_analysis_pin_fini (analysis); + rz_analysis_pin_init (analysis); + sdb_reset (analysis->sdb_cc); + rz_list_free (analysis->fcns); + analysis->fcns = rz_list_newf (rz_analysis_function_free); + rz_analysis_purge_imports (analysis); +} + +RZ_API int rz_analysis_archinfo(RzAnalysis *analysis, int query) { + rz_return_val_if_fail (analysis, -1); + switch (query) { + case RZ_ANAL_ARCHINFO_MIN_OP_SIZE: + case RZ_ANAL_ARCHINFO_MAX_OP_SIZE: + case RZ_ANAL_ARCHINFO_ALIGN: + if (analysis->cur && analysis->cur->archinfo) { + return analysis->cur->archinfo (analysis, query); + } + break; + } + return -1; +} + +static bool __nonreturn_print_commands(void *p, const char *k, const char *v) { + RzAnalysis *analysis = (RzAnalysis *)p; + if (!strncmp (v, "func", strlen ("func") + 1)) { + char *query = sdb_fmt ("func.%s.noreturn", k); + if (sdb_bool_get (analysis->sdb_types, query, NULL)) { + analysis->cb_printf ("tnn %s\n", k); + } + } + if (!strncmp (k, "addr.", 5)) { + analysis->cb_printf ("tna 0x%s %s\n", k + 5, v); + } + return true; +} + +static bool __nonreturn_print(void *p, const char *k, const char *v) { + RzAnalysis *analysis = (RzAnalysis *)p; + if (!strncmp (k, "func.", 5) && strstr (k, ".noreturn")) { + char *s = strdup (k + 5); + char *d = strchr (s, '.'); + if (d) { + *d = 0; + } + analysis->cb_printf ("%s\n", s); + free (s); + } + if (!strncmp (k, "addr.", 5)) { + char *off; + if (!(off = strdup (k + 5))) { + return 1; + } + char *ptr = strstr (off, ".noreturn"); + if (ptr) { + *ptr = 0; + analysis->cb_printf ("0x%s\n", off); + } + free (off); + } + return true; +} + +RZ_API void rz_analysis_noreturn_list(RzAnalysis *analysis, int mode) { + switch (mode) { + case 1: + case '*': + case 'r': + sdb_foreach (analysis->sdb_types, __nonreturn_print_commands, analysis); + break; + default: + sdb_foreach (analysis->sdb_types, __nonreturn_print, analysis); + break; + } +} + +#define K_NORET_ADDR(x) sdb_fmt ("addr.%"PFMT64x".noreturn", x) +#define K_NORET_FUNC(x) sdb_fmt ("func.%s.noreturn", x) + +RZ_API bool rz_analysis_noreturn_add(RzAnalysis *analysis, const char *name, ut64 addr) { + const char *tmp_name = NULL; + Sdb *TDB = analysis->sdb_types; + char *fnl_name = NULL; + if (addr != UT64_MAX) { + if (sdb_bool_set (TDB, K_NORET_ADDR (addr), true, 0)) { + RzAnalysisFunction *fcn = rz_analysis_get_function_at (analysis, addr); + if (fcn) { + fcn->is_noreturn = true; + } + return true; + } + } + if (name && *name) { + tmp_name = name; + } else { + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (analysis, addr, -1); + RzFlagItem *fi = analysis->flb.get_at (analysis->flb.f, addr, false); + if (!fcn && !fi) { + eprintf ("Can't find Function at given address\n"); + return false; + } + tmp_name = fcn ? fcn->name: fi->name; + if (fcn) { + fcn->is_noreturn = true; + } + } + if (rz_type_func_exist (TDB, tmp_name)) { + fnl_name = strdup (tmp_name); + } else if (!(fnl_name = rz_type_func_guess (TDB, (char *)tmp_name))) { + if (addr == UT64_MAX) { + if (name) { + sdb_bool_set (TDB, K_NORET_FUNC (name), true, 0); + } else { + eprintf ("Can't find prototype for: %s\n", tmp_name); + } + } else { + eprintf ("Can't find prototype for: %s\n", tmp_name); + } + //return false; + } + if (fnl_name) { + sdb_bool_set (TDB, K_NORET_FUNC (fnl_name), true, 0); + free (fnl_name); + } + return true; +} + +RZ_API bool rz_analysis_noreturn_drop(RzAnalysis *analysis, const char *expr) { + Sdb *TDB = analysis->sdb_types; + expr = rz_str_trim_head_ro (expr); + const char *fcnname = NULL; + if (!strncmp (expr, "0x", 2)) { + ut64 n = rz_num_math (NULL, expr); + sdb_unset (TDB, K_NORET_ADDR (n), 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (analysis, n, -1); + if (!fcn) { + // eprintf ("can't find function at 0x%"PFMT64x"\n", n); + return false; + } + fcnname = fcn->name; + } else { + fcnname = expr; + } + sdb_unset (TDB, K_NORET_FUNC (fcnname), 0); +#if 0 + char *tmp; + // unnsecessary checks, imho the noreturn db should be pretty simple to allow forward and custom declarations without having to define the function prototype before + if (rz_type_func_exist (TDB, fcnname)) { + sdb_unset (TDB, K_NORET_FUNC (fcnname), 0); + return true; + } else if ((tmp = rz_type_func_guess (TDB, (char *)fcnname))) { + sdb_unset (TDB, K_NORET_FUNC (fcnname), 0); + free (tmp); + return true; + } + eprintf ("Can't find prototype for %s in types database", fcnname); +#endif + return false; +} + +static bool rz_analysis_noreturn_at_name(RzAnalysis *analysis, const char *name) { + if (sdb_bool_get (analysis->sdb_types, K_NORET_FUNC(name), NULL)) { + return true; + } + char *tmp = rz_type_func_guess (analysis->sdb_types, (char *)name); + if (tmp) { + if (sdb_bool_get (analysis->sdb_types, K_NORET_FUNC (tmp), NULL)) { + free (tmp); + return true; + } + free (tmp); + } + if (rz_str_startswith (name, "reloc.")) { + return rz_analysis_noreturn_at_name (analysis, name + 6); + } + return false; +} + +RZ_API bool rz_analysis_noreturn_at_addr(RzAnalysis *analysis, ut64 addr) { + return sdb_bool_get (analysis->sdb_types, K_NORET_ADDR (addr), NULL); +} + +static bool noreturn_recurse(RzAnalysis *analysis, ut64 addr) { + RzAnalysisOp op = {0}; + ut8 bbuf[0x10] = {0}; + ut64 recurse_addr = UT64_MAX; + if (!analysis->iob.read_at (analysis->iob.io, addr, bbuf, sizeof (bbuf))) { + eprintf ("Couldn't read buffer\n"); + return false; + } + if (rz_analysis_op (analysis, &op, addr, bbuf, sizeof (bbuf), RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_VAL) < 1) { + return false; + } + switch (op.type & RZ_ANAL_OP_TYPE_MASK) { + case RZ_ANAL_OP_TYPE_JMP: + if (op.jump == UT64_MAX) { + recurse_addr = op.ptr; + } else { + recurse_addr = op.jump; + } + break; + case RZ_ANAL_OP_TYPE_UCALL: + case RZ_ANAL_OP_TYPE_RCALL: + case RZ_ANAL_OP_TYPE_ICALL: + case RZ_ANAL_OP_TYPE_IRCALL: + recurse_addr = op.ptr; + break; + case RZ_ANAL_OP_TYPE_CCALL: + case RZ_ANAL_OP_TYPE_CALL: + recurse_addr = op.jump; + break; + } + if (recurse_addr == UT64_MAX || recurse_addr == addr) { + return false; + } + return rz_analysis_noreturn_at (analysis, recurse_addr); +} + +RZ_API bool rz_analysis_noreturn_at(RzAnalysis *analysis, ut64 addr) { + if (!addr || addr == UT64_MAX) { + return false; + } + if (rz_analysis_noreturn_at_addr (analysis, addr)) { + return true; + } + /* XXX this is very slow */ + RzAnalysisFunction *f = rz_analysis_get_function_at (analysis, addr); + if (f) { + if (rz_analysis_noreturn_at_name (analysis, f->name)) { + return true; + } + } + RzFlagItem *fi = analysis->flag_get (analysis->flb.f, addr); + if (fi) { + if (rz_analysis_noreturn_at_name (analysis, fi->realname ? fi->realname : fi->name)) { + return true; + } + } + if (analysis->recursive_noreturn) { + return noreturn_recurse (analysis, addr); + } + return false; +} + +RZ_API void rz_analysis_bind(RzAnalysis *analysis, RzAnalysisBind *b) { + if (b) { + b->analysis = analysis; + b->get_fcn_in = rz_analysis_get_fcn_in; + b->get_hint = rz_analysis_hint_get; + } +} + +RZ_API RzList *rz_analysis_preludes(RzAnalysis *analysis) { + if (analysis->cur && analysis->cur->preludes ) { + return analysis->cur->preludes (analysis); + } + return NULL; +} + +RZ_API bool rz_analysis_is_prelude(RzAnalysis *analysis, const ut8 *data, int len) { + RzList *l = rz_analysis_preludes (analysis); + if (l) { + RzSearchKeyword *kw; + RzListIter *iter; + rz_list_foreach (l, iter, kw) { + int ks = kw->keyword_length; + if (len >= ks && !memcmp (data, kw->bin_keyword, ks)) { + rz_list_free (l); + return true; + } + } + rz_list_free (l); + } + return false; +} + +RZ_API void rz_analysis_add_import(RzAnalysis *analysis, const char *imp) { + RzListIter *it; + const char *eimp; + rz_list_foreach (analysis->imports, it, eimp) { + if (!strcmp (eimp, imp)) { + return; + } + } + char *cimp = strdup (imp); + if (!cimp) { + return; + } + rz_list_push (analysis->imports, cimp); +} + +RZ_API void rz_analysis_remove_import(RzAnalysis *analysis, const char *imp) { + RzListIter *it; + const char *eimp; + rz_list_foreach (analysis->imports, it, eimp) { + if (!strcmp (eimp, imp)) { + rz_list_delete (analysis->imports, it); + return; + } + } +} + +RZ_API void rz_analysis_purge_imports(RzAnalysis *analysis) { + rz_list_purge (analysis->imports); +} diff --git a/librz/anal/arch/gb/gb.h b/librz/analysis/arch/gb/gb.h similarity index 100% rename from librz/anal/arch/gb/gb.h rename to librz/analysis/arch/gb/gb.h diff --git a/librz/anal/arch/gb/gb_makros.h b/librz/analysis/arch/gb/gb_makros.h similarity index 100% rename from librz/anal/arch/gb/gb_makros.h rename to librz/analysis/arch/gb/gb_makros.h diff --git a/librz/anal/arch/gb/meta_gb_cmt.c b/librz/analysis/arch/gb/meta_gb_cmt.c similarity index 75% rename from librz/anal/arch/gb/meta_gb_cmt.c rename to librz/analysis/arch/gb/meta_gb_cmt.c index 26bec0a812..b283ebe573 100644 --- a/librz/anal/arch/gb/meta_gb_cmt.c +++ b/librz/analysis/arch/gb/meta_gb_cmt.c @@ -1,9 +1,9 @@ // SPDX-License-Identifier: LGPL-3.0-only #include -#include +#include -void meta_gb_bankswitch_cmt(RzAnal *a, ut64 addr, ut16 ldarg) { +void meta_gb_bankswitch_cmt(RzAnalysis *a, ut64 addr, ut16 ldarg) { if(0x1fff ldarg && ldarg > 0x3fff) diff --git a/librz/anal/arch/hexagon/hexagon_anal.c b/librz/analysis/arch/hexagon/hexagon_anal.c similarity index 99% rename from librz/anal/arch/hexagon/hexagon_anal.c rename to librz/analysis/arch/hexagon/hexagon_anal.c index 710e277ca9..eb79443bc9 100644 --- a/librz/anal/arch/hexagon/hexagon_anal.c +++ b/librz/analysis/arch/hexagon/hexagon_anal.c @@ -3,11 +3,11 @@ #include #include #include -#include +#include #include "hexagon.h" #include "hexagon_insn.h" -int hexagon_anal_instruction(HexInsn *hi, RzAnalOp *op) { +int hexagon_analysis_instruction(HexInsn *hi, RzAnalysisOp *op) { switch (hi->instruction) { case HEX_INS_CALL__R22_2: { // call #r22:2 diff --git a/librz/analysis/arch/hexagon/hexagon_anal.h b/librz/analysis/arch/hexagon/hexagon_anal.h new file mode 100644 index 0000000000..26a31592c7 --- /dev/null +++ b/librz/analysis/arch/hexagon/hexagon_anal.h @@ -0,0 +1,2 @@ +int hexagon_analysis_instruction(HexInsn *hi, RzAnalysisOp *op); + diff --git a/librz/anal/base_types.h b/librz/analysis/base_types.h similarity index 100% rename from librz/anal/base_types.h rename to librz/analysis/base_types.h diff --git a/librz/anal/bb.c b/librz/analysis/bb.c similarity index 61% rename from librz/anal/bb.c rename to librz/analysis/bb.c index fcc71cadb9..3a89d05d75 100644 --- a/librz/anal/bb.c +++ b/librz/analysis/bb.c @@ -1,19 +1,19 @@ // SPDX-License-Identifier: LGPL-3.0-only -#include +#include #include #include #include typedef struct { ut64 addr; - RzAnalBlock *ret; + RzAnalysisBlock *ret; } BBFromOffsetJmpmidCtx; -static bool bb_from_offset_jmpmid_cb(RzAnalBlock *block, void *user) { +static bool bb_from_offset_jmpmid_cb(RzAnalysisBlock *block, void *user) { BBFromOffsetJmpmidCtx *ctx = user; // If an instruction starts exactly at the search addr, return that block immediately - if (rz_anal_block_op_starts_at (block, ctx->addr)) { + if (rz_analysis_block_op_starts_at (block, ctx->addr)) { ctx->ret = block; return false; } @@ -24,28 +24,28 @@ static bool bb_from_offset_jmpmid_cb(RzAnalBlock *block, void *user) { return true; } -static bool bb_from_offset_first_cb(RzAnalBlock *block, void *user) { - RzAnalBlock **ret = user; +static bool bb_from_offset_first_cb(RzAnalysisBlock *block, void *user) { + RzAnalysisBlock **ret = user; *ret = block; return false; } -RZ_API RzAnalBlock *rz_anal_bb_from_offset(RzAnal *anal, ut64 off) { - const bool x86 = anal->cur->arch && !strcmp (anal->cur->arch, "x86"); - if (anal->opt.jmpmid && x86) { +RZ_API RzAnalysisBlock *rz_analysis_bb_from_offset(RzAnalysis *analysis, ut64 off) { + const bool x86 = analysis->cur->arch && !strcmp (analysis->cur->arch, "x86"); + if (analysis->opt.jmpmid && x86) { BBFromOffsetJmpmidCtx ctx = { off, NULL }; - rz_anal_blocks_foreach_in (anal, off, bb_from_offset_jmpmid_cb, &ctx); + rz_analysis_blocks_foreach_in (analysis, off, bb_from_offset_jmpmid_cb, &ctx); return ctx.ret; } - RzAnalBlock *ret = NULL; - rz_anal_blocks_foreach_in (anal, off, bb_from_offset_first_cb, &ret); + RzAnalysisBlock *ret = NULL; + rz_analysis_blocks_foreach_in (analysis, off, bb_from_offset_first_cb, &ret); return ret; } /* return the offset of the i-th instruction in the basicblock bb. * If the index of the instruction is not valid, it returns UT16_MAX */ -RZ_API ut16 rz_anal_bb_offset_inst(RzAnalBlock *bb, int i) { +RZ_API ut16 rz_analysis_bb_offset_inst(RzAnalysisBlock *bb, int i) { if (i < 0 || i >= bb->ninstr) { return UT16_MAX; } @@ -54,8 +54,8 @@ RZ_API ut16 rz_anal_bb_offset_inst(RzAnalBlock *bb, int i) { /* return the address of the i-th instruction in the basicblock bb. * If the index of the instruction is not valid, it returns UT64_MAX */ -RZ_API ut64 rz_anal_bb_opaddr_i(RzAnalBlock *bb, int i) { - ut16 offset = rz_anal_bb_offset_inst (bb, i); +RZ_API ut64 rz_analysis_bb_opaddr_i(RzAnalysisBlock *bb, int i) { + ut16 offset = rz_analysis_bb_offset_inst (bb, i); if (offset == UT16_MAX) { return UT64_MAX; } @@ -63,7 +63,7 @@ RZ_API ut64 rz_anal_bb_opaddr_i(RzAnalBlock *bb, int i) { } /* set the offset of the i-th instruction in the basicblock bb */ -RZ_API bool rz_anal_bb_set_offset(RzAnalBlock *bb, int i, ut16 v) { +RZ_API bool rz_analysis_bb_set_offset(RzAnalysisBlock *bb, int i, ut16 v) { // the offset 0 of the instruction 0 is not stored because always 0 if (i > 0 && v > 0) { if (i >= bb->op_pos_size) { @@ -83,17 +83,17 @@ RZ_API bool rz_anal_bb_set_offset(RzAnalBlock *bb, int i, ut16 v) { /* return the address of the instruction that occupy a given offset. * If the offset is not part of the given basicblock, UT64_MAX is returned. */ -RZ_API ut64 rz_anal_bb_opaddr_at(RzAnalBlock *bb, ut64 off) { +RZ_API ut64 rz_analysis_bb_opaddr_at(RzAnalysisBlock *bb, ut64 off) { ut16 delta, delta_off, last_delta; int i; - if (!rz_anal_block_contains (bb, off)) { + if (!rz_analysis_block_contains (bb, off)) { return UT64_MAX; } last_delta = 0; delta_off = off - bb->addr; for (i = 0; i < bb->ninstr; i++) { - delta = rz_anal_bb_offset_inst (bb, i); + delta = rz_analysis_bb_offset_inst (bb, i); if (delta > delta_off) { return bb->addr + last_delta; } @@ -103,18 +103,18 @@ RZ_API ut64 rz_anal_bb_opaddr_at(RzAnalBlock *bb, ut64 off) { } // returns the size of the i-th instruction in a basic block -RZ_API ut64 rz_anal_bb_size_i(RzAnalBlock *bb, int i) { +RZ_API ut64 rz_analysis_bb_size_i(RzAnalysisBlock *bb, int i) { if (i < 0 || i >= bb->ninstr) { return UT64_MAX; } - ut16 idx_cur = rz_anal_bb_offset_inst (bb, i); - ut16 idx_next = rz_anal_bb_offset_inst (bb, i + 1); + ut16 idx_cur = rz_analysis_bb_offset_inst (bb, i); + ut16 idx_next = rz_analysis_bb_offset_inst (bb, i + 1); return idx_next != UT16_MAX? idx_next - idx_cur: bb->size - idx_cur; } /* returns the address of the basic block that contains addr or UT64_MAX if * there is no such basic block */ -RZ_API ut64 rz_anal_get_bbaddr(RzAnal *anal, ut64 addr) { - RzAnalBlock *bb = rz_anal_bb_from_offset (anal, addr); +RZ_API ut64 rz_analysis_get_bbaddr(RzAnalysis *analysis, ut64 addr) { + RzAnalysisBlock *bb = rz_analysis_bb_from_offset (analysis, addr); return bb? bb->addr: UT64_MAX; } diff --git a/librz/anal/block.c b/librz/analysis/block.c similarity index 63% rename from librz/anal/block.c rename to librz/analysis/block.c index f61525ac36..9ecceebfb3 100644 --- a/librz/anal/block.c +++ b/librz/analysis/block.c @@ -1,16 +1,16 @@ // SPDX-License-Identifier: LGPL-3.0-only -#include -#include +#include +#include #include #include #include -#define unwrap(rbnode) container_of (rbnode, RzAnalBlock, _rb) +#define unwrap(rbnode) container_of (rbnode, RzAnalysisBlock, _rb) static void __max_end(RBNode *node) { - RzAnalBlock *block = unwrap (node); + RzAnalysisBlock *block = unwrap (node); block->_max_end = block->addr + block->size; int i; for (i = 0; i < 2; i++) { @@ -25,7 +25,7 @@ static void __max_end(RBNode *node) { static int __bb_addr_cmp(const void *incoming, const RBNode *in_tree, void *user) { ut64 incoming_addr = *(ut64 *)incoming; - const RzAnalBlock *in_tree_block = container_of (in_tree, const RzAnalBlock, _rb); + const RzAnalysisBlock *in_tree_block = container_of (in_tree, const RzAnalysisBlock, _rb); if (incoming_addr < in_tree_block->addr) { return -1; } @@ -35,23 +35,23 @@ static int __bb_addr_cmp(const void *incoming, const RBNode *in_tree, void *user return 0; } -#define D if (anal && anal->verbose) +#define D if (analysis && analysis->verbose) -RZ_API void rz_anal_block_ref(RzAnalBlock *bb) { +RZ_API void rz_analysis_block_ref(RzAnalysisBlock *bb) { assert (bb->ref > 0); // 0-refd must already be freed. bb->ref++; } #define DFLT_NINSTR 3 -static RzAnalBlock *block_new(RzAnal *a, ut64 addr, ut64 size) { - RzAnalBlock *block = RZ_NEW0 (RzAnalBlock); +static RzAnalysisBlock *block_new(RzAnalysis *a, ut64 addr, ut64 size) { + RzAnalysisBlock *block = RZ_NEW0 (RzAnalysisBlock); if (!block) { return NULL; } block->addr = addr; block->size = size; - block->anal = a; + block->analysis = a; block->ref = 1; block->jump = UT64_MAX; block->fail = UT64_MAX; @@ -62,20 +62,20 @@ static RzAnalBlock *block_new(RzAnal *a, ut64 addr, ut64 size) { block->cmpval = UT64_MAX; block->fcns = rz_list_new (); if (size) { - rz_anal_block_update_hash (block); + rz_analysis_block_update_hash (block); } return block; } -static void block_free(RzAnalBlock *block) { +static void block_free(RzAnalysisBlock *block) { if (!block) { return; } - rz_anal_cond_free (block->cond); + rz_analysis_cond_free (block->cond); free (block->fingerprint); - rz_anal_diff_free (block->diff); + rz_analysis_diff_free (block->diff); free (block->op_bytes); - rz_anal_switch_op_free (block->switch_op); + rz_analysis_switch_op_free (block->switch_op); rz_list_free (block->fcns); free (block->op_pos); free (block->parent_reg_arena); @@ -83,17 +83,17 @@ static void block_free(RzAnalBlock *block) { } void __block_free_rb(RBNode *node, void *user) { - RzAnalBlock *block = unwrap (node); + RzAnalysisBlock *block = unwrap (node); block_free (block); } -RZ_API RzAnalBlock *rz_anal_get_block_at(RzAnal *anal, ut64 addr) { - RBNode *node = rz_rbtree_find (anal->bb_tree, &addr, __bb_addr_cmp, NULL); +RZ_API RzAnalysisBlock *rz_analysis_get_block_at(RzAnalysis *analysis, ut64 addr) { + RBNode *node = rz_rbtree_find (analysis->bb_tree, &addr, __bb_addr_cmp, NULL); return node? unwrap (node): NULL; } // This is a special case of what rz_interval_node_all_in() does -static bool all_in(RzAnalBlock *node, ut64 addr, RzAnalBlockCb cb, void *user) { +static bool all_in(RzAnalysisBlock *node, ut64 addr, RzAnalysisBlockCb cb, void *user) { while (node && addr < node->addr) { // less than the current node, but might still be contained further down node = unwrap (node->_rb.child[0]); @@ -119,26 +119,26 @@ static bool all_in(RzAnalBlock *node, ut64 addr, RzAnalBlockCb cb, void *user) { return true; } -RZ_API bool rz_anal_blocks_foreach_in(RzAnal *anal, ut64 addr, RzAnalBlockCb cb, void *user) { - return all_in (anal->bb_tree ? unwrap (anal->bb_tree) : NULL, addr, cb, user); +RZ_API bool rz_analysis_blocks_foreach_in(RzAnalysis *analysis, ut64 addr, RzAnalysisBlockCb cb, void *user) { + return all_in (analysis->bb_tree ? unwrap (analysis->bb_tree) : NULL, addr, cb, user); } -static bool block_list_cb(RzAnalBlock *block, void *user) { +static bool block_list_cb(RzAnalysisBlock *block, void *user) { RzList *list = user; - rz_anal_block_ref (block); + rz_analysis_block_ref (block); rz_list_push (list, block); return true; } -RZ_API RzList *rz_anal_get_blocks_in(RzAnal *anal, ut64 addr) { - RzList *list = rz_list_newf ((RzListFree)rz_anal_block_unref); +RZ_API RzList *rz_analysis_get_blocks_in(RzAnalysis *analysis, ut64 addr) { + RzList *list = rz_list_newf ((RzListFree)rz_analysis_block_unref); if (list) { - rz_anal_blocks_foreach_in (anal, addr, block_list_cb, list); + rz_analysis_blocks_foreach_in (analysis, addr, block_list_cb, list); } return list; } -static void all_intersect(RzAnalBlock *node, ut64 addr, ut64 size, RzAnalBlockCb cb, void *user) { +static void all_intersect(RzAnalysisBlock *node, ut64 addr, ut64 size, RzAnalysisBlockCb cb, void *user) { ut64 end = addr + size; while (node && end <= node->addr) { // less than the current node, but might still be contained further down @@ -158,46 +158,46 @@ static void all_intersect(RzAnalBlock *node, ut64 addr, ut64 size, RzAnalBlockCb all_intersect (unwrap (node->_rb.child[1]), addr, size, cb, user); } -RZ_API void rz_anal_blocks_foreach_intersect(RzAnal *anal, ut64 addr, ut64 size, RzAnalBlockCb cb, void *user) { - all_intersect (anal->bb_tree ? unwrap (anal->bb_tree) : NULL, addr, size, cb, user); +RZ_API void rz_analysis_blocks_foreach_intersect(RzAnalysis *analysis, ut64 addr, ut64 size, RzAnalysisBlockCb cb, void *user) { + all_intersect (analysis->bb_tree ? unwrap (analysis->bb_tree) : NULL, addr, size, cb, user); } -RZ_API RzList *rz_anal_get_blocks_intersect(RzAnal *anal, ut64 addr, ut64 size) { - RzList *list = rz_list_newf ((RzListFree)rz_anal_block_unref); +RZ_API RzList *rz_analysis_get_blocks_intersect(RzAnalysis *analysis, ut64 addr, ut64 size) { + RzList *list = rz_list_newf ((RzListFree)rz_analysis_block_unref); if (!list) { return NULL; } - rz_anal_blocks_foreach_intersect (anal, addr, size, block_list_cb, list); + rz_analysis_blocks_foreach_intersect (analysis, addr, size, block_list_cb, list); return list; } -RZ_API RzAnalBlock *rz_anal_create_block(RzAnal *anal, ut64 addr, ut64 size) { - if (rz_anal_get_block_at (anal, addr)) { +RZ_API RzAnalysisBlock *rz_analysis_create_block(RzAnalysis *analysis, ut64 addr, ut64 size) { + if (rz_analysis_get_block_at (analysis, addr)) { return NULL; } - RzAnalBlock *block = block_new (anal, addr, size); + RzAnalysisBlock *block = block_new (analysis, addr, size); if (!block) { return NULL; } - rz_rbtree_aug_insert (&anal->bb_tree, &block->addr, &block->_rb, __bb_addr_cmp, NULL, __max_end); + rz_rbtree_aug_insert (&analysis->bb_tree, &block->addr, &block->_rb, __bb_addr_cmp, NULL, __max_end); return block; } -RZ_API void rz_anal_delete_block(RzAnalBlock *bb) { - rz_anal_block_ref (bb); +RZ_API void rz_analysis_delete_block(RzAnalysisBlock *bb) { + rz_analysis_block_ref (bb); while (!rz_list_empty (bb->fcns)) { - rz_anal_function_remove_block (rz_list_first (bb->fcns), bb); + rz_analysis_function_remove_block (rz_list_first (bb->fcns), bb); } - rz_anal_block_unref (bb); + rz_analysis_block_unref (bb); } -RZ_API void rz_anal_block_set_size(RzAnalBlock *block, ut64 size) { +RZ_API void rz_analysis_block_set_size(RzAnalysisBlock *block, ut64 size) { if (block->size == size) { return; } // Update the block's function's cached ranges - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; RzListIter *iter; rz_list_foreach (block->fcns, iter, fcn) { if (fcn->meta._min != UT64_MAX && fcn->meta._max == block->addr + block->size) { @@ -207,21 +207,21 @@ RZ_API void rz_anal_block_set_size(RzAnalBlock *block, ut64 size) { // Do the actual resize block->size = size; - rz_rbtree_aug_update_sum (block->anal->bb_tree, &block->addr, &block->_rb, __bb_addr_cmp, NULL, __max_end); + rz_rbtree_aug_update_sum (block->analysis->bb_tree, &block->addr, &block->_rb, __bb_addr_cmp, NULL, __max_end); } -RZ_API bool rz_anal_block_relocate(RzAnalBlock *block, ut64 addr, ut64 size) { +RZ_API bool rz_analysis_block_relocate(RzAnalysisBlock *block, ut64 addr, ut64 size) { if (block->addr == addr) { - rz_anal_block_set_size (block, size); + rz_analysis_block_set_size (block, size); return true; } - if (rz_anal_get_block_at (block->anal, addr)) { + if (rz_analysis_get_block_at (block->analysis, addr)) { // Two blocks at the same addr is illegle you know... return false; } // Update the block's function's cached ranges - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; RzListIter *iter; rz_list_foreach (block->fcns, iter, fcn) { if (fcn->meta._min != UT64_MAX) { @@ -243,29 +243,29 @@ RZ_API bool rz_anal_block_relocate(RzAnalBlock *block, ut64 addr, ut64 size) { } } - rz_rbtree_aug_delete (&block->anal->bb_tree, &block->addr, __bb_addr_cmp, NULL, NULL, NULL, __max_end); + rz_rbtree_aug_delete (&block->analysis->bb_tree, &block->addr, __bb_addr_cmp, NULL, NULL, NULL, __max_end); block->addr = addr; block->size = size; - rz_anal_block_update_hash (block); - rz_rbtree_aug_insert (&block->anal->bb_tree, &block->addr, &block->_rb, __bb_addr_cmp, NULL, __max_end); + rz_analysis_block_update_hash (block); + rz_rbtree_aug_insert (&block->analysis->bb_tree, &block->addr, &block->_rb, __bb_addr_cmp, NULL, __max_end); return true; } -RZ_API RzAnalBlock *rz_anal_block_split(RzAnalBlock *bbi, ut64 addr) { - RzAnal *anal = bbi->anal; +RZ_API RzAnalysisBlock *rz_analysis_block_split(RzAnalysisBlock *bbi, ut64 addr) { + RzAnalysis *analysis = bbi->analysis; rz_return_val_if_fail (bbi && addr >= bbi->addr && addr < bbi->addr + bbi->size && addr != UT64_MAX, 0); if (addr == bbi->addr) { - rz_anal_block_ref (bbi); // ref to be consistent with splitted return refcount + rz_analysis_block_ref (bbi); // ref to be consistent with splitted return refcount return bbi; } - if (rz_anal_get_block_at (bbi->anal, addr)) { + if (rz_analysis_get_block_at (bbi->analysis, addr)) { // can't have two bbs at the same addr return NULL; } // create the second block - RzAnalBlock *bb = block_new (anal, addr, bbi->addr + bbi->size - addr); + RzAnalysisBlock *bb = block_new (analysis, addr, bbi->addr + bbi->size - addr); if (!bb) { return NULL; } @@ -274,36 +274,36 @@ RZ_API RzAnalBlock *rz_anal_block_split(RzAnalBlock *bbi, ut64 addr) { bb->parent_stackptr = bbi->stackptr; // resize the first block - rz_anal_block_set_size (bbi, addr - bbi->addr); + rz_analysis_block_set_size (bbi, addr - bbi->addr); bbi->jump = addr; bbi->fail = UT64_MAX; - rz_anal_block_update_hash (bbi); + rz_analysis_block_update_hash (bbi); // insert the second block into the tree - rz_rbtree_aug_insert (&anal->bb_tree, &bb->addr, &bb->_rb, __bb_addr_cmp, NULL, __max_end); + rz_rbtree_aug_insert (&analysis->bb_tree, &bb->addr, &bb->_rb, __bb_addr_cmp, NULL, __max_end); // insert the second block into all functions of the first RzListIter *iter; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; rz_list_foreach (bbi->fcns, iter, fcn) { - rz_anal_function_add_block (fcn, bb); + rz_analysis_function_add_block (fcn, bb); } // recalculate offset of instructions in both bb and bbi int i; i = 0; - while (i < bbi->ninstr && rz_anal_bb_offset_inst (bbi, i) < bbi->size) { + while (i < bbi->ninstr && rz_analysis_bb_offset_inst (bbi, i) < bbi->size) { i++; } int new_bbi_instr = i; - if (bb->addr - bbi->addr == rz_anal_bb_offset_inst (bbi, i)) { + if (bb->addr - bbi->addr == rz_analysis_bb_offset_inst (bbi, i)) { bb->ninstr = 0; while (i < bbi->ninstr) { - ut16 off_op = rz_anal_bb_offset_inst (bbi, i); + ut16 off_op = rz_analysis_bb_offset_inst (bbi, i); if (off_op >= bbi->size + bb->size) { break; } - rz_anal_bb_set_offset (bb, bb->ninstr, off_op - bbi->size); + rz_analysis_bb_set_offset (bb, bb->ninstr, off_op - bbi->size); bb->ninstr++; i++; } @@ -312,8 +312,8 @@ RZ_API RzAnalBlock *rz_anal_block_split(RzAnalBlock *bbi, ut64 addr) { return bb; } -RZ_API bool rz_anal_block_merge(RzAnalBlock *a, RzAnalBlock *b) { - if (!rz_anal_block_is_contiguous (a, b)) { +RZ_API bool rz_analysis_block_merge(RzAnalysisBlock *a, RzAnalysisBlock *b) { + if (!rz_analysis_block_is_contiguous (a, b)) { return false; } @@ -321,7 +321,7 @@ RZ_API bool rz_anal_block_merge(RzAnalBlock *a, RzAnalBlock *b) { if (rz_list_length (a->fcns) != rz_list_length (b->fcns)) { return false; } - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; RzListIter *iter; rz_list_foreach (a->fcns, iter, fcn) { if (!rz_list_contains (b->fcns, fcn)) { @@ -330,25 +330,25 @@ RZ_API bool rz_anal_block_merge(RzAnalBlock *a, RzAnalBlock *b) { } // Keep a ref to b, but remove all references of b from its functions - rz_anal_block_ref (b); + rz_analysis_block_ref (b); while (!rz_list_empty (b->fcns)) { - rz_anal_function_remove_block (rz_list_first (b->fcns), b); + rz_analysis_function_remove_block (rz_list_first (b->fcns), b); } // merge ops from b into a size_t i; for (i = 0; i < b->ninstr; i++) { - rz_anal_bb_set_offset (a, a->ninstr++, a->size + rz_anal_bb_offset_inst (b, i)); + rz_analysis_bb_set_offset (a, a->ninstr++, a->size + rz_analysis_bb_offset_inst (b, i)); } // merge everything else into a a->size += b->size; a->jump = b->jump; a->fail = b->fail; - rz_anal_block_update_hash (a); + rz_analysis_block_update_hash (a); // kill b completely - rz_rbtree_aug_delete (&a->anal->bb_tree, &b->addr, __bb_addr_cmp, NULL, __block_free_rb, NULL, __max_end); + rz_rbtree_aug_delete (&a->analysis->bb_tree, &b->addr, __bb_addr_cmp, NULL, __block_free_rb, NULL, __max_end); // invalidate ranges of a's functions rz_list_foreach (a->fcns, iter, fcn) { @@ -358,7 +358,7 @@ RZ_API bool rz_anal_block_merge(RzAnalBlock *a, RzAnalBlock *b) { return true; } -RZ_API void rz_anal_block_unref(RzAnalBlock *bb) { +RZ_API void rz_analysis_block_unref(RzAnalysisBlock *bb) { if (!bb) { return; } @@ -366,13 +366,13 @@ RZ_API void rz_anal_block_unref(RzAnalBlock *bb) { bb->ref--; assert (bb->ref >= rz_list_length (bb->fcns)); // all of the block's functions must hold a reference to it if (bb->ref < 1) { - RzAnal *anal = bb->anal; + RzAnalysis *analysis = bb->analysis; assert (!bb->fcns || rz_list_empty (bb->fcns)); - rz_rbtree_aug_delete (&anal->bb_tree, &bb->addr, __bb_addr_cmp, NULL, __block_free_rb, NULL, __max_end); + rz_rbtree_aug_delete (&analysis->bb_tree, &bb->addr, __bb_addr_cmp, NULL, __block_free_rb, NULL, __max_end); } } -RZ_API bool rz_anal_block_successor_addrs_foreach(RzAnalBlock *block, RzAnalAddrCb cb, void *user) { +RZ_API bool rz_analysis_block_successor_addrs_foreach(RzAnalysisBlock *block, RzAnalysisAddrCb cb, void *user) { #define CB_ADDR(addr) do { \ if (addr == UT64_MAX) { \ break; \ @@ -386,7 +386,7 @@ RZ_API bool rz_anal_block_successor_addrs_foreach(RzAnalBlock *block, RzAnalAddr CB_ADDR (block->fail); if (block->switch_op && block->switch_op->cases) { RzListIter *iter; - RzAnalCaseOp *caseop; + RzAnalysisCaseOp *caseop; rz_list_foreach (block->switch_op->cases, iter, caseop) { CB_ADDR (caseop->jump); } @@ -396,20 +396,20 @@ RZ_API bool rz_anal_block_successor_addrs_foreach(RzAnalBlock *block, RzAnalAddr #undef CB_ADDR } -typedef struct rz_anal_block_recurse_context_t { - RzAnal *anal; - RzPVector/**/ to_visit; +typedef struct rz_analysis_block_recurse_context_t { + RzAnalysis *analysis; + RzPVector/**/ to_visit; HtUP *visited; -} RzAnalBlockRecurseContext; +} RzAnalysisBlockRecurseContext; static bool block_recurse_successor_cb(ut64 addr, void *user) { - RzAnalBlockRecurseContext *ctx = user; + RzAnalysisBlockRecurseContext *ctx = user; if (ht_up_find_kv (ctx->visited, addr, NULL)) { // already visited return true; } ht_up_insert (ctx->visited, addr, NULL); - RzAnalBlock *block = rz_anal_get_block_at (ctx->anal, addr); + RzAnalysisBlock *block = rz_analysis_get_block_at (ctx->analysis, addr); if (!block) { return true; } @@ -417,10 +417,10 @@ static bool block_recurse_successor_cb(ut64 addr, void *user) { return true; } -RZ_API bool rz_anal_block_recurse(RzAnalBlock *block, RzAnalBlockCb cb, void *user) { +RZ_API bool rz_analysis_block_recurse(RzAnalysisBlock *block, RzAnalysisBlockCb cb, void *user) { bool breaked = false; - RzAnalBlockRecurseContext ctx; - ctx.anal = block->anal; + RzAnalysisBlockRecurseContext ctx; + ctx.analysis = block->analysis; rz_pvector_init (&ctx.to_visit, NULL); ctx.visited = ht_up_new0 (); if (!ctx.visited) { @@ -431,12 +431,12 @@ RZ_API bool rz_anal_block_recurse(RzAnalBlock *block, RzAnalBlockCb cb, void *us rz_pvector_push (&ctx.to_visit, block); while (!rz_pvector_empty (&ctx.to_visit)) { - RzAnalBlock *cur = rz_pvector_pop (&ctx.to_visit); + RzAnalysisBlock *cur = rz_pvector_pop (&ctx.to_visit); breaked = !cb (cur, user); if (breaked) { break; } - rz_anal_block_successor_addrs_foreach (cur, block_recurse_successor_cb, &ctx); + rz_analysis_block_successor_addrs_foreach (cur, block_recurse_successor_cb, &ctx); } beach: @@ -445,10 +445,10 @@ beach: return !breaked; } -RZ_API bool rz_anal_block_recurse_followthrough(RzAnalBlock *block, RzAnalBlockCb cb, void *user) { +RZ_API bool rz_analysis_block_recurse_followthrough(RzAnalysisBlock *block, RzAnalysisBlockCb cb, void *user) { bool breaked = false; - RzAnalBlockRecurseContext ctx; - ctx.anal = block->anal; + RzAnalysisBlockRecurseContext ctx; + ctx.analysis = block->analysis; rz_pvector_init (&ctx.to_visit, NULL); ctx.visited = ht_up_new0 (); if (!ctx.visited) { @@ -459,12 +459,12 @@ RZ_API bool rz_anal_block_recurse_followthrough(RzAnalBlock *block, RzAnalBlockC rz_pvector_push (&ctx.to_visit, block); while (!rz_pvector_empty (&ctx.to_visit)) { - RzAnalBlock *cur = rz_pvector_pop (&ctx.to_visit); + RzAnalysisBlock *cur = rz_pvector_pop (&ctx.to_visit); bool b = !cb (cur, user); if (b) { breaked = true; } else { - rz_anal_block_successor_addrs_foreach (cur, block_recurse_successor_cb, &ctx); + rz_analysis_block_successor_addrs_foreach (cur, block_recurse_successor_cb, &ctx); } } @@ -475,20 +475,20 @@ beach: } typedef struct { - RzAnalBlock *bb; + RzAnalysisBlock *bb; RzListIter *switch_it; } RecurseDepthFirstCtx; -RZ_API bool rz_anal_block_recurse_depth_first(RzAnalBlock *block, RzAnalBlockCb cb, RZ_NULLABLE RzAnalBlockCb on_exit, void *user) { +RZ_API bool rz_analysis_block_recurse_depth_first(RzAnalysisBlock *block, RzAnalysisBlockCb cb, RZ_NULLABLE RzAnalysisBlockCb on_exit, void *user) { bool breaked = false; HtUP *visited = ht_up_new0 (); if (!visited) { goto beach; } - RzAnal *anal = block->anal; + RzAnalysis *analysis = block->analysis; RzVector path; rz_vector_init (&path, sizeof (RecurseDepthFirstCtx), NULL, NULL); - RzAnalBlock *cur_bb = block; + RzAnalysisBlock *cur_bb = block; RecurseDepthFirstCtx ctx = { cur_bb, NULL }; rz_vector_push (&path, &ctx); ht_up_insert (visited, cur_bb->addr, NULL); @@ -500,11 +500,11 @@ RZ_API bool rz_anal_block_recurse_depth_first(RzAnalBlock *block, RzAnalBlockCb RecurseDepthFirstCtx *cur_ctx = rz_vector_index_ptr (&path, path.len - 1); cur_bb = cur_ctx->bb; if (cur_bb->jump != UT64_MAX && !ht_up_find_kv (visited, cur_bb->jump, NULL)) { - cur_bb = rz_anal_get_block_at (anal, cur_bb->jump); + cur_bb = rz_analysis_get_block_at (analysis, cur_bb->jump); } else if (cur_bb->fail != UT64_MAX && !ht_up_find_kv (visited, cur_bb->fail, NULL)) { - cur_bb = rz_anal_get_block_at (anal, cur_bb->fail); + cur_bb = rz_analysis_get_block_at (analysis, cur_bb->fail); } else { - RzAnalCaseOp *cop = NULL; + RzAnalysisCaseOp *cop = NULL; if (cur_bb->switch_op && !cur_ctx->switch_it) { cur_ctx->switch_it = cur_bb->switch_op->cases->head; cop = rz_list_first (cur_bb->switch_op->cases); @@ -517,7 +517,7 @@ RZ_API bool rz_anal_block_recurse_depth_first(RzAnalBlock *block, RzAnalBlockCb cop = NULL; } } - cur_bb = cop ? rz_anal_get_block_at (anal, cop->jump) : NULL; + cur_bb = cop ? rz_analysis_get_block_at (analysis, cop->jump) : NULL; } if (cur_bb) { RecurseDepthFirstCtx ctx = { cur_bb, NULL }; @@ -541,30 +541,30 @@ beach: return !breaked; } -static bool recurse_list_cb(RzAnalBlock *block, void *user) { +static bool recurse_list_cb(RzAnalysisBlock *block, void *user) { RzList *list = user; - rz_anal_block_ref (block); + rz_analysis_block_ref (block); rz_list_push (list, block); return true; } -RZ_API RzList *rz_anal_block_recurse_list(RzAnalBlock *block) { - RzList *ret = rz_list_newf ((RzListFree)rz_anal_block_unref); +RZ_API RzList *rz_analysis_block_recurse_list(RzAnalysisBlock *block) { + RzList *ret = rz_list_newf ((RzListFree)rz_analysis_block_unref); if (ret) { - rz_anal_block_recurse (block, recurse_list_cb, ret); + rz_analysis_block_recurse (block, recurse_list_cb, ret); } return ret; } -RZ_API void rz_anal_block_add_switch_case(RzAnalBlock *block, ut64 switch_addr, ut64 case_value, ut64 case_addr) { +RZ_API void rz_analysis_block_add_switch_case(RzAnalysisBlock *block, ut64 switch_addr, ut64 case_value, ut64 case_addr) { if (!block->switch_op) { - block->switch_op = rz_anal_switch_op_new (switch_addr, 0, 0, 0); + block->switch_op = rz_analysis_switch_op_new (switch_addr, 0, 0, 0); } - rz_anal_switch_op_add_case (block->switch_op, case_addr, case_value, case_addr); + rz_analysis_switch_op_add_case (block->switch_op, case_addr, case_value, case_addr); } -RZ_API bool rz_anal_block_op_starts_at(RzAnalBlock *bb, ut64 addr) { - if (!rz_anal_block_contains (bb, addr)) { +RZ_API bool rz_analysis_block_op_starts_at(RzAnalysisBlock *bb, ut64 addr) { + if (!rz_analysis_block_contains (bb, addr)) { return false; } ut64 off = addr - bb->addr; @@ -573,7 +573,7 @@ RZ_API bool rz_anal_block_op_starts_at(RzAnalBlock *bb, ut64 addr) { } size_t i; for (i = 0; i < bb->ninstr; i++) { - ut16 inst_off = rz_anal_bb_offset_inst (bb, i); + ut16 inst_off = rz_analysis_bb_offset_inst (bb, i); if (off == inst_off) { return true; } @@ -582,11 +582,11 @@ RZ_API bool rz_anal_block_op_starts_at(RzAnalBlock *bb, ut64 addr) { } typedef struct { - RzAnal *anal; - RzAnalBlock *cur_parent; + RzAnalysis *analysis; + RzAnalysisBlock *cur_parent; ut64 dst; - RzPVector/**/ *next_visit; // accumulate block of the next level in the tree - HtUP/**/ *visited; // maps addrs to their previous block (or NULL for entry) + RzPVector/**/ *next_visit; // accumulate block of the next level in the tree + HtUP/**/ *visited; // maps addrs to their previous block (or NULL for entry) } PathContext; static bool shortest_path_successor_cb(ut64 addr, void *user) { @@ -596,7 +596,7 @@ static bool shortest_path_successor_cb(ut64 addr, void *user) { return true; } ht_up_insert (ctx->visited, addr, ctx->cur_parent); - RzAnalBlock *block = rz_anal_get_block_at (ctx->anal, addr); + RzAnalysisBlock *block = rz_analysis_get_block_at (ctx->analysis, addr); if (block) { rz_pvector_push (ctx->next_visit, block); } @@ -604,10 +604,10 @@ static bool shortest_path_successor_cb(ut64 addr, void *user) { } -RZ_API RZ_NULLABLE RzList/**/ *rz_anal_block_shortest_path(RzAnalBlock *block, ut64 dst) { +RZ_API RZ_NULLABLE RzList/**/ *rz_analysis_block_shortest_path(RzAnalysisBlock *block, ut64 dst) { RzList *ret = NULL; PathContext ctx; - ctx.anal = block->anal; + ctx.analysis = block->analysis; ctx.dst = dst; // two vectors to swap cur_visit/next_visit @@ -630,9 +630,9 @@ RZ_API RZ_NULLABLE RzList/**/ *rz_anal_block_shortest_path(RzAnal while (!rz_pvector_empty (cur_visit)) { void **it; rz_pvector_foreach (cur_visit, it) { - RzAnalBlock *cur = *it; + RzAnalysisBlock *cur = *it; ctx.cur_parent = cur; - rz_anal_block_successor_addrs_foreach (cur, shortest_path_successor_cb, &ctx); + rz_analysis_block_successor_addrs_foreach (cur, shortest_path_successor_cb, &ctx); } RzPVector *tmp = cur_visit; cur_visit = ctx.next_visit; @@ -642,14 +642,14 @@ RZ_API RZ_NULLABLE RzList/**/ *rz_anal_block_shortest_path(RzAnal // reconstruct the path bool found = false; - RzAnalBlock *prev = ht_up_find (ctx.visited, dst, &found); - RzAnalBlock *dst_block = rz_anal_get_block_at (block->anal, dst); + RzAnalysisBlock *prev = ht_up_find (ctx.visited, dst, &found); + RzAnalysisBlock *dst_block = rz_analysis_get_block_at (block->analysis, dst); if (found && dst_block) { - ret = rz_list_newf ((RzListFree)rz_anal_block_unref); - rz_anal_block_ref (dst_block); + ret = rz_list_newf ((RzListFree)rz_analysis_block_unref); + rz_analysis_block_ref (dst_block); rz_list_prepend (ret, dst_block); while (prev) { - rz_anal_block_ref (prev); + rz_analysis_block_ref (prev); rz_list_prepend (ret, prev); prev = ht_up_find (ctx.visited, prev->addr, NULL); } @@ -662,16 +662,16 @@ beach: return ret; } -RZ_API bool rz_anal_block_was_modified(RzAnalBlock *block) { +RZ_API bool rz_analysis_block_was_modified(RzAnalysisBlock *block) { rz_return_val_if_fail (block, false); - if (!block->anal->iob.read_at) { + if (!block->analysis->iob.read_at) { return false; } ut8 *buf = malloc (block->size); if (!buf) { return false; } - if (!block->anal->iob.read_at (block->anal->iob.io, block->addr, buf, block->size)) { + if (!block->analysis->iob.read_at (block->analysis->iob.io, block->addr, buf, block->size)) { free (buf); return false; } @@ -680,16 +680,16 @@ RZ_API bool rz_anal_block_was_modified(RzAnalBlock *block) { return block->bbhash != cur_hash; } -RZ_API void rz_anal_block_update_hash(RzAnalBlock *block) { +RZ_API void rz_analysis_block_update_hash(RzAnalysisBlock *block) { rz_return_if_fail (block); - if (!block->anal->iob.read_at) { + if (!block->analysis->iob.read_at) { return; } ut8 *buf = malloc (block->size); if (!buf) { return; } - if (!block->anal->iob.read_at (block->anal->iob.io, block->addr, buf, block->size)) { + if (!block->analysis->iob.read_at (block->analysis->iob.io, block->addr, buf, block->size)) { free (buf); return; } @@ -698,30 +698,30 @@ RZ_API void rz_anal_block_update_hash(RzAnalBlock *block) { } typedef struct { - RzAnalBlock *block; + RzAnalysisBlock *block; bool reachable; } NoreturnSuccessor; static void noreturn_successor_free(HtUPKv *kv) { NoreturnSuccessor *succ = kv->value; - rz_anal_block_unref (succ->block); + rz_analysis_block_unref (succ->block); free (succ); } -static bool noreturn_successors_cb(RzAnalBlock *block, void *user) { +static bool noreturn_successors_cb(RzAnalysisBlock *block, void *user) { HtUP *succs = user; NoreturnSuccessor *succ = RZ_NEW0 (NoreturnSuccessor); if (!succ) { return false; } - rz_anal_block_ref (block); + rz_analysis_block_ref (block); succ->block = block; succ->reachable = false; // reset for first iteration ht_up_insert (succs, block->addr, succ); return true; } -static bool noreturn_successors_reachable_cb(RzAnalBlock *block, void *user) { +static bool noreturn_successors_reachable_cb(RzAnalysisBlock *block, void *user) { HtUP *succs = user; NoreturnSuccessor *succ = ht_up_find (succs, block->addr, NULL); if (succ) { @@ -731,10 +731,10 @@ static bool noreturn_successors_reachable_cb(RzAnalBlock *block, void *user) { } static bool noreturn_remove_unreachable_cb(void *user, const ut64 k, const void *v) { - RzAnalFunction *fcn = user; + RzAnalysisFunction *fcn = user; NoreturnSuccessor *succ = (NoreturnSuccessor *)v; if (!succ->reachable && rz_list_contains (succ->block->fcns, fcn)) { - rz_anal_function_remove_block (fcn, succ->block); + rz_analysis_function_remove_block (fcn, succ->block); } succ->reachable = false; // reset for next iteration return true; @@ -743,17 +743,17 @@ static bool noreturn_remove_unreachable_cb(void *user, const ut64 k, const void static bool noreturn_get_blocks_cb(void *user, const ut64 k, const void *v) { RzList *blocks = user; NoreturnSuccessor *succ = (NoreturnSuccessor *)v; - rz_anal_block_ref (succ->block); + rz_analysis_block_ref (succ->block); rz_list_push (blocks, succ->block); return true; } -RZ_API RzAnalBlock *rz_anal_block_chop_noreturn(RzAnalBlock *block, ut64 addr) { +RZ_API RzAnalysisBlock *rz_analysis_block_chop_noreturn(RzAnalysisBlock *block, ut64 addr) { rz_return_val_if_fail (block, NULL); - if (!rz_anal_block_contains (block, addr) || addr == block->addr) { + if (!rz_analysis_block_contains (block, addr) || addr == block->addr) { return block; } - rz_anal_block_ref (block); + rz_analysis_block_ref (block); // Cache all recursive successors of block here. // These are the candidates that we might have to remove from functions later. @@ -761,24 +761,24 @@ RZ_API RzAnalBlock *rz_anal_block_chop_noreturn(RzAnalBlock *block, ut64 addr) { if (!succs) { return block; } - rz_anal_block_recurse (block, noreturn_successors_cb, succs); + rz_analysis_block_recurse (block, noreturn_successors_cb, succs); // Chop the block. Resize and remove all destination addrs - rz_anal_block_set_size (block, addr - block->addr); + rz_analysis_block_set_size (block, addr - block->addr); block->jump = UT64_MAX; block->fail = UT64_MAX; - rz_anal_switch_op_free (block->switch_op); + rz_analysis_switch_op_free (block->switch_op); block->switch_op = NULL; // Now, for each fcn, check which of our successors are still reachable in the function remove and the ones that are not. RzListIter *it; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; // We need to clone the list because block->fcns will get modified in the loop RzList *fcns_cpy = rz_list_clone (block->fcns); rz_list_foreach (fcns_cpy, it, fcn) { - RzAnalBlock *entry = rz_anal_get_block_at (block->anal, fcn->addr); + RzAnalysisBlock *entry = rz_analysis_get_block_at (block->analysis, fcn->addr); if (entry && rz_list_contains (entry->fcns, fcn)) { - rz_anal_block_recurse (entry, noreturn_successors_reachable_cb, succs); + rz_analysis_block_recurse (entry, noreturn_successors_reachable_cb, succs); } ht_up_foreach (succs, noreturn_remove_unreachable_cb, fcn); } @@ -788,21 +788,21 @@ RZ_API RzAnalBlock *rz_anal_block_chop_noreturn(RzAnalBlock *block, ut64 addr) { // Prepare to merge blocks with their predecessors if possible RzList merge_blocks; rz_list_init (&merge_blocks); - merge_blocks.free = (RzListFree)rz_anal_block_unref; + merge_blocks.free = (RzListFree)rz_analysis_block_unref; ht_up_foreach (succs, noreturn_get_blocks_cb, &merge_blocks); // Free/unref BEFORE doing the merge! // Some of the blocks might not be valid anymore later! - rz_anal_block_unref (block); + rz_analysis_block_unref (block); ht_up_free (succs); ut64 block_addr = block->addr; // save the addr to identify the block. the automerge might free it so we must not use the pointer! // Do the actual merge - rz_anal_block_automerge (&merge_blocks); + rz_analysis_block_automerge (&merge_blocks); // No try to recover the pointer to the block if it still exists - RzAnalBlock *ret = NULL; + RzAnalysisBlock *ret = NULL; for (it = merge_blocks.head; it && (block = it->data, 1); it = it->n) { if (block->addr == block_addr) { // block is still there @@ -818,9 +818,9 @@ RZ_API RzAnalBlock *rz_anal_block_chop_noreturn(RzAnalBlock *block, ut64 addr) { typedef struct { HtUP *predecessors; // maps a block to its predecessor if it has exactly one, or NULL if there are multiple or the predecessor has multiple successors HtUP *visited_blocks; // during predecessor search, mark blocks whose successors we already checked. Value is void *-casted count of successors - HtUP *blocks; // adresses of the blocks we might want to merge with their predecessors => RzAnalBlock * + HtUP *blocks; // adresses of the blocks we might want to merge with their predecessors => RzAnalysisBlock * - RzAnalBlock *cur_pred; + RzAnalysisBlock *cur_pred; size_t cur_succ_count; } AutomergeCtx; @@ -833,13 +833,13 @@ static bool count_successors_cb(ut64 addr, void *user) { static bool automerge_predecessor_successor_cb(ut64 addr, void *user) { AutomergeCtx *ctx = user; ctx->cur_succ_count++; - RzAnalBlock *block = ht_up_find (ctx->blocks, addr, NULL); + RzAnalysisBlock *block = ht_up_find (ctx->blocks, addr, NULL); if (!block) { // we shouldn't merge this one so GL_DONT_CARE return true; } bool found; - RzAnalBlock *pred = ht_up_find (ctx->predecessors, (ut64)block, &found); + RzAnalysisBlock *pred = ht_up_find (ctx->predecessors, (ut64)block, &found); if (found) { if (pred) { // only one predecessor found so far, but we are the second so there are multiple now @@ -854,9 +854,9 @@ static bool automerge_predecessor_successor_cb(ut64 addr, void *user) { static bool automerge_get_predecessors_cb(void *user, const ut64 k, const void *v) { AutomergeCtx *ctx = user; - const RzAnalFunction *fcn = (const RzAnalFunction *)k; + const RzAnalysisFunction *fcn = (const RzAnalysisFunction *)k; RzListIter *it; - RzAnalBlock *block; + RzAnalysisBlock *block; rz_list_foreach (fcn->bbs, it, block) { bool already_visited; ht_up_find (ctx->visited_blocks, (ut64)block, &already_visited); @@ -865,7 +865,7 @@ static bool automerge_get_predecessors_cb(void *user, const ut64 k, const void * } ctx->cur_pred = block; ctx->cur_succ_count = 0; - rz_anal_block_successor_addrs_foreach (block, automerge_predecessor_successor_cb, ctx); + rz_analysis_block_successor_addrs_foreach (block, automerge_predecessor_successor_cb, ctx); ht_up_insert (ctx->visited_blocks, (ut64)block, (void *)ctx->cur_succ_count); } return true; @@ -873,7 +873,7 @@ static bool automerge_get_predecessors_cb(void *user, const ut64 k, const void * // Try to find the contiguous predecessors of all given blocks and merge them if possible, // i.e. if there are no other blocks that have this block as one of their successors -RZ_API void rz_anal_block_automerge(RzList *blocks) { +RZ_API void rz_analysis_block_automerge(RzList *blocks) { rz_return_if_fail (blocks); AutomergeCtx ctx = { .predecessors = ht_up_new0 (), @@ -889,10 +889,10 @@ RZ_API void rz_anal_block_automerge(RzList *blocks) { // Get all the functions and prepare ctx.blocks RzListIter *it; - RzAnalBlock *block; + RzAnalysisBlock *block; rz_list_foreach (blocks, it, block) { RzListIter *fit; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; rz_list_foreach (block->fcns, fit, fcn) { ht_up_insert (relevant_fcns, (ut64)fcn, NULL); } @@ -905,7 +905,7 @@ RZ_API void rz_anal_block_automerge(RzList *blocks) { // Now finally do the merging RzListIter *tmp; rz_list_foreach_safe (blocks, it, tmp, block) { - RzAnalBlock *predecessor = ht_up_find (ctx.predecessors, (ut64)block, NULL); + RzAnalysisBlock *predecessor = ht_up_find (ctx.predecessors, (ut64)block, NULL); if (!predecessor) { continue; } @@ -919,19 +919,19 @@ RZ_API void rz_anal_block_automerge(RzList *blocks) { // However if there are other blocks that have block as the predecessor, // we would uaf after the merge since block will be freed. RzListIter *bit; - RzAnalBlock *clock; + RzAnalysisBlock *clock; for (bit = it->n; bit && (clock = bit->data, 1); bit = bit->n) { - RzAnalBlock *fixup_pred = ht_up_find (ctx.predecessors, (ut64)clock, NULL); + RzAnalysisBlock *fixup_pred = ht_up_find (ctx.predecessors, (ut64)clock, NULL); if (fixup_pred == block) { rz_list_push (fixup_candidates, clock); } } - if (rz_anal_block_merge (predecessor, block)) { // rz_anal_block_merge() does checks like contiguous, to that's fine + if (rz_analysis_block_merge (predecessor, block)) { // rz_analysis_block_merge() does checks like contiguous, to that's fine // block was merged into predecessor, it is now freed! // Update number of successors of the predecessor ctx.cur_succ_count = 0; - rz_anal_block_successor_addrs_foreach (predecessor, count_successors_cb, &ctx); + rz_analysis_block_successor_addrs_foreach (predecessor, count_successors_cb, &ctx); ht_up_update (ctx.visited_blocks, (ut64)predecessor, (void *)ctx.cur_succ_count); rz_list_foreach (fixup_candidates, bit, clock) { // Make sure all previous pointers to block now go to predecessor diff --git a/librz/anal/cc.c b/librz/analysis/cc.c similarity index 62% rename from librz/anal/cc.c rename to librz/analysis/cc.c index 3fefd04315..b7d84295c6 100644 --- a/librz/anal/cc.c +++ b/librz/analysis/cc.c @@ -2,10 +2,10 @@ /* Universal calling convention implementation based on sdb */ -#include -#define DB anal->sdb_cc +#include +#define DB analysis->sdb_cc -RZ_API void rz_anal_cc_del(RzAnal *anal, const char *name) { +RZ_API void rz_analysis_cc_del(RzAnalysis *analysis, const char *name) { size_t i; RzStrBuf sb; sdb_unset (DB, rz_strbuf_initf (&sb, "%s", name), 0); @@ -19,7 +19,7 @@ RZ_API void rz_anal_cc_del(RzAnal *anal, const char *name) { rz_strbuf_fini (&sb); } -RZ_API bool rz_anal_cc_set(RzAnal *anal, const char *expr) { +RZ_API bool rz_analysis_cc_set(RzAnalysis *analysis, const char *expr) { char *e = strdup (expr); char *p = strchr (e, '('); if (!p) { @@ -68,7 +68,7 @@ RZ_API bool rz_anal_cc_set(RzAnal *anal, const char *expr) { return true; } -RZ_API char *rz_anal_cc_get(RzAnal *anal, const char *name) { +RZ_API char *rz_analysis_cc_get(RzAnalysis *analysis, const char *name) { int i; // get cc by name and print the expr if (rz_str_cmp (sdb_const_get (DB, name, 0), "cc", -1)) { @@ -81,7 +81,7 @@ RZ_API char *rz_anal_cc_get(RzAnal *anal, const char *name) { return NULL; } RzStrBuf *sb = rz_strbuf_new (NULL); - const char *self = rz_anal_cc_self (anal, name); + const char *self = rz_analysis_cc_self (analysis, name); rz_strbuf_appendf (sb, "%s %s%s%s (", ret, self? self: "", self? ".": "", name); bool isFirst = true; for (i = 0; i < RZ_ANAL_CC_MAXARG; i++) { @@ -99,7 +99,7 @@ RZ_API char *rz_anal_cc_get(RzAnal *anal, const char *name) { } rz_strbuf_append (sb, ")"); - const char *error = rz_anal_cc_error (anal, name); + const char *error = rz_analysis_cc_error (analysis, name); if (error) { rz_strbuf_appendf (sb, " %s", error); } @@ -108,14 +108,14 @@ RZ_API char *rz_anal_cc_get(RzAnal *anal, const char *name) { return rz_strbuf_drain (sb); } -RZ_API bool rz_anal_cc_exist(RzAnal *anal, const char *convention) { - rz_return_val_if_fail (anal && convention, false); +RZ_API bool rz_analysis_cc_exist(RzAnalysis *analysis, const char *convention) { + rz_return_val_if_fail (analysis && convention, false); const char *x = sdb_const_get (DB, convention, 0); return x && *x && !strcmp (x, "cc"); } -RZ_API const char *rz_anal_cc_arg(RzAnal *anal, const char *convention, int n) { - rz_return_val_if_fail (anal, NULL); +RZ_API const char *rz_analysis_cc_arg(RzAnalysis *analysis, const char *convention, int n) { + rz_return_val_if_fail (analysis, NULL); rz_return_val_if_fail (n >= 0, NULL); if (!convention) { return NULL; @@ -127,44 +127,44 @@ RZ_API const char *rz_anal_cc_arg(RzAnal *anal, const char *convention, int n) { query = sdb_fmt ("cc.%s.argn", convention); ret = sdb_const_get (DB, query, 0); } - return ret? rz_str_constpool_get (&anal->constpool, ret): NULL; + return ret? rz_str_constpool_get (&analysis->constpool, ret): NULL; } -RZ_API const char *rz_anal_cc_self(RzAnal *anal, const char *convention) { - rz_return_val_if_fail (anal && convention, NULL); +RZ_API const char *rz_analysis_cc_self(RzAnalysis *analysis, const char *convention) { + rz_return_val_if_fail (analysis && convention, NULL); const char *query = sdb_fmt ("cc.%s.self", convention); const char *self = sdb_const_get (DB, query, 0); - return self? rz_str_constpool_get (&anal->constpool, self): NULL; + return self? rz_str_constpool_get (&analysis->constpool, self): NULL; } -RZ_API void rz_anal_cc_set_self(RzAnal *anal, const char *convention, const char *self) { - if (!rz_anal_cc_exist (anal, convention)) { +RZ_API void rz_analysis_cc_set_self(RzAnalysis *analysis, const char *convention, const char *self) { + if (!rz_analysis_cc_exist (analysis, convention)) { return; } RzStrBuf sb; - sdb_set (anal->sdb_cc, rz_strbuf_initf (&sb, "cc.%s.self", convention), self, 0); + sdb_set (analysis->sdb_cc, rz_strbuf_initf (&sb, "cc.%s.self", convention), self, 0); rz_strbuf_fini (&sb); } -RZ_API const char *rz_anal_cc_error(RzAnal *anal, const char *convention) { - rz_return_val_if_fail (anal && convention, NULL); +RZ_API const char *rz_analysis_cc_error(RzAnalysis *analysis, const char *convention) { + rz_return_val_if_fail (analysis && convention, NULL); const char *query = sdb_fmt ("cc.%s.error", convention); const char *error = sdb_const_get (DB, query, 0); - return error? rz_str_constpool_get (&anal->constpool, error): NULL; + return error? rz_str_constpool_get (&analysis->constpool, error): NULL; } -RZ_API void rz_anal_cc_set_error(RzAnal *anal, const char *convention, const char *error) { - if (!rz_anal_cc_exist (anal, convention)) { +RZ_API void rz_analysis_cc_set_error(RzAnalysis *analysis, const char *convention, const char *error) { + if (!rz_analysis_cc_exist (analysis, convention)) { return; } RzStrBuf sb; - sdb_set (anal->sdb_cc, rz_strbuf_initf (&sb, "cc.%s.error", convention), error, 0); + sdb_set (analysis->sdb_cc, rz_strbuf_initf (&sb, "cc.%s.error", convention), error, 0); rz_strbuf_fini (&sb); } -RZ_API int rz_anal_cc_max_arg(RzAnal *anal, const char *cc) { +RZ_API int rz_analysis_cc_max_arg(RzAnalysis *analysis, const char *cc) { int i = 0; - rz_return_val_if_fail (anal && DB && cc, 0); + rz_return_val_if_fail (analysis && DB && cc, 0); static void *oldDB = NULL; static char *oldCC = NULL; static int oldArg = 0; @@ -185,20 +185,20 @@ RZ_API int rz_anal_cc_max_arg(RzAnal *anal, const char *cc) { return i; } -RZ_API const char *rz_anal_cc_ret(RzAnal *anal, const char *convention) { - rz_return_val_if_fail (anal && convention, NULL); +RZ_API const char *rz_analysis_cc_ret(RzAnalysis *analysis, const char *convention) { + rz_return_val_if_fail (analysis && convention, NULL); char *query = sdb_fmt ("cc.%s.ret", convention); return sdb_const_get (DB, query, 0); } -RZ_API const char *rz_anal_cc_default(RzAnal *anal) { - rz_return_val_if_fail (anal, NULL); +RZ_API const char *rz_analysis_cc_default(RzAnalysis *analysis) { + rz_return_val_if_fail (analysis, NULL); return sdb_const_get (DB, "default.cc", 0); } -RZ_API const char *rz_anal_cc_func(RzAnal *anal, const char *func_name) { - rz_return_val_if_fail (anal && func_name, NULL); +RZ_API const char *rz_analysis_cc_func(RzAnalysis *analysis, const char *func_name) { + rz_return_val_if_fail (analysis && func_name, NULL); const char *query = sdb_fmt ("func.%s.cc", func_name); - const char *cc = sdb_const_get (anal->sdb_types, query, 0); - return cc ? cc : rz_anal_cc_default (anal); + const char *cc = sdb_const_get (analysis->sdb_types, query, 0); + return cc ? cc : rz_analysis_cc_default (analysis); } diff --git a/librz/anal/class.c b/librz/analysis/class.c similarity index 51% rename from librz/anal/class.c rename to librz/analysis/class.c index 04411466cb..612e55afb3 100644 --- a/librz/anal/class.c +++ b/librz/analysis/class.c @@ -1,17 +1,17 @@ // SPDX-License-Identifier: LGPL-3.0-only -#include +#include #include #include -#include "../include/rz_anal.h" +#include "../include/rz_analysis.h" #include "../include/rz_util/rz_graph.h" -static void rz_anal_class_base_delete_class(RzAnal *anal, const char *class_name); -static void rz_anal_class_method_delete_class(RzAnal *anal, const char *class_name); -static void rz_anal_class_vtable_delete_class(RzAnal *anal, const char *class_name); -static void rz_anal_class_base_rename_class(RzAnal *anal, const char *class_name_old, const char *class_name_new); -static void rz_anal_class_method_rename_class(RzAnal *anal, const char *old_class_name, const char *new_class_name); -static void rz_anal_class_vtable_rename_class(RzAnal *anal, const char *old_class_name, const char *new_class_name); +static void rz_analysis_class_base_delete_class(RzAnalysis *analysis, const char *class_name); +static void rz_analysis_class_method_delete_class(RzAnalysis *analysis, const char *class_name); +static void rz_analysis_class_vtable_delete_class(RzAnalysis *analysis, const char *class_name); +static void rz_analysis_class_base_rename_class(RzAnalysis *analysis, const char *class_name_old, const char *class_name_new); +static void rz_analysis_class_method_rename_class(RzAnalysis *analysis, const char *old_class_name, const char *new_class_name); +static void rz_analysis_class_vtable_rename_class(RzAnalysis *analysis, const char *old_class_name, const char *new_class_name); static const char *key_class(const char *name) { return name; @@ -37,9 +37,9 @@ typedef enum { RZ_ANAL_CLASS_ATTR_TYPE_METHOD, RZ_ANAL_CLASS_ATTR_TYPE_VTABLE, RZ_ANAL_CLASS_ATTR_TYPE_BASE -} RzAnalClassAttrType; +} RzAnalysisClassAttrType; -static const char *attr_type_id(RzAnalClassAttrType attr_type) { +static const char *attr_type_id(RzAnalysisClassAttrType attr_type) { switch (attr_type) { case RZ_ANAL_CLASS_ATTR_TYPE_METHOD: return "method"; @@ -52,53 +52,53 @@ static const char *attr_type_id(RzAnalClassAttrType attr_type) { } } -RZ_API void rz_anal_class_create(RzAnal *anal, const char *name) { +RZ_API void rz_analysis_class_create(RzAnalysis *analysis, const char *name) { char *name_sanitized = rz_str_sanitize_sdb_key (name); if (!name_sanitized) { return; } const char *key = key_class (name_sanitized); - if (!sdb_exists (anal->sdb_classes, key)) { - sdb_set (anal->sdb_classes, key, "c", 0); + if (!sdb_exists (analysis->sdb_classes, key)) { + sdb_set (analysis->sdb_classes, key, "c", 0); } RzEventClass event = { .name = name_sanitized }; - rz_event_send (anal->ev, RZ_EVENT_CLASS_NEW, &event); + rz_event_send (analysis->ev, RZ_EVENT_CLASS_NEW, &event); free (name_sanitized); } -RZ_API void rz_anal_class_delete(RzAnal *anal, const char *name) { +RZ_API void rz_analysis_class_delete(RzAnalysis *analysis, const char *name) { char *class_name_sanitized = rz_str_sanitize_sdb_key (name); if (!class_name_sanitized) { return; } - rz_anal_class_base_delete_class (anal, class_name_sanitized); - rz_anal_class_method_delete_class (anal, class_name_sanitized); - rz_anal_class_vtable_delete_class (anal, class_name_sanitized); + rz_analysis_class_base_delete_class (analysis, class_name_sanitized); + rz_analysis_class_method_delete_class (analysis, class_name_sanitized); + rz_analysis_class_vtable_delete_class (analysis, class_name_sanitized); - if (!sdb_remove (anal->sdb_classes, key_class (class_name_sanitized), 0)) { + if (!sdb_remove (analysis->sdb_classes, key_class (class_name_sanitized), 0)) { free (class_name_sanitized); return; } char *key = key_attr_types (class_name_sanitized); - char *attr_type_array = sdb_get (anal->sdb_classes_attrs, key, 0); + char *attr_type_array = sdb_get (analysis->sdb_classes_attrs, key, 0); char *attr_type; sdb_aforeach (attr_type, attr_type_array) { key = key_attr_type_attrs (class_name_sanitized, attr_type); - char *attr_id_array = sdb_get (anal->sdb_classes_attrs, key, 0); - sdb_remove (anal->sdb_classes_attrs, key, 0); + char *attr_id_array = sdb_get (analysis->sdb_classes_attrs, key, 0); + sdb_remove (analysis->sdb_classes_attrs, key, 0); if (attr_id_array) { char *attr_id; sdb_aforeach (attr_id, attr_id_array) { key = key_attr_content (class_name_sanitized, attr_type, attr_id); - sdb_remove (anal->sdb_classes_attrs, key, 0); + sdb_remove (analysis->sdb_classes_attrs, key, 0); key = key_attr_content_specific (class_name_sanitized, attr_type, attr_id); - sdb_remove (anal->sdb_classes_attrs, key, 0); + sdb_remove (analysis->sdb_classes_attrs, key, 0); sdb_aforeach_next (attr_id); } free (attr_id_array); @@ -107,34 +107,34 @@ RZ_API void rz_anal_class_delete(RzAnal *anal, const char *name) { } free (attr_type_array); - sdb_remove (anal->sdb_classes_attrs, key_attr_types (class_name_sanitized), 0); + sdb_remove (analysis->sdb_classes_attrs, key_attr_types (class_name_sanitized), 0); RzEventClass event = { .name = class_name_sanitized }; - rz_event_send (anal->ev, RZ_EVENT_CLASS_DEL, &event); + rz_event_send (analysis->ev, RZ_EVENT_CLASS_DEL, &event); free (class_name_sanitized); } -static bool rz_anal_class_exists_raw(RzAnal *anal, const char *name) { - return sdb_exists (anal->sdb_classes, key_class (name)); +static bool rz_analysis_class_exists_raw(RzAnalysis *analysis, const char *name) { + return sdb_exists (analysis->sdb_classes, key_class (name)); } -RZ_API bool rz_anal_class_exists(RzAnal *anal, const char *name) { +RZ_API bool rz_analysis_class_exists(RzAnalysis *analysis, const char *name) { char *class_name_sanitized = rz_str_sanitize_sdb_key (name); if (!class_name_sanitized) { return false; } - bool r = rz_anal_class_exists_raw (anal, class_name_sanitized); + bool r = rz_analysis_class_exists_raw (analysis, class_name_sanitized); free (class_name_sanitized); return r; } -RZ_API SdbList *rz_anal_class_get_all(RzAnal *anal, bool sorted) { - return sdb_foreach_list (anal->sdb_classes, sorted); +RZ_API SdbList *rz_analysis_class_get_all(RzAnalysis *analysis, bool sorted) { + return sdb_foreach_list (analysis->sdb_classes, sorted); } -RZ_API void rz_anal_class_foreach(RzAnal *anal, SdbForeachCallback cb, void *user) { - sdb_foreach (anal->sdb_classes, cb, user); +RZ_API void rz_analysis_class_foreach(RzAnalysis *analysis, SdbForeachCallback cb, void *user) { + sdb_foreach (analysis->sdb_classes, cb, user); } static bool rename_key(Sdb *sdb, const char *key_old, const char *key_new) { @@ -148,8 +148,8 @@ static bool rename_key(Sdb *sdb, const char *key_old, const char *key_new) { return true; } -RZ_API RzAnalClassErr rz_anal_class_rename(RzAnal *anal, const char *old_name, const char *new_name) { - if (rz_anal_class_exists (anal, new_name)) { +RZ_API RzAnalysisClassErr rz_analysis_class_rename(RzAnalysis *analysis, const char *old_name, const char *new_name) { + if (rz_analysis_class_exists (analysis, new_name)) { return RZ_ANAL_CLASS_ERR_CLASH; } @@ -163,43 +163,43 @@ RZ_API RzAnalClassErr rz_anal_class_rename(RzAnal *anal, const char *old_name, c return RZ_ANAL_CLASS_ERR_OTHER; } - RzAnalClassErr err = RZ_ANAL_CLASS_ERR_SUCCESS; + RzAnalysisClassErr err = RZ_ANAL_CLASS_ERR_SUCCESS; - rz_anal_class_base_rename_class (anal, old_name, new_name); - rz_anal_class_method_rename_class (anal, old_name, new_name); - rz_anal_class_vtable_rename_class (anal, old_name, new_name); + rz_analysis_class_base_rename_class (analysis, old_name, new_name); + rz_analysis_class_method_rename_class (analysis, old_name, new_name); + rz_analysis_class_vtable_rename_class (analysis, old_name, new_name); - if (!rename_key (anal->sdb_classes, key_class (old_name_sanitized), key_class (new_name_sanitized))) { + if (!rename_key (analysis->sdb_classes, key_class (old_name_sanitized), key_class (new_name_sanitized))) { err = RZ_ANAL_CLASS_ERR_NONEXISTENT_CLASS; goto beach; } - char *attr_types = sdb_get (anal->sdb_classes_attrs, key_attr_types (old_name_sanitized), 0); + char *attr_types = sdb_get (analysis->sdb_classes_attrs, key_attr_types (old_name_sanitized), 0); char *attr_type_cur; sdb_aforeach (attr_type_cur, attr_types) { - char *attr_ids = sdb_get (anal->sdb_classes_attrs, key_attr_type_attrs (old_name, attr_type_cur), 0); + char *attr_ids = sdb_get (analysis->sdb_classes_attrs, key_attr_type_attrs (old_name, attr_type_cur), 0); char *attr_id_cur; sdb_aforeach (attr_id_cur, attr_ids) { - rename_key (anal->sdb_classes_attrs, + rename_key (analysis->sdb_classes_attrs, key_attr_content (old_name, attr_type_cur, attr_id_cur), key_attr_content (new_name, attr_type_cur, attr_id_cur)); sdb_aforeach_next (attr_id_cur); } free (attr_ids); - rename_key (anal->sdb_classes_attrs, + rename_key (analysis->sdb_classes_attrs, key_attr_type_attrs (old_name, attr_type_cur), key_attr_type_attrs (new_name, attr_type_cur)); sdb_aforeach_next (attr_type_cur); } free (attr_types); - rename_key (anal->sdb_classes_attrs, key_attr_types (old_name_sanitized), key_attr_types (new_name_sanitized)); + rename_key (analysis->sdb_classes_attrs, key_attr_types (old_name_sanitized), key_attr_types (new_name_sanitized)); RzEventClassRename event = { .name_old = old_name_sanitized, .name_new = new_name_sanitized }; - rz_event_send (anal->ev, RZ_EVENT_CLASS_RENAME, &event); + rz_event_send (analysis->ev, RZ_EVENT_CLASS_RENAME, &event); beach: free (old_name_sanitized); @@ -208,17 +208,17 @@ beach: } // all ids must be sanitized -static char *rz_anal_class_get_attr_raw(RzAnal *anal, const char *class_name, RzAnalClassAttrType attr_type, const char *attr_id, bool specific) { +static char *rz_analysis_class_get_attr_raw(RzAnalysis *analysis, const char *class_name, RzAnalysisClassAttrType attr_type, const char *attr_id, bool specific) { const char *attr_type_str = attr_type_id (attr_type); char *key = specific ? key_attr_content_specific (class_name, attr_type_str, attr_id) : key_attr_content (class_name, attr_type_str, attr_id); - char *ret = sdb_get (anal->sdb_classes_attrs, key, 0); + char *ret = sdb_get (analysis->sdb_classes_attrs, key, 0); return ret; } // ids will be sanitized automatically -static char *rz_anal_class_get_attr(RzAnal *anal, const char *class_name, RzAnalClassAttrType attr_type, const char *attr_id, bool specific) { +static char *rz_analysis_class_get_attr(RzAnalysis *analysis, const char *class_name, RzAnalysisClassAttrType attr_type, const char *attr_id, bool specific) { char *class_name_sanitized = rz_str_sanitize_sdb_key (class_name); if (!class_name_sanitized) { return false; @@ -229,7 +229,7 @@ static char *rz_anal_class_get_attr(RzAnal *anal, const char *class_name, RzAnal return false; } - char *ret = rz_anal_class_get_attr_raw (anal, class_name_sanitized, attr_type, attr_id_sanitized, specific); + char *ret = rz_analysis_class_get_attr_raw (analysis, class_name_sanitized, attr_type, attr_id_sanitized, specific); free (class_name_sanitized); free (attr_id_sanitized); @@ -238,16 +238,16 @@ static char *rz_anal_class_get_attr(RzAnal *anal, const char *class_name, RzAnal } // all ids must be sanitized -static RzAnalClassErr rz_anal_class_set_attr_raw(RzAnal *anal, const char *class_name, RzAnalClassAttrType attr_type, const char *attr_id, const char *content) { +static RzAnalysisClassErr rz_analysis_class_set_attr_raw(RzAnalysis *analysis, const char *class_name, RzAnalysisClassAttrType attr_type, const char *attr_id, const char *content) { const char *attr_type_str = attr_type_id (attr_type); - if (!rz_anal_class_exists_raw (anal, class_name)) { + if (!rz_analysis_class_exists_raw (analysis, class_name)) { return RZ_ANAL_CLASS_ERR_NONEXISTENT_CLASS; } - sdb_array_add (anal->sdb_classes_attrs, key_attr_types (class_name), attr_type_str, 0); - sdb_array_add (anal->sdb_classes_attrs, key_attr_type_attrs (class_name, attr_type_str), attr_id, 0); - sdb_set (anal->sdb_classes_attrs, key_attr_content (class_name, attr_type_str, attr_id), content, 0); + sdb_array_add (analysis->sdb_classes_attrs, key_attr_types (class_name), attr_type_str, 0); + sdb_array_add (analysis->sdb_classes_attrs, key_attr_type_attrs (class_name, attr_type_str), attr_id, 0); + sdb_set (analysis->sdb_classes_attrs, key_attr_content (class_name, attr_type_str, attr_id), content, 0); RzEventClassAttrSet event = { .attr = { @@ -257,13 +257,13 @@ static RzAnalClassErr rz_anal_class_set_attr_raw(RzAnal *anal, const char *class }, .content = content }; - rz_event_send (anal->ev, RZ_EVENT_CLASS_ATTR_SET, &event); + rz_event_send (analysis->ev, RZ_EVENT_CLASS_ATTR_SET, &event); return RZ_ANAL_CLASS_ERR_SUCCESS; } // ids will be sanitized automatically -static RzAnalClassErr rz_anal_class_set_attr(RzAnal *anal, const char *class_name, RzAnalClassAttrType attr_type, const char *attr_id, const char *content) { +static RzAnalysisClassErr rz_analysis_class_set_attr(RzAnalysis *analysis, const char *class_name, RzAnalysisClassAttrType attr_type, const char *attr_id, const char *content) { char *class_name_sanitized = rz_str_sanitize_sdb_key (class_name); if (!class_name_sanitized) { return RZ_ANAL_CLASS_ERR_OTHER; @@ -275,7 +275,7 @@ static RzAnalClassErr rz_anal_class_set_attr(RzAnal *anal, const char *class_nam return RZ_ANAL_CLASS_ERR_OTHER; } - RzAnalClassErr err = rz_anal_class_set_attr_raw (anal, class_name_sanitized, attr_type, attr_id_sanitized, content); + RzAnalysisClassErr err = rz_analysis_class_set_attr_raw (analysis, class_name_sanitized, attr_type, attr_id_sanitized, content); free (class_name_sanitized); free (attr_id_sanitized); @@ -283,18 +283,18 @@ static RzAnalClassErr rz_anal_class_set_attr(RzAnal *anal, const char *class_nam return err; } -static RzAnalClassErr rz_anal_class_delete_attr_raw(RzAnal *anal, const char *class_name, RzAnalClassAttrType attr_type, const char *attr_id) { +static RzAnalysisClassErr rz_analysis_class_delete_attr_raw(RzAnalysis *analysis, const char *class_name, RzAnalysisClassAttrType attr_type, const char *attr_id) { const char *attr_type_str = attr_type_id (attr_type); char *key = key_attr_content (class_name, attr_type_str, attr_id); - sdb_remove (anal->sdb_classes_attrs, key, 0); + sdb_remove (analysis->sdb_classes_attrs, key, 0); key = key_attr_content_specific (class_name, attr_type_str, attr_id); - sdb_remove (anal->sdb_classes_attrs, key, 0); + sdb_remove (analysis->sdb_classes_attrs, key, 0); key = key_attr_type_attrs (class_name, attr_type_str); - sdb_array_remove (anal->sdb_classes_attrs, key, attr_id, 0); - if (!sdb_exists (anal->sdb_classes_attrs, key)) { - sdb_array_remove (anal->sdb_classes_attrs, key_attr_types (class_name), attr_type_str, 0); + sdb_array_remove (analysis->sdb_classes_attrs, key, attr_id, 0); + if (!sdb_exists (analysis->sdb_classes_attrs, key)) { + sdb_array_remove (analysis->sdb_classes_attrs, key_attr_types (class_name), attr_type_str, 0); } RzEventClassAttr event = { @@ -302,12 +302,12 @@ static RzAnalClassErr rz_anal_class_delete_attr_raw(RzAnal *anal, const char *cl .attr_type = attr_type, .attr_id = attr_id }; - rz_event_send (anal->ev, RZ_EVENT_CLASS_ATTR_DEL, &event); + rz_event_send (analysis->ev, RZ_EVENT_CLASS_ATTR_DEL, &event); return RZ_ANAL_CLASS_ERR_SUCCESS; } -static RzAnalClassErr rz_anal_class_delete_attr(RzAnal *anal, const char *class_name, RzAnalClassAttrType attr_type, const char *attr_id) { +static RzAnalysisClassErr rz_analysis_class_delete_attr(RzAnalysis *analysis, const char *class_name, RzAnalysisClassAttrType attr_type, const char *attr_id) { char *class_name_sanitized = rz_str_sanitize_sdb_key (class_name); if (!class_name_sanitized) { return RZ_ANAL_CLASS_ERR_OTHER; @@ -319,42 +319,42 @@ static RzAnalClassErr rz_anal_class_delete_attr(RzAnal *anal, const char *class_ return RZ_ANAL_CLASS_ERR_OTHER; } - RzAnalClassErr err = rz_anal_class_delete_attr_raw (anal, class_name_sanitized, attr_type, attr_id_sanitized); + RzAnalysisClassErr err = rz_analysis_class_delete_attr_raw (analysis, class_name_sanitized, attr_type, attr_id_sanitized); free (class_name_sanitized); free (attr_id_sanitized); return err; } -static RzAnalClassErr rz_anal_class_rename_attr_raw(RzAnal *anal, const char *class_name, RzAnalClassAttrType attr_type, const char *attr_id_old, const char *attr_id_new) { +static RzAnalysisClassErr rz_analysis_class_rename_attr_raw(RzAnalysis *analysis, const char *class_name, RzAnalysisClassAttrType attr_type, const char *attr_id_old, const char *attr_id_new) { const char *attr_type_str = attr_type_id (attr_type); char *key = key_attr_type_attrs (class_name, attr_type_str); - if (sdb_array_contains (anal->sdb_classes_attrs, key, attr_id_new, 0)) { + if (sdb_array_contains (analysis->sdb_classes_attrs, key, attr_id_new, 0)) { return RZ_ANAL_CLASS_ERR_CLASH; } - if (!sdb_array_remove (anal->sdb_classes_attrs, key, attr_id_old, 0)) { + if (!sdb_array_remove (analysis->sdb_classes_attrs, key, attr_id_old, 0)) { return RZ_ANAL_CLASS_ERR_NONEXISTENT_ATTR; } - sdb_array_add (anal->sdb_classes_attrs, key, attr_id_new, 0); + sdb_array_add (analysis->sdb_classes_attrs, key, attr_id_new, 0); key = key_attr_content (class_name, attr_type_str, attr_id_old); - char *content = sdb_get (anal->sdb_classes_attrs, key, 0); + char *content = sdb_get (analysis->sdb_classes_attrs, key, 0); if (content) { - sdb_remove (anal->sdb_classes_attrs, key, 0); + sdb_remove (analysis->sdb_classes_attrs, key, 0); key = key_attr_content (class_name, attr_type_str, attr_id_new); - sdb_set (anal->sdb_classes_attrs, key, content, 0); + sdb_set (analysis->sdb_classes_attrs, key, content, 0); free (content); } key = key_attr_content_specific (class_name, attr_type_str, attr_id_old); - content = sdb_get (anal->sdb_classes_attrs, key, 0); + content = sdb_get (analysis->sdb_classes_attrs, key, 0); if (content) { - sdb_remove (anal->sdb_classes_attrs, key, 0); + sdb_remove (analysis->sdb_classes_attrs, key, 0); key = key_attr_content_specific (class_name, attr_type_str, attr_id_new); - sdb_set (anal->sdb_classes_attrs, key, content, 0); + sdb_set (analysis->sdb_classes_attrs, key, content, 0); free (content); } @@ -366,12 +366,12 @@ static RzAnalClassErr rz_anal_class_rename_attr_raw(RzAnal *anal, const char *cl }, .attr_id_new = attr_id_new }; - rz_event_send (anal->ev, RZ_EVENT_CLASS_ATTR_RENAME, &event); + rz_event_send (analysis->ev, RZ_EVENT_CLASS_ATTR_RENAME, &event); return RZ_ANAL_CLASS_ERR_SUCCESS; } -static RzAnalClassErr rz_anal_class_rename_attr(RzAnal *anal, const char *class_name, RzAnalClassAttrType attr_type, const char *attr_id_old, const char *attr_id_new) { +static RzAnalysisClassErr rz_analysis_class_rename_attr(RzAnalysis *analysis, const char *class_name, RzAnalysisClassAttrType attr_type, const char *attr_id_old, const char *attr_id_new) { char *class_name_sanitized = rz_str_sanitize_sdb_key (class_name); if (!class_name_sanitized) { return RZ_ANAL_CLASS_ERR_OTHER; @@ -387,20 +387,20 @@ static RzAnalClassErr rz_anal_class_rename_attr(RzAnal *anal, const char *class_ free (attr_id_old_sanitized); return RZ_ANAL_CLASS_ERR_OTHER; } - RzAnalClassErr ret = rz_anal_class_rename_attr_raw (anal, class_name_sanitized, attr_type, attr_id_old_sanitized, attr_id_new_sanitized); + RzAnalysisClassErr ret = rz_analysis_class_rename_attr_raw (analysis, class_name_sanitized, attr_type, attr_id_old_sanitized, attr_id_new_sanitized); free (class_name_sanitized); free (attr_id_old_sanitized); free (attr_id_new_sanitized); return ret; } -static void rz_anal_class_unique_attr_id_raw(RzAnal *anal, const char *class_name, RzAnalClassAttrType attr_type, char *out, size_t out_size) { +static void rz_analysis_class_unique_attr_id_raw(RzAnalysis *analysis, const char *class_name, RzAnalysisClassAttrType attr_type, char *out, size_t out_size) { ut64 id = 0; char *key = key_attr_type_attrs (class_name, attr_type_id (attr_type)); do { snprintf (out, out_size, "%"PFMT64u, id); id++; - } while (sdb_array_contains (anal->sdb_classes_attrs, key, out, 0)); + } while (sdb_array_contains (analysis->sdb_classes_attrs, key, out, 0)); } static char *flagname_attr(const char *attr_type, const char *class_name, const char *attr_id) { @@ -419,40 +419,40 @@ static char *flagname_attr(const char *attr_type, const char *class_name, const return r; } -static void rz_anal_class_set_flag(RzAnal *anal, const char *name, ut64 addr, ut32 size) { - if (!name || !anal->flg_class_set) { +static void rz_analysis_class_set_flag(RzAnalysis *analysis, const char *name, ut64 addr, ut32 size) { + if (!name || !analysis->flg_class_set) { return; } - anal->flg_class_set (anal->flb.f, name, addr, size); + analysis->flg_class_set (analysis->flb.f, name, addr, size); } -static void rz_anal_class_unset_flag(RzAnal *anal, const char *name) { - if (!name || !anal->flb.unset_name || !anal->flg_class_get) { +static void rz_analysis_class_unset_flag(RzAnalysis *analysis, const char *name) { + if (!name || !analysis->flb.unset_name || !analysis->flg_class_get) { return; } - if (anal->flg_class_get (anal->flb.f, name)) { - anal->flb.unset_name (anal->flb.f, name); + if (analysis->flg_class_get (analysis->flb.f, name)) { + analysis->flb.unset_name (analysis->flb.f, name); } } -static void rz_anal_class_rename_flag(RzAnal *anal, const char *old_name, const char *new_name) { - if (!old_name || !new_name || !anal->flb.unset || !anal->flg_class_get || !anal->flg_class_set) { +static void rz_analysis_class_rename_flag(RzAnalysis *analysis, const char *old_name, const char *new_name) { + if (!old_name || !new_name || !analysis->flb.unset || !analysis->flg_class_get || !analysis->flg_class_set) { return; } - RzFlagItem *flag = anal->flg_class_get (anal->flb.f, old_name); + RzFlagItem *flag = analysis->flg_class_get (analysis->flb.f, old_name); if (!flag) { return; } ut64 addr = flag->offset; - anal->flb.unset (anal->flb.f, flag); - anal->flg_class_set (anal->flb.f, new_name, addr, 0); + analysis->flb.unset (analysis->flb.f, flag); + analysis->flg_class_set (analysis->flb.f, new_name, addr, 0); } -static RzAnalClassErr rz_anal_class_add_attr_unique_raw(RzAnal *anal, const char *class_name, RzAnalClassAttrType attr_type, const char *content, char *attr_id_out, size_t attr_id_out_size) { +static RzAnalysisClassErr rz_analysis_class_add_attr_unique_raw(RzAnalysis *analysis, const char *class_name, RzAnalysisClassAttrType attr_type, const char *content, char *attr_id_out, size_t attr_id_out_size) { char attr_id[16]; - rz_anal_class_unique_attr_id_raw (anal, class_name, attr_type, attr_id, sizeof(attr_id)); + rz_analysis_class_unique_attr_id_raw (analysis, class_name, attr_type, attr_id, sizeof(attr_id)); - RzAnalClassErr err = rz_anal_class_set_attr (anal, class_name, attr_type, attr_id, content); + RzAnalysisClassErr err = rz_analysis_class_set_attr (analysis, class_name, attr_type, attr_id, content); if (err != RZ_ANAL_CLASS_ERR_SUCCESS) { return err; } @@ -464,13 +464,13 @@ static RzAnalClassErr rz_anal_class_add_attr_unique_raw(RzAnal *anal, const char return RZ_ANAL_CLASS_ERR_SUCCESS; } -static RzAnalClassErr rz_anal_class_add_attr_unique(RzAnal *anal, const char *class_name, RzAnalClassAttrType attr_type, const char *content, char *attr_id_out, size_t attr_id_out_size) { +static RzAnalysisClassErr rz_analysis_class_add_attr_unique(RzAnalysis *analysis, const char *class_name, RzAnalysisClassAttrType attr_type, const char *content, char *attr_id_out, size_t attr_id_out_size) { char *class_name_sanitized = rz_str_sanitize_sdb_key (class_name); if (!class_name_sanitized) { return RZ_ANAL_CLASS_ERR_OTHER; } - RzAnalClassErr err = rz_anal_class_add_attr_unique_raw (anal, class_name_sanitized, attr_type, content, attr_id_out, attr_id_out_size); + RzAnalysisClassErr err = rz_analysis_class_add_attr_unique_raw (analysis, class_name_sanitized, attr_type, content, attr_id_out, attr_id_out_size); free (class_name_sanitized); return err; @@ -484,14 +484,14 @@ static char *flagname_method(const char *class_name, const char *meth_name) { return flagname_attr ("method", class_name, meth_name); } -RZ_API void rz_anal_class_method_fini(RzAnalMethod *meth) { +RZ_API void rz_analysis_class_method_fini(RzAnalysisMethod *meth) { free (meth->name); } // if the method exists: store it in *meth and return RZ_ANAL_CLASS_ERR_SUCCESS // else return the error, contents of *meth are undefined -RZ_API RzAnalClassErr rz_anal_class_method_get(RzAnal *anal, const char *class_name, const char *meth_name, RzAnalMethod *meth) { - char *content = rz_anal_class_get_attr (anal, class_name, RZ_ANAL_CLASS_ATTR_TYPE_METHOD, meth_name, false); +RZ_API RzAnalysisClassErr rz_analysis_class_method_get(RzAnalysis *analysis, const char *class_name, const char *meth_name, RzAnalysisMethod *meth) { + char *content = rz_analysis_class_get_attr (analysis, class_name, RZ_ANAL_CLASS_ATTR_TYPE_METHOD, meth_name, false); if (!content) { return RZ_ANAL_CLASS_ERR_NONEXISTENT_ATTR; } @@ -521,14 +521,14 @@ RZ_API RzAnalClassErr rz_anal_class_method_get(RzAnal *anal, const char *class_n return RZ_ANAL_CLASS_ERR_SUCCESS; } -static void rz_anal_class_method_fini_proxy(void *e, void *user) { +static void rz_analysis_class_method_fini_proxy(void *e, void *user) { (void)user; - RzAnalMethod *meth = e; - rz_anal_class_method_fini (meth); + RzAnalysisMethod *meth = e; + rz_analysis_class_method_fini (meth); } -RZ_API RzVector/**/ *rz_anal_class_method_get_all(RzAnal *anal, const char *class_name) { - RzVector *vec = rz_vector_new (sizeof(RzAnalMethod), rz_anal_class_method_fini_proxy, NULL); +RZ_API RzVector/**/ *rz_analysis_class_method_get_all(RzAnalysis *analysis, const char *class_name) { + RzVector *vec = rz_vector_new (sizeof(RzAnalysisMethod), rz_analysis_class_method_fini_proxy, NULL); if (!vec) { return NULL; } @@ -538,14 +538,14 @@ RZ_API RzVector/**/ *rz_anal_class_method_get_all(RzAnal *anal, co rz_vector_free (vec); return NULL; } - char *array = sdb_get (anal->sdb_classes_attrs, key_attr_type_attrs (class_name_sanitized, attr_type_id (RZ_ANAL_CLASS_ATTR_TYPE_METHOD)), 0); + char *array = sdb_get (analysis->sdb_classes_attrs, key_attr_type_attrs (class_name_sanitized, attr_type_id (RZ_ANAL_CLASS_ATTR_TYPE_METHOD)), 0); free (class_name_sanitized); rz_vector_reserve (vec, (size_t) sdb_alen (array)); char *cur; sdb_aforeach (cur, array) { - RzAnalMethod meth; - if (rz_anal_class_method_get (anal, class_name, cur, &meth) == RZ_ANAL_CLASS_ERR_SUCCESS) { + RzAnalysisMethod meth; + if (rz_analysis_class_method_get (analysis, class_name, cur, &meth) == RZ_ANAL_CLASS_ERR_SUCCESS) { rz_vector_push (vec, &meth); } sdb_aforeach_next (cur); @@ -555,35 +555,35 @@ RZ_API RzVector/**/ *rz_anal_class_method_get_all(RzAnal *anal, co return vec; } -RZ_API RzAnalClassErr rz_anal_class_method_set(RzAnal *anal, const char *class_name, RzAnalMethod *meth) { +RZ_API RzAnalysisClassErr rz_analysis_class_method_set(RzAnalysis *analysis, const char *class_name, RzAnalysisMethod *meth) { char *content = sdb_fmt ("%"PFMT64u"%c%"PFMT64d, meth->addr, SDB_RS, meth->vtable_offset); - RzAnalClassErr err = rz_anal_class_set_attr (anal, class_name, RZ_ANAL_CLASS_ATTR_TYPE_METHOD, meth->name, content); + RzAnalysisClassErr err = rz_analysis_class_set_attr (analysis, class_name, RZ_ANAL_CLASS_ATTR_TYPE_METHOD, meth->name, content); if (err != RZ_ANAL_CLASS_ERR_SUCCESS) { return err; } - rz_anal_class_set_flag (anal, flagname_method (class_name, meth->name), meth->addr, 0); + rz_analysis_class_set_flag (analysis, flagname_method (class_name, meth->name), meth->addr, 0); return RZ_ANAL_CLASS_ERR_SUCCESS; } -RZ_API RzAnalClassErr rz_anal_class_method_rename(RzAnal *anal, const char *class_name, const char *old_meth_name, const char *new_meth_name) { - RzAnalClassErr err = rz_anal_class_rename_attr (anal, class_name, RZ_ANAL_CLASS_ATTR_TYPE_METHOD, old_meth_name, new_meth_name); +RZ_API RzAnalysisClassErr rz_analysis_class_method_rename(RzAnalysis *analysis, const char *class_name, const char *old_meth_name, const char *new_meth_name) { + RzAnalysisClassErr err = rz_analysis_class_rename_attr (analysis, class_name, RZ_ANAL_CLASS_ATTR_TYPE_METHOD, old_meth_name, new_meth_name); if (err != RZ_ANAL_CLASS_ERR_SUCCESS) { return err; } - rz_anal_class_rename_flag (anal, + rz_analysis_class_rename_flag (analysis, flagname_method (class_name, old_meth_name), flagname_method (class_name, new_meth_name)); return RZ_ANAL_CLASS_ERR_SUCCESS; } -static void rz_anal_class_method_rename_class(RzAnal *anal, const char *old_class_name, const char *new_class_name) { - char *array = sdb_get (anal->sdb_classes_attrs, key_attr_type_attrs (old_class_name, attr_type_id (RZ_ANAL_CLASS_ATTR_TYPE_METHOD)), 0); +static void rz_analysis_class_method_rename_class(RzAnalysis *analysis, const char *old_class_name, const char *new_class_name) { + char *array = sdb_get (analysis->sdb_classes_attrs, key_attr_type_attrs (old_class_name, attr_type_id (RZ_ANAL_CLASS_ATTR_TYPE_METHOD)), 0); if (!array) { return; } char *cur; sdb_aforeach (cur, array) { - rz_anal_class_rename_flag (anal, + rz_analysis_class_rename_flag (analysis, flagname_method (old_class_name, cur), flagname_method (new_class_name, cur)); sdb_aforeach_next (cur); @@ -591,20 +591,20 @@ static void rz_anal_class_method_rename_class(RzAnal *anal, const char *old_clas free (array); } -static void rz_anal_class_method_delete_class(RzAnal *anal, const char *class_name) { - char *array = sdb_get (anal->sdb_classes_attrs, key_attr_type_attrs (class_name, attr_type_id (RZ_ANAL_CLASS_ATTR_TYPE_METHOD)), 0); +static void rz_analysis_class_method_delete_class(RzAnalysis *analysis, const char *class_name) { + char *array = sdb_get (analysis->sdb_classes_attrs, key_attr_type_attrs (class_name, attr_type_id (RZ_ANAL_CLASS_ATTR_TYPE_METHOD)), 0); if (!array) { return; } char *cur; sdb_aforeach (cur, array) { - rz_anal_class_unset_flag (anal, flagname_method (class_name, cur)); + rz_analysis_class_unset_flag (analysis, flagname_method (class_name, cur)); sdb_aforeach_next (cur); } free (array); } -RZ_API RzAnalClassErr rz_anal_class_method_delete(RzAnal *anal, const char *class_name, const char *meth_name) { +RZ_API RzAnalysisClassErr rz_analysis_class_method_delete(RzAnalysis *analysis, const char *class_name, const char *meth_name) { char *class_name_sanitized = rz_str_sanitize_sdb_key (class_name); if (!class_name_sanitized) { return RZ_ANAL_CLASS_ERR_OTHER; @@ -614,9 +614,9 @@ RZ_API RzAnalClassErr rz_anal_class_method_delete(RzAnal *anal, const char *clas free (class_name_sanitized); return RZ_ANAL_CLASS_ERR_OTHER; } - RzAnalClassErr err = rz_anal_class_delete_attr_raw (anal, class_name_sanitized, RZ_ANAL_CLASS_ATTR_TYPE_METHOD, meth_name_sanitized); + RzAnalysisClassErr err = rz_analysis_class_delete_attr_raw (analysis, class_name_sanitized, RZ_ANAL_CLASS_ATTR_TYPE_METHOD, meth_name_sanitized); if (err == RZ_ANAL_CLASS_ERR_SUCCESS) { - rz_anal_class_unset_flag (anal, flagname_method (class_name_sanitized, meth_name_sanitized)); + rz_analysis_class_unset_flag (analysis, flagname_method (class_name_sanitized, meth_name_sanitized)); } free (class_name_sanitized); free (meth_name_sanitized); @@ -626,13 +626,13 @@ RZ_API RzAnalClassErr rz_anal_class_method_delete(RzAnal *anal, const char *clas // ---- BASE ---- -RZ_API void rz_anal_class_base_fini(RzAnalBaseClass *base) { +RZ_API void rz_analysis_class_base_fini(RzAnalysisBaseClass *base) { free (base->id); free (base->class_name); } -RZ_API RzAnalClassErr rz_anal_class_base_get(RzAnal *anal, const char *class_name, const char *base_id, RzAnalBaseClass *base) { - char *content = rz_anal_class_get_attr (anal, class_name, RZ_ANAL_CLASS_ATTR_TYPE_BASE, base_id, false); +RZ_API RzAnalysisClassErr rz_analysis_class_base_get(RzAnalysis *analysis, const char *class_name, const char *base_id, RzAnalysisBaseClass *base) { + char *content = rz_analysis_class_get_attr (analysis, class_name, RZ_ANAL_CLASS_ATTR_TYPE_BASE, base_id, false); if (!content) { return RZ_ANAL_CLASS_ERR_NONEXISTENT_ATTR; } @@ -668,14 +668,14 @@ RZ_API RzAnalClassErr rz_anal_class_base_get(RzAnal *anal, const char *class_nam return RZ_ANAL_CLASS_ERR_SUCCESS; } -static void rz_anal_class_base_fini_proxy(void *e, void *user) { +static void rz_analysis_class_base_fini_proxy(void *e, void *user) { (void)user; - RzAnalBaseClass *base = e; - rz_anal_class_base_fini (base); + RzAnalysisBaseClass *base = e; + rz_analysis_class_base_fini (base); } -RZ_API RzVector/**/ *rz_anal_class_base_get_all(RzAnal *anal, const char *class_name) { - RzVector *vec = rz_vector_new (sizeof(RzAnalBaseClass), rz_anal_class_base_fini_proxy, NULL); +RZ_API RzVector/**/ *rz_analysis_class_base_get_all(RzAnalysis *analysis, const char *class_name) { + RzVector *vec = rz_vector_new (sizeof(RzAnalysisBaseClass), rz_analysis_class_base_fini_proxy, NULL); if (!vec) { return NULL; } @@ -685,14 +685,14 @@ RZ_API RzVector/**/ *rz_anal_class_base_get_all(RzAnal *anal, c rz_vector_free (vec); return NULL; } - char *array = sdb_get (anal->sdb_classes_attrs, key_attr_type_attrs (class_name_sanitized, attr_type_id (RZ_ANAL_CLASS_ATTR_TYPE_BASE)), 0); + char *array = sdb_get (analysis->sdb_classes_attrs, key_attr_type_attrs (class_name_sanitized, attr_type_id (RZ_ANAL_CLASS_ATTR_TYPE_BASE)), 0); free (class_name_sanitized); rz_vector_reserve (vec, (size_t) sdb_alen (array)); char *cur; sdb_aforeach (cur, array) { - RzAnalBaseClass base; - if (rz_anal_class_base_get (anal, class_name, cur, &base) == RZ_ANAL_CLASS_ERR_SUCCESS) { + RzAnalysisBaseClass base; + if (rz_analysis_class_base_get (analysis, class_name, cur, &base) == RZ_ANAL_CLASS_ERR_SUCCESS) { rz_vector_push (vec, &base); } sdb_aforeach_next (cur); @@ -702,15 +702,15 @@ RZ_API RzVector/**/ *rz_anal_class_base_get_all(RzAnal *anal, c return vec; } -static RzAnalClassErr rz_anal_class_base_set_raw(RzAnal *anal, const char *class_name, RzAnalBaseClass *base, const char *base_class_name_sanitized) { +static RzAnalysisClassErr rz_analysis_class_base_set_raw(RzAnalysis *analysis, const char *class_name, RzAnalysisBaseClass *base, const char *base_class_name_sanitized) { char *content = sdb_fmt ("%s" SDB_SS "%"PFMT64u, base_class_name_sanitized, base->offset); - RzAnalClassErr err; + RzAnalysisClassErr err; if (base->id) { - err = rz_anal_class_set_attr (anal, class_name, RZ_ANAL_CLASS_ATTR_TYPE_BASE, base->id, content); + err = rz_analysis_class_set_attr (analysis, class_name, RZ_ANAL_CLASS_ATTR_TYPE_BASE, base->id, content); } else { base->id = malloc(16); if (base->id) { - err = rz_anal_class_add_attr_unique (anal, class_name, RZ_ANAL_CLASS_ATTR_TYPE_BASE, content, base->id, 16); + err = rz_analysis_class_add_attr_unique (analysis, class_name, RZ_ANAL_CLASS_ATTR_TYPE_BASE, content, base->id, 16); } else { err = RZ_ANAL_CLASS_ERR_OTHER; } @@ -718,19 +718,19 @@ static RzAnalClassErr rz_anal_class_base_set_raw(RzAnal *anal, const char *class return err; } -RZ_API RzAnalClassErr rz_anal_class_base_set(RzAnal *anal, const char *class_name, RzAnalBaseClass *base) { +RZ_API RzAnalysisClassErr rz_analysis_class_base_set(RzAnalysis *analysis, const char *class_name, RzAnalysisBaseClass *base) { char *base_class_name_sanitized = rz_str_sanitize_sdb_key (base->class_name); if (!base_class_name_sanitized) { return RZ_ANAL_CLASS_ERR_OTHER; } - if (!rz_anal_class_exists_raw (anal, base_class_name_sanitized)) { + if (!rz_analysis_class_exists_raw (analysis, base_class_name_sanitized)) { free (base_class_name_sanitized); return RZ_ANAL_CLASS_ERR_NONEXISTENT_CLASS; } - RzVector /**/ *bases = rz_anal_class_base_get_all (anal, class_name); + RzVector /**/ *bases = rz_analysis_class_base_get_all (analysis, class_name); if (bases) { - RzAnalBaseClass *existing_base; + RzAnalysisBaseClass *existing_base; rz_vector_foreach (bases, existing_base) { if (!strcmp (existing_base->class_name, base->class_name)) { free (base_class_name_sanitized); @@ -739,63 +739,63 @@ RZ_API RzAnalClassErr rz_anal_class_base_set(RzAnal *anal, const char *class_nam } } } - RzAnalClassErr err = rz_anal_class_base_set_raw (anal, class_name, base, base_class_name_sanitized); + RzAnalysisClassErr err = rz_analysis_class_base_set_raw (analysis, class_name, base, base_class_name_sanitized); free (base_class_name_sanitized); rz_vector_free (bases); return err; } -RZ_API RzAnalClassErr rz_anal_class_base_delete(RzAnal *anal, const char *class_name, const char *base_id) { - return rz_anal_class_delete_attr (anal, class_name, RZ_ANAL_CLASS_ATTR_TYPE_BASE, base_id); +RZ_API RzAnalysisClassErr rz_analysis_class_base_delete(RzAnalysis *analysis, const char *class_name, const char *base_id) { + return rz_analysis_class_delete_attr (analysis, class_name, RZ_ANAL_CLASS_ATTR_TYPE_BASE, base_id); } typedef struct { - RzAnal *anal; + RzAnalysis *analysis; const char *class_name; } DeleteClassCtx; -static bool rz_anal_class_base_delete_class_cb(void *user, const char *k, const char *v) { +static bool rz_analysis_class_base_delete_class_cb(void *user, const char *k, const char *v) { (void)v; DeleteClassCtx *ctx = user; - RzVector *bases = rz_anal_class_base_get_all (ctx->anal, k); - RzAnalBaseClass *base; + RzVector *bases = rz_analysis_class_base_get_all (ctx->analysis, k); + RzAnalysisBaseClass *base; rz_vector_foreach (bases, base) { if (base->class_name && strcmp (base->class_name, ctx->class_name) == 0) { - rz_anal_class_base_delete (ctx->anal, k, base->id); + rz_analysis_class_base_delete (ctx->analysis, k, base->id); } } rz_vector_free (bases); return true; } -static void rz_anal_class_base_delete_class(RzAnal *anal, const char *class_name) { - DeleteClassCtx ctx = { anal, class_name }; - rz_anal_class_foreach (anal, rz_anal_class_base_delete_class_cb, &ctx); +static void rz_analysis_class_base_delete_class(RzAnalysis *analysis, const char *class_name) { + DeleteClassCtx ctx = { analysis, class_name }; + rz_analysis_class_foreach (analysis, rz_analysis_class_base_delete_class_cb, &ctx); } typedef struct { - RzAnal *anal; + RzAnalysis *analysis; const char *class_name_old; const char *class_name_new; } RenameClassCtx; -static bool rz_anal_class_base_rename_class_cb(void *user, const char *k, const char *v) { +static bool rz_analysis_class_base_rename_class_cb(void *user, const char *k, const char *v) { (void)v; RenameClassCtx *ctx = user; - RzVector *bases = rz_anal_class_base_get_all (ctx->anal, k); - RzAnalBaseClass *base; + RzVector *bases = rz_analysis_class_base_get_all (ctx->analysis, k); + RzAnalysisBaseClass *base; rz_vector_foreach (bases, base) { if (base->class_name && strcmp (base->class_name, ctx->class_name_old) == 0) { - rz_anal_class_base_set_raw (ctx->anal, k, base, ctx->class_name_new); + rz_analysis_class_base_set_raw (ctx->analysis, k, base, ctx->class_name_new); } } rz_vector_free (bases); return 1; } -static void rz_anal_class_base_rename_class(RzAnal *anal, const char *class_name_old, const char *class_name_new) { - RenameClassCtx ctx = { anal, class_name_old, class_name_new }; - rz_anal_class_foreach (anal, rz_anal_class_base_rename_class_cb, &ctx); +static void rz_analysis_class_base_rename_class(RzAnalysis *analysis, const char *class_name_old, const char *class_name_new) { + RenameClassCtx ctx = { analysis, class_name_old, class_name_new }; + rz_analysis_class_foreach (analysis, rz_analysis_class_base_rename_class_cb, &ctx); } // ---- VTABLE ---- @@ -804,12 +804,12 @@ static char *flagname_vtable(const char *class_name, const char *vtable_id) { return flagname_attr ("vtable", class_name, vtable_id); } -RZ_API void rz_anal_class_vtable_fini(RzAnalVTable *vtable) { +RZ_API void rz_analysis_class_vtable_fini(RzAnalysisVTable *vtable) { free (vtable->id); } -RZ_API RzAnalClassErr rz_anal_class_vtable_get(RzAnal *anal, const char *class_name, const char *vtable_id, RzAnalVTable *vtable) { - char *content = rz_anal_class_get_attr (anal, class_name, RZ_ANAL_CLASS_ATTR_TYPE_VTABLE, vtable_id, false); +RZ_API RzAnalysisClassErr rz_analysis_class_vtable_get(RzAnalysis *analysis, const char *class_name, const char *vtable_id, RzAnalysisVTable *vtable) { + char *content = rz_analysis_class_get_attr (analysis, class_name, RZ_ANAL_CLASS_ATTR_TYPE_VTABLE, vtable_id, false); if (!content) { return RZ_ANAL_CLASS_ERR_NONEXISTENT_ATTR; } @@ -847,14 +847,14 @@ RZ_API RzAnalClassErr rz_anal_class_vtable_get(RzAnal *anal, const char *class_n return RZ_ANAL_CLASS_ERR_SUCCESS; } -static void rz_anal_class_vtable_fini_proxy(void *e, void *user) { +static void rz_analysis_class_vtable_fini_proxy(void *e, void *user) { (void)user; - RzAnalVTable *vtable = e; - rz_anal_class_vtable_fini (vtable); + RzAnalysisVTable *vtable = e; + rz_analysis_class_vtable_fini (vtable); } -RZ_API RzVector/**/ *rz_anal_class_vtable_get_all(RzAnal *anal, const char *class_name) { - RzVector *vec = rz_vector_new (sizeof(RzAnalVTable), rz_anal_class_vtable_fini_proxy, NULL); +RZ_API RzVector/**/ *rz_analysis_class_vtable_get_all(RzAnalysis *analysis, const char *class_name) { + RzVector *vec = rz_vector_new (sizeof(RzAnalysisVTable), rz_analysis_class_vtable_fini_proxy, NULL); if (!vec) { return NULL; } @@ -864,14 +864,14 @@ RZ_API RzVector/**/ *rz_anal_class_vtable_get_all(RzAnal *anal, co rz_vector_free (vec); return NULL; } - char *array = sdb_get (anal->sdb_classes_attrs, key_attr_type_attrs (class_name_sanitized, attr_type_id (RZ_ANAL_CLASS_ATTR_TYPE_VTABLE)), 0); + char *array = sdb_get (analysis->sdb_classes_attrs, key_attr_type_attrs (class_name_sanitized, attr_type_id (RZ_ANAL_CLASS_ATTR_TYPE_VTABLE)), 0); free (class_name_sanitized); rz_vector_reserve (vec, (size_t) sdb_alen (array)); char *cur; sdb_aforeach (cur, array) { - RzAnalVTable vtable; - if (rz_anal_class_vtable_get (anal, class_name, cur, &vtable) == RZ_ANAL_CLASS_ERR_SUCCESS) { + RzAnalysisVTable vtable; + if (rz_analysis_class_vtable_get (analysis, class_name, cur, &vtable) == RZ_ANAL_CLASS_ERR_SUCCESS) { rz_vector_push (vec, &vtable); } sdb_aforeach_next (cur); @@ -881,33 +881,33 @@ RZ_API RzVector/**/ *rz_anal_class_vtable_get_all(RzAnal *anal, co return vec; } -RZ_API RzAnalClassErr rz_anal_class_vtable_set(RzAnal *anal, const char *class_name, RzAnalVTable *vtable) { +RZ_API RzAnalysisClassErr rz_analysis_class_vtable_set(RzAnalysis *analysis, const char *class_name, RzAnalysisVTable *vtable) { char *content = sdb_fmt ("0x%"PFMT64x SDB_SS "%"PFMT64u SDB_SS "%"PFMT64u, vtable->addr, vtable->offset, vtable->size); if (vtable->id) { - return rz_anal_class_set_attr (anal, class_name, RZ_ANAL_CLASS_ATTR_TYPE_VTABLE, vtable->id, content); + return rz_analysis_class_set_attr (analysis, class_name, RZ_ANAL_CLASS_ATTR_TYPE_VTABLE, vtable->id, content); } vtable->id = malloc(16); if (!vtable->id) { return RZ_ANAL_CLASS_ERR_OTHER; } - RzAnalClassErr err = rz_anal_class_add_attr_unique (anal, class_name, RZ_ANAL_CLASS_ATTR_TYPE_VTABLE, content, vtable->id, 16); + RzAnalysisClassErr err = rz_analysis_class_add_attr_unique (analysis, class_name, RZ_ANAL_CLASS_ATTR_TYPE_VTABLE, content, vtable->id, 16); if (err != RZ_ANAL_CLASS_ERR_SUCCESS) { return err; } - rz_anal_class_set_flag (anal, flagname_vtable (class_name, vtable->id), vtable->addr, vtable->size); + rz_analysis_class_set_flag (analysis, flagname_vtable (class_name, vtable->id), vtable->addr, vtable->size); return RZ_ANAL_CLASS_ERR_SUCCESS; } -static void rz_anal_class_vtable_rename_class(RzAnal *anal, const char *old_class_name, const char *new_class_name) { - char *array = sdb_get (anal->sdb_classes_attrs, key_attr_type_attrs (old_class_name, attr_type_id (RZ_ANAL_CLASS_ATTR_TYPE_VTABLE)), 0); +static void rz_analysis_class_vtable_rename_class(RzAnalysis *analysis, const char *old_class_name, const char *new_class_name) { + char *array = sdb_get (analysis->sdb_classes_attrs, key_attr_type_attrs (old_class_name, attr_type_id (RZ_ANAL_CLASS_ATTR_TYPE_VTABLE)), 0); if (!array) { return; } char *cur; sdb_aforeach (cur, array) { - rz_anal_class_rename_flag (anal, + rz_analysis_class_rename_flag (analysis, flagname_vtable (old_class_name, cur), flagname_vtable (new_class_name, cur)); sdb_aforeach_next (cur); @@ -915,20 +915,20 @@ static void rz_anal_class_vtable_rename_class(RzAnal *anal, const char *old_clas free (array); } -static void rz_anal_class_vtable_delete_class(RzAnal *anal, const char *class_name) { - char *array = sdb_get (anal->sdb_classes_attrs, key_attr_type_attrs (class_name, attr_type_id (RZ_ANAL_CLASS_ATTR_TYPE_VTABLE)), 0); +static void rz_analysis_class_vtable_delete_class(RzAnalysis *analysis, const char *class_name) { + char *array = sdb_get (analysis->sdb_classes_attrs, key_attr_type_attrs (class_name, attr_type_id (RZ_ANAL_CLASS_ATTR_TYPE_VTABLE)), 0); if (!array) { return; } char *cur; sdb_aforeach (cur, array) { - rz_anal_class_unset_flag (anal, flagname_vtable (class_name, cur)); + rz_analysis_class_unset_flag (analysis, flagname_vtable (class_name, cur)); sdb_aforeach_next (cur); } free (array); } -RZ_API RzAnalClassErr rz_anal_class_vtable_delete(RzAnal *anal, const char *class_name, const char *vtable_id) { +RZ_API RzAnalysisClassErr rz_analysis_class_vtable_delete(RzAnalysis *analysis, const char *class_name, const char *vtable_id) { char *class_name_sanitized = rz_str_sanitize_sdb_key (class_name); if (!class_name_sanitized) { return RZ_ANAL_CLASS_ERR_OTHER; @@ -938,9 +938,9 @@ RZ_API RzAnalClassErr rz_anal_class_vtable_delete(RzAnal *anal, const char *clas free (class_name_sanitized); return RZ_ANAL_CLASS_ERR_OTHER; } - RzAnalClassErr err = rz_anal_class_delete_attr_raw (anal, class_name_sanitized, RZ_ANAL_CLASS_ATTR_TYPE_VTABLE, vtable_id_sanitized); + RzAnalysisClassErr err = rz_analysis_class_delete_attr_raw (analysis, class_name_sanitized, RZ_ANAL_CLASS_ATTR_TYPE_VTABLE, vtable_id_sanitized); if (err == RZ_ANAL_CLASS_ERR_SUCCESS) { - rz_anal_class_unset_flag (anal, flagname_vtable (class_name_sanitized, vtable_id_sanitized)); + rz_analysis_class_unset_flag (analysis, flagname_vtable (class_name_sanitized, vtable_id_sanitized)); } free (class_name_sanitized); free (vtable_id_sanitized); @@ -951,12 +951,12 @@ RZ_API RzAnalClassErr rz_anal_class_vtable_delete(RzAnal *anal, const char *clas // ---- PRINT ---- -RZ_API void rz_anal_class_print(RzAnal *anal, const char *class_name, bool detailed) { +RZ_API void rz_analysis_class_print(RzAnalysis *analysis, const char *class_name, bool detailed) { rz_cons_print (class_name); - RzVector *bases = rz_anal_class_base_get_all (anal, class_name); + RzVector *bases = rz_analysis_class_base_get_all (analysis, class_name); if (bases) { - RzAnalBaseClass *base; + RzAnalysisBaseClass *base; bool first = true; rz_vector_foreach (bases, base) { if (first) { @@ -974,9 +974,9 @@ RZ_API void rz_anal_class_print(RzAnal *anal, const char *class_name, bool detai if (detailed) { - RzVector *vtables = rz_anal_class_vtable_get_all (anal, class_name); + RzVector *vtables = rz_analysis_class_vtable_get_all (analysis, class_name); if (vtables) { - RzAnalVTable *vtable; + RzAnalysisVTable *vtable; rz_vector_foreach (vtables, vtable) { rz_cons_printf (" (vtable at 0x%"PFMT64x, vtable->addr); if (vtable->offset > 0) { @@ -988,9 +988,9 @@ RZ_API void rz_anal_class_print(RzAnal *anal, const char *class_name, bool detai rz_vector_free (vtables); } - RzVector *methods = rz_anal_class_method_get_all (anal, class_name); + RzVector *methods = rz_analysis_class_method_get_all (analysis, class_name); if (methods) { - RzAnalMethod *meth; + RzAnalysisMethod *meth; rz_vector_foreach (methods, meth) { rz_cons_printf (" %s @ 0x%"PFMT64x, meth->name, meth->addr); if (meth->vtable_offset >= 0) { @@ -1004,28 +1004,28 @@ RZ_API void rz_anal_class_print(RzAnal *anal, const char *class_name, bool detai } } -static void rz_anal_class_print_cmd(RzAnal *anal, const char *class_name) { - RzVector *bases = rz_anal_class_base_get_all (anal, class_name); +static void rz_analysis_class_print_cmd(RzAnalysis *analysis, const char *class_name) { + RzVector *bases = rz_analysis_class_base_get_all (analysis, class_name); if (bases) { - RzAnalBaseClass *base; + RzAnalysisBaseClass *base; rz_vector_foreach (bases, base) { rz_cons_printf ("acb %s %s %"PFMT64u"\n", class_name, base->class_name, base->offset); } rz_vector_free (bases); } - RzVector *vtables = rz_anal_class_vtable_get_all (anal, class_name); + RzVector *vtables = rz_analysis_class_vtable_get_all (analysis, class_name); if (vtables) { - RzAnalVTable *vtable; + RzAnalysisVTable *vtable; rz_vector_foreach (vtables, vtable) { rz_cons_printf ("acv %s 0x%"PFMT64x" %"PFMT64u"\n", class_name, vtable->addr, vtable->offset); } rz_vector_free (vtables); } - RzVector *methods = rz_anal_class_method_get_all (anal, class_name); + RzVector *methods = rz_analysis_class_method_get_all (analysis, class_name); if (methods) { - RzAnalMethod *meth; + RzAnalysisMethod *meth; rz_vector_foreach (methods, meth) { rz_cons_printf ("acm %s %s 0x%"PFMT64x" %"PFMT64d"\n", class_name, meth->name, meth->addr, meth->vtable_offset); } @@ -1033,15 +1033,15 @@ static void rz_anal_class_print_cmd(RzAnal *anal, const char *class_name) { } } -RZ_API void rz_anal_class_json(RzAnal *anal, PJ *j, const char *class_name) { +RZ_API void rz_analysis_class_json(RzAnalysis *analysis, PJ *j, const char *class_name) { pj_o (j); pj_ks (j, "name", class_name); pj_k (j, "bases"); pj_a (j); - RzVector *bases = rz_anal_class_base_get_all (anal, class_name); + RzVector *bases = rz_analysis_class_base_get_all (analysis, class_name); if (bases) { - RzAnalBaseClass *base; + RzAnalysisBaseClass *base; rz_vector_foreach (bases, base) { pj_o (j); pj_ks (j, "id", base->id); @@ -1055,9 +1055,9 @@ RZ_API void rz_anal_class_json(RzAnal *anal, PJ *j, const char *class_name) { pj_k (j, "vtables"); pj_a (j); - RzVector *vtables = rz_anal_class_vtable_get_all (anal, class_name); + RzVector *vtables = rz_analysis_class_vtable_get_all (analysis, class_name); if (vtables) { - RzAnalVTable *vtable; + RzAnalysisVTable *vtable; rz_vector_foreach (vtables, vtable) { pj_o (j); pj_ks (j, "id", vtable->id); @@ -1070,9 +1070,9 @@ RZ_API void rz_anal_class_json(RzAnal *anal, PJ *j, const char *class_name) { pj_k (j, "methods"); pj_a (j); - RzVector *methods = rz_anal_class_method_get_all (anal, class_name); + RzVector *methods = rz_analysis_class_method_get_all (analysis, class_name); if (methods) { - RzAnalMethod *meth; + RzAnalysisMethod *meth; rz_vector_foreach (methods, meth) { pj_o (j); pj_ks (j, "name", meth->name); @@ -1090,40 +1090,40 @@ RZ_API void rz_anal_class_json(RzAnal *anal, PJ *j, const char *class_name) { } typedef struct { - RzAnal *anal; + RzAnalysis *analysis; PJ *j; } ListJsonCtx; -static bool rz_anal_class_list_json_cb(void *user, const char *k, const char *v) { +static bool rz_analysis_class_list_json_cb(void *user, const char *k, const char *v) { ListJsonCtx *ctx = user; - rz_anal_class_json (ctx->anal, ctx->j, k); + rz_analysis_class_json (ctx->analysis, ctx->j, k); return true; } -static void rz_anal_class_list_json(RzAnal *anal) { - PJ *j = anal->coreb.pjWithEncoding (anal->coreb.core); +static void rz_analysis_class_list_json(RzAnalysis *analysis) { + PJ *j = analysis->coreb.pjWithEncoding (analysis->coreb.core); if (!j) { return; } pj_a (j); ListJsonCtx ctx; - ctx.anal = anal; + ctx.analysis = analysis; ctx.j = j; - rz_anal_class_foreach (anal, rz_anal_class_list_json_cb, &ctx); + rz_analysis_class_foreach (analysis, rz_analysis_class_list_json_cb, &ctx); pj_end (j); rz_cons_printf ("%s\n", pj_string (j)); pj_free (j); } -RZ_API void rz_anal_class_list(RzAnal *anal, int mode) { +RZ_API void rz_analysis_class_list(RzAnalysis *analysis, int mode) { if (mode == 'j') { - rz_anal_class_list_json (anal); + rz_analysis_class_list_json (analysis); return; } - SdbList *classes = rz_anal_class_get_all (anal, mode != '*'); + SdbList *classes = rz_analysis_class_get_all (analysis, mode != '*'); SdbListIter *iter; SdbKv *kv; if (mode == '*') { @@ -1132,51 +1132,51 @@ RZ_API void rz_anal_class_list(RzAnal *anal, int mode) { rz_cons_printf ("ac %s\n", sdbkv_key (kv)); } ls_foreach (classes, iter, kv) { - rz_anal_class_print_cmd(anal, sdbkv_key (kv)); + rz_analysis_class_print_cmd(analysis, sdbkv_key (kv)); } } else { ls_foreach (classes, iter, kv) { - rz_anal_class_print (anal, sdbkv_key (kv), mode == 'l'); + rz_analysis_class_print (analysis, sdbkv_key (kv), mode == 'l'); } } ls_free (classes); } -RZ_API void rz_anal_class_list_bases(RzAnal *anal, const char *class_name) { +RZ_API void rz_analysis_class_list_bases(RzAnalysis *analysis, const char *class_name) { char *class_name_sanitized = rz_str_sanitize_sdb_key (class_name); if (!class_name_sanitized) { return; } - if (!rz_anal_class_exists_raw (anal, class_name_sanitized)) { + if (!rz_analysis_class_exists_raw (analysis, class_name_sanitized)) { free (class_name_sanitized); return; } rz_cons_printf ("%s:\n", class_name_sanitized); free (class_name_sanitized); - RzVector *bases = rz_anal_class_base_get_all (anal, class_name); - RzAnalBaseClass *base; + RzVector *bases = rz_analysis_class_base_get_all (analysis, class_name); + RzAnalysisBaseClass *base; rz_vector_foreach (bases, base) { rz_cons_printf (" %4s %s @ +0x%"PFMT64x"\n", base->id, base->class_name, base->offset); } rz_vector_free (bases); } -RZ_API void rz_anal_class_list_vtables(RzAnal *anal, const char *class_name) { +RZ_API void rz_analysis_class_list_vtables(RzAnalysis *analysis, const char *class_name) { char *class_name_sanitized = rz_str_sanitize_sdb_key (class_name); if (!class_name_sanitized) { return; } - if (!rz_anal_class_exists_raw (anal, class_name_sanitized)) { + if (!rz_analysis_class_exists_raw (analysis, class_name_sanitized)) { free (class_name_sanitized); return; } rz_cons_printf ("%s:\n", class_name_sanitized); free (class_name_sanitized); - RzVector *vtables = rz_anal_class_vtable_get_all (anal, class_name); + RzVector *vtables = rz_analysis_class_vtable_get_all (analysis, class_name); if (vtables) { - RzAnalVTable *vtable; + RzAnalysisVTable *vtable; rz_vector_foreach (vtables, vtable) { rz_cons_printf (" %4s vtable 0x%"PFMT64x" @ +0x%"PFMT64x" size:+0x%"PFMT64x"\n", vtable->id, vtable->addr, vtable->offset, vtable->size); } @@ -1184,14 +1184,14 @@ RZ_API void rz_anal_class_list_vtables(RzAnal *anal, const char *class_name) { } } -static void list_all_functions_at_vtable_offset(RzAnal *anal, const char *class_name, ut64 offset) { +static void list_all_functions_at_vtable_offset(RzAnalysis *analysis, const char *class_name, ut64 offset) { RVTableContext vtableContext; - rz_anal_vtable_begin (anal, &vtableContext); + rz_analysis_vtable_begin (analysis, &vtableContext); ut8 function_ptr_size = vtableContext.word_size; ut64 func_address; - RzVector *vtables = rz_anal_class_vtable_get_all (anal, class_name); - RzAnalVTable *vtable; + RzVector *vtables = rz_analysis_class_vtable_get_all (analysis, class_name); + RzAnalysisVTable *vtable; if (!vtables) { return; @@ -1202,32 +1202,32 @@ static void list_all_functions_at_vtable_offset(RzAnal *anal, const char *class_ continue; } - if (vtableContext.read_addr(anal, vtable->addr+offset, &func_address)) + if (vtableContext.read_addr(analysis, vtable->addr+offset, &func_address)) rz_cons_printf ("Function address: 0x%08"PFMT64x", in %s vtable %s\n", func_address, class_name, vtable->id); } rz_vector_free (vtables); } -RZ_API void rz_anal_class_list_vtable_offset_functions(RzAnal *anal, const char *class_name, ut64 offset) { +RZ_API void rz_analysis_class_list_vtable_offset_functions(RzAnalysis *analysis, const char *class_name, ut64 offset) { if (class_name) { char *class_name_sanitized = rz_str_sanitize_sdb_key (class_name); if (!class_name_sanitized) { return; } - if (!rz_anal_class_exists_raw (anal, class_name_sanitized)) { + if (!rz_analysis_class_exists_raw (analysis, class_name_sanitized)) { free (class_name_sanitized); return; } free (class_name_sanitized); - list_all_functions_at_vtable_offset (anal, class_name, offset); + list_all_functions_at_vtable_offset (analysis, class_name, offset); } else { - SdbList *classes = rz_anal_class_get_all (anal, true); + SdbList *classes = rz_analysis_class_get_all (analysis, true); SdbListIter *iter; SdbKv *kv; ls_foreach (classes, iter, kv) { const char *name = sdbkv_key (kv); - list_all_functions_at_vtable_offset (anal, name, offset); + list_all_functions_at_vtable_offset (analysis, name, offset); } ls_free (classes); } @@ -1237,16 +1237,16 @@ RZ_API void rz_anal_class_list_vtable_offset_functions(RzAnal *anal, const char * @brief Creates RzGraph from class inheritance information where * each node has RzGraphNodeInfo as generic data * - * @param anal + * @param analysis * @return RzGraph* NULL if failure */ -RZ_API RzGraph *rz_anal_class_get_inheritance_graph(RzAnal *anal) { - rz_return_val_if_fail (anal, NULL); +RZ_API RzGraph *rz_analysis_class_get_inheritance_graph(RzAnalysis *analysis) { + rz_return_val_if_fail (analysis, NULL); RzGraph *class_graph = rz_graph_new (); if (!class_graph) { return NULL; } - SdbList *classes = rz_anal_class_get_all (anal, true); + SdbList *classes = rz_analysis_class_get_all (analysis, true); if (!classes) { rz_graph_free (class_graph); return NULL; @@ -1272,8 +1272,8 @@ RZ_API RzGraph *rz_anal_class_get_inheritance_graph(RzAnal *anal) { ht_pp_insert (hashmap, name, curr_node); } // create edges between node and it's parents - RzVector *bases = rz_anal_class_base_get_all (anal, name); - RzAnalBaseClass *base; + RzVector *bases = rz_analysis_class_base_get_all (analysis, name); + RzAnalysisBaseClass *base; rz_vector_foreach (bases, base) { bool base_found = false; RzGraphNode *base_node = ht_pp_find (hashmap, base->class_name, &base_found); diff --git a/librz/anal/cond.c b/librz/analysis/cond.c similarity index 67% rename from librz/anal/cond.c rename to librz/analysis/cond.c index af24cd6948..29e2effd9c 100644 --- a/librz/anal/cond.c +++ b/librz/analysis/cond.c @@ -1,8 +1,8 @@ // SPDX-License-Identifier: LGPL-3.0-only -#include +#include -RZ_API const char *rz_anal_cond_tostring(int cc) { +RZ_API const char *rz_analysis_cond_tostring(int cc) { switch (cc) { case RZ_ANAL_COND_EQ: return "eq"; case RZ_ANAL_COND_NV: return "nv"; @@ -24,38 +24,38 @@ RZ_API const char *rz_anal_cond_tostring(int cc) { return "??"; } -RZ_API RzAnalCond *rz_anal_cond_new(void) { - return RZ_NEW0 (RzAnalCond); +RZ_API RzAnalysisCond *rz_analysis_cond_new(void) { + return RZ_NEW0 (RzAnalysisCond); } -RZ_API void rz_anal_cond_fini (RzAnalCond *c) { +RZ_API void rz_analysis_cond_fini (RzAnalysisCond *c) { if (!c) { return; } - rz_anal_value_free (c->arg[0]); - rz_anal_value_free (c->arg[1]); + rz_analysis_value_free (c->arg[0]); + rz_analysis_value_free (c->arg[1]); c->arg[0] = c->arg[1] = NULL; } -RZ_API void rz_anal_cond_free (RzAnalCond *c) { +RZ_API void rz_analysis_cond_free (RzAnalysisCond *c) { if (!c) { return; } - rz_anal_cond_fini (c); + rz_analysis_cond_fini (c); free (c); } // XXX? -RZ_API RzAnalCond *rz_anal_cond_clone(RzAnalCond *cond) { - RzAnalCond *c = RZ_NEW (RzAnalCond); +RZ_API RzAnalysisCond *rz_analysis_cond_clone(RzAnalysisCond *cond) { + RzAnalysisCond *c = RZ_NEW (RzAnalysisCond); if (!c) { return NULL; } - memcpy (c, cond, sizeof (RzAnalCond)); + memcpy (c, cond, sizeof (RzAnalysisCond)); return c; } -static inline const char *condstring(RzAnalCond *cond) { +static inline const char *condstring(RzAnalysisCond *cond) { const char *condstr_single[] = { "!", "", "0<", "0<=", "0>", "0>=" }; const char *condstr[] = { "==", "!=", ">=", ">", "<=", "<" }; if (cond) { @@ -68,11 +68,11 @@ static inline const char *condstring(RzAnalCond *cond) { return ""; } -RZ_API int rz_anal_cond_eval(RzAnal *anal, RzAnalCond *cond) { +RZ_API int rz_analysis_cond_eval(RzAnalysis *analysis, RzAnalysisCond *cond) { // XXX: sign issue here? - st64 arg0 = (st64) rz_anal_value_to_ut64 (anal, cond->arg[0]); + st64 arg0 = (st64) rz_analysis_value_to_ut64 (analysis, cond->arg[0]); if (cond->arg[1]) { - st64 arg1 = (st64) rz_anal_value_to_ut64 (anal, cond->arg[1]); + st64 arg1 = (st64) rz_analysis_value_to_ut64 (analysis, cond->arg[1]); switch (cond->type) { case RZ_ANAL_COND_EQ: return arg0 == arg1; case RZ_ANAL_COND_NE: return arg0 != arg1; @@ -95,15 +95,15 @@ RZ_API int rz_anal_cond_eval(RzAnal *anal, RzAnalCond *cond) { } // XXX conflict naming with tostring() -RZ_API char *rz_anal_cond_to_string(RzAnalCond *cond) { +RZ_API char *rz_analysis_cond_to_string(RzAnalysisCond *cond) { char *val0, *val1, *out = NULL; const char *cnd; if (!cond) { return NULL; } cnd = condstring (cond); - val0 = rz_anal_value_to_string (cond->arg[0]); - val1 = rz_anal_value_to_string (cond->arg[1]); + val0 = rz_analysis_value_to_string (cond->arg[0]); + val1 = rz_analysis_value_to_string (cond->arg[1]); if (val0) { if (RZ_ANAL_COND_SINGLE (cond)) { int val0len = strlen (val0) + 10; @@ -124,9 +124,9 @@ RZ_API char *rz_anal_cond_to_string(RzAnalCond *cond) { return out? out: strdup ("?"); } -RZ_API RzAnalCond *rz_anal_cond_new_from_op(RzAnalOp *op) { - RzAnalCond *cond; - if (!(cond = rz_anal_cond_new ())) { +RZ_API RzAnalysisCond *rz_analysis_cond_new_from_op(RzAnalysisOp *op) { + RzAnalysisCond *cond; + if (!(cond = rz_analysis_cond_new ())) { return NULL; } //v->reg[0] = op->src[0]; @@ -140,8 +140,8 @@ RZ_API RzAnalCond *rz_anal_cond_new_from_op(RzAnalOp *op) { return cond; } -RZ_API RzAnalCond *rz_anal_cond_new_from_string(const char *str) { - RzAnalCond *cond = RZ_NEW (RzAnalCond); +RZ_API RzAnalysisCond *rz_analysis_cond_new_from_string(const char *str) { + RzAnalysisCond *cond = RZ_NEW (RzAnalysisCond); // TODO: find '<','=','>','!'... return cond; } diff --git a/librz/anal/cycles.c b/librz/analysis/cycles.c similarity index 52% rename from librz/anal/cycles.c rename to librz/analysis/cycles.c index 8d58591a85..c3d824f36c 100644 --- a/librz/anal/cycles.c +++ b/librz/analysis/cycles.c @@ -1,11 +1,11 @@ // SPDX-License-Identifier: LGPL-3.0-only -#include +#include #include #include -RZ_API RzAnalCycleFrame *rz_anal_cycle_frame_new(void) { - RzAnalCycleFrame *cf = RZ_NEW0 (RzAnalCycleFrame); +RZ_API RzAnalysisCycleFrame *rz_analysis_cycle_frame_new(void) { + RzAnalysisCycleFrame *cf = RZ_NEW0 (RzAnalysisCycleFrame); if (cf) { if (!(cf->hooks = rz_list_new ())) { RZ_FREE (cf); @@ -14,7 +14,7 @@ RZ_API RzAnalCycleFrame *rz_anal_cycle_frame_new(void) { return cf; } -RZ_API void rz_anal_cycle_frame_free(RzAnalCycleFrame *cf) { +RZ_API void rz_analysis_cycle_frame_free(RzAnalysisCycleFrame *cf) { if (!cf) { return; } diff --git a/librz/anal/d/Makefile b/librz/analysis/d/Makefile similarity index 97% rename from librz/anal/d/Makefile rename to librz/analysis/d/Makefile index 7e59e3ec63..139faff334 100755 --- a/librz/anal/d/Makefile +++ b/librz/analysis/d/Makefile @@ -121,7 +121,7 @@ install: ${F_SDB} CWD=$(shell pwd) symstall install-symlink: ${F_SDB} cd ../../.. && mkdir -p "${FCNSIGNPATH}" && \ - for FILE in $(shell cd $(TOP)/librz/anal/d ; ls *.sdb); do \ + for FILE in $(shell cd $(TOP)/librz/analysis/d ; ls *.sdb); do \ ln -fs "$(CWD)/$$FILE" "$(FCNSIGNPATH)/$$FILE" ; \ done diff --git a/librz/anal/d/cc-arm-16.sdb.txt b/librz/analysis/d/cc-arm-16.sdb.txt similarity index 100% rename from librz/anal/d/cc-arm-16.sdb.txt rename to librz/analysis/d/cc-arm-16.sdb.txt diff --git a/librz/anal/d/cc-arm-32.sdb.txt b/librz/analysis/d/cc-arm-32.sdb.txt similarity index 100% rename from librz/anal/d/cc-arm-32.sdb.txt rename to librz/analysis/d/cc-arm-32.sdb.txt diff --git a/librz/anal/d/cc-arm-64.sdb.txt b/librz/analysis/d/cc-arm-64.sdb.txt similarity index 100% rename from librz/anal/d/cc-arm-64.sdb.txt rename to librz/analysis/d/cc-arm-64.sdb.txt diff --git a/librz/anal/d/cc-avr-8.sdb.txt b/librz/analysis/d/cc-avr-8.sdb.txt similarity index 100% rename from librz/anal/d/cc-avr-8.sdb.txt rename to librz/analysis/d/cc-avr-8.sdb.txt diff --git a/librz/anal/d/cc-hexagon-32.sdb.txt b/librz/analysis/d/cc-hexagon-32.sdb.txt similarity index 100% rename from librz/anal/d/cc-hexagon-32.sdb.txt rename to librz/analysis/d/cc-hexagon-32.sdb.txt diff --git a/librz/anal/d/cc-m68k-32.sdb.txt b/librz/analysis/d/cc-m68k-32.sdb.txt similarity index 100% rename from librz/anal/d/cc-m68k-32.sdb.txt rename to librz/analysis/d/cc-m68k-32.sdb.txt diff --git a/librz/anal/d/cc-mips-32.sdb.txt b/librz/analysis/d/cc-mips-32.sdb.txt similarity index 100% rename from librz/anal/d/cc-mips-32.sdb.txt rename to librz/analysis/d/cc-mips-32.sdb.txt diff --git a/librz/anal/d/cc-mips-64.sdb.txt b/librz/analysis/d/cc-mips-64.sdb.txt similarity index 100% rename from librz/anal/d/cc-mips-64.sdb.txt rename to librz/analysis/d/cc-mips-64.sdb.txt diff --git a/librz/anal/d/cc-ppc-32.sdb.txt b/librz/analysis/d/cc-ppc-32.sdb.txt similarity index 100% rename from librz/anal/d/cc-ppc-32.sdb.txt rename to librz/analysis/d/cc-ppc-32.sdb.txt diff --git a/librz/anal/d/cc-ppc-64.sdb.txt b/librz/analysis/d/cc-ppc-64.sdb.txt similarity index 100% rename from librz/anal/d/cc-ppc-64.sdb.txt rename to librz/analysis/d/cc-ppc-64.sdb.txt diff --git a/librz/anal/d/cc-riscv-64.sdb.txt b/librz/analysis/d/cc-riscv-64.sdb.txt similarity index 100% rename from librz/anal/d/cc-riscv-64.sdb.txt rename to librz/analysis/d/cc-riscv-64.sdb.txt diff --git a/librz/anal/d/cc-sh-32.sdb.txt b/librz/analysis/d/cc-sh-32.sdb.txt similarity index 100% rename from librz/anal/d/cc-sh-32.sdb.txt rename to librz/analysis/d/cc-sh-32.sdb.txt diff --git a/librz/anal/d/cc-sparc-32.sdb.txt b/librz/analysis/d/cc-sparc-32.sdb.txt similarity index 100% rename from librz/anal/d/cc-sparc-32.sdb.txt rename to librz/analysis/d/cc-sparc-32.sdb.txt diff --git a/librz/anal/d/cc-sysz-64.sdb.txt b/librz/analysis/d/cc-sysz-64.sdb.txt similarity index 100% rename from librz/anal/d/cc-sysz-64.sdb.txt rename to librz/analysis/d/cc-sysz-64.sdb.txt diff --git a/librz/anal/d/cc-x86-16.sdb.txt b/librz/analysis/d/cc-x86-16.sdb.txt similarity index 100% rename from librz/anal/d/cc-x86-16.sdb.txt rename to librz/analysis/d/cc-x86-16.sdb.txt diff --git a/librz/anal/d/cc-x86-32.sdb.txt b/librz/analysis/d/cc-x86-32.sdb.txt similarity index 100% rename from librz/anal/d/cc-x86-32.sdb.txt rename to librz/analysis/d/cc-x86-32.sdb.txt diff --git a/librz/anal/d/cc-x86-64.sdb.txt b/librz/analysis/d/cc-x86-64.sdb.txt similarity index 100% rename from librz/anal/d/cc-x86-64.sdb.txt rename to librz/analysis/d/cc-x86-64.sdb.txt diff --git a/librz/anal/d/cc-xtensa-32.sdb.txt b/librz/analysis/d/cc-xtensa-32.sdb.txt similarity index 100% rename from librz/anal/d/cc-xtensa-32.sdb.txt rename to librz/analysis/d/cc-xtensa-32.sdb.txt diff --git a/librz/anal/d/meson.build b/librz/analysis/d/meson.build similarity index 100% rename from librz/anal/d/meson.build rename to librz/analysis/d/meson.build diff --git a/librz/anal/d/spec.sdb.txt b/librz/analysis/d/spec.sdb.txt similarity index 100% rename from librz/anal/d/spec.sdb.txt rename to librz/analysis/d/spec.sdb.txt diff --git a/librz/anal/d/types-16.sdb.txt b/librz/analysis/d/types-16.sdb.txt similarity index 100% rename from librz/anal/d/types-16.sdb.txt rename to librz/analysis/d/types-16.sdb.txt diff --git a/librz/anal/d/types-32.sdb.txt b/librz/analysis/d/types-32.sdb.txt similarity index 100% rename from librz/anal/d/types-32.sdb.txt rename to librz/analysis/d/types-32.sdb.txt diff --git a/librz/anal/d/types-64.sdb.txt b/librz/analysis/d/types-64.sdb.txt similarity index 100% rename from librz/anal/d/types-64.sdb.txt rename to librz/analysis/d/types-64.sdb.txt diff --git a/librz/anal/d/types-android.sdb.txt b/librz/analysis/d/types-android.sdb.txt similarity index 100% rename from librz/anal/d/types-android.sdb.txt rename to librz/analysis/d/types-android.sdb.txt diff --git a/librz/anal/d/types-arm-ios-16.sdb.txt b/librz/analysis/d/types-arm-ios-16.sdb.txt similarity index 100% rename from librz/anal/d/types-arm-ios-16.sdb.txt rename to librz/analysis/d/types-arm-ios-16.sdb.txt diff --git a/librz/anal/d/types-arm-ios-32.sdb.txt b/librz/analysis/d/types-arm-ios-32.sdb.txt similarity index 100% rename from librz/anal/d/types-arm-ios-32.sdb.txt rename to librz/analysis/d/types-arm-ios-32.sdb.txt diff --git a/librz/anal/d/types-arm-ios-64.sdb.txt b/librz/analysis/d/types-arm-ios-64.sdb.txt similarity index 100% rename from librz/anal/d/types-arm-ios-64.sdb.txt rename to librz/analysis/d/types-arm-ios-64.sdb.txt diff --git a/librz/anal/d/types-darwin.sdb.txt b/librz/analysis/d/types-darwin.sdb.txt similarity index 100% rename from librz/anal/d/types-darwin.sdb.txt rename to librz/analysis/d/types-darwin.sdb.txt diff --git a/librz/anal/d/types-linux.sdb.txt b/librz/analysis/d/types-linux.sdb.txt similarity index 100% rename from librz/anal/d/types-linux.sdb.txt rename to librz/analysis/d/types-linux.sdb.txt diff --git a/librz/anal/d/types-windows.sdb.txt b/librz/analysis/d/types-windows.sdb.txt similarity index 100% rename from librz/anal/d/types-windows.sdb.txt rename to librz/analysis/d/types-windows.sdb.txt diff --git a/librz/anal/d/types-windows_bcrypt.sdb.txt b/librz/analysis/d/types-windows_bcrypt.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_bcrypt.sdb.txt rename to librz/analysis/d/types-windows_bcrypt.sdb.txt diff --git a/librz/anal/d/types-windows_cfgmgr32.sdb.txt b/librz/analysis/d/types-windows_cfgmgr32.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_cfgmgr32.sdb.txt rename to librz/analysis/d/types-windows_cfgmgr32.sdb.txt diff --git a/librz/anal/d/types-windows_combaseapi.sdb.txt b/librz/analysis/d/types-windows_combaseapi.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_combaseapi.sdb.txt rename to librz/analysis/d/types-windows_combaseapi.sdb.txt diff --git a/librz/anal/d/types-windows_commctrl.sdb.txt b/librz/analysis/d/types-windows_commctrl.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_commctrl.sdb.txt rename to librz/analysis/d/types-windows_commctrl.sdb.txt diff --git a/librz/anal/d/types-windows_consoleapi2.sdb.txt b/librz/analysis/d/types-windows_consoleapi2.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_consoleapi2.sdb.txt rename to librz/analysis/d/types-windows_consoleapi2.sdb.txt diff --git a/librz/anal/d/types-windows_dbghelp.sdb.txt b/librz/analysis/d/types-windows_dbghelp.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_dbghelp.sdb.txt rename to librz/analysis/d/types-windows_dbghelp.sdb.txt diff --git a/librz/anal/d/types-windows_evntrace.sdb.txt b/librz/analysis/d/types-windows_evntrace.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_evntrace.sdb.txt rename to librz/analysis/d/types-windows_evntrace.sdb.txt diff --git a/librz/anal/d/types-windows_fileapi.sdb.txt b/librz/analysis/d/types-windows_fileapi.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_fileapi.sdb.txt rename to librz/analysis/d/types-windows_fileapi.sdb.txt diff --git a/librz/anal/d/types-windows_libloaderapi.sdb.txt b/librz/analysis/d/types-windows_libloaderapi.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_libloaderapi.sdb.txt rename to librz/analysis/d/types-windows_libloaderapi.sdb.txt diff --git a/librz/anal/d/types-windows_memoryapi.sdb.txt b/librz/analysis/d/types-windows_memoryapi.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_memoryapi.sdb.txt rename to librz/analysis/d/types-windows_memoryapi.sdb.txt diff --git a/librz/anal/d/types-windows_ncrypt.sdb.txt b/librz/analysis/d/types-windows_ncrypt.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_ncrypt.sdb.txt rename to librz/analysis/d/types-windows_ncrypt.sdb.txt diff --git a/librz/anal/d/types-windows_objbase.sdb.txt b/librz/analysis/d/types-windows_objbase.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_objbase.sdb.txt rename to librz/analysis/d/types-windows_objbase.sdb.txt diff --git a/librz/anal/d/types-windows_oleauto.sdb.txt b/librz/analysis/d/types-windows_oleauto.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_oleauto.sdb.txt rename to librz/analysis/d/types-windows_oleauto.sdb.txt diff --git a/librz/anal/d/types-windows_processthreadsapi.sdb.txt b/librz/analysis/d/types-windows_processthreadsapi.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_processthreadsapi.sdb.txt rename to librz/analysis/d/types-windows_processthreadsapi.sdb.txt diff --git a/librz/anal/d/types-windows_psapi.sdb.txt b/librz/analysis/d/types-windows_psapi.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_psapi.sdb.txt rename to librz/analysis/d/types-windows_psapi.sdb.txt diff --git a/librz/anal/d/types-windows_securitybaseapi.sdb.txt b/librz/analysis/d/types-windows_securitybaseapi.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_securitybaseapi.sdb.txt rename to librz/analysis/d/types-windows_securitybaseapi.sdb.txt diff --git a/librz/anal/d/types-windows_shellapi.sdb.txt b/librz/analysis/d/types-windows_shellapi.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_shellapi.sdb.txt rename to librz/analysis/d/types-windows_shellapi.sdb.txt diff --git a/librz/anal/d/types-windows_shlwapi.sdb.txt b/librz/analysis/d/types-windows_shlwapi.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_shlwapi.sdb.txt rename to librz/analysis/d/types-windows_shlwapi.sdb.txt diff --git a/librz/anal/d/types-windows_synchapi.sdb.txt b/librz/analysis/d/types-windows_synchapi.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_synchapi.sdb.txt rename to librz/analysis/d/types-windows_synchapi.sdb.txt diff --git a/librz/anal/d/types-windows_sysinfoapi.sdb.txt b/librz/analysis/d/types-windows_sysinfoapi.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_sysinfoapi.sdb.txt rename to librz/analysis/d/types-windows_sysinfoapi.sdb.txt diff --git a/librz/anal/d/types-windows_threadpoolapiset.sdb.txt b/librz/analysis/d/types-windows_threadpoolapiset.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_threadpoolapiset.sdb.txt rename to librz/analysis/d/types-windows_threadpoolapiset.sdb.txt diff --git a/librz/anal/d/types-windows_userenv.sdb.txt b/librz/analysis/d/types-windows_userenv.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_userenv.sdb.txt rename to librz/analysis/d/types-windows_userenv.sdb.txt diff --git a/librz/anal/d/types-windows_winbase.sdb.txt b/librz/analysis/d/types-windows_winbase.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_winbase.sdb.txt rename to librz/analysis/d/types-windows_winbase.sdb.txt diff --git a/librz/anal/d/types-windows_wincred.sdb.txt b/librz/analysis/d/types-windows_wincred.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_wincred.sdb.txt rename to librz/analysis/d/types-windows_wincred.sdb.txt diff --git a/librz/anal/d/types-windows_wincrypt.sdb.txt b/librz/analysis/d/types-windows_wincrypt.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_wincrypt.sdb.txt rename to librz/analysis/d/types-windows_wincrypt.sdb.txt diff --git a/librz/anal/d/types-windows_winhttp.sdb.txt b/librz/analysis/d/types-windows_winhttp.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_winhttp.sdb.txt rename to librz/analysis/d/types-windows_winhttp.sdb.txt diff --git a/librz/anal/d/types-windows_winldap.sdb.txt b/librz/analysis/d/types-windows_winldap.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_winldap.sdb.txt rename to librz/analysis/d/types-windows_winldap.sdb.txt diff --git a/librz/anal/d/types-windows_winnls.sdb.txt b/librz/analysis/d/types-windows_winnls.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_winnls.sdb.txt rename to librz/analysis/d/types-windows_winnls.sdb.txt diff --git a/librz/anal/d/types-windows_winreg.sdb.txt b/librz/analysis/d/types-windows_winreg.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_winreg.sdb.txt rename to librz/analysis/d/types-windows_winreg.sdb.txt diff --git a/librz/anal/d/types-windows_winsock2.sdb.txt b/librz/analysis/d/types-windows_winsock2.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_winsock2.sdb.txt rename to librz/analysis/d/types-windows_winsock2.sdb.txt diff --git a/librz/anal/d/types-windows_winsvc.sdb.txt b/librz/analysis/d/types-windows_winsvc.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_winsvc.sdb.txt rename to librz/analysis/d/types-windows_winsvc.sdb.txt diff --git a/librz/anal/d/types-windows_winuser.sdb.txt b/librz/analysis/d/types-windows_winuser.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_winuser.sdb.txt rename to librz/analysis/d/types-windows_winuser.sdb.txt diff --git a/librz/anal/d/types-windows_ws2spi.sdb.txt b/librz/analysis/d/types-windows_ws2spi.sdb.txt similarity index 100% rename from librz/anal/d/types-windows_ws2spi.sdb.txt rename to librz/analysis/d/types-windows_ws2spi.sdb.txt diff --git a/librz/anal/d/types-x86-macos-64.sdb.txt b/librz/analysis/d/types-x86-macos-64.sdb.txt similarity index 100% rename from librz/anal/d/types-x86-macos-64.sdb.txt rename to librz/analysis/d/types-x86-macos-64.sdb.txt diff --git a/librz/anal/d/types-x86-windows-32.sdb.txt b/librz/analysis/d/types-x86-windows-32.sdb.txt similarity index 100% rename from librz/anal/d/types-x86-windows-32.sdb.txt rename to librz/analysis/d/types-x86-windows-32.sdb.txt diff --git a/librz/anal/d/types-x86-windows-64.sdb.txt b/librz/analysis/d/types-x86-windows-64.sdb.txt similarity index 100% rename from librz/anal/d/types-x86-windows-64.sdb.txt rename to librz/analysis/d/types-x86-windows-64.sdb.txt diff --git a/librz/anal/d/types.sdb.txt b/librz/analysis/d/types.sdb.txt similarity index 100% rename from librz/anal/d/types.sdb.txt rename to librz/analysis/d/types.sdb.txt diff --git a/librz/anal/data.c b/librz/analysis/data.c similarity index 80% rename from librz/anal/data.c rename to librz/analysis/data.c index d5889e108c..80138f8e34 100644 --- a/librz/anal/data.c +++ b/librz/analysis/data.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: LGPL-3.0-only -#include +#include #define MINLEN 1 static int is_string(const ut8 *buf, int size, int *len) { @@ -54,10 +54,10 @@ static int is_invalid(const ut8 *buf, int size) { } #define USE_IS_VALID_OFFSET 1 -static ut64 is_pointer(RzAnal *anal, const ut8 *buf, int size) { +static ut64 is_pointer(RzAnalysis *analysis, const ut8 *buf, int size) { ut64 n; ut8 buf2[32]; - RzIOBind *iob = &anal->iob; + RzIOBind *iob = &analysis->iob; if (size > sizeof (buf2)) { size = sizeof (buf2); } @@ -97,7 +97,7 @@ static bool is_bin(const ut8 *buf, int size) { // TODO: add is_flag, is comment? -RZ_API char *rz_anal_data_to_string(RzAnalData *d, RzConsPrintablePalette *pal) { +RZ_API char *rz_analysis_data_to_string(RzAnalysisData *d, RzConsPrintablePalette *pal) { int i, len, mallocsz = 1024; ut32 n32; @@ -197,8 +197,8 @@ RZ_API char *rz_anal_data_to_string(RzAnalData *d, RzConsPrintablePalette *pal) return rz_strbuf_drain (sb); } -RZ_API RzAnalData *rz_anal_data_new_string(ut64 addr, const char *p, int len, int type) { - RzAnalData *ad = RZ_NEW0 (RzAnalData); +RZ_API RzAnalysisData *rz_analysis_data_new_string(ut64 addr, const char *p, int len, int type) { + RzAnalysisData *ad = RZ_NEW0 (RzAnalysisData); if (!ad) { return NULL; } @@ -214,14 +214,14 @@ RZ_API RzAnalData *rz_anal_data_new_string(ut64 addr, const char *p, int len, in } else { ad->str = malloc (len + 1); if (!ad->str) { - rz_anal_data_free (ad); + rz_analysis_data_free (ad); return NULL; } memcpy (ad->str, p, len); ad->str[len] = 0; ad->buf = malloc (len + 1); if (!ad->buf) { - rz_anal_data_free (ad); + rz_analysis_data_free (ad); eprintf ("Cannot allocate %d byte(s)\n", len + 1); return NULL; } @@ -232,8 +232,8 @@ RZ_API RzAnalData *rz_anal_data_new_string(ut64 addr, const char *p, int len, in return ad; } -RZ_API RzAnalData *rz_anal_data_new(ut64 addr, int type, ut64 n, const ut8 *buf, int len) { - RzAnalData *ad = RZ_NEW0 (RzAnalData); +RZ_API RzAnalysisData *rz_analysis_data_new(ut64 addr, int type, ut64 n, const ut8 *buf, int len) { + RzAnalysisData *ad = RZ_NEW0 (RzAnalysisData); int l = RZ_MIN (len, 8); if (!ad) { return NULL; @@ -241,7 +241,7 @@ RZ_API RzAnalData *rz_anal_data_new(ut64 addr, int type, ut64 n, const ut8 *buf, ad->buf = (ut8 *)&(ad->sbuf); memset (ad->buf, 0, 8); if (l < 1) { - rz_anal_data_free (ad); + rz_analysis_data_free (ad); return NULL; } if (buf) { @@ -262,7 +262,7 @@ RZ_API RzAnalData *rz_anal_data_new(ut64 addr, int type, ut64 n, const ut8 *buf, return ad; } -RZ_API void rz_anal_data_free(RzAnalData *d) { +RZ_API void rz_analysis_data_free(RzAnalysisData *d) { if (d) { if (d->buf != (ut8 *)&(d->sbuf)) { free (d->buf); @@ -272,17 +272,17 @@ RZ_API void rz_anal_data_free(RzAnalData *d) { } } -RZ_API RzAnalData *rz_anal_data(RzAnal *anal, ut64 addr, const ut8 *buf, int size, int wordsize) { +RZ_API RzAnalysisData *rz_analysis_data(RzAnalysis *analysis, ut64 addr, const ut8 *buf, int size, int wordsize) { ut64 dst = 0; int n, nsize = 0; - int bits = anal->bits; + int bits = analysis->bits; int word = wordsize? wordsize: RZ_MIN (8, bits / 8); if (size < 4) { return NULL; } if (size >= word && is_invalid (buf, word)) { - return rz_anal_data_new (addr, RZ_ANAL_DATA_TYPE_INVALID, -1, buf, word); + return rz_analysis_data_new (addr, RZ_ANAL_DATA_TYPE_INVALID, -1, buf, word); } { int i, len = RZ_MIN (size, 64); @@ -302,52 +302,52 @@ RZ_API RzAnalData *rz_anal_data(RzAnal *anal, ut64 addr, const ut8 *buf, int siz } } if (is_sequence > len - 2) { - return rz_anal_data_new (addr, RZ_ANAL_DATA_TYPE_SEQUENCE, -1, + return rz_analysis_data_new (addr, RZ_ANAL_DATA_TYPE_SEQUENCE, -1, buf, is_sequence); } if (is_pattern > len - 2) { - return rz_anal_data_new (addr, RZ_ANAL_DATA_TYPE_PATTERN, -1, + return rz_analysis_data_new (addr, RZ_ANAL_DATA_TYPE_PATTERN, -1, buf, is_pattern); } } if (size >= word && is_null (buf, word)) { - return rz_anal_data_new (addr, RZ_ANAL_DATA_TYPE_NULL, -1, buf, word); + return rz_analysis_data_new (addr, RZ_ANAL_DATA_TYPE_NULL, -1, buf, word); } if (is_bin (buf, size)) { - return rz_anal_data_new (addr, RZ_ANAL_DATA_TYPE_HEADER, -1, buf, word); + return rz_analysis_data_new (addr, RZ_ANAL_DATA_TYPE_HEADER, -1, buf, word); } if (size >= word) { - dst = is_pointer (anal, buf, word); + dst = is_pointer (analysis, buf, word); if (dst) { - return rz_anal_data_new (addr, RZ_ANAL_DATA_TYPE_POINTER, dst, buf, word); + return rz_analysis_data_new (addr, RZ_ANAL_DATA_TYPE_POINTER, dst, buf, word); } } switch (is_string (buf, size, &nsize)) { - case 1: return rz_anal_data_new_string (addr, (const char *)buf, nsize, RZ_ANAL_DATA_TYPE_STRING); - case 2: return rz_anal_data_new_string (addr, (const char *)buf, nsize, RZ_ANAL_DATA_TYPE_WIDE_STRING); + case 1: return rz_analysis_data_new_string (addr, (const char *)buf, nsize, RZ_ANAL_DATA_TYPE_STRING); + case 2: return rz_analysis_data_new_string (addr, (const char *)buf, nsize, RZ_ANAL_DATA_TYPE_WIDE_STRING); } if (size >= word) { n = is_number (buf, word); if (n) { - return rz_anal_data_new (addr, RZ_ANAL_DATA_TYPE_NUMBER, n, buf, word); + return rz_analysis_data_new (addr, RZ_ANAL_DATA_TYPE_NUMBER, n, buf, word); } } - return rz_anal_data_new (addr, RZ_ANAL_DATA_TYPE_UNKNOWN, dst, buf, RZ_MIN (word, size)); + return rz_analysis_data_new (addr, RZ_ANAL_DATA_TYPE_UNKNOWN, dst, buf, RZ_MIN (word, size)); } -RZ_API const char *rz_anal_data_kind(RzAnal *a, ut64 addr, const ut8 *buf, int len) { +RZ_API const char *rz_analysis_data_kind(RzAnalysis *a, ut64 addr, const ut8 *buf, int len) { int inv = 0; int unk = 0; int str = 0; int num = 0; int i, j; - RzAnalData *data; + RzAnalysisData *data; int word = a->bits / 8; for (i = j = 0; i < len; j++) { if (str && !buf[i]) { str++; } - data = rz_anal_data (a, addr + i, buf + i, len - i, 0); + data = rz_analysis_data (a, addr + i, buf + i, len - i, 0); if (!data) { i += word; continue; @@ -378,7 +378,7 @@ RZ_API const char *rz_anal_data_kind(RzAnal *a, ut64 addr, const ut8 *buf, int l default: i += word; } - rz_anal_data_free (data); + rz_analysis_data_free (data); } if (j < 1) { return "unknown"; @@ -398,7 +398,7 @@ RZ_API const char *rz_anal_data_kind(RzAnal *a, ut64 addr, const ut8 *buf, int l return "data"; } -RZ_API const char *rz_anal_datatype_to_string(RzAnalDataType t) { +RZ_API const char *rz_analysis_datatype_to_string(RzAnalysisDataType t) { switch (t) { case RZ_ANAL_DATATYPE_NULL: return NULL; diff --git a/librz/anal/diff.c b/librz/analysis/diff.c similarity index 65% rename from librz/anal/diff.c rename to librz/analysis/diff.c index 6195020a03..e17af03704 100644 --- a/librz/anal/diff.c +++ b/librz/analysis/diff.c @@ -1,11 +1,11 @@ // SPDX-License-Identifier: LGPL-3.0-only -#include +#include #include #include -RZ_API RzAnalDiff *rz_anal_diff_new(void) { - RzAnalDiff *diff = RZ_NEW0 (RzAnalDiff); +RZ_API RzAnalysisDiff *rz_analysis_diff_new(void) { + RzAnalysisDiff *diff = RZ_NEW0 (RzAnalysisDiff); if (diff) { diff->type = RZ_ANAL_DIFF_TYPE_NULL; diff->addr = UT64_MAX; @@ -16,7 +16,7 @@ RZ_API RzAnalDiff *rz_anal_diff_new(void) { return diff; } -RZ_API void* rz_anal_diff_free(RzAnalDiff *diff) { +RZ_API void* rz_analysis_diff_free(RzAnalysisDiff *diff) { if (diff && diff->name) { RZ_FREE (diff->name); } @@ -25,34 +25,34 @@ RZ_API void* rz_anal_diff_free(RzAnalDiff *diff) { } /* 0-1 */ -RZ_API void rz_anal_diff_setup(RzAnal *anal, int doops, double thbb, double thfcn) { +RZ_API void rz_analysis_diff_setup(RzAnalysis *analysis, int doops, double thbb, double thfcn) { if (doops >= 0) { - anal->diff_ops = doops; + analysis->diff_ops = doops; } - anal->diff_thbb = (thbb>=0)? thbb: RZ_ANAL_THRESHOLDBB; - anal->diff_thfcn = (thfcn>=0)? thfcn: RZ_ANAL_THRESHOLDFCN; + analysis->diff_thbb = (thbb>=0)? thbb: RZ_ANAL_THRESHOLDBB; + analysis->diff_thfcn = (thfcn>=0)? thfcn: RZ_ANAL_THRESHOLDFCN; } /* 0-100 */ -RZ_API void rz_anal_diff_setup_i(RzAnal *anal, int doops, int thbb, int thfcn) { +RZ_API void rz_analysis_diff_setup_i(RzAnalysis *analysis, int doops, int thbb, int thfcn) { if (doops >= 0) { - anal->diff_ops = doops; + analysis->diff_ops = doops; } - anal->diff_thbb = (thbb>=0)? ((double)thbb) / 100: RZ_ANAL_THRESHOLDBB; - anal->diff_thfcn = (thfcn>=0)? ((double)thfcn) / 100: RZ_ANAL_THRESHOLDFCN; + analysis->diff_thbb = (thbb>=0)? ((double)thbb) / 100: RZ_ANAL_THRESHOLDBB; + analysis->diff_thfcn = (thfcn>=0)? ((double)thfcn) / 100: RZ_ANAL_THRESHOLDFCN; } // Fingerprint function basic block -RZ_API int rz_anal_diff_fingerprint_bb(RzAnal *anal, RzAnalBlock *bb) { - RzAnalOp *op; +RZ_API int rz_analysis_diff_fingerprint_bb(RzAnalysis *analysis, RzAnalysisBlock *bb) { + RzAnalysisOp *op; ut8 *buf; int oplen, idx = 0; - if (!anal) { + if (!analysis) { return false; } - if (anal->cur && anal->cur->fingerprint_bb) { - return (anal->cur->fingerprint_bb (anal, bb)); + if (analysis->cur && analysis->cur->fingerprint_bb) { + return (analysis->cur->fingerprint_bb (analysis, bb)); } if (!(bb->fingerprint = malloc (1 + bb->size))) { return false; @@ -61,16 +61,16 @@ RZ_API int rz_anal_diff_fingerprint_bb(RzAnal *anal, RzAnalBlock *bb) { free (bb->fingerprint); return false; } - if (anal->iob.read_at (anal->iob.io, bb->addr, buf, bb->size)) { + if (analysis->iob.read_at (analysis->iob.io, bb->addr, buf, bb->size)) { memcpy (bb->fingerprint, buf, bb->size); - if (anal->diff_ops) { // diff using only the opcode - if (!(op = rz_anal_op_new ())) { + if (analysis->diff_ops) { // diff using only the opcode + if (!(op = rz_analysis_op_new ())) { free (bb->fingerprint); free (buf); return false; } while (idx < bb->size) { - if ((oplen = rz_anal_op (anal, op, 0, buf+idx, bb->size-idx, RZ_ANAL_OP_MASK_BASIC)) < 1) { + if ((oplen = rz_analysis_op (analysis, op, 0, buf+idx, bb->size-idx, RZ_ANAL_OP_MASK_BASIC)) < 1) { break; } if (op->nopcode != 0) { @@ -85,12 +85,12 @@ RZ_API int rz_anal_diff_fingerprint_bb(RzAnal *anal, RzAnalBlock *bb) { return bb->size; } -RZ_API size_t rz_anal_diff_fingerprint_fcn(RzAnal *anal, RzAnalFunction *fcn) { - RzAnalBlock *bb; +RZ_API size_t rz_analysis_diff_fingerprint_fcn(RzAnalysis *analysis, RzAnalysisFunction *fcn) { + RzAnalysisBlock *bb; RzListIter *iter; - if (anal && anal->cur && anal->cur->fingerprint_fcn) { - return (anal->cur->fingerprint_fcn (anal, fcn)); + if (analysis && analysis->cur && analysis->cur->fingerprint_fcn) { + return (analysis->cur->fingerprint_fcn (analysis, fcn)); } fcn->fingerprint = NULL; @@ -106,16 +106,16 @@ RZ_API size_t rz_anal_diff_fingerprint_fcn(RzAnal *anal, RzAnalFunction *fcn) { return fcn->fingerprint_size; } -RZ_API bool rz_anal_diff_bb(RzAnal *anal, RzAnalFunction *fcn, RzAnalFunction *fcn2) { - RzAnalBlock *bb, *bb2, *mbb, *mbb2; +RZ_API bool rz_analysis_diff_bb(RzAnalysis *analysis, RzAnalysisFunction *fcn, RzAnalysisFunction *fcn2) { + RzAnalysisBlock *bb, *bb2, *mbb, *mbb2; RzListIter *iter, *iter2; double t, ot; - if (!anal || !fcn || !fcn2) { + if (!analysis || !fcn || !fcn2) { return false; } - if (anal->cur && anal->cur->diff_bb) { - return (anal->cur->diff_bb (anal, fcn, fcn2)); + if (analysis->cur && analysis->cur->diff_bb) { + return (analysis->cur->diff_bb (analysis, fcn, fcn2)); } fcn->diff->type = fcn2->diff->type = RZ_ANAL_DIFF_TYPE_MATCH; rz_list_foreach (fcn->bbs, iter, bb) { @@ -128,7 +128,7 @@ RZ_API bool rz_anal_diff_bb(RzAnal *anal, RzAnalFunction *fcn, RzAnalFunction *f if (!bb2->diff || bb2->diff->type == RZ_ANAL_DIFF_TYPE_NULL) { rz_diff_buffers_distance (NULL, bb->fingerprint, bb->size, bb2->fingerprint, bb2->size, NULL, &t); - if (t > anal->diff_thbb && t > ot) { + if (t > analysis->diff_thbb && t > ot) { ot = t; mbb = bb; mbb2 = bb2; @@ -140,15 +140,15 @@ RZ_API bool rz_anal_diff_bb(RzAnal *anal, RzAnalFunction *fcn, RzAnalFunction *f } if (mbb && mbb2) { if (!mbb->diff) { - mbb->diff = rz_anal_diff_new(); + mbb->diff = rz_analysis_diff_new(); } if (!mbb2->diff) { - mbb2->diff = rz_anal_diff_new(); + mbb2->diff = rz_analysis_diff_new(); } if (!mbb->diff || !mbb2->diff) { return false; } - if (ot == 1 || t > anal->diff_thfcn) { + if (ot == 1 || t > analysis->diff_thfcn) { mbb->diff->type = mbb2->diff->type = RZ_ANAL_DIFF_TYPE_MATCH; } else { mbb->diff->type = mbb2->diff->type = \ @@ -170,17 +170,17 @@ RZ_API bool rz_anal_diff_bb(RzAnal *anal, RzAnalFunction *fcn, RzAnalFunction *f return true; } -RZ_API int rz_anal_diff_fcn(RzAnal *anal, RzList *fcns, RzList *fcns2) { - RzAnalFunction *fcn, *fcn2, *mfcn, *mfcn2; +RZ_API int rz_analysis_diff_fcn(RzAnalysis *analysis, RzList *fcns, RzList *fcns2) { + RzAnalysisFunction *fcn, *fcn2, *mfcn, *mfcn2; RzListIter *iter, *iter2; ut64 maxsize, minsize; double t, ot; - if (!anal) { + if (!analysis) { return false; } - if (anal->cur && anal->cur->diff_fcn) { - return (anal->cur->diff_fcn (anal, fcns, fcns2)); + if (analysis->cur && analysis->cur->diff_fcn) { + return (analysis->cur->diff_fcn (analysis, fcns, fcns2)); } /* Compare functions with the same name */ if (fcns) { @@ -201,8 +201,8 @@ RZ_API int rz_anal_diff_fcn(RzAnal *anal, RzList *fcns, RzList *fcns2) { RZ_FREE (fcn2->fingerprint); fcn->diff->addr = fcn2->addr; fcn2->diff->addr = fcn->addr; - fcn->diff->size = rz_anal_function_linear_size (fcn2); - fcn2->diff->size = rz_anal_function_linear_size (fcn); + fcn->diff->size = rz_analysis_function_linear_size (fcn2); + fcn2->diff->size = rz_analysis_function_linear_size (fcn); RZ_FREE (fcn->diff->name); if (fcn2->name) { fcn->diff->name = strdup (fcn2->name); @@ -211,7 +211,7 @@ RZ_API int rz_anal_diff_fcn(RzAnal *anal, RzList *fcns, RzList *fcns2) { if (fcn->name) { fcn2->diff->name = strdup (fcn->name); } - rz_anal_diff_bb (anal, fcn, fcn2); + rz_analysis_diff_bb (analysis, fcn, fcn2); break; } } @@ -231,8 +231,8 @@ RZ_API int rz_anal_diff_fcn(RzAnal *anal, RzList *fcns, RzList *fcns2) { ot = 0; mfcn = mfcn2 = NULL; rz_list_foreach (fcns2, iter2, fcn2) { - ut64 fcn_size = rz_anal_function_linear_size (fcn); - ut64 fcn2_size = rz_anal_function_linear_size (fcn2); + ut64 fcn_size = rz_analysis_function_linear_size (fcn); + ut64 fcn2_size = rz_analysis_function_linear_size (fcn2); if (fcn_size > fcn2_size) { maxsize = fcn_size; minsize = fcn2_size; @@ -240,7 +240,7 @@ RZ_API int rz_anal_diff_fcn(RzAnal *anal, RzList *fcns, RzList *fcns2) { maxsize = fcn2_size; minsize = fcn_size; } - if (maxsize * anal->diff_thfcn > minsize) { + if (maxsize * analysis->diff_thfcn > minsize) { eprintf ("Exceeded anal threshold while diffing %s and %s\n", fcn->name, fcn2->name); continue; } @@ -254,7 +254,7 @@ RZ_API int rz_anal_diff_fcn(RzAnal *anal, RzList *fcns, RzList *fcns2) { } rz_diff_buffers_distance (NULL, fcn->fingerprint, fcn->fingerprint_size, fcn2->fingerprint, fcn2->fingerprint_size, NULL, &t); fcn->diff->dist = fcn2->diff->dist = t; - if (t > anal->diff_thfcn && t > ot) { + if (t > analysis->diff_thfcn && t > ot) { ot = t; mfcn = fcn; mfcn2 = fcn2; @@ -272,8 +272,8 @@ RZ_API int rz_anal_diff_fcn(RzAnal *anal, RzList *fcns, RzList *fcns2) { RZ_FREE (mfcn2->fingerprint); mfcn->diff->addr = mfcn2->addr; mfcn2->diff->addr = mfcn->addr; - mfcn->diff->size = rz_anal_function_linear_size (mfcn2); - mfcn2->diff->size = rz_anal_function_linear_size (mfcn); + mfcn->diff->size = rz_analysis_function_linear_size (mfcn2); + mfcn2->diff->size = rz_analysis_function_linear_size (mfcn); RZ_FREE (mfcn->diff->name); if (mfcn2->name) { mfcn->diff->name = strdup (mfcn2->name); @@ -282,15 +282,15 @@ RZ_API int rz_anal_diff_fcn(RzAnal *anal, RzList *fcns, RzList *fcns2) { if (mfcn->name) { mfcn2->diff->name = strdup (mfcn->name); } - rz_anal_diff_bb (anal, mfcn, mfcn2); + rz_analysis_diff_bb (analysis, mfcn, mfcn2); } } return true; } -RZ_API int rz_anal_diff_eval(RzAnal *anal) { - if (anal && anal->cur && anal->cur->diff_eval) { - return (anal->cur->diff_eval (anal)); +RZ_API int rz_analysis_diff_eval(RzAnalysis *analysis) { + if (analysis && analysis->cur && analysis->cur->diff_eval) { + return (analysis->cur->diff_eval (analysis)); } return true; // XXX: shouldn't this be false? } diff --git a/librz/anal/dwarf_process.c b/librz/analysis/dwarf_process.c similarity index 92% rename from librz/anal/dwarf_process.c rename to librz/analysis/dwarf_process.c index cc2d6300ff..a4fc22a8f2 100644 --- a/librz/anal/dwarf_process.c +++ b/librz/analysis/dwarf_process.c @@ -2,12 +2,12 @@ #include "base_types.h" #include -#include +#include #include #include typedef struct dwarf_parse_context_t { - const RzAnal *anal; + const RzAnalysis *analysis; const RzBinDwarfDie *all_dies; const ut64 count; Sdb *sdb; @@ -361,15 +361,15 @@ static st32 parse_type (Context *ctx, const ut64 offset, RzStrBuf *strbuf, ut64 } /** - * @brief Parses structured entry into *result RzAnalStructMember + * @brief Parses structured entry into *result RzAnalysisStructMember * http://www.dwarfstd.org/doc/DWARF4.pdf#page=102&zoom=100,0,0 * * @param ctx * @param idx index of the current entry * @param result ptr to result member to fill up - * @return RzAnalStructMember* ptr to parsed Member + * @return RzAnalysisStructMember* ptr to parsed Member */ -static RzAnalStructMember *parse_struct_member (Context *ctx, ut64 idx, RzAnalStructMember *result) { +static RzAnalysisStructMember *parse_struct_member (Context *ctx, ut64 idx, RzAnalysisStructMember *result) { rz_return_val_if_fail (result, NULL); const RzBinDwarfDie *die = &ctx->all_dies[idx]; @@ -440,15 +440,15 @@ cleanup: } /** - * @brief Parses enum entry into *result RzAnalEnumCase + * @brief Parses enum entry into *result RzAnalysisEnumCase * http://www.dwarfstd.org/doc/DWARF4.pdf#page=110&zoom=100,0,0 * * @param ctx * @param idx index of the current entry * @param result ptr to result case to fill up - * @return RzAnalEnumCase* Ptr to parsed enum case + * @return RzAnalysisEnumCase* Ptr to parsed enum case */ -static RzAnalEnumCase *parse_enumerator(Context *ctx, ut64 idx, RzAnalEnumCase *result) { +static RzAnalysisEnumCase *parse_enumerator(Context *ctx, ut64 idx, RzAnalysisEnumCase *result) { const RzBinDwarfDie *die = &ctx->all_dies[idx]; char *name = NULL; @@ -484,7 +484,7 @@ cleanup: /** * @brief Parses a structured entry (structs, classes, unions) into - * RzAnalBaseType and saves it using rz_anal_save_base_type () + * RzAnalysisBaseType and saves it using rz_analysis_save_base_type () * * @param ctx * @param idx index of the current entry @@ -493,14 +493,14 @@ cleanup: static void parse_structure_type(Context *ctx, ut64 idx) { const RzBinDwarfDie *die = &ctx->all_dies[idx]; - RzAnalBaseTypeKind kind; + RzAnalysisBaseTypeKind kind; if (die->tag == DW_TAG_union_type) { kind = RZ_ANAL_BASE_TYPE_KIND_UNION; } else { kind = RZ_ANAL_BASE_TYPE_KIND_STRUCT; } - RzAnalBaseType *base_type = rz_anal_base_type_new (kind); + RzAnalysisBaseType *base_type = rz_analysis_base_type_new (kind); if (!base_type) { return; } @@ -526,7 +526,7 @@ static void parse_structure_type(Context *ctx, ut64 idx) { base_type->size = get_die_size (die); - RzAnalStructMember member = { 0 }; + RzAnalysisStructMember member = { 0 }; // Parse out all members, can this in someway be extracted to a function? if (die->has_children) { int child_depth = 1; // Direct children of the node @@ -537,7 +537,7 @@ static void parse_structure_type(Context *ctx, ut64 idx) { // we take only direct descendats of the structure // can be also DW_TAG_suprogram for class methods or tag for templates if (child_depth == 1 && child_die->tag == DW_TAG_member) { - RzAnalStructMember *result = parse_struct_member (ctx, j, &member); + RzAnalysisStructMember *result = parse_struct_member (ctx, j, &member); if (!result) { goto cleanup; } else { @@ -555,14 +555,14 @@ static void parse_structure_type(Context *ctx, ut64 idx) { } } } - rz_anal_save_base_type (ctx->anal, base_type); + rz_analysis_save_base_type (ctx->analysis, base_type); cleanup: - rz_anal_base_type_free (base_type); + rz_analysis_base_type_free (base_type); } /** - * @brief Parses a enum entry into RzAnalBaseType and saves it - * int Sdb using rz_anal_save_base_type () + * @brief Parses a enum entry into RzAnalysisBaseType and saves it + * int Sdb using rz_analysis_save_base_type () * * @param ctx * @param idx index of the current entry @@ -570,7 +570,7 @@ cleanup: static void parse_enum_type(Context *ctx, ut64 idx) { const RzBinDwarfDie *die = &ctx->all_dies[idx]; - RzAnalBaseType *base_type = rz_anal_base_type_new (RZ_ANAL_BASE_TYPE_KIND_ENUM); + RzAnalysisBaseType *base_type = rz_analysis_base_type_new (RZ_ANAL_BASE_TYPE_KIND_ENUM); if (!base_type) { return; } @@ -589,7 +589,7 @@ static void parse_enum_type(Context *ctx, ut64 idx) { base_type->type = rz_strbuf_drain_nofree (&strbuf); } - RzAnalEnumCase cas; + RzAnalysisEnumCase cas; if (die->has_children) { int child_depth = 1; // Direct children of the node size_t j; @@ -598,7 +598,7 @@ static void parse_enum_type(Context *ctx, ut64 idx) { const RzBinDwarfDie *child_die = &ctx->all_dies[j]; // we take only direct descendats of the structure if (child_depth == 1 && child_die->tag == DW_TAG_enumerator) { - RzAnalEnumCase *result = parse_enumerator (ctx, j, &cas); + RzAnalysisEnumCase *result = parse_enumerator (ctx, j, &cas); if (!result) { goto cleanup; } else { @@ -618,14 +618,14 @@ static void parse_enum_type(Context *ctx, ut64 idx) { } } } - rz_anal_save_base_type (ctx->anal, base_type); + rz_analysis_save_base_type (ctx->analysis, base_type); cleanup: - rz_anal_base_type_free (base_type); + rz_analysis_base_type_free (base_type); } /** - * @brief Parses a typedef entry into RzAnalBaseType and saves it - * using rz_anal_save_base_type () + * @brief Parses a typedef entry into RzAnalysisBaseType and saves it + * using rz_analysis_save_base_type () * * http://www.dwarfstd.org/doc/DWARF4.pdf#page=96&zoom=100,0,0 * @@ -665,14 +665,14 @@ static void parse_typedef(Context *ctx, ut64 idx) { if (!name) { // type has to have a name for now goto cleanup; } - RzAnalBaseType *base_type = rz_anal_base_type_new (RZ_ANAL_BASE_TYPE_KIND_TYPEDEF); + RzAnalysisBaseType *base_type = rz_analysis_base_type_new (RZ_ANAL_BASE_TYPE_KIND_TYPEDEF); if (!base_type) { goto cleanup; } base_type->name = name; base_type->type = type; - rz_anal_save_base_type (ctx->anal, base_type); - rz_anal_base_type_free (base_type); + rz_analysis_save_base_type (ctx->analysis, base_type); + rz_analysis_base_type_free (base_type); rz_strbuf_fini (&strbuf); return; cleanup: @@ -715,14 +715,14 @@ static void parse_atomic_type(Context *ctx, ut64 idx) { if (!name) { // type has to have a name for now return; } - RzAnalBaseType *base_type = rz_anal_base_type_new (RZ_ANAL_BASE_TYPE_KIND_ATOMIC); + RzAnalysisBaseType *base_type = rz_analysis_base_type_new (RZ_ANAL_BASE_TYPE_KIND_ATOMIC); if (!base_type) { return; } base_type->name = name; base_type->size = size; - rz_anal_save_base_type (ctx->anal, base_type); - rz_anal_base_type_free (base_type); + rz_analysis_save_base_type (ctx->analysis, base_type); + rz_analysis_base_type_free (base_type); } static const char *get_specification_die_name(const RzBinDwarfDie *die) { @@ -1029,7 +1029,7 @@ static VariableLocation *parse_dwarf_location (Context *ctx, const RzBinDwarfAtt /* Will mostly be used for SP based arguments */ /* TODO I need to find binaries that uses this so I can test it out*/ reg_num = block.data[i] - DW_OP_reg0; // get the reg number - reg_name = get_dwarf_reg_name (ctx->anal->cpu, reg_num, &kind, ctx->anal->bits); + reg_name = get_dwarf_reg_name (ctx->analysis->cpu, reg_num, &kind, ctx->analysis->bits); } break; case DW_OP_breg0: case DW_OP_breg1: @@ -1073,7 +1073,7 @@ static VariableLocation *parse_dwarf_location (Context *ctx, const RzBinDwarfAtt offset = rz_sleb128 (&buffer, &block.data[block.length]); /* TODO do a proper expression parsing, move by the amount of bytes sleb reads */ i += buffer - &block.data[0]; - reg_name = get_dwarf_reg_name (ctx->anal->cpu, reg_num, &kind, ctx->anal->bits); + reg_name = get_dwarf_reg_name (ctx->analysis->cpu, reg_num, &kind, ctx->analysis->bits); } break; case DW_OP_bregx: { if (i == block.length - 1) { @@ -1088,12 +1088,12 @@ static VariableLocation *parse_dwarf_location (Context *ctx, const RzBinDwarfAtt return NULL; } offset = rz_sleb128 (&buffer, buf_end); - reg_name = get_dwarf_reg_name (ctx->anal->cpu, reg_num, &kind, ctx->anal->bits); + reg_name = get_dwarf_reg_name (ctx->analysis->cpu, reg_num, &kind, ctx->analysis->bits); } break; case DW_OP_addr: { /* The DW_OP_addr operation has a single operand that encodes a machine address and whose size is the size of an address on the target machine. */ - const int addr_size = ctx->anal->bits / 8; + const int addr_size = ctx->analysis->bits / 8; const ut8 *dump = &block.data[++i]; /* malformed, not enough bytes to represent address */ if (block.length - i < addr_size) { @@ -1104,13 +1104,13 @@ static VariableLocation *parse_dwarf_location (Context *ctx, const RzBinDwarfAtt address = rz_read_ble8 (dump); break; case 2: - address = rz_read_ble16 (dump, ctx->anal->big_endian); + address = rz_read_ble16 (dump, ctx->analysis->big_endian); break; case 4: - address = rz_read_ble32 (dump, ctx->anal->big_endian); + address = rz_read_ble32 (dump, ctx->analysis->big_endian); break; case 8: - address = rz_read_ble64 (dump, ctx->anal->big_endian); + address = rz_read_ble64 (dump, ctx->analysis->big_endian); break; default: rz_warn_if_reached (); /* weird addr_size */ @@ -1403,7 +1403,7 @@ static void parse_function(Context *ctx, ut64 idx) { rz_strbuf_append (&ret_type, "void"); } rz_warn_if_fail (ctx->lang); - char *new_name = ctx->anal->binb.demangle (NULL, ctx->lang, fcn.name, fcn.addr, false); + char *new_name = ctx->analysis->binb.demangle (NULL, ctx->lang, fcn.name, fcn.addr, false); fcn.name = new_name ? new_name : strdup (fcn.name); fcn.signature = rz_str_newf ("%s %s(%s);", rz_strbuf_get (&ret_type), fcn.name, rz_strbuf_get (&args)); sdb_save_dwarf_function (&fcn, variables, ctx->sdb); @@ -1522,18 +1522,18 @@ static void parse_type_entry(Context *ctx, ut64 idx) { * @brief Parses type and function information out of DWARF entries * and stores them to the sdb for further use * - * @param anal + * @param analysis * @param ctx */ -RZ_API void rz_anal_dwarf_process_info(const RzAnal *anal, RzAnalDwarfContext *ctx) { - rz_return_if_fail (ctx && anal); - Sdb *dwarf_sdb = sdb_ns (anal->sdb, "dwarf", 1); +RZ_API void rz_analysis_dwarf_process_info(const RzAnalysis *analysis, RzAnalysisDwarfContext *ctx) { + rz_return_if_fail (ctx && analysis); + Sdb *dwarf_sdb = sdb_ns (analysis->sdb, "dwarf", 1); size_t i, j; const RzBinDwarfDebugInfo *info = ctx->info; for (i = 0; i < info->count; i++) { RzBinDwarfCompUnit *unit = &info->comp_units[i]; Context dw_context = { // context per unit? - .anal = anal, + .analysis = analysis, .all_dies = unit->dies, .count = unit->count, .die_map = info->lookup_table, @@ -1557,11 +1557,11 @@ bool filter_sdb_function_names(void *user, const char *k, const char *v) { * @brief Use parsed DWARF function info from Sdb in the anal functions * XXX right now we only save parsed name and variables, we can't use signature now * XXX refactor to be more readable - * @param anal + * @param analysis * @param dwarf_sdb */ -RZ_API void rz_anal_dwarf_integrate_functions(RzAnal *anal, RzFlag *flags, Sdb *dwarf_sdb) { - rz_return_if_fail (anal && dwarf_sdb); +RZ_API void rz_analysis_dwarf_integrate_functions(RzAnalysis *analysis, RzFlag *flags, Sdb *dwarf_sdb) { + rz_return_if_fail (analysis && dwarf_sdb); /* get all entries with value == func */ SdbList *sdb_list = sdb_foreach_list_filter (dwarf_sdb, filter_sdb_function_names, false); @@ -1576,7 +1576,7 @@ RZ_API void rz_anal_dwarf_integrate_functions(RzAnal *anal, RzFlag *flags, Sdb * free (addr_key); /* if the function is analyzed so we can edit */ - RzAnalFunction *fcn = rz_anal_get_function_at (anal, faddr); + RzAnalysisFunction *fcn = rz_analysis_get_function_at (analysis, faddr); if (fcn) { /* prepend dwarf debug info stuff with dbg. */ char *real_name_key = rz_str_newf ("fcn.%s.name", func_sname); @@ -1586,14 +1586,14 @@ RZ_API void rz_anal_dwarf_integrate_functions(RzAnal *anal, RzFlag *flags, Sdb * char *dwf_name = rz_str_newf ("dbg.%s", real_name); free (real_name); - rz_anal_function_rename (fcn, dwf_name); + rz_analysis_function_rename (fcn, dwf_name); free (dwf_name); char *tmp = rz_str_newf ("fcn.%s.sig", func_sname); char *fcnstr = sdb_get (dwarf_sdb, tmp, 0); free (tmp); /* Apply signature as a comment at a function address */ - rz_meta_set_string (anal, RZ_META_TYPE_COMMENT, faddr, fcnstr); + rz_meta_set_string (analysis, RZ_META_TYPE_COMMENT, faddr, fcnstr); free (fcnstr); } char *var_names_key = rz_str_newf ("fcn.%s.vars", func_sname); @@ -1619,15 +1619,15 @@ RZ_API void rz_anal_dwarf_integrate_functions(RzAnal *anal, RzFlag *flags, Sdb * rz_flag_set_next (flags, global_name, offset, 4); free (global_name); } else if (*kind == 's' && fcn) { - rz_anal_function_set_var (fcn, offset - fcn->maxstack, *kind, type, 4, false, var_name); + rz_analysis_function_set_var (fcn, offset - fcn->maxstack, *kind, type, 4, false, var_name); } else if (*kind == 'r' && fcn) { - RzRegItem *i = rz_reg_get (anal->reg, extra, -1); + RzRegItem *i = rz_reg_get (analysis->reg, extra, -1); if (!i) { goto loop_end; } - rz_anal_function_set_var (fcn, i->index, *kind, type, 4, false, var_name); + rz_analysis_function_set_var (fcn, i->index, *kind, type, 4, false, var_name); } else if (fcn) { /* kind == 'b' */ - rz_anal_function_set_var (fcn, offset - fcn->bp_off, *kind, type, 4, false, var_name); + rz_analysis_function_set_var (fcn, offset - fcn->bp_off, *kind, type, 4, false, var_name); } free (var_key); free (var_data); diff --git a/librz/anal/esil.c b/librz/analysis/esil.c similarity index 59% rename from librz/anal/esil.c rename to librz/analysis/esil.c index 7e24a5c6db..271a165af5 100644 --- a/librz/anal/esil.c +++ b/librz/analysis/esil.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: LGPL-3.0-only -#include +#include #include #include #include @@ -31,7 +31,7 @@ static inline ut64 genmask(int bits) { #define ERR(x) if (esil->verbose) { eprintf ("%s\n", x); } -static bool isnum(RzAnalEsil *esil, const char *str, ut64 *num) { +static bool isnum(RzAnalysisEsil *esil, const char *str, ut64 *num) { if (!esil || !str) { return false; } @@ -47,13 +47,13 @@ static bool isnum(RzAnalEsil *esil, const char *str, ut64 *num) { return false; } -static bool ispackedreg(RzAnalEsil *esil, const char *str) { - RzRegItem *ri = rz_reg_get (esil->anal->reg, str, -1); +static bool ispackedreg(RzAnalysisEsil *esil, const char *str) { + RzRegItem *ri = rz_reg_get (esil->analysis->reg, str, -1); return ri? ri->packed_size > 0: false; } -static bool isregornum(RzAnalEsil *esil, const char *str, ut64 *num) { - if (!rz_anal_esil_reg_read (esil, str, num, NULL)) { +static bool isregornum(RzAnalysisEsil *esil, const char *str, ut64 *num) { + if (!rz_analysis_esil_reg_read (esil, str, num, NULL)) { if (!isnum (esil, str, num)) { return false; } @@ -62,8 +62,8 @@ static bool isregornum(RzAnalEsil *esil, const char *str, ut64 *num) { } /* pop Register or Number */ -static bool popRN(RzAnalEsil *esil, ut64 *n) { - char *str = rz_anal_esil_pop (esil); +static bool popRN(RzAnalysisEsil *esil, ut64 *n) { + char *str = rz_analysis_esil_pop (esil); if (str) { bool ret = isregornum (esil, str, n); free (str); @@ -79,8 +79,8 @@ static void esil_ops_free(HtPPKv *kv) { free (kv->value); } -RZ_API RzAnalEsil *rz_anal_esil_new(int stacksize, int iotrap, unsigned int addrsize) { - RzAnalEsil *esil = RZ_NEW0 (RzAnalEsil); +RZ_API RzAnalysisEsil *rz_analysis_esil_new(int stacksize, int iotrap, unsigned int addrsize) { + RzAnalysisEsil *esil = RZ_NEW0 (RzAnalysisEsil); if (!esil) { return NULL; } @@ -97,17 +97,17 @@ RZ_API RzAnalEsil *rz_anal_esil_new(int stacksize, int iotrap, unsigned int addr esil->parse_goto_count = RZ_ANAL_ESIL_GOTO_LIMIT; esil->ops = ht_pp_new (NULL, esil_ops_free, NULL); esil->iotrap = iotrap; - rz_anal_esil_sources_init (esil); - rz_anal_esil_interrupts_init (esil); + rz_analysis_esil_sources_init (esil); + rz_analysis_esil_interrupts_init (esil); esil->addrmask = genmask (addrsize - 1); return esil; } -RZ_API bool rz_anal_esil_set_op(RzAnalEsil *esil, const char *op, RzAnalEsilOpCb code, ut32 push, ut32 pop, ut32 type) { +RZ_API bool rz_analysis_esil_set_op(RzAnalysisEsil *esil, const char *op, RzAnalysisEsilOpCb code, ut32 push, ut32 pop, ut32 type) { rz_return_val_if_fail (code && RZ_STR_ISNOTEMPTY (op) && esil && esil->ops, false); - RzAnalEsilOp *eop = ht_pp_find (esil->ops, op, NULL); + RzAnalysisEsilOp *eop = ht_pp_find (esil->ops, op, NULL); if (!eop) { - eop = RZ_NEW (RzAnalEsilOp); + eop = RZ_NEW (RzAnalysisEsilOp); if (!eop) { eprintf ("Cannot allocate esil-operation %s\n", op); return false; @@ -125,15 +125,15 @@ RZ_API bool rz_anal_esil_set_op(RzAnalEsil *esil, const char *op, RzAnalEsilOpCb return true; } -static bool rz_anal_esil_fire_trap(RzAnalEsil *esil, int trap_type, int trap_code) { +static bool rz_analysis_esil_fire_trap(RzAnalysisEsil *esil, int trap_type, int trap_code) { rz_return_val_if_fail (esil, false); if (esil->cmd) { if (esil->cmd (esil, esil->cmd_trap, trap_type, trap_code)) { return true; } } - if (esil->anal) { - RzAnalPlugin *ap = esil->anal->cur; + if (esil->analysis) { + RzAnalysisPlugin *ap = esil->analysis->cur; if (ap && ap->esil_trap) { if (ap->esil_trap (esil, trap_type, trap_code)) { return true; @@ -141,14 +141,14 @@ static bool rz_anal_esil_fire_trap(RzAnalEsil *esil, int trap_type, int trap_cod } } #if 0 - RzAnalEsilTrapCB icb; - icb = (RzAnalEsilTrapCB)sdb_ptr_get (esil->traps, i, 0); + RzAnalysisEsilTrapCB icb; + icb = (RzAnalysisEsilTrapCB)sdb_ptr_get (esil->traps, i, 0); return icb (esil, trap_type, trap_code); #endif return false; } -RZ_API bool rz_anal_esil_set_pc(RzAnalEsil *esil, ut64 addr) { +RZ_API bool rz_analysis_esil_set_pc(RzAnalysisEsil *esil, ut64 addr) { if (esil) { esil->address = addr; return true; @@ -156,25 +156,25 @@ RZ_API bool rz_anal_esil_set_pc(RzAnalEsil *esil, ut64 addr) { return false; } -RZ_API void rz_anal_esil_free(RzAnalEsil *esil) { +RZ_API void rz_analysis_esil_free(RzAnalysisEsil *esil) { if (!esil) { return; } - if (esil->anal && esil == esil->anal->esil) { - esil->anal->esil = NULL; + if (esil->analysis && esil == esil->analysis->esil) { + esil->analysis->esil = NULL; } ht_pp_free (esil->ops); esil->ops = NULL; - rz_anal_esil_interrupts_fini (esil); - rz_anal_esil_sources_fini (esil); + rz_analysis_esil_interrupts_fini (esil); + rz_analysis_esil_sources_fini (esil); sdb_free (esil->stats); esil->stats = NULL; - rz_anal_esil_stack_free (esil); + rz_analysis_esil_stack_free (esil); free (esil->stack); - if (esil->anal && esil->anal->cur && esil->anal->cur->esil_fini) { - esil->anal->cur->esil_fini (esil); + if (esil->analysis && esil->analysis->cur && esil->analysis->cur->esil_fini) { + esil->analysis->cur->esil_fini (esil); } - rz_anal_esil_trace_free (esil->trace); + rz_analysis_esil_trace_free (esil->trace); esil->trace = NULL; free (esil->cmd_intr); free (esil->cmd_trap); @@ -186,19 +186,19 @@ RZ_API void rz_anal_esil_free(RzAnalEsil *esil) { free (esil); } -static ut8 esil_internal_sizeof_reg(RzAnalEsil *esil, const char *r) { - rz_return_val_if_fail (esil && esil->anal && esil->anal->reg && r, 0); - RzRegItem *ri = rz_reg_get (esil->anal->reg, r, -1); +static ut8 esil_internal_sizeof_reg(RzAnalysisEsil *esil, const char *r) { + rz_return_val_if_fail (esil && esil->analysis && esil->analysis->reg && r, 0); + RzRegItem *ri = rz_reg_get (esil->analysis->reg, r, -1); return ri? ri->size: 0; } -static bool alignCheck(RzAnalEsil *esil, ut64 addr) { - int dataAlign = rz_anal_archinfo (esil->anal, RZ_ANAL_ARCHINFO_DATA_ALIGN); +static bool alignCheck(RzAnalysisEsil *esil, ut64 addr) { + int dataAlign = rz_analysis_archinfo (esil->analysis, RZ_ANAL_ARCHINFO_DATA_ALIGN); return !(dataAlign > 0 && addr % dataAlign); } -static int internal_esil_mem_read(RzAnalEsil *esil, ut64 addr, ut8 *buf, int len) { - rz_return_val_if_fail (esil && esil->anal && esil->anal->iob.io, 0); +static int internal_esil_mem_read(RzAnalysisEsil *esil, ut64 addr, ut8 *buf, int len) { + rz_return_val_if_fail (esil && esil->analysis && esil->analysis->iob.io, 0); addr &= esil->addrmask; if (!alignCheck (esil, addr)) { @@ -214,10 +214,10 @@ static int internal_esil_mem_read(RzAnalEsil *esil, ut64 addr, ut8 *buf, int len } } //TODO: Check if error return from read_at.(on previous version of r2 this call always return len) - (void)esil->anal->iob.read_at (esil->anal->iob.io, addr, buf, len); + (void)esil->analysis->iob.read_at (esil->analysis->iob.io, addr, buf, len); // check if request address is mapped , if don't fire trap and esil ioer callback // now with siol, read_at return true/false can't be used to check error vs len - if (!esil->anal->iob.is_valid_offset (esil->anal->iob.io, addr, false)) { + if (!esil->analysis->iob.is_valid_offset (esil->analysis->iob.io, addr, false)) { if (esil->iotrap) { esil->trap = RZ_ANAL_TRAP_READ_ERR; esil->trap_code = addr; @@ -229,8 +229,8 @@ static int internal_esil_mem_read(RzAnalEsil *esil, ut64 addr, ut8 *buf, int len return len; } -static int internal_esil_mem_read_no_null(RzAnalEsil *esil, ut64 addr, ut8 *buf, int len) { - rz_return_val_if_fail (esil && esil->anal && esil->anal->iob.io, 0); +static int internal_esil_mem_read_no_null(RzAnalysisEsil *esil, ut64 addr, ut8 *buf, int len) { + rz_return_val_if_fail (esil && esil->analysis && esil->analysis->iob.io, 0); addr &= esil->addrmask; if (!alignCheck (esil, addr)) { @@ -239,10 +239,10 @@ static int internal_esil_mem_read_no_null(RzAnalEsil *esil, ut64 addr, ut8 *buf, return false; } //TODO: Check if error return from read_at.(on previous version of r2 this call always return len) - (void)esil->anal->iob.read_at (esil->anal->iob.io, addr, buf, len); + (void)esil->analysis->iob.read_at (esil->analysis->iob.io, addr, buf, len); // check if request address is mapped , if don't fire trap and esil ioer callback // now with siol, read_at return true/false can't be used to check error vs len - if (!esil->anal->iob.is_valid_offset (esil->anal->iob.io, addr, false)) { + if (!esil->analysis->iob.is_valid_offset (esil->analysis->iob.io, addr, false)) { if (esil->iotrap) { esil->trap = RZ_ANAL_TRAP_READ_ERR; esil->trap_code = addr; @@ -251,7 +251,7 @@ static int internal_esil_mem_read_no_null(RzAnalEsil *esil, ut64 addr, ut8 *buf, return len; } -RZ_API int rz_anal_esil_mem_read(RzAnalEsil *esil, ut64 addr, ut8 *buf, int len) { +RZ_API int rz_analysis_esil_mem_read(RzAnalysisEsil *esil, ut64 addr, ut8 *buf, int len) { int i, ret = 0; rz_return_val_if_fail (buf && esil, 0); addr &= esil->addrmask; @@ -282,9 +282,9 @@ RZ_API int rz_anal_esil_mem_read(RzAnalEsil *esil, ut64 addr, ut8 *buf, int len) return ret; } -static int internal_esil_mem_write(RzAnalEsil *esil, ut64 addr, const ut8 *buf, int len) { +static int internal_esil_mem_write(RzAnalysisEsil *esil, ut64 addr, const ut8 *buf, int len) { int ret = 0; - if (!esil || !esil->anal || !esil->anal->iob.io || esil->nowrite) { + if (!esil || !esil->analysis || !esil->analysis->iob.io || esil->nowrite) { return 0; } addr &= esil->addrmask; @@ -300,12 +300,12 @@ static int internal_esil_mem_write(RzAnalEsil *esil, ut64 addr, const ut8 *buf, } } } - if (esil->anal->iob.write_at (esil->anal->iob.io, addr, buf, len)) { + if (esil->analysis->iob.write_at (esil->analysis->iob.io, addr, buf, len)) { ret = len; } // check if request address is mapped , if don't fire trap and esil ioer callback // now with siol, write_at return true/false can't be used to check error vs len - if (!esil->anal->iob.is_valid_offset (esil->anal->iob.io, addr, false)) { + if (!esil->analysis->iob.is_valid_offset (esil->analysis->iob.io, addr, false)) { if (esil->iotrap) { esil->trap = RZ_ANAL_TRAP_WRITE_ERR; esil->trap_code = addr; @@ -317,21 +317,21 @@ static int internal_esil_mem_write(RzAnalEsil *esil, ut64 addr, const ut8 *buf, return ret; } -static int internal_esil_mem_write_no_null(RzAnalEsil *esil, ut64 addr, const ut8 *buf, int len) { +static int internal_esil_mem_write_no_null(RzAnalysisEsil *esil, ut64 addr, const ut8 *buf, int len) { int ret = 0; - if (!esil || !esil->anal || !esil->anal->iob.io || !addr) { + if (!esil || !esil->analysis || !esil->analysis->iob.io || !addr) { return 0; } if (esil->nowrite) { return 0; } addr &= esil->addrmask; - if (esil->anal->iob.write_at (esil->anal->iob.io, addr, buf, len)) { + if (esil->analysis->iob.write_at (esil->analysis->iob.io, addr, buf, len)) { ret = len; } // check if request address is mapped , if don't fire trap and esil ioer callback // now with siol, write_at return true/false can't be used to check error vs len - if (!esil->anal->iob.is_valid_offset (esil->anal->iob.io, addr, false)) { + if (!esil->analysis->iob.is_valid_offset (esil->analysis->iob.io, addr, false)) { if (esil->iotrap) { esil->trap = RZ_ANAL_TRAP_WRITE_ERR; esil->trap_code = addr; @@ -340,7 +340,7 @@ static int internal_esil_mem_write_no_null(RzAnalEsil *esil, ut64 addr, const ut return ret; } -RZ_API int rz_anal_esil_mem_write(RzAnalEsil *esil, ut64 addr, const ut8 *buf, int len) { +RZ_API int rz_analysis_esil_mem_write(RzAnalysisEsil *esil, ut64 addr, const ut8 *buf, int len) { int i, ret = 0; if (!buf || !esil) { return 0; @@ -362,38 +362,38 @@ RZ_API int rz_anal_esil_mem_write(RzAnalEsil *esil, ut64 addr, const ut8 *buf, i return ret; } -static int internal_esil_reg_read(RzAnalEsil *esil, const char *regname, ut64 *num, int *size) { - RzRegItem *reg = rz_reg_get (esil->anal->reg, regname, -1); +static int internal_esil_reg_read(RzAnalysisEsil *esil, const char *regname, ut64 *num, int *size) { + RzRegItem *reg = rz_reg_get (esil->analysis->reg, regname, -1); if (reg) { if (size) { *size = reg->size; } if (num) { - *num = rz_reg_get_value (esil->anal->reg, reg); + *num = rz_reg_get_value (esil->analysis->reg, reg); } return true; } return false; } -static int internal_esil_reg_write(RzAnalEsil *esil, const char *regname, ut64 num) { - if (esil && esil->anal) { - RzRegItem *reg = rz_reg_get (esil->anal->reg, regname, -1); +static int internal_esil_reg_write(RzAnalysisEsil *esil, const char *regname, ut64 num) { + if (esil && esil->analysis) { + RzRegItem *reg = rz_reg_get (esil->analysis->reg, regname, -1); if (reg) { - rz_reg_set_value (esil->anal->reg, reg, num); + rz_reg_set_value (esil->analysis->reg, reg, num); return true; } } return false; } -static int internal_esil_reg_write_no_null (RzAnalEsil *esil, const char *regname, ut64 num) { - rz_return_val_if_fail (esil && esil->anal && esil->anal->reg, false); +static int internal_esil_reg_write_no_null (RzAnalysisEsil *esil, const char *regname, ut64 num) { + rz_return_val_if_fail (esil && esil->analysis && esil->analysis->reg, false); - RzRegItem *reg = rz_reg_get (esil->anal->reg, regname, -1); - const char *pc = rz_reg_get_name (esil->anal->reg, RZ_REG_NAME_PC); - const char *sp = rz_reg_get_name (esil->anal->reg, RZ_REG_NAME_SP); - const char *bp = rz_reg_get_name (esil->anal->reg, RZ_REG_NAME_BP); + RzRegItem *reg = rz_reg_get (esil->analysis->reg, regname, -1); + const char *pc = rz_reg_get_name (esil->analysis->reg, RZ_REG_NAME_PC); + const char *sp = rz_reg_get_name (esil->analysis->reg, RZ_REG_NAME_SP); + const char *bp = rz_reg_get_name (esil->analysis->reg, RZ_REG_NAME_BP); if (!pc) { eprintf ("Warning: RzReg profile does not contain PC register\n"); @@ -408,19 +408,19 @@ static int internal_esil_reg_write_no_null (RzAnalEsil *esil, const char *regnam return false; } if (reg && reg->name && ((strcmp (reg->name , pc) && strcmp (reg->name, sp) && strcmp(reg->name, bp)) || num)) { //I trust k-maps - rz_reg_set_value (esil->anal->reg, reg, num); + rz_reg_set_value (esil->analysis->reg, reg, num); return true; } return false; } -RZ_API bool rz_anal_esil_pushnum(RzAnalEsil *esil, ut64 num) { +RZ_API bool rz_analysis_esil_pushnum(RzAnalysisEsil *esil, ut64 num) { char str[64]; snprintf (str, sizeof (str) - 1, "0x%" PFMT64x, num); - return rz_anal_esil_push (esil, str); + return rz_analysis_esil_push (esil, str); } -RZ_API bool rz_anal_esil_push(RzAnalEsil *esil, const char *str) { +RZ_API bool rz_analysis_esil_push(RzAnalysisEsil *esil, const char *str) { if (!str || !esil || !*str || esil->stackptr > (esil->stacksize - 1)) { return false; } @@ -428,7 +428,7 @@ RZ_API bool rz_anal_esil_push(RzAnalEsil *esil, const char *str) { return true; } -RZ_API char *rz_anal_esil_pop(RzAnalEsil *esil) { +RZ_API char *rz_analysis_esil_pop(RzAnalysisEsil *esil) { rz_return_val_if_fail (esil, NULL); if (esil->stackptr < 1) { return NULL; @@ -436,7 +436,7 @@ RZ_API char *rz_anal_esil_pop(RzAnalEsil *esil) { return esil->stack[--esil->stackptr]; } -RZ_API int rz_anal_esil_get_parm_type(RzAnalEsil *esil, const char *str) { +RZ_API int rz_analysis_esil_get_parm_type(RzAnalysisEsil *esil, const char *str) { int len, i; if (!str || !(len = strlen (str))) { @@ -455,17 +455,17 @@ RZ_API int rz_anal_esil_get_parm_type(RzAnalEsil *esil, const char *str) { } return RZ_ANAL_ESIL_PARM_NUM; not_a_number: - if (rz_reg_get (esil->anal->reg, str, -1)) { + if (rz_reg_get (esil->analysis->reg, str, -1)) { return RZ_ANAL_ESIL_PARM_REG; } return RZ_ANAL_ESIL_PARM_INVALID; } -RZ_API int rz_anal_esil_get_parm_size(RzAnalEsil *esil, const char *str, ut64 *num, int *size) { +RZ_API int rz_analysis_esil_get_parm_size(RzAnalysisEsil *esil, const char *str, ut64 *num, int *size) { if (!str || !*str) { return false; } - int parm_type = rz_anal_esil_get_parm_type (esil, str); + int parm_type = rz_analysis_esil_get_parm_type (esil, str); if (!num || !esil) { return false; } @@ -473,11 +473,11 @@ RZ_API int rz_anal_esil_get_parm_size(RzAnalEsil *esil, const char *str, ut64 *n case RZ_ANAL_ESIL_PARM_NUM: *num = rz_num_get (NULL, str); if (size) { - *size = esil->anal->bits; + *size = esil->analysis->bits; } return true; case RZ_ANAL_ESIL_PARM_REG: - if (!rz_anal_esil_reg_read (esil, str, num, size)) { + if (!rz_analysis_esil_reg_read (esil, str, num, size)) { break; } return true; @@ -491,11 +491,11 @@ RZ_API int rz_anal_esil_get_parm_size(RzAnalEsil *esil, const char *str, ut64 *n return false; } -RZ_API int rz_anal_esil_get_parm(RzAnalEsil *esil, const char *str, ut64 *num) { - return rz_anal_esil_get_parm_size (esil, str, num, NULL); +RZ_API int rz_analysis_esil_get_parm(RzAnalysisEsil *esil, const char *str, ut64 *num) { + return rz_analysis_esil_get_parm_size (esil, str, num, NULL); } -RZ_API int rz_anal_esil_reg_write(RzAnalEsil *esil, const char *dst, ut64 num) { +RZ_API int rz_analysis_esil_reg_write(RzAnalysisEsil *esil, const char *dst, ut64 num) { int ret = 0; IFDBG { eprintf ("%s=0x%" PFMT64x "\n", dst, num); } if (esil && esil->cb.hook_reg_write) { @@ -507,16 +507,16 @@ RZ_API int rz_anal_esil_reg_write(RzAnalEsil *esil, const char *dst, ut64 num) { return ret; } -RZ_API int rz_anal_esil_reg_read_nocallback(RzAnalEsil *esil, const char *regname, ut64 *num, int *size) { +RZ_API int rz_analysis_esil_reg_read_nocallback(RzAnalysisEsil *esil, const char *regname, ut64 *num, int *size) { int ret; void *old_hook_reg_read = (void *) esil->cb.hook_reg_read; esil->cb.hook_reg_read = NULL; - ret = rz_anal_esil_reg_read (esil, regname, num, size); + ret = rz_analysis_esil_reg_read (esil, regname, num, size); esil->cb.hook_reg_read = old_hook_reg_read; return ret; } -RZ_API int rz_anal_esil_reg_read(RzAnalEsil *esil, const char *regname, ut64 *num, int *size) { +RZ_API int rz_analysis_esil_reg_read(RzAnalysisEsil *esil, const char *regname, ut64 *num, int *size) { bool ret = false; ut64 localnum; // XXX why is this necessary? if (!esil || !regname) { @@ -527,7 +527,7 @@ RZ_API int rz_anal_esil_reg_read(RzAnalEsil *esil, const char *regname, ut64 *nu } *num = 0LL; if (size) { - *size = esil->anal->bits; + *size = esil->analysis->bits; } if (esil->cb.hook_reg_read) { ret = esil->cb.hook_reg_read (esil, regname, num, size); @@ -542,15 +542,15 @@ RZ_API int rz_anal_esil_reg_read(RzAnalEsil *esil, const char *regname, ut64 *nu // and other instructions involving signed values, extends n bit value to 64 bit value // example : >"ae 8,0x81,~" ( ,,~ ) // output : 0xffffffffffffff81 -static bool esil_signext(RzAnalEsil *esil) { +static bool esil_signext(RzAnalysisEsil *esil) { ut64 src, dst; - char *p_src = rz_anal_esil_pop (esil); + char *p_src = rz_analysis_esil_pop (esil); if (!p_src) { return false; } - if (!rz_anal_esil_get_parm (esil, p_src, &src)) { + if (!rz_analysis_esil_get_parm (esil, p_src, &src)) { ERR ("esil_of: empty stack"); free (p_src); return false; @@ -558,12 +558,12 @@ static bool esil_signext(RzAnalEsil *esil) { free (p_src); } - char *p_dst = rz_anal_esil_pop (esil); + char *p_dst = rz_analysis_esil_pop (esil); if (!p_dst) { return false; } - if (!rz_anal_esil_get_parm (esil, p_dst, &dst)) { + if (!rz_analysis_esil_get_parm (esil, p_dst, &dst)) { ERR ("esil_of: empty stack"); free (p_dst); return false; @@ -580,50 +580,50 @@ static bool esil_signext(RzAnalEsil *esil) { } // dst = (dst & ((1U << src_bit) - 1)); // clear upper bits - return rz_anal_esil_pushnum (esil, ((src ^ m) - m)); + return rz_analysis_esil_pushnum (esil, ((src ^ m) - m)); } -static bool esil_zf(RzAnalEsil *esil) { - return rz_anal_esil_pushnum (esil, !(esil->cur & genmask (esil->lastsz - 1))); +static bool esil_zf(RzAnalysisEsil *esil) { + return rz_analysis_esil_pushnum (esil, !(esil->cur & genmask (esil->lastsz - 1))); } // checks if there was a carry from bit x (x,$c) -static bool esil_cf(RzAnalEsil *esil) { - char *src = rz_anal_esil_pop (esil); +static bool esil_cf(RzAnalysisEsil *esil) { + char *src = rz_analysis_esil_pop (esil); if (!src) { return false; } - if (rz_anal_esil_get_parm_type (esil, src) != RZ_ANAL_ESIL_PARM_NUM) { + if (rz_analysis_esil_get_parm_type (esil, src) != RZ_ANAL_ESIL_PARM_NUM) { free (src); return false; } ut64 bit; - rz_anal_esil_get_parm (esil, src, &bit); + rz_analysis_esil_get_parm (esil, src, &bit); free (src); //carry from bit //range of src goes from 0 to 63 // //implements bit mod 64 const ut64 mask = genmask (bit & 0x3f); - return rz_anal_esil_pushnum (esil, (esil->cur & mask) < (esil->old & mask)); + return rz_analysis_esil_pushnum (esil, (esil->cur & mask) < (esil->old & mask)); } // checks if there was a borrow from bit x (x,$b) -static bool esil_bf(RzAnalEsil *esil) { - char *src = rz_anal_esil_pop (esil); +static bool esil_bf(RzAnalysisEsil *esil) { + char *src = rz_analysis_esil_pop (esil); if (!src) { return false; } - if (rz_anal_esil_get_parm_type (esil, src) != RZ_ANAL_ESIL_PARM_NUM) { + if (rz_analysis_esil_get_parm_type (esil, src) != RZ_ANAL_ESIL_PARM_NUM) { free (src); return false; } ut64 bit; - rz_anal_esil_get_parm (esil, src, &bit); + rz_analysis_esil_get_parm (esil, src, &bit); free (src); //borrow from bit //range of src goes from 1 to 64 @@ -631,10 +631,10 @@ static bool esil_bf(RzAnalEsil *esil) { // //implements (bit - 1) mod 64 const ut64 mask = genmask ((bit + 0x3f) & 0x3f); - return rz_anal_esil_pushnum (esil, (esil->old & mask) < (esil->cur & mask)); + return rz_analysis_esil_pushnum (esil, (esil->old & mask) < (esil->cur & mask)); } -static bool esil_pf(RzAnalEsil *esil) { +static bool esil_pf(RzAnalysisEsil *esil) { // Set if the number of set bits in the least significant _byte_ is a multiple of 2. // - Taken from: https://graphics.stanford.edu/~seander/bithacks.html#ParityWith64Bits const ut64 c1 = 0x0101010101010101ULL; @@ -642,26 +642,26 @@ static bool esil_pf(RzAnalEsil *esil) { const ut64 c3 = 0x1FF; // Take only the least significant byte. ut64 lsb = esil->cur & 0xff; - return rz_anal_esil_pushnum (esil, !((((lsb * c1) & c2) % c3) & 1)); + return rz_analysis_esil_pushnum (esil, !((((lsb * c1) & c2) % c3) & 1)); } // like carry // checks overflow from bit x (x,$o) // x,$o ===> x,$c,x-1,$c,^ -static bool esil_of(RzAnalEsil *esil) { - char *p_bit = rz_anal_esil_pop (esil); +static bool esil_of(RzAnalysisEsil *esil) { + char *p_bit = rz_analysis_esil_pop (esil); if (!p_bit) { return false; } - if (rz_anal_esil_get_parm_type (esil, p_bit) != RZ_ANAL_ESIL_PARM_NUM) { + if (rz_analysis_esil_get_parm_type (esil, p_bit) != RZ_ANAL_ESIL_PARM_NUM) { free (p_bit); return false; } ut64 bit; - if (!rz_anal_esil_get_parm (esil, p_bit, &bit)) { + if (!rz_analysis_esil_get_parm (esil, p_bit, &bit)) { ERR ("esil_of: empty stack"); free (p_bit); return false; @@ -670,23 +670,23 @@ static bool esil_of(RzAnalEsil *esil) { const ut64 m[2] = {genmask (bit & 0x3f), genmask ((bit + 0x3f) & 0x3f)}; const ut64 result = ((esil->cur & m[0]) < (esil->old & m[0])) ^ ((esil->cur & m[1]) < (esil->old & m[1])); - ut64 res = rz_anal_esil_pushnum (esil, result); + ut64 res = rz_analysis_esil_pushnum (esil, result); return res; } //checks sign bit at x (x,$s) -static bool esil_sf(RzAnalEsil *esil) { +static bool esil_sf(RzAnalysisEsil *esil) { rz_return_val_if_fail (esil, false); - char *p_size = rz_anal_esil_pop (esil); + char *p_size = rz_analysis_esil_pop (esil); rz_return_val_if_fail (p_size, false); - if (rz_anal_esil_get_parm_type (esil, p_size) != RZ_ANAL_ESIL_PARM_NUM) { + if (rz_analysis_esil_get_parm_type (esil, p_size) != RZ_ANAL_ESIL_PARM_NUM) { free (p_size); return false; } ut64 size, num; - rz_anal_esil_get_parm (esil, p_size, &size); + rz_analysis_esil_get_parm (esil, p_size, &size); free (p_size); if (size > 63) { @@ -694,51 +694,51 @@ static bool esil_sf(RzAnalEsil *esil) { } else { num = (esil->cur >> size) & 1; } - ut64 res = rz_anal_esil_pushnum (esil, num); + ut64 res = rz_analysis_esil_pushnum (esil, num); return res; } -static bool esil_ds(RzAnalEsil *esil) { +static bool esil_ds(RzAnalysisEsil *esil) { rz_return_val_if_fail (esil, false); - return rz_anal_esil_pushnum (esil, esil->delay); + return rz_analysis_esil_pushnum (esil, esil->delay); } -static bool esil_jt(RzAnalEsil *esil) { +static bool esil_jt(RzAnalysisEsil *esil) { rz_return_val_if_fail (esil, false); - return rz_anal_esil_pushnum (esil, esil->jump_target); + return rz_analysis_esil_pushnum (esil, esil->jump_target); } -static bool esil_js(RzAnalEsil *esil) { +static bool esil_js(RzAnalysisEsil *esil) { rz_return_val_if_fail (esil, false); - return rz_anal_esil_pushnum (esil, esil->jump_target_set); + return rz_analysis_esil_pushnum (esil, esil->jump_target_set); } // TODO: this should be deprecated because it is not accurate -static bool esil_rs(RzAnalEsil *esil) { - rz_return_val_if_fail (esil && esil->anal, false); - return rz_anal_esil_pushnum (esil, esil->anal->bits >> 3); +static bool esil_rs(RzAnalysisEsil *esil) { + rz_return_val_if_fail (esil && esil->analysis, false); + return rz_analysis_esil_pushnum (esil, esil->analysis->bits >> 3); } // TODO: this should be deprecated because plugins should know their current address -static bool esil_address(RzAnalEsil *esil) { +static bool esil_address(RzAnalysisEsil *esil) { rz_return_val_if_fail (esil, false); - return rz_anal_esil_pushnum (esil, esil->address); + return rz_analysis_esil_pushnum (esil, esil->address); } -static bool esil_weak_eq(RzAnalEsil *esil) { - rz_return_val_if_fail (esil && esil->anal, false); - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); +static bool esil_weak_eq(RzAnalysisEsil *esil) { + rz_return_val_if_fail (esil && esil->analysis, false); + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); - if (!(dst && src && (rz_anal_esil_get_parm_type(esil, dst) == RZ_ANAL_ESIL_PARM_REG))) { + if (!(dst && src && (rz_analysis_esil_get_parm_type(esil, dst) == RZ_ANAL_ESIL_PARM_REG))) { free (dst); free (src); return false; } ut64 src_num; - if (rz_anal_esil_get_parm (esil, src, &src_num)) { - (void)rz_anal_esil_reg_write (esil, dst, src_num); + if (rz_analysis_esil_get_parm (esil, src, &src_num)) { + (void)rz_analysis_esil_reg_write (esil, dst, src_num); free (src); free (dst); return true; @@ -749,11 +749,11 @@ static bool esil_weak_eq(RzAnalEsil *esil) { return false; } -static bool esil_eq(RzAnalEsil *esil) { +static bool esil_eq(RzAnalysisEsil *esil) { bool ret = false; ut64 num, num2; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); if (!src || !dst) { if (esil->verbose) { eprintf ("Missing elements in the esil stack for '=' at 0x%08"PFMT64x"\n", esil->address); @@ -761,19 +761,19 @@ static bool esil_eq(RzAnalEsil *esil) { return false; } if (ispackedreg (esil, dst)) { - char *src2 = rz_anal_esil_pop (esil); + char *src2 = rz_analysis_esil_pop (esil); char *newreg = rz_str_newf ("%sl", dst); - if (rz_anal_esil_get_parm (esil, src2, &num2)) { - ret = rz_anal_esil_reg_write (esil, newreg, num2); + if (rz_analysis_esil_get_parm (esil, src2, &num2)) { + ret = rz_analysis_esil_reg_write (esil, newreg, num2); } free (newreg); free (src2); goto beach; } - if (src && dst && rz_anal_esil_reg_read_nocallback (esil, dst, &num, NULL)) { - if (rz_anal_esil_get_parm (esil, src, &num2)) { - ret = rz_anal_esil_reg_write (esil, dst, num2); + if (src && dst && rz_analysis_esil_reg_read_nocallback (esil, dst, &num, NULL)) { + if (rz_analysis_esil_get_parm (esil, src, &num2)) { + ret = rz_analysis_esil_reg_write (esil, dst, num2); esil->cur = num2; esil->old = num; esil->lastsz = esil_internal_sizeof_reg (esil, dst); @@ -790,18 +790,18 @@ beach: return ret; } -static bool esil_neg(RzAnalEsil *esil) { +static bool esil_neg(RzAnalysisEsil *esil) { bool ret = false; - char *src = rz_anal_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); if (src) { ut64 num; - if (rz_anal_esil_get_parm (esil, src, &num)) { - rz_anal_esil_pushnum (esil, !num); + if (rz_analysis_esil_get_parm (esil, src, &num)) { + rz_analysis_esil_pushnum (esil, !num); ret = true; } else { if (isregornum (esil, src, &num)) { ret = true; - rz_anal_esil_pushnum (esil, !num); + rz_analysis_esil_pushnum (esil, !num); } else { eprintf ("0x%08"PFMT64x" esil_neg: unknown reg %s\n", esil->address, src); } @@ -813,37 +813,37 @@ static bool esil_neg(RzAnalEsil *esil) { return ret; } -static bool esil_negeq(RzAnalEsil *esil) { +static bool esil_negeq(RzAnalysisEsil *esil) { bool ret = false; ut64 num; - char *src = rz_anal_esil_pop (esil); - if (src && rz_anal_esil_reg_read (esil, src, &num, NULL)) { + char *src = rz_analysis_esil_pop (esil); + if (src && rz_analysis_esil_reg_read (esil, src, &num, NULL)) { num = !num; - rz_anal_esil_reg_write (esil, src, num); + rz_analysis_esil_reg_write (esil, src, num); ret = true; } else { ERR ("esil_negeq: empty stack"); } free (src); - //rz_anal_esil_pushnum (esil, ret); + //rz_analysis_esil_pushnum (esil, ret); return ret; } -static bool esil_nop(RzAnalEsil *esil) { +static bool esil_nop(RzAnalysisEsil *esil) { return true; } -static bool esil_andeq(RzAnalEsil *esil) { +static bool esil_andeq(RzAnalysisEsil *esil) { bool ret = false; ut64 num, num2; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); - if (dst && rz_anal_esil_reg_read (esil, dst, &num, NULL)) { - if (src && rz_anal_esil_get_parm (esil, src, &num2)) { + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); + if (dst && rz_analysis_esil_reg_read (esil, dst, &num, NULL)) { + if (src && rz_analysis_esil_get_parm (esil, src, &num2)) { esil->old = num; esil->cur = num & num2; esil->lastsz = esil_internal_sizeof_reg (esil, dst); - rz_anal_esil_reg_write (esil, dst, num & num2); + rz_analysis_esil_reg_write (esil, dst, num & num2); ret = true; } else { ERR ("esil_andeq: empty stack"); @@ -854,17 +854,17 @@ static bool esil_andeq(RzAnalEsil *esil) { return ret; } -static bool esil_oreq(RzAnalEsil *esil) { +static bool esil_oreq(RzAnalysisEsil *esil) { bool ret = false; ut64 num, num2; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); - if (dst && rz_anal_esil_reg_read (esil, dst, &num, NULL)) { - if (src && rz_anal_esil_get_parm (esil, src, &num2)) { + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); + if (dst && rz_analysis_esil_reg_read (esil, dst, &num, NULL)) { + if (src && rz_analysis_esil_get_parm (esil, src, &num2)) { esil->old = num; esil->cur = num | num2; esil->lastsz = esil_internal_sizeof_reg (esil, dst); - ret = rz_anal_esil_reg_write (esil, dst, num | num2); + ret = rz_analysis_esil_reg_write (esil, dst, num | num2); } else { ERR ("esil_ordeq: empty stack"); } @@ -874,17 +874,17 @@ static bool esil_oreq(RzAnalEsil *esil) { return ret; } -static bool esil_xoreq(RzAnalEsil *esil) { +static bool esil_xoreq(RzAnalysisEsil *esil) { bool ret = false; ut64 num, num2; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); - if (dst && rz_anal_esil_reg_read (esil, dst, &num, NULL)) { - if (src && rz_anal_esil_get_parm (esil, src, &num2)) { + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); + if (dst && rz_analysis_esil_reg_read (esil, dst, &num, NULL)) { + if (src && rz_analysis_esil_get_parm (esil, src, &num2)) { esil->old = num; esil->cur = num ^ num2; esil->lastsz = esil_internal_sizeof_reg (esil, dst); - ret = rz_anal_esil_reg_write (esil, dst, num ^ num2); + ret = rz_analysis_esil_reg_write (esil, dst, num ^ num2); } else { ERR ("esil_xoreq: empty stack"); } @@ -895,9 +895,9 @@ static bool esil_xoreq(RzAnalEsil *esil) { } #if 0 -static int esil_interrupt_linux_i386(RzAnalEsil *esil) { //move this into a plugin +static int esil_interrupt_linux_i386(RzAnalysisEsil *esil) { //move this into a plugin ut32 sn, ret = 0; - char *usn = rz_anal_esil_pop (esil); + char *usn = rz_analysis_esil_pop (esil); if (usn) { sn = (ut32) rz_num_get (NULL, usn); } else sn = 0x80; @@ -916,9 +916,9 @@ static int esil_interrupt_linux_i386(RzAnalEsil *esil) { //move this into a pl return -1; } #undef r -#define r(x) rz_reg_getv (esil->anal->reg, "##x##") +#define r(x) rz_reg_getv (esil->analysis->reg, "##x##") #undef rs -#define rs(x, y) rz_reg_setv (esil->anal->reg, "##x##", y) +#define rs(x, y) rz_reg_setv (esil->analysis->reg, "##x##", y) switch (r(eax)) { case 1: printf ("exit(%d)\n", (int)r(ebx)); @@ -950,22 +950,22 @@ static int esil_interrupt_linux_i386(RzAnalEsil *esil) { //move this into a pl } #endif -static bool esil_trap(RzAnalEsil *esil) { +static bool esil_trap(RzAnalysisEsil *esil) { ut64 s, d; if (popRN (esil, &s) && popRN (esil, &d)) { esil->trap = s; esil->trap_code = d; - return rz_anal_esil_fire_trap (esil, (int)s, (int)d); + return rz_analysis_esil_fire_trap (esil, (int)s, (int)d); } ERR ("esil_trap: missing parameters in stack"); return false; } -static bool esil_bits(RzAnalEsil *esil) { +static bool esil_bits(RzAnalysisEsil *esil) { ut64 s; if (popRN (esil, &s)) { - if (esil->anal && esil->anal->coreb.setab) { - esil->anal->coreb.setab (esil->anal->coreb.core, NULL, s); + if (esil->analysis && esil->analysis->coreb.setab) { + esil->analysis->coreb.setab (esil->analysis->coreb.core, NULL, s); } return true; } @@ -973,28 +973,28 @@ static bool esil_bits(RzAnalEsil *esil) { return false; } -static bool esil_interrupt(RzAnalEsil *esil) { +static bool esil_interrupt(RzAnalysisEsil *esil) { ut64 interrupt; if (popRN (esil, &interrupt)) { - return rz_anal_esil_fire_interrupt (esil, (ut32)interrupt); + return rz_analysis_esil_fire_interrupt (esil, (ut32)interrupt); } return false; } // This function also sets internal vars which is used in flag calculations. -static bool esil_cmp(RzAnalEsil *esil) { +static bool esil_cmp(RzAnalysisEsil *esil) { ut64 num, num2; bool ret = false; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); - if (dst && rz_anal_esil_get_parm (esil, dst, &num)) { - if (src && rz_anal_esil_get_parm (esil, src, &num2)) { + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); + if (dst && rz_analysis_esil_get_parm (esil, dst, &num)) { + if (src && rz_analysis_esil_get_parm (esil, src, &num2)) { esil->old = num; esil->cur = num - num2; ret = true; - if (rz_reg_get (esil->anal->reg, dst, -1)) { + if (rz_reg_get (esil->analysis->reg, dst, -1)) { esil->lastsz = esil_internal_sizeof_reg (esil, dst); - } else if (rz_reg_get (esil->anal->reg, src, -1)) { + } else if (rz_reg_get (esil->analysis->reg, src, -1)) { esil->lastsz = esil_internal_sizeof_reg (esil, src); } else { // default size is set to 64 as internally operands are ut64 @@ -1043,21 +1043,21 @@ JBE: CF = 1 || ZF = 1 * Defining new cpu flags */ #if 0 -static int esil_ifset(RzAnalEsil *esil) { - char *s, *src = rz_anal_esil_pop (esil); +static int esil_ifset(RzAnalysisEsil *esil) { + char *s, *src = rz_analysis_esil_pop (esil); for (s=src; *s; s++) { switch (*s) { case 'z': - rz_anal_esil_reg_write (esil, "zf", RZ_BIT_CHK(&esil->flags, FLG(ZERO))); + rz_analysis_esil_reg_write (esil, "zf", RZ_BIT_CHK(&esil->flags, FLG(ZERO))); break; case 'c': - rz_anal_esil_reg_write (esil, "cf", RZ_BIT_CHK(&esil->flags, FLG(CARRY))); + rz_analysis_esil_reg_write (esil, "cf", RZ_BIT_CHK(&esil->flags, FLG(CARRY))); break; case 'o': - rz_anal_esil_reg_write (esil, "of", RZ_BIT_CHK(&esil->flags, FLG(OVERFLOW))); + rz_analysis_esil_reg_write (esil, "of", RZ_BIT_CHK(&esil->flags, FLG(OVERFLOW))); break; case 'p': - rz_anal_esil_reg_write (esil, "pf", RZ_BIT_CHK(&esil->flags, FLG(PARITY))); + rz_analysis_esil_reg_write (esil, "pf", RZ_BIT_CHK(&esil->flags, FLG(PARITY))); break; } } @@ -1066,14 +1066,14 @@ static int esil_ifset(RzAnalEsil *esil) { } #endif -static bool esil_if(RzAnalEsil *esil) { +static bool esil_if(RzAnalysisEsil *esil) { ut64 num = 0LL; if (esil->skip) { esil->skip++; return true; } - char *src = rz_anal_esil_pop (esil); - if (src && rz_anal_esil_get_parm (esil, src, &num)) { + char *src = rz_analysis_esil_pop (esil); + if (src && rz_analysis_esil_get_parm (esil, src, &num)) { // condition not matching, skipping until if (!num) { esil->skip++; @@ -1084,20 +1084,20 @@ static bool esil_if(RzAnalEsil *esil) { return false; } -static bool esil_lsl(RzAnalEsil *esil) { +static bool esil_lsl(RzAnalysisEsil *esil) { bool ret = false; ut64 num, num2; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); - if (dst && rz_anal_esil_get_parm (esil, dst, &num)) { - if (src && rz_anal_esil_get_parm (esil, src, &num2)) { + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); + if (dst && rz_analysis_esil_get_parm (esil, dst, &num)) { + if (src && rz_analysis_esil_get_parm (esil, src, &num2)) { if (num2 > sizeof (ut64) * 8) { ERR ("esil_lsl: shift is too big"); } else { if (num2 > 63) { - rz_anal_esil_pushnum (esil, 0); + rz_analysis_esil_pushnum (esil, 0); } else { - rz_anal_esil_pushnum (esil, num << num2); + rz_analysis_esil_pushnum (esil, num << num2); } ret = true; } @@ -1110,13 +1110,13 @@ static bool esil_lsl(RzAnalEsil *esil) { return ret; } -static bool esil_lsleq(RzAnalEsil *esil) { +static bool esil_lsleq(RzAnalysisEsil *esil) { bool ret = false; ut64 num, num2; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); - if (dst && rz_anal_esil_reg_read (esil, dst, &num, NULL)) { - if (src && rz_anal_esil_get_parm (esil, src, &num2)) { + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); + if (dst && rz_analysis_esil_reg_read (esil, dst, &num, NULL)) { + if (src && rz_analysis_esil_get_parm (esil, src, &num2)) { if (num2 > sizeof (ut64) * 8) { ERR ("esil_lsleq: shift is too big"); } else { @@ -1128,7 +1128,7 @@ static bool esil_lsleq(RzAnalEsil *esil) { } esil->cur = num; esil->lastsz = esil_internal_sizeof_reg (esil, dst); - rz_anal_esil_reg_write (esil, dst, num); + rz_analysis_esil_reg_write (esil, dst, num); ret = true; } } else { @@ -1140,15 +1140,15 @@ static bool esil_lsleq(RzAnalEsil *esil) { return ret; } -static bool esil_lsr(RzAnalEsil *esil) { +static bool esil_lsr(RzAnalysisEsil *esil) { bool ret = false; ut64 num, num2; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); - if (dst && rz_anal_esil_get_parm (esil, dst, &num)) { - if (src && rz_anal_esil_get_parm (esil, src, &num2)) { + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); + if (dst && rz_analysis_esil_get_parm (esil, dst, &num)) { + if (src && rz_analysis_esil_get_parm (esil, src, &num2)) { ut64 res = num >> RZ_MIN (num2, 63); - rz_anal_esil_pushnum (esil, res); + rz_analysis_esil_pushnum (esil, res); ret = true; } else { ERR ("esil_lsr: empty stack"); @@ -1159,13 +1159,13 @@ static bool esil_lsr(RzAnalEsil *esil) { return ret; } -static bool esil_lsreq(RzAnalEsil *esil) { +static bool esil_lsreq(RzAnalysisEsil *esil) { bool ret = false; ut64 num, num2; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); - if (dst && rz_anal_esil_reg_read (esil, dst, &num, NULL)) { - if (src && rz_anal_esil_get_parm (esil, src, &num2)) { + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); + if (dst && rz_analysis_esil_reg_read (esil, dst, &num, NULL)) { + if (src && rz_analysis_esil_get_parm (esil, src, &num2)) { if (num2 > 63) { if (esil->verbose) { eprintf ("Invalid shift at 0x%08"PFMT64x"\n", esil->address); @@ -1176,7 +1176,7 @@ static bool esil_lsreq(RzAnalEsil *esil) { num >>= num2; esil->cur = num; esil->lastsz = esil_internal_sizeof_reg (esil, dst); - rz_anal_esil_reg_write (esil, dst, num); + rz_analysis_esil_reg_write (esil, dst, num); ret = true; } else { ERR ("esil_lsreq: empty stack"); @@ -1187,14 +1187,14 @@ static bool esil_lsreq(RzAnalEsil *esil) { return ret; } -static bool esil_asreq(RzAnalEsil *esil) { +static bool esil_asreq(RzAnalysisEsil *esil) { bool ret = false; int regsize = 0; ut64 op_num, param_num; - char *op = rz_anal_esil_pop (esil); - char *param = rz_anal_esil_pop (esil); - if (op && rz_anal_esil_get_parm_size (esil, op, &op_num, ®size)) { - if (param && rz_anal_esil_get_parm (esil, param, ¶m_num)) { + char *op = rz_analysis_esil_pop (esil); + char *param = rz_analysis_esil_pop (esil); + if (op && rz_analysis_esil_get_parm_size (esil, op, &op_num, ®size)) { + if (param && rz_analysis_esil_get_parm (esil, param, ¶m_num)) { ut64 mask = (regsize - 1); param_num &= mask; bool isNegative; @@ -1249,8 +1249,8 @@ static bool esil_asreq(RzAnalEsil *esil) { ut64 res = op_num; esil->cur = res; esil->lastsz = esil_internal_sizeof_reg (esil, op); - rz_anal_esil_reg_write (esil, op, res); - // rz_anal_esil_pushnum (esil, res); + rz_analysis_esil_reg_write (esil, op, res); + // rz_analysis_esil_pushnum (esil, res); ret = true; } else { if (esil->verbose) { @@ -1263,14 +1263,14 @@ static bool esil_asreq(RzAnalEsil *esil) { return ret; } -static bool esil_asr(RzAnalEsil *esil) { +static bool esil_asr(RzAnalysisEsil *esil) { bool ret = false; int regsize = 0; ut64 op_num = 0, param_num = 0; - char *op = rz_anal_esil_pop (esil); - char *param = rz_anal_esil_pop (esil); - if (op && rz_anal_esil_get_parm_size (esil, op, &op_num, ®size)) { - if (param && rz_anal_esil_get_parm (esil, param, ¶m_num)) { + char *op = rz_analysis_esil_pop (esil); + char *param = rz_analysis_esil_pop (esil); + if (op && rz_analysis_esil_get_parm_size (esil, op, &op_num, ®size)) { + if (param && rz_analysis_esil_get_parm (esil, param, ¶m_num)) { if (param_num > regsize - 1) { // capstone bug? if (esil->verbose) { @@ -1299,7 +1299,7 @@ static bool esil_asr(RzAnalEsil *esil) { op_num >>= param_num; } ut64 res = op_num; - rz_anal_esil_pushnum (esil, res); + rz_analysis_esil_pushnum (esil, res); ret = true; } else { ERR ("esil_asr: empty stack"); @@ -1310,18 +1310,18 @@ static bool esil_asr(RzAnalEsil *esil) { return ret; } -static bool esil_ror(RzAnalEsil *esil) { +static bool esil_ror(RzAnalysisEsil *esil) { bool ret = 0; int regsize; ut64 num, num2; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); - if (dst && rz_anal_esil_get_parm_size (esil, dst, &num, ®size)) { - if (src && rz_anal_esil_get_parm (esil, src, &num2)) { + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); + if (dst && rz_analysis_esil_get_parm_size (esil, dst, &num, ®size)) { + if (src && rz_analysis_esil_get_parm (esil, src, &num2)) { ut64 mask = (regsize - 1); num2 &= mask; ut64 res = (num >> num2) | (num << ((-(st64)num2) & mask)); - rz_anal_esil_pushnum (esil, res); + rz_analysis_esil_pushnum (esil, res); ret = true; } else { ERR ("esil_ror: empty stack"); @@ -1332,18 +1332,18 @@ static bool esil_ror(RzAnalEsil *esil) { return ret; } -static bool esil_rol(RzAnalEsil *esil) { +static bool esil_rol(RzAnalysisEsil *esil) { bool ret = 0; int regsize; ut64 num, num2; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); - if (dst && rz_anal_esil_get_parm_size (esil, dst, &num, ®size)) { - if (src && rz_anal_esil_get_parm (esil, src, &num2)) { + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); + if (dst && rz_analysis_esil_get_parm_size (esil, dst, &num, ®size)) { + if (src && rz_analysis_esil_get_parm (esil, src, &num2)) { ut64 mask = (regsize - 1); num2 &= mask; ut64 res = (num << num2) | (num >> ((-(st64)num2) & mask)); - rz_anal_esil_pushnum (esil, res); + rz_analysis_esil_pushnum (esil, res); ret = true; } else { ERR ("esil_rol: empty stack"); @@ -1354,15 +1354,15 @@ static bool esil_rol(RzAnalEsil *esil) { return ret; } -static bool esil_and(RzAnalEsil *esil) { +static bool esil_and(RzAnalysisEsil *esil) { bool ret = false; ut64 num, num2; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); - if (dst && rz_anal_esil_get_parm (esil, dst, &num)) { - if (src && rz_anal_esil_get_parm (esil, src, &num2)) { + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); + if (dst && rz_analysis_esil_get_parm (esil, dst, &num)) { + if (src && rz_analysis_esil_get_parm (esil, src, &num2)) { num &= num2; - rz_anal_esil_pushnum (esil, num); + rz_analysis_esil_pushnum (esil, num); ret = true; } else { ERR ("esil_and: empty stack"); @@ -1373,15 +1373,15 @@ static bool esil_and(RzAnalEsil *esil) { return ret; } -static bool esil_xor(RzAnalEsil *esil) { +static bool esil_xor(RzAnalysisEsil *esil) { bool ret = false; ut64 num, num2; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); - if (dst && rz_anal_esil_get_parm (esil, dst, &num)) { - if (src && rz_anal_esil_get_parm (esil, src, &num2)) { + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); + if (dst && rz_analysis_esil_get_parm (esil, dst, &num)) { + if (src && rz_analysis_esil_get_parm (esil, src, &num2)) { num ^= num2; - rz_anal_esil_pushnum (esil, num); + rz_analysis_esil_pushnum (esil, num); ret = true; } else { ERR ("esil_xor: empty stack"); @@ -1392,15 +1392,15 @@ static bool esil_xor(RzAnalEsil *esil) { return ret; } -static bool esil_or(RzAnalEsil *esil) { +static bool esil_or(RzAnalysisEsil *esil) { bool ret = false; ut64 num, num2; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); - if (dst && rz_anal_esil_get_parm (esil, dst, &num)) { - if (src && rz_anal_esil_get_parm (esil, src, &num2)) { + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); + if (dst && rz_analysis_esil_get_parm (esil, dst, &num)) { + if (src && rz_analysis_esil_get_parm (esil, src, &num2)) { num |= num2; - rz_anal_esil_pushnum (esil, num); + rz_analysis_esil_pushnum (esil, num); ret = true; } else { ERR ("esil_xor: empty stack"); @@ -1411,7 +1411,7 @@ static bool esil_or(RzAnalEsil *esil) { return ret; } -RZ_API const char *rz_anal_esil_trapstr(int type) { +RZ_API const char *rz_analysis_esil_trapstr(int type) { switch (type) { case RZ_ANAL_TRAP_READ_ERR: return "read-err"; @@ -1434,59 +1434,59 @@ RZ_API const char *rz_anal_esil_trapstr(int type) { } } -RZ_API bool rz_anal_esil_dumpstack(RzAnalEsil *esil) { +RZ_API bool rz_analysis_esil_dumpstack(RzAnalysisEsil *esil) { rz_return_val_if_fail (esil, false); int i; if (esil->trap) { eprintf ("ESIL TRAP type %d code 0x%08x %s\n", esil->trap, esil->trap_code, - rz_anal_esil_trapstr (esil->trap)); + rz_analysis_esil_trapstr (esil->trap)); } if (esil->stackptr < 1) { return false; } for (i = esil->stackptr - 1; i >= 0; i--) { - esil->anal->cb_printf ("%s\n", esil->stack[i]); + esil->analysis->cb_printf ("%s\n", esil->stack[i]); } return true; } -static bool esil_break(RzAnalEsil *esil) { +static bool esil_break(RzAnalysisEsil *esil) { esil->parse_stop = 1; return 1; } -static bool esil_clear(RzAnalEsil *esil) { +static bool esil_clear(RzAnalysisEsil *esil) { char *r; - while ((r = rz_anal_esil_pop (esil))) { + while ((r = rz_analysis_esil_pop (esil))) { free (r); } return 1; } -static bool esil_todo(RzAnalEsil *esil) { +static bool esil_todo(RzAnalysisEsil *esil) { esil->parse_stop = 2; return 1; } -static bool esil_goto(RzAnalEsil *esil) { +static bool esil_goto(RzAnalysisEsil *esil) { ut64 num = 0; - char *src = rz_anal_esil_pop (esil); - if (src && *src && rz_anal_esil_get_parm (esil, src, &num)) { + char *src = rz_analysis_esil_pop (esil); + if (src && *src && rz_analysis_esil_get_parm (esil, src, &num)) { esil->parse_goto = num; } free (src); return 1; } -static bool esil_repeat(RzAnalEsil *esil) { - char *dst = rz_anal_esil_pop (esil); // destaintion of the goto - char *src = rz_anal_esil_pop (esil); // value of the counter +static bool esil_repeat(RzAnalysisEsil *esil) { + char *dst = rz_analysis_esil_pop (esil); // destaintion of the goto + char *src = rz_analysis_esil_pop (esil); // value of the counter ut64 n, num = 0; - if (rz_anal_esil_get_parm (esil, src, &n) && rz_anal_esil_get_parm (esil, dst, &num)) { + if (rz_analysis_esil_get_parm (esil, src, &n) && rz_analysis_esil_get_parm (esil, dst, &num)) { if (n > 1) { esil->parse_goto = num; - rz_anal_esil_pushnum (esil, n - 1); + rz_analysis_esil_pushnum (esil, n - 1); } } free (dst); @@ -1494,19 +1494,19 @@ static bool esil_repeat(RzAnalEsil *esil) { return 1; } -static bool esil_pop(RzAnalEsil *esil) { - char *dst = rz_anal_esil_pop (esil); +static bool esil_pop(RzAnalysisEsil *esil) { + char *dst = rz_analysis_esil_pop (esil); free (dst); return 1; } -static bool esil_mod(RzAnalEsil *esil) { +static bool esil_mod(RzAnalysisEsil *esil) { bool ret = false; ut64 s, d; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); - if (src && rz_anal_esil_get_parm (esil, src, &s)) { - if (dst && rz_anal_esil_get_parm (esil, dst, &d)) { + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); + if (src && rz_analysis_esil_get_parm (esil, src, &s)) { + if (dst && rz_analysis_esil_get_parm (esil, dst, &d)) { if (s == 0) { if (esil->verbose > 0) { eprintf ("0x%08"PFMT64x" esil_mod: Division by zero!\n", esil->address); @@ -1514,7 +1514,7 @@ static bool esil_mod(RzAnalEsil *esil) { esil->trap = RZ_ANAL_TRAP_DIVBYZERO; esil->trap_code = 0; } else { - rz_anal_esil_pushnum (esil, d % s); + rz_analysis_esil_pushnum (esil, d % s); } ret = true; } @@ -1526,13 +1526,13 @@ static bool esil_mod(RzAnalEsil *esil) { return ret; } -static bool esil_signed_mod(RzAnalEsil *esil) { +static bool esil_signed_mod(RzAnalysisEsil *esil) { bool ret = false; st64 s, d; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); - if (src && rz_anal_esil_get_parm (esil, src, (ut64 *)&s)) { - if (dst && rz_anal_esil_get_parm (esil, dst, (ut64 *)&d)) { + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); + if (src && rz_analysis_esil_get_parm (esil, src, (ut64 *)&s)) { + if (dst && rz_analysis_esil_get_parm (esil, dst, (ut64 *)&d)) { if (ST64_DIV_OVFCHK (d, s)) { if (esil->verbose > 0) { eprintf ("0x%08"PFMT64x" esil_mod: Division by zero!\n", esil->address); @@ -1540,7 +1540,7 @@ static bool esil_signed_mod(RzAnalEsil *esil) { esil->trap = RZ_ANAL_TRAP_DIVBYZERO; esil->trap_code = 0; } else { - rz_anal_esil_pushnum (esil, d % s); + rz_analysis_esil_pushnum (esil, d % s); } ret = true; } @@ -1552,18 +1552,18 @@ static bool esil_signed_mod(RzAnalEsil *esil) { return ret; } -static bool esil_modeq(RzAnalEsil *esil) { +static bool esil_modeq(RzAnalysisEsil *esil) { bool ret = false; ut64 s, d; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); - if (src && rz_anal_esil_get_parm (esil, src, &s)) { - if (dst && rz_anal_esil_reg_read (esil, dst, &d, NULL)) { + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); + if (src && rz_analysis_esil_get_parm (esil, src, &s)) { + if (dst && rz_analysis_esil_reg_read (esil, dst, &d, NULL)) { if (s) { esil->old = d; esil->cur = d % s; esil->lastsz = esil_internal_sizeof_reg (esil, dst); - rz_anal_esil_reg_write (esil, dst, d % s); + rz_analysis_esil_reg_write (esil, dst, d % s); } else { ERR ("esil_modeq: Division by zero!"); esil->trap = RZ_ANAL_TRAP_DIVBYZERO; @@ -1581,19 +1581,19 @@ static bool esil_modeq(RzAnalEsil *esil) { return ret; } -static bool esil_div(RzAnalEsil *esil) { +static bool esil_div(RzAnalysisEsil *esil) { bool ret = false; ut64 s, d; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); - if (src && rz_anal_esil_get_parm (esil, src, &s)) { - if (dst && rz_anal_esil_get_parm (esil, dst, &d)) { + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); + if (src && rz_analysis_esil_get_parm (esil, src, &s)) { + if (dst && rz_analysis_esil_get_parm (esil, dst, &d)) { if (s == 0) { ERR ("esil_div: Division by zero!"); esil->trap = RZ_ANAL_TRAP_DIVBYZERO; esil->trap_code = 0; } else { - rz_anal_esil_pushnum (esil, d / s); + rz_analysis_esil_pushnum (esil, d / s); } ret = true; } @@ -1605,19 +1605,19 @@ static bool esil_div(RzAnalEsil *esil) { return ret; } -static bool esil_signed_div(RzAnalEsil *esil) { +static bool esil_signed_div(RzAnalysisEsil *esil) { bool ret = false; st64 s, d; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); - if (src && rz_anal_esil_get_parm (esil, src, (ut64 *)&s)) { - if (dst && rz_anal_esil_get_parm (esil, dst, (ut64 *)&d)) { + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); + if (src && rz_analysis_esil_get_parm (esil, src, (ut64 *)&s)) { + if (dst && rz_analysis_esil_get_parm (esil, dst, (ut64 *)&d)) { if (ST64_DIV_OVFCHK (d, s)) { ERR ("esil_div: Division by zero!"); esil->trap = RZ_ANAL_TRAP_DIVBYZERO; esil->trap_code = 0; } else { - rz_anal_esil_pushnum (esil, d / s); + rz_analysis_esil_pushnum (esil, d / s); } ret = true; } @@ -1629,18 +1629,18 @@ static bool esil_signed_div(RzAnalEsil *esil) { return ret; } -static bool esil_diveq(RzAnalEsil *esil) { +static bool esil_diveq(RzAnalysisEsil *esil) { bool ret = false; ut64 s, d; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); - if (src && rz_anal_esil_get_parm (esil, src, &s)) { - if (dst && rz_anal_esil_reg_read (esil, dst, &d, NULL)) { + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); + if (src && rz_analysis_esil_get_parm (esil, src, &s)) { + if (dst && rz_analysis_esil_reg_read (esil, dst, &d, NULL)) { if (s) { esil->old = d; esil->cur = d / s; esil->lastsz = esil_internal_sizeof_reg (esil, dst); - rz_anal_esil_reg_write (esil, dst, d / s); + rz_analysis_esil_reg_write (esil, dst, d / s); } else { // eprintf ("0x%08"PFMT64x" esil_diveq: Division by zero!\n", esil->address); esil->trap = RZ_ANAL_TRAP_DIVBYZERO; @@ -1658,14 +1658,14 @@ static bool esil_diveq(RzAnalEsil *esil) { return ret; } -static bool esil_mul(RzAnalEsil *esil) { +static bool esil_mul(RzAnalysisEsil *esil) { bool ret = false; ut64 s, d; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); - if (src && rz_anal_esil_get_parm (esil, src, &s)) { - if (dst && rz_anal_esil_get_parm (esil, dst, &d)) { - rz_anal_esil_pushnum (esil, d * s); + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); + if (src && rz_analysis_esil_get_parm (esil, src, &s)) { + if (dst && rz_analysis_esil_get_parm (esil, dst, &d)) { + rz_analysis_esil_pushnum (esil, d * s); ret = true; } else { ERR ("esil_mul: empty stack"); @@ -1678,17 +1678,17 @@ static bool esil_mul(RzAnalEsil *esil) { return ret; } -static bool esil_muleq(RzAnalEsil *esil) { +static bool esil_muleq(RzAnalysisEsil *esil) { bool ret = false; ut64 s, d; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); - if (src && rz_anal_esil_get_parm (esil, src, &s)) { - if (dst && rz_anal_esil_reg_read (esil, dst, &d, NULL)) { + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); + if (src && rz_analysis_esil_get_parm (esil, src, &s)) { + if (dst && rz_analysis_esil_reg_read (esil, dst, &d, NULL)) { esil->old = d; esil->cur = d * s; esil->lastsz = esil_internal_sizeof_reg (esil, dst); - ret = rz_anal_esil_reg_write (esil, dst, s * d); + ret = rz_analysis_esil_reg_write (esil, dst, s * d); } else { ERR ("esil_muleq: empty stack"); } @@ -1700,13 +1700,13 @@ static bool esil_muleq(RzAnalEsil *esil) { return ret; } -static bool esil_add(RzAnalEsil *esil) { +static bool esil_add(RzAnalysisEsil *esil) { bool ret = false; ut64 s, d; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); - if ((src && rz_anal_esil_get_parm (esil, src, &s)) && (dst && rz_anal_esil_get_parm (esil, dst, &d))) { - rz_anal_esil_pushnum (esil, s + d); + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); + if ((src && rz_analysis_esil_get_parm (esil, src, &s)) && (dst && rz_analysis_esil_get_parm (esil, dst, &d))) { + rz_analysis_esil_pushnum (esil, s + d); ret = true; } else { ERR ("esil_add: invalid parameters"); @@ -1716,17 +1716,17 @@ static bool esil_add(RzAnalEsil *esil) { return ret; } -static bool esil_addeq(RzAnalEsil *esil) { +static bool esil_addeq(RzAnalysisEsil *esil) { bool ret = false; ut64 s, d; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); - if (src && rz_anal_esil_get_parm (esil, src, &s)) { - if (dst && rz_anal_esil_reg_read (esil, dst, &d, NULL)) { + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); + if (src && rz_analysis_esil_get_parm (esil, src, &s)) { + if (dst && rz_analysis_esil_reg_read (esil, dst, &d, NULL)) { esil->old = d; esil->cur = d + s; esil->lastsz = esil_internal_sizeof_reg (esil, dst); - ret = rz_anal_esil_reg_write (esil, dst, s + d); + ret = rz_analysis_esil_reg_write (esil, dst, s + d); } } else { ERR ("esil_addeq: invalid parameters"); @@ -1736,13 +1736,13 @@ static bool esil_addeq(RzAnalEsil *esil) { return ret; } -static bool esil_inc(RzAnalEsil *esil) { +static bool esil_inc(RzAnalysisEsil *esil) { bool ret = false; ut64 s; - char *src = rz_anal_esil_pop (esil); - if (src && rz_anal_esil_get_parm (esil, src, &s)) { + char *src = rz_analysis_esil_pop (esil); + if (src && rz_analysis_esil_get_parm (esil, src, &s)) { s++; - ret = rz_anal_esil_pushnum (esil, s); + ret = rz_analysis_esil_pushnum (esil, s); } else { ERR ("esil_inc: invalid parameters"); } @@ -1750,15 +1750,15 @@ static bool esil_inc(RzAnalEsil *esil) { return ret; } -static bool esil_inceq(RzAnalEsil *esil) { +static bool esil_inceq(RzAnalysisEsil *esil) { bool ret = false; ut64 sd; - char *src_dst = rz_anal_esil_pop (esil); - if (src_dst && (rz_anal_esil_get_parm_type (esil, src_dst) == RZ_ANAL_ESIL_PARM_REG) && rz_anal_esil_get_parm (esil, src_dst, &sd)) { + char *src_dst = rz_analysis_esil_pop (esil); + if (src_dst && (rz_analysis_esil_get_parm_type (esil, src_dst) == RZ_ANAL_ESIL_PARM_REG) && rz_analysis_esil_get_parm (esil, src_dst, &sd)) { // inc rax esil->old = sd++; esil->cur = sd; - rz_anal_esil_reg_write (esil, src_dst, sd); + rz_analysis_esil_reg_write (esil, src_dst, sd); esil->lastsz = esil_internal_sizeof_reg (esil, src_dst); ret = true; } else { @@ -1768,13 +1768,13 @@ static bool esil_inceq(RzAnalEsil *esil) { return ret; } -static bool esil_sub(RzAnalEsil *esil) { +static bool esil_sub(RzAnalysisEsil *esil) { bool ret = false; ut64 s, d; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); - if ((src && rz_anal_esil_get_parm (esil, src, &s)) && (dst && rz_anal_esil_get_parm (esil, dst, &d))) { - ret = rz_anal_esil_pushnum (esil, d - s); + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); + if ((src && rz_analysis_esil_get_parm (esil, src, &s)) && (dst && rz_analysis_esil_get_parm (esil, dst, &d))) { + ret = rz_analysis_esil_pushnum (esil, d - s); } else { ERR ("esil_sub: invalid parameters"); } @@ -1783,17 +1783,17 @@ static bool esil_sub(RzAnalEsil *esil) { return ret; } -static bool esil_subeq(RzAnalEsil *esil) { +static bool esil_subeq(RzAnalysisEsil *esil) { bool ret = false; ut64 s, d; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); - if (src && rz_anal_esil_get_parm (esil, src, &s)) { - if (dst && rz_anal_esil_reg_read (esil, dst, &d, NULL)) { + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); + if (src && rz_analysis_esil_get_parm (esil, src, &s)) { + if (dst && rz_analysis_esil_reg_read (esil, dst, &d, NULL)) { esil->old = d; esil->cur = d - s; esil->lastsz = esil_internal_sizeof_reg (esil, dst); - ret = rz_anal_esil_reg_write (esil, dst, d - s); + ret = rz_analysis_esil_reg_write (esil, dst, d - s); } } else { ERR ("esil_subeq: invalid parameters"); @@ -1803,13 +1803,13 @@ static bool esil_subeq(RzAnalEsil *esil) { return ret; } -static bool esil_dec(RzAnalEsil *esil) { +static bool esil_dec(RzAnalysisEsil *esil) { bool ret = false; ut64 s; - char *src = rz_anal_esil_pop (esil); - if (src && rz_anal_esil_get_parm (esil, src, &s)) { + char *src = rz_analysis_esil_pop (esil); + if (src && rz_analysis_esil_get_parm (esil, src, &s)) { s--; - ret = rz_anal_esil_pushnum (esil, s); + ret = rz_analysis_esil_pushnum (esil, s); } else { ERR ("esil_dec: invalid parameters"); } @@ -1817,15 +1817,15 @@ static bool esil_dec(RzAnalEsil *esil) { return ret; } -static bool esil_deceq(RzAnalEsil *esil) { +static bool esil_deceq(RzAnalysisEsil *esil) { bool ret = false; ut64 sd; - char *src_dst = rz_anal_esil_pop (esil); - if (src_dst && (rz_anal_esil_get_parm_type (esil, src_dst) == RZ_ANAL_ESIL_PARM_REG) && rz_anal_esil_get_parm (esil, src_dst, &sd)) { + char *src_dst = rz_analysis_esil_pop (esil); + if (src_dst && (rz_analysis_esil_get_parm_type (esil, src_dst) == RZ_ANAL_ESIL_PARM_REG) && rz_analysis_esil_get_parm (esil, src_dst, &sd)) { esil->old = sd; sd--; esil->cur = sd; - rz_anal_esil_reg_write (esil, src_dst, sd); + rz_analysis_esil_reg_write (esil, src_dst, sd); esil->lastsz = esil_internal_sizeof_reg (esil, src_dst); ret = true; } else { @@ -1836,13 +1836,13 @@ static bool esil_deceq(RzAnalEsil *esil) { } /* POKE */ -static bool esil_poke_n(RzAnalEsil *esil, int bits) { +static bool esil_poke_n(RzAnalysisEsil *esil, int bits) { ut64 bitmask = genmask (bits - 1); ut64 num, num2, addr; ut8 b[8] = {0}; ut64 n; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); int bytes = RZ_MIN (sizeof (b), bits / 8); if (bits % 8) { free (src); @@ -1852,16 +1852,16 @@ static bool esil_poke_n(RzAnalEsil *esil, int bits) { bool ret = false; //eprintf ("GONA POKE %d src:%s dst:%s\n", bits, src, dst); char *src2 = NULL; - if (src && rz_anal_esil_get_parm (esil, src, &num)) { - if (dst && rz_anal_esil_get_parm (esil, dst, &addr)) { + if (src && rz_analysis_esil_get_parm (esil, src, &num)) { + if (dst && rz_analysis_esil_get_parm (esil, dst, &addr)) { if (bits == 128) { - src2 = rz_anal_esil_pop (esil); - if (src2 && rz_anal_esil_get_parm (esil, src2, &num2)) { - rz_write_ble (b, num, esil->anal->big_endian, 64); - ret = rz_anal_esil_mem_write (esil, addr, b, bytes); + src2 = rz_analysis_esil_pop (esil); + if (src2 && rz_analysis_esil_get_parm (esil, src2, &num2)) { + rz_write_ble (b, num, esil->analysis->big_endian, 64); + ret = rz_analysis_esil_mem_write (esil, addr, b, bytes); if (ret == 0) { - rz_write_ble (b, num2, esil->anal->big_endian, 64); - ret = rz_anal_esil_mem_write (esil, addr + 8, b, bytes); + rz_write_ble (b, num2, esil->analysis->big_endian, 64); + ret = rz_analysis_esil_mem_write (esil, addr + 8, b, bytes); } goto out; } @@ -1872,15 +1872,15 @@ static bool esil_poke_n(RzAnalEsil *esil, int bits) { // we disable hooks to avoid run hooks on internal peeks void * oldhook = (void*)esil->cb.hook_mem_read; esil->cb.hook_mem_read = NULL; - rz_anal_esil_mem_read (esil, addr, b, bytes); + rz_analysis_esil_mem_read (esil, addr, b, bytes); esil->cb.hook_mem_read = oldhook; - n = rz_read_ble64 (b, esil->anal->big_endian); + n = rz_read_ble64 (b, esil->analysis->big_endian); esil->old = n; esil->cur = num; esil->lastsz = bits; num = num & bitmask; - rz_write_ble (b, num, esil->anal->big_endian, bits); - ret = rz_anal_esil_mem_write (esil, addr, b, bytes); + rz_write_ble (b, num, esil->analysis->big_endian, bits); + ret = rz_analysis_esil_mem_write (esil, addr, b, bytes); } } out: @@ -1890,62 +1890,62 @@ out: return ret; } -static bool esil_poke1(RzAnalEsil *esil) { +static bool esil_poke1(RzAnalysisEsil *esil) { return esil_poke_n (esil, 8); } -static bool esil_poke2(RzAnalEsil *esil) { +static bool esil_poke2(RzAnalysisEsil *esil) { return esil_poke_n (esil, 16); } -static bool esil_poke3(RzAnalEsil *esil) { +static bool esil_poke3(RzAnalysisEsil *esil) { return esil_poke_n (esil, 24); } -static bool esil_poke4(RzAnalEsil *esil) { +static bool esil_poke4(RzAnalysisEsil *esil) { return esil_poke_n (esil, 32); } -static bool esil_poke8(RzAnalEsil *esil) { +static bool esil_poke8(RzAnalysisEsil *esil) { return esil_poke_n (esil, 64); } -static bool esil_poke16(RzAnalEsil *esil) { +static bool esil_poke16(RzAnalysisEsil *esil) { return esil_poke_n (esil, 128); } -static bool esil_poke(RzAnalEsil *esil) { - return esil_poke_n (esil, esil->anal->bits); +static bool esil_poke(RzAnalysisEsil *esil) { + return esil_poke_n (esil, esil->analysis->bits); } -static bool esil_poke_some(RzAnalEsil *esil) { +static bool esil_poke_some(RzAnalysisEsil *esil) { bool ret = false; int i, regsize; ut64 ptr, regs = 0, tmp; - char *count, *dst = rz_anal_esil_pop (esil); + char *count, *dst = rz_analysis_esil_pop (esil); - if (dst && rz_anal_esil_get_parm_size (esil, dst, &tmp, ®size)) { + if (dst && rz_analysis_esil_get_parm_size (esil, dst, &tmp, ®size)) { // reg isregornum (esil, dst, &ptr); - count = rz_anal_esil_pop (esil); + count = rz_analysis_esil_pop (esil); if (count) { isregornum (esil, count, ®s); if (regs > 0) { ut8 b[8] = {0}; ut64 num64; for (i = 0; i < regs; i++) { - char *foo = rz_anal_esil_pop (esil); + char *foo = rz_analysis_esil_pop (esil); if (!foo) { // avoid looping out of stack free (dst); free (count); return true; } - rz_anal_esil_get_parm_size (esil, foo, &tmp, ®size); + rz_analysis_esil_get_parm_size (esil, foo, &tmp, ®size); isregornum (esil, foo, &num64); - rz_write_ble (b, num64, esil->anal->big_endian, regsize); + rz_write_ble (b, num64, esil->analysis->big_endian, regsize); const int size_bytes = regsize / 8; - const ut32 written = rz_anal_esil_mem_write (esil, ptr, b, size_bytes); + const ut32 written = rz_analysis_esil_mem_write (esil, ptr, b, size_bytes); if (written != size_bytes) { //eprintf ("Cannot write at 0x%08" PFMT64x "\n", ptr); esil->trap = 1; @@ -1965,7 +1965,7 @@ static bool esil_poke_some(RzAnalEsil *esil) { /* PEEK */ -static bool esil_peek_n(RzAnalEsil *esil, int bits) { +static bool esil_peek_n(RzAnalysisEsil *esil, int bits) { if (bits & 7) { return false; } @@ -1973,7 +1973,7 @@ static bool esil_peek_n(RzAnalEsil *esil, int bits) { char res[32]; ut64 addr; ut32 bytes = bits / 8; - char *dst = rz_anal_esil_pop (esil); + char *dst = rz_analysis_esil_pop (esil); if (!dst) { eprintf ("ESIL-ERROR at 0x%08"PFMT64x": Cannot peek memory without specifying an address\n", esil->address); return false; @@ -1982,84 +1982,84 @@ static bool esil_peek_n(RzAnalEsil *esil, int bits) { if (dst && isregornum (esil, dst, &addr)) { if (bits == 128) { ut8 a[sizeof(ut64) * 2] = {0}; - ret = rz_anal_esil_mem_read (esil, addr, a, bytes); - ut64 b = rz_read_ble64 (&a, 0); //esil->anal->big_endian); - ut64 c = rz_read_ble64 (&a[8], 0); //esil->anal->big_endian); + ret = rz_analysis_esil_mem_read (esil, addr, a, bytes); + ut64 b = rz_read_ble64 (&a, 0); //esil->analysis->big_endian); + ut64 c = rz_read_ble64 (&a[8], 0); //esil->analysis->big_endian); snprintf (res, sizeof (res), "0x%" PFMT64x, b); - rz_anal_esil_push (esil, res); + rz_analysis_esil_push (esil, res); snprintf (res, sizeof (res), "0x%" PFMT64x, c); - rz_anal_esil_push (esil, res); + rz_analysis_esil_push (esil, res); free (dst); return ret; } ut64 bitmask = genmask (bits - 1); ut8 a[sizeof(ut64)] = {0}; - ret = !!rz_anal_esil_mem_read (esil, addr, a, bytes); - ut64 b = rz_read_ble64 (a, 0); //esil->anal->big_endian); - if (esil->anal->big_endian) { + ret = !!rz_analysis_esil_mem_read (esil, addr, a, bytes); + ut64 b = rz_read_ble64 (a, 0); //esil->analysis->big_endian); + if (esil->analysis->big_endian) { rz_mem_swapendian ((ut8*)&b, (const ut8*)&b, bytes); } snprintf (res, sizeof (res), "0x%" PFMT64x, b & bitmask); - rz_anal_esil_push (esil, res); + rz_analysis_esil_push (esil, res); esil->lastsz = bits; } free (dst); return ret; } -static bool esil_peek1(RzAnalEsil *esil) { +static bool esil_peek1(RzAnalysisEsil *esil) { return esil_peek_n (esil, 8); } -static bool esil_peek2(RzAnalEsil *esil) { +static bool esil_peek2(RzAnalysisEsil *esil) { return esil_peek_n (esil, 16); } -static bool esil_peek3(RzAnalEsil *esil) { +static bool esil_peek3(RzAnalysisEsil *esil) { return esil_peek_n (esil, 24); } -static bool esil_peek4(RzAnalEsil *esil) { +static bool esil_peek4(RzAnalysisEsil *esil) { return esil_peek_n (esil, 32); } -static bool esil_peek8(RzAnalEsil *esil) { +static bool esil_peek8(RzAnalysisEsil *esil) { return esil_peek_n (esil, 64); } -static bool esil_peek16(RzAnalEsil *esil) { +static bool esil_peek16(RzAnalysisEsil *esil) { // packed only return esil_peek_n (esil, 128); } -static bool esil_peek(RzAnalEsil *esil) { - return esil_peek_n (esil, esil->anal->bits); +static bool esil_peek(RzAnalysisEsil *esil) { + return esil_peek_n (esil, esil->analysis->bits); }; -static bool esil_peek_some(RzAnalEsil *esil) { +static bool esil_peek_some(RzAnalysisEsil *esil) { int i; ut64 ptr, regs; // pop ptr - char *count, *dst = rz_anal_esil_pop (esil); + char *count, *dst = rz_analysis_esil_pop (esil); if (dst) { // reg isregornum (esil, dst, &ptr); - count = rz_anal_esil_pop (esil); + count = rz_analysis_esil_pop (esil); if (count) { isregornum (esil, count, ®s); if (regs > 0) { ut32 num32; ut8 a[4]; for (i = 0; i < regs; i++) { - char *foo = rz_anal_esil_pop (esil); + char *foo = rz_analysis_esil_pop (esil); if (!foo) { ERR ("Cannot pop in peek"); return 0; } - const ut32 read = rz_anal_esil_mem_read (esil, ptr, a, 4); + const ut32 read = rz_analysis_esil_mem_read (esil, ptr, a, 4); if (read == 4) { //this is highly questionabla - num32 = rz_read_ble32 (a, esil->anal->big_endian); - rz_anal_esil_reg_write (esil, foo, num32); + num32 = rz_read_ble32 (a, esil->analysis->big_endian); + rz_analysis_esil_reg_write (esil, foo, num32); } else { if (esil->verbose) { eprintf ("Cannot peek from 0x%08" PFMT64x "\n", ptr); @@ -2080,20 +2080,20 @@ static bool esil_peek_some(RzAnalEsil *esil) { /* OREQ */ -static bool esil_mem_oreq_n(RzAnalEsil *esil, int bits) { +static bool esil_mem_oreq_n(RzAnalysisEsil *esil, int bits) { bool ret = false; ut64 s, d; - char *dst = rz_anal_esil_pop (esil); //save the dst-addr - char *src0 = rz_anal_esil_pop (esil); //get the src + char *dst = rz_analysis_esil_pop (esil); //save the dst-addr + char *src0 = rz_analysis_esil_pop (esil); //get the src char *src1 = NULL; - if (src0 && rz_anal_esil_get_parm (esil, src0, &s)) { //get the src - rz_anal_esil_push (esil, dst); //push the dst-addr + if (src0 && rz_analysis_esil_get_parm (esil, src0, &s)) { //get the src + rz_analysis_esil_push (esil, dst); //push the dst-addr ret = (!!esil_peek_n (esil, bits)); //read - src1 = rz_anal_esil_pop (esil); //get the old dst-value - if (src1 && rz_anal_esil_get_parm (esil, src1, &d)) { //get the old dst-value + src1 = rz_analysis_esil_pop (esil); //get the old dst-value + if (src1 && rz_analysis_esil_get_parm (esil, src1, &d)) { //get the old dst-value d |= s; //calculate the new dst-value - rz_anal_esil_pushnum (esil, d); //push the new dst-value - rz_anal_esil_push (esil, dst); //push the dst-addr + rz_analysis_esil_pushnum (esil, d); //push the new dst-value + rz_analysis_esil_push (esil, dst); //push the dst-addr ret &= (!!esil_poke_n (esil, bits)); //write } else { ret = false; @@ -2108,38 +2108,38 @@ static bool esil_mem_oreq_n(RzAnalEsil *esil, int bits) { return ret; } -static bool esil_mem_oreq1(RzAnalEsil *esil) { +static bool esil_mem_oreq1(RzAnalysisEsil *esil) { return esil_mem_oreq_n (esil, 8); } -static bool esil_mem_oreq2(RzAnalEsil *esil) { +static bool esil_mem_oreq2(RzAnalysisEsil *esil) { return esil_mem_oreq_n (esil, 16); } -static bool esil_mem_oreq4(RzAnalEsil *esil) { +static bool esil_mem_oreq4(RzAnalysisEsil *esil) { return esil_mem_oreq_n (esil, 32); } -static bool esil_mem_oreq8(RzAnalEsil *esil) { +static bool esil_mem_oreq8(RzAnalysisEsil *esil) { return esil_mem_oreq_n (esil, 64); } -static bool esil_mem_oreq(RzAnalEsil *esil) { - return esil_mem_oreq_n (esil, esil->anal->bits); +static bool esil_mem_oreq(RzAnalysisEsil *esil) { + return esil_mem_oreq_n (esil, esil->analysis->bits); } /* XOREQ */ -static bool esil_mem_xoreq_n(RzAnalEsil *esil, int bits) { +static bool esil_mem_xoreq_n(RzAnalysisEsil *esil, int bits) { bool ret = false; ut64 s, d; - char *dst = rz_anal_esil_pop (esil); - char *src0 = rz_anal_esil_pop (esil); + char *dst = rz_analysis_esil_pop (esil); + char *src0 = rz_analysis_esil_pop (esil); char *src1 = NULL; - if (src0 && rz_anal_esil_get_parm (esil, src0, &s)) { - rz_anal_esil_push (esil, dst); + if (src0 && rz_analysis_esil_get_parm (esil, src0, &s)) { + rz_analysis_esil_push (esil, dst); ret = (!!esil_peek_n (esil, bits)); - src1 = rz_anal_esil_pop (esil); - if (src1 && rz_anal_esil_get_parm (esil, src1, &d)) { + src1 = rz_analysis_esil_pop (esil); + if (src1 && rz_analysis_esil_get_parm (esil, src1, &d)) { d ^= s; - rz_anal_esil_pushnum (esil, d); - rz_anal_esil_push (esil, dst); + rz_analysis_esil_pushnum (esil, d); + rz_analysis_esil_push (esil, dst); ret &= (!!esil_poke_n (esil, bits)); } else { ret = false; @@ -2154,38 +2154,38 @@ static bool esil_mem_xoreq_n(RzAnalEsil *esil, int bits) { return ret; } -static bool esil_mem_xoreq1(RzAnalEsil *esil) { +static bool esil_mem_xoreq1(RzAnalysisEsil *esil) { return esil_mem_xoreq_n (esil, 8); } -static bool esil_mem_xoreq2(RzAnalEsil *esil) { +static bool esil_mem_xoreq2(RzAnalysisEsil *esil) { return esil_mem_xoreq_n (esil, 16); } -static bool esil_mem_xoreq4(RzAnalEsil *esil) { +static bool esil_mem_xoreq4(RzAnalysisEsil *esil) { return esil_mem_xoreq_n (esil, 32); } -static bool esil_mem_xoreq8(RzAnalEsil *esil) { +static bool esil_mem_xoreq8(RzAnalysisEsil *esil) { return esil_mem_xoreq_n (esil, 64); } -static bool esil_mem_xoreq(RzAnalEsil *esil) { - return esil_mem_xoreq_n (esil, esil->anal->bits); +static bool esil_mem_xoreq(RzAnalysisEsil *esil) { + return esil_mem_xoreq_n (esil, esil->analysis->bits); } /* ANDEQ */ -static bool esil_mem_andeq_n(RzAnalEsil *esil, int bits) { +static bool esil_mem_andeq_n(RzAnalysisEsil *esil, int bits) { bool ret = false; ut64 s, d; - char *dst = rz_anal_esil_pop (esil); - char *src0 = rz_anal_esil_pop (esil); + char *dst = rz_analysis_esil_pop (esil); + char *src0 = rz_analysis_esil_pop (esil); char *src1 = NULL; - if (src0 && rz_anal_esil_get_parm (esil, src0, &s)) { - rz_anal_esil_push (esil, dst); + if (src0 && rz_analysis_esil_get_parm (esil, src0, &s)) { + rz_analysis_esil_push (esil, dst); ret = (!!esil_peek_n (esil, bits)); - src1 = rz_anal_esil_pop (esil); - if (src1 && rz_anal_esil_get_parm (esil, src1, &d)) { + src1 = rz_analysis_esil_pop (esil); + if (src1 && rz_analysis_esil_get_parm (esil, src1, &d)) { d &= s; - rz_anal_esil_pushnum (esil, d); - rz_anal_esil_push (esil, dst); + rz_analysis_esil_pushnum (esil, d); + rz_analysis_esil_push (esil, dst); ret &= (!!esil_poke_n (esil, bits)); } else { ret = false; @@ -2200,38 +2200,38 @@ static bool esil_mem_andeq_n(RzAnalEsil *esil, int bits) { return ret; } -static bool esil_mem_andeq1(RzAnalEsil *esil) { +static bool esil_mem_andeq1(RzAnalysisEsil *esil) { return esil_mem_andeq_n (esil, 8); } -static bool esil_mem_andeq2(RzAnalEsil *esil) { +static bool esil_mem_andeq2(RzAnalysisEsil *esil) { return esil_mem_andeq_n (esil, 16); } -static bool esil_mem_andeq4(RzAnalEsil *esil) { +static bool esil_mem_andeq4(RzAnalysisEsil *esil) { return esil_mem_andeq_n (esil, 32); } -static bool esil_mem_andeq8(RzAnalEsil *esil) { +static bool esil_mem_andeq8(RzAnalysisEsil *esil) { return esil_mem_andeq_n (esil, 64); } -static bool esil_mem_andeq(RzAnalEsil *esil) { - return esil_mem_andeq_n (esil, esil->anal->bits); +static bool esil_mem_andeq(RzAnalysisEsil *esil) { + return esil_mem_andeq_n (esil, esil->analysis->bits); } /* ADDEQ */ -static bool esil_mem_addeq_n(RzAnalEsil *esil, int bits) { +static bool esil_mem_addeq_n(RzAnalysisEsil *esil, int bits) { bool ret = false; ut64 s, d; - char *dst = rz_anal_esil_pop (esil); - char *src0 = rz_anal_esil_pop (esil); + char *dst = rz_analysis_esil_pop (esil); + char *src0 = rz_analysis_esil_pop (esil); char *src1 = NULL; - if (src0 && rz_anal_esil_get_parm (esil, src0, &s)) { - rz_anal_esil_push (esil, dst); + if (src0 && rz_analysis_esil_get_parm (esil, src0, &s)) { + rz_analysis_esil_push (esil, dst); ret = (!!esil_peek_n (esil, bits)); - src1 = rz_anal_esil_pop (esil); - if (src1 && rz_anal_esil_get_parm (esil, src1, &d)) { + src1 = rz_analysis_esil_pop (esil); + if (src1 && rz_analysis_esil_get_parm (esil, src1, &d)) { d += s; - rz_anal_esil_pushnum (esil, d); - rz_anal_esil_push (esil, dst); + rz_analysis_esil_pushnum (esil, d); + rz_analysis_esil_push (esil, dst); ret &= (!!esil_poke_n (esil, bits)); } else { ret = false; @@ -2246,38 +2246,38 @@ static bool esil_mem_addeq_n(RzAnalEsil *esil, int bits) { return ret; } -static bool esil_mem_addeq1(RzAnalEsil *esil) { +static bool esil_mem_addeq1(RzAnalysisEsil *esil) { return esil_mem_addeq_n (esil, 8); } -static bool esil_mem_addeq2(RzAnalEsil *esil) { +static bool esil_mem_addeq2(RzAnalysisEsil *esil) { return esil_mem_addeq_n (esil, 16); } -static bool esil_mem_addeq4(RzAnalEsil *esil) { +static bool esil_mem_addeq4(RzAnalysisEsil *esil) { return esil_mem_addeq_n (esil, 32); } -static bool esil_mem_addeq8(RzAnalEsil *esil) { +static bool esil_mem_addeq8(RzAnalysisEsil *esil) { return esil_mem_addeq_n (esil, 64); } -static bool esil_mem_addeq(RzAnalEsil *esil) { - return esil_mem_addeq_n (esil, esil->anal->bits); +static bool esil_mem_addeq(RzAnalysisEsil *esil) { + return esil_mem_addeq_n (esil, esil->analysis->bits); } /* SUBEQ */ -static bool esil_mem_subeq_n(RzAnalEsil *esil, int bits) { +static bool esil_mem_subeq_n(RzAnalysisEsil *esil, int bits) { bool ret = false; ut64 s, d; - char *dst = rz_anal_esil_pop (esil); - char *src0 = rz_anal_esil_pop (esil); + char *dst = rz_analysis_esil_pop (esil); + char *src0 = rz_analysis_esil_pop (esil); char *src1 = NULL; - if (src0 && rz_anal_esil_get_parm (esil, src0, &s)) { - rz_anal_esil_push (esil, dst); + if (src0 && rz_analysis_esil_get_parm (esil, src0, &s)) { + rz_analysis_esil_push (esil, dst); ret = (!!esil_peek_n (esil, bits)); - src1 = rz_anal_esil_pop (esil); - if (src1 && rz_anal_esil_get_parm (esil, src1, &d)) { + src1 = rz_analysis_esil_pop (esil); + if (src1 && rz_analysis_esil_get_parm (esil, src1, &d)) { d -= s; - rz_anal_esil_pushnum (esil, d); - rz_anal_esil_push (esil, dst); + rz_analysis_esil_pushnum (esil, d); + rz_analysis_esil_push (esil, dst); ret &= (!!esil_poke_n (esil, bits)); } else { ret = false; @@ -2292,44 +2292,44 @@ static bool esil_mem_subeq_n(RzAnalEsil *esil, int bits) { return ret; } -static bool esil_mem_subeq1(RzAnalEsil *esil) { +static bool esil_mem_subeq1(RzAnalysisEsil *esil) { return esil_mem_subeq_n (esil, 8); } -static bool esil_mem_subeq2(RzAnalEsil *esil) { +static bool esil_mem_subeq2(RzAnalysisEsil *esil) { return esil_mem_subeq_n (esil, 16); } -static bool esil_mem_subeq4(RzAnalEsil *esil) { +static bool esil_mem_subeq4(RzAnalysisEsil *esil) { return esil_mem_subeq_n (esil, 32); } -static bool esil_mem_subeq8(RzAnalEsil *esil) { +static bool esil_mem_subeq8(RzAnalysisEsil *esil) { return esil_mem_subeq_n (esil, 64); } -static bool esil_mem_subeq(RzAnalEsil *esil) { - return esil_mem_subeq_n (esil, esil->anal->bits); +static bool esil_mem_subeq(RzAnalysisEsil *esil) { + return esil_mem_subeq_n (esil, esil->analysis->bits); } /* MODEQ */ -static bool esil_mem_modeq_n(RzAnalEsil *esil, int bits) { +static bool esil_mem_modeq_n(RzAnalysisEsil *esil, int bits) { bool ret = false; ut64 s, d; - char *dst = rz_anal_esil_pop (esil); - char *src0 = rz_anal_esil_pop (esil); + char *dst = rz_analysis_esil_pop (esil); + char *src0 = rz_analysis_esil_pop (esil); char *src1 = NULL; - if (src0 && rz_anal_esil_get_parm (esil, src0, &s)) { + if (src0 && rz_analysis_esil_get_parm (esil, src0, &s)) { if (s == 0) { ERR ("esil_mem_modeq4: Division by zero!"); esil->trap = RZ_ANAL_TRAP_DIVBYZERO; esil->trap_code = 0; } else { - rz_anal_esil_push (esil, dst); + rz_analysis_esil_push (esil, dst); ret = (!!esil_peek_n (esil, bits)); - src1 = rz_anal_esil_pop (esil); - if (src1 && rz_anal_esil_get_parm (esil, src1, &d) && s >= 1) { - rz_anal_esil_pushnum (esil, d % s); + src1 = rz_analysis_esil_pop (esil); + if (src1 && rz_analysis_esil_get_parm (esil, src1, &d) && s >= 1) { + rz_analysis_esil_pushnum (esil, d % s); d = d % s; - rz_anal_esil_pushnum (esil, d); - rz_anal_esil_push (esil, dst); + rz_analysis_esil_pushnum (esil, d); + rz_analysis_esil_push (esil, dst); ret &= (!!esil_poke_n (esil, bits)); } else { ret = false; @@ -2345,43 +2345,43 @@ static bool esil_mem_modeq_n(RzAnalEsil *esil, int bits) { return ret; } -static bool esil_mem_modeq1(RzAnalEsil *esil) { +static bool esil_mem_modeq1(RzAnalysisEsil *esil) { return esil_mem_modeq_n (esil, 8); } -static bool esil_mem_modeq2(RzAnalEsil *esil) { +static bool esil_mem_modeq2(RzAnalysisEsil *esil) { return esil_mem_modeq_n (esil, 16); } -static bool esil_mem_modeq4(RzAnalEsil *esil) { +static bool esil_mem_modeq4(RzAnalysisEsil *esil) { return esil_mem_modeq_n (esil, 32); } -static bool esil_mem_modeq8(RzAnalEsil *esil) { +static bool esil_mem_modeq8(RzAnalysisEsil *esil) { return esil_mem_modeq_n (esil, 64); } -static bool esil_mem_modeq(RzAnalEsil *esil) { - return esil_mem_modeq_n (esil, esil->anal->bits); +static bool esil_mem_modeq(RzAnalysisEsil *esil) { + return esil_mem_modeq_n (esil, esil->analysis->bits); } /* DIVEQ */ -static bool esil_mem_diveq_n(RzAnalEsil *esil, int bits) { +static bool esil_mem_diveq_n(RzAnalysisEsil *esil, int bits) { bool ret = false; ut64 s, d; - char *dst = rz_anal_esil_pop (esil); - char *src0 = rz_anal_esil_pop (esil); + char *dst = rz_analysis_esil_pop (esil); + char *src0 = rz_analysis_esil_pop (esil); char *src1 = NULL; - if (src0 && rz_anal_esil_get_parm (esil, src0, &s)) { + if (src0 && rz_analysis_esil_get_parm (esil, src0, &s)) { if (s == 0) { ERR ("esil_mem_diveq8: Division by zero!"); esil->trap = RZ_ANAL_TRAP_DIVBYZERO; esil->trap_code = 0; } else { - rz_anal_esil_push (esil, dst); + rz_analysis_esil_push (esil, dst); ret = (!!esil_peek_n (esil, bits)); - src1 = rz_anal_esil_pop (esil); - if (src1 && rz_anal_esil_get_parm (esil, src1, &d)) { + src1 = rz_analysis_esil_pop (esil); + if (src1 && rz_analysis_esil_get_parm (esil, src1, &d)) { d = d / s; - rz_anal_esil_pushnum (esil, d); - rz_anal_esil_push (esil, dst); + rz_analysis_esil_pushnum (esil, d); + rz_analysis_esil_push (esil, dst); ret &= (!!esil_poke_n (esil, bits)); } else { ret = false; @@ -2397,38 +2397,38 @@ static bool esil_mem_diveq_n(RzAnalEsil *esil, int bits) { return ret; } -static bool esil_mem_diveq1(RzAnalEsil *esil) { +static bool esil_mem_diveq1(RzAnalysisEsil *esil) { return esil_mem_diveq_n (esil, 8); } -static bool esil_mem_diveq2(RzAnalEsil *esil) { +static bool esil_mem_diveq2(RzAnalysisEsil *esil) { return esil_mem_diveq_n (esil, 16); } -static bool esil_mem_diveq4(RzAnalEsil *esil) { +static bool esil_mem_diveq4(RzAnalysisEsil *esil) { return esil_mem_diveq_n (esil, 32); } -static bool esil_mem_diveq8(RzAnalEsil *esil) { +static bool esil_mem_diveq8(RzAnalysisEsil *esil) { return esil_mem_diveq_n (esil, 64); } -static bool esil_mem_diveq(RzAnalEsil *esil) { - return esil_mem_diveq_n (esil, esil->anal->bits); +static bool esil_mem_diveq(RzAnalysisEsil *esil) { + return esil_mem_diveq_n (esil, esil->analysis->bits); } /* MULEQ */ -static bool esil_mem_muleq_n(RzAnalEsil *esil, int bits, ut64 bitmask) { +static bool esil_mem_muleq_n(RzAnalysisEsil *esil, int bits, ut64 bitmask) { bool ret = false; ut64 s, d; - char *dst = rz_anal_esil_pop (esil); - char *src0 = rz_anal_esil_pop (esil); + char *dst = rz_analysis_esil_pop (esil); + char *src0 = rz_analysis_esil_pop (esil); char *src1 = NULL; - if (src0 && rz_anal_esil_get_parm (esil, src0, &s)) { - rz_anal_esil_push (esil, dst); + if (src0 && rz_analysis_esil_get_parm (esil, src0, &s)) { + rz_analysis_esil_push (esil, dst); ret = (!!esil_peek_n (esil, bits)); - src1 = rz_anal_esil_pop (esil); - if (src1 && rz_anal_esil_get_parm (esil, src1, &d)) { + src1 = rz_analysis_esil_pop (esil); + if (src1 && rz_analysis_esil_get_parm (esil, src1, &d)) { d *= s; - rz_anal_esil_pushnum (esil, d); - rz_anal_esil_push (esil, dst); + rz_analysis_esil_pushnum (esil, d); + rz_analysis_esil_push (esil, dst); ret &= (!!esil_poke_n (esil, bits)); } else { ret = false; @@ -2443,21 +2443,21 @@ static bool esil_mem_muleq_n(RzAnalEsil *esil, int bits, ut64 bitmask) { return ret; } -static bool esil_mem_muleq1(RzAnalEsil *esil) { +static bool esil_mem_muleq1(RzAnalysisEsil *esil) { return esil_mem_muleq_n (esil, 8, UT8_MAX); } -static bool esil_mem_muleq2(RzAnalEsil *esil) { +static bool esil_mem_muleq2(RzAnalysisEsil *esil) { return esil_mem_muleq_n (esil, 16, UT16_MAX); } -static bool esil_mem_muleq4(RzAnalEsil *esil) { +static bool esil_mem_muleq4(RzAnalysisEsil *esil) { return esil_mem_muleq_n (esil, 32, UT32_MAX); } -static bool esil_mem_muleq8(RzAnalEsil *esil) { +static bool esil_mem_muleq8(RzAnalysisEsil *esil) { return esil_mem_muleq_n (esil, 64, UT64_MAX); } -static bool esil_mem_muleq(RzAnalEsil *esil) { - switch (esil->anal->bits) { +static bool esil_mem_muleq(RzAnalysisEsil *esil) { + switch (esil->analysis->bits) { case 64: return esil_mem_muleq8 (esil); case 32: return esil_mem_muleq4 (esil); case 16: return esil_mem_muleq2 (esil); @@ -2468,22 +2468,22 @@ static bool esil_mem_muleq(RzAnalEsil *esil) { /* INCEQ */ -static bool esil_mem_inceq_n(RzAnalEsil *esil, int bits) { +static bool esil_mem_inceq_n(RzAnalysisEsil *esil, int bits) { bool ret = false; ut64 s; - char *off = rz_anal_esil_pop (esil); + char *off = rz_analysis_esil_pop (esil); char *src = NULL; if (off) { - rz_anal_esil_push (esil, off); + rz_analysis_esil_push (esil, off); ret = (!!esil_peek_n (esil, bits)); - src = rz_anal_esil_pop (esil); - if (src && rz_anal_esil_get_parm (esil, src, &s)) { + src = rz_analysis_esil_pop (esil); + if (src && rz_analysis_esil_get_parm (esil, src, &s)) { esil->old = s; s++; esil->cur = s; esil->lastsz = bits; - rz_anal_esil_pushnum (esil, s); - rz_anal_esil_push (esil, off); + rz_analysis_esil_pushnum (esil, s); + rz_analysis_esil_push (esil, off); ret &= (!!esil_poke_n (esil, bits)); } else { ret = false; @@ -2497,37 +2497,37 @@ static bool esil_mem_inceq_n(RzAnalEsil *esil, int bits) { return ret; } -static bool esil_mem_inceq1(RzAnalEsil *esil) { +static bool esil_mem_inceq1(RzAnalysisEsil *esil) { return esil_mem_inceq_n (esil, 8); } -static bool esil_mem_inceq2(RzAnalEsil *esil) { +static bool esil_mem_inceq2(RzAnalysisEsil *esil) { return esil_mem_inceq_n (esil, 16); } -static bool esil_mem_inceq4(RzAnalEsil *esil) { +static bool esil_mem_inceq4(RzAnalysisEsil *esil) { return esil_mem_inceq_n (esil, 32); } -static bool esil_mem_inceq8(RzAnalEsil *esil) { +static bool esil_mem_inceq8(RzAnalysisEsil *esil) { return esil_mem_inceq_n (esil, 64); } -static bool esil_mem_inceq(RzAnalEsil *esil) { - return esil_mem_inceq_n (esil, esil->anal->bits); +static bool esil_mem_inceq(RzAnalysisEsil *esil) { + return esil_mem_inceq_n (esil, esil->analysis->bits); } /* DECEQ */ -static bool esil_mem_deceq_n(RzAnalEsil *esil, int bits) { +static bool esil_mem_deceq_n(RzAnalysisEsil *esil, int bits) { bool ret = false; ut64 s; - char *off = rz_anal_esil_pop (esil); + char *off = rz_analysis_esil_pop (esil); char *src = NULL; if (off) { - rz_anal_esil_push (esil, off); + rz_analysis_esil_push (esil, off); ret = (!!esil_peek_n (esil, bits)); - src = rz_anal_esil_pop (esil); - if (src && rz_anal_esil_get_parm (esil, src, &s)) { + src = rz_analysis_esil_pop (esil); + if (src && rz_analysis_esil_get_parm (esil, src, &s)) { s--; - rz_anal_esil_pushnum (esil, s); - rz_anal_esil_push (esil, off); + rz_analysis_esil_pushnum (esil, s); + rz_analysis_esil_push (esil, off); ret &= (!!esil_poke_n (esil, bits)); } else { ret = false; @@ -2541,45 +2541,45 @@ static bool esil_mem_deceq_n(RzAnalEsil *esil, int bits) { return ret; } -static bool esil_mem_deceq1(RzAnalEsil *esil) { +static bool esil_mem_deceq1(RzAnalysisEsil *esil) { return esil_mem_deceq_n (esil, 8); } -static bool esil_mem_deceq2(RzAnalEsil *esil) { +static bool esil_mem_deceq2(RzAnalysisEsil *esil) { return esil_mem_deceq_n (esil, 16); } -static bool esil_mem_deceq4(RzAnalEsil *esil) { +static bool esil_mem_deceq4(RzAnalysisEsil *esil) { return esil_mem_deceq_n (esil, 32); } -static bool esil_mem_deceq8(RzAnalEsil *esil) { +static bool esil_mem_deceq8(RzAnalysisEsil *esil) { return esil_mem_deceq_n (esil, 64); } -static bool esil_mem_deceq(RzAnalEsil *esil) { - return esil_mem_deceq_n (esil, esil->anal->bits); +static bool esil_mem_deceq(RzAnalysisEsil *esil) { + return esil_mem_deceq_n (esil, esil->analysis->bits); } /* LSLEQ */ -static bool esil_mem_lsleq_n(RzAnalEsil *esil, int bits) { +static bool esil_mem_lsleq_n(RzAnalysisEsil *esil, int bits) { bool ret = false; ut64 s, d; - char *dst = rz_anal_esil_pop (esil); - char *src0 = rz_anal_esil_pop (esil); + char *dst = rz_analysis_esil_pop (esil); + char *src0 = rz_analysis_esil_pop (esil); char *src1 = NULL; - if (src0 && rz_anal_esil_get_parm (esil, src0, &s)) { + if (src0 && rz_analysis_esil_get_parm (esil, src0, &s)) { if (s > sizeof (ut64) * 8) { ERR ("esil_mem_lsleq_n: shift is too big"); } else { - rz_anal_esil_push (esil, dst); + rz_analysis_esil_push (esil, dst); ret = (!!esil_peek_n (esil, bits)); - src1 = rz_anal_esil_pop (esil); - if (src1 && rz_anal_esil_get_parm (esil, src1, &d)) { + src1 = rz_analysis_esil_pop (esil); + if (src1 && rz_analysis_esil_get_parm (esil, src1, &d)) { if (s > 63) { d = 0; } else { d <<= s; } - rz_anal_esil_pushnum (esil, d); - rz_anal_esil_push (esil, dst); + rz_analysis_esil_pushnum (esil, d); + rz_analysis_esil_push (esil, dst); ret &= (!!esil_poke_n (esil, bits)); } else { ret = false; @@ -2595,38 +2595,38 @@ static bool esil_mem_lsleq_n(RzAnalEsil *esil, int bits) { return ret; } -static bool esil_mem_lsleq1(RzAnalEsil *esil) { +static bool esil_mem_lsleq1(RzAnalysisEsil *esil) { return esil_mem_lsleq_n (esil, 8); } -static bool esil_mem_lsleq2(RzAnalEsil *esil) { +static bool esil_mem_lsleq2(RzAnalysisEsil *esil) { return esil_mem_lsleq_n (esil, 16); } -static bool esil_mem_lsleq4(RzAnalEsil *esil) { +static bool esil_mem_lsleq4(RzAnalysisEsil *esil) { return esil_mem_lsleq_n (esil, 32); } -static bool esil_mem_lsleq8(RzAnalEsil *esil) { +static bool esil_mem_lsleq8(RzAnalysisEsil *esil) { return esil_mem_lsleq_n (esil, 64); } -static bool esil_mem_lsleq(RzAnalEsil *esil) { - return esil_mem_lsleq_n (esil, esil->anal->bits); +static bool esil_mem_lsleq(RzAnalysisEsil *esil) { + return esil_mem_lsleq_n (esil, esil->analysis->bits); } /* LSREQ */ -static bool esil_mem_lsreq_n(RzAnalEsil *esil, int bits) { +static bool esil_mem_lsreq_n(RzAnalysisEsil *esil, int bits) { bool ret = false; ut64 s, d; - char *dst = rz_anal_esil_pop (esil); - char *src0 = rz_anal_esil_pop (esil); + char *dst = rz_analysis_esil_pop (esil); + char *src0 = rz_analysis_esil_pop (esil); char *src1 = NULL; - if (src0 && rz_anal_esil_get_parm (esil, src0, &s)) { - rz_anal_esil_push (esil, dst); + if (src0 && rz_analysis_esil_get_parm (esil, src0, &s)) { + rz_analysis_esil_push (esil, dst); ret = (!!esil_peek_n (esil, bits)); - src1 = rz_anal_esil_pop (esil); - if (src1 && rz_anal_esil_get_parm (esil, src1, &d)) { + src1 = rz_analysis_esil_pop (esil); + if (src1 && rz_analysis_esil_get_parm (esil, src1, &d)) { d >>= s; - rz_anal_esil_pushnum (esil, d); - rz_anal_esil_push (esil, dst); + rz_analysis_esil_pushnum (esil, d); + rz_analysis_esil_push (esil, dst); ret &= (!!esil_poke_n (esil, bits)); } else { ret = false; @@ -2641,49 +2641,49 @@ static bool esil_mem_lsreq_n(RzAnalEsil *esil, int bits) { return ret; } -static bool esil_mem_lsreq1(RzAnalEsil *esil) { +static bool esil_mem_lsreq1(RzAnalysisEsil *esil) { return esil_mem_lsreq_n (esil, 8); } -static bool esil_mem_lsreq2(RzAnalEsil *esil) { +static bool esil_mem_lsreq2(RzAnalysisEsil *esil) { return esil_mem_lsreq_n (esil, 16); } -static bool esil_mem_lsreq4(RzAnalEsil *esil) { +static bool esil_mem_lsreq4(RzAnalysisEsil *esil) { return esil_mem_lsreq_n (esil, 32); } -static bool esil_mem_lsreq8(RzAnalEsil *esil) { +static bool esil_mem_lsreq8(RzAnalysisEsil *esil) { return esil_mem_lsreq_n (esil, 64); } -static bool esil_mem_lsreq(RzAnalEsil *esil) { - return esil_mem_lsreq_n (esil, esil->anal->bits); +static bool esil_mem_lsreq(RzAnalysisEsil *esil) { + return esil_mem_lsreq_n (esil, esil->analysis->bits); } /* get value of register or memory reference and push the value */ -static bool esil_num(RzAnalEsil *esil) { +static bool esil_num(RzAnalysisEsil *esil) { char *dup_me; ut64 dup; if (!esil) { return false; } - if (!(dup_me = rz_anal_esil_pop (esil))) { + if (!(dup_me = rz_analysis_esil_pop (esil))) { return false; } - if (!rz_anal_esil_get_parm (esil, dup_me, &dup)) { + if (!rz_analysis_esil_get_parm (esil, dup_me, &dup)) { free (dup_me); return false; } free (dup_me); - return rz_anal_esil_pushnum (esil, dup); + return rz_analysis_esil_pushnum (esil, dup); } /* duplicate the last element in the stack */ -static bool esil_dup(RzAnalEsil *esil) { +static bool esil_dup(RzAnalysisEsil *esil) { if (!esil || !esil->stack || esil->stackptr < 1 || esil->stackptr > (esil->stacksize - 1)) { return false; } - return rz_anal_esil_push (esil, esil->stack[esil->stackptr-1]); + return rz_analysis_esil_push (esil, esil->stack[esil->stackptr-1]); } -static bool esil_swap(RzAnalEsil *esil) { +static bool esil_swap(RzAnalysisEsil *esil) { char *tmp; if (!esil || !esil->stack || esil->stackptr < 2) { return false; @@ -2722,25 +2722,25 @@ static int signed_compare_gt(ut64 a, ut64 b, ut64 size) { return result; } -static bool esil_smaller(RzAnalEsil *esil) { // 'dst < src' => 'src,dst,<' +static bool esil_smaller(RzAnalysisEsil *esil) { // 'dst < src' => 'src,dst,<' ut64 num, num2; bool ret = false; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); - if (dst && rz_anal_esil_get_parm (esil, dst, &num)) { - if (src && rz_anal_esil_get_parm (esil, src, &num2)) { + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); + if (dst && rz_analysis_esil_get_parm (esil, dst, &num)) { + if (src && rz_analysis_esil_get_parm (esil, src, &num2)) { esil->old = num; esil->cur = num - num2; ret = true; - if (rz_reg_get (esil->anal->reg, dst, -1)) { + if (rz_reg_get (esil->analysis->reg, dst, -1)) { esil->lastsz = esil_internal_sizeof_reg (esil, dst); - } else if (rz_reg_get (esil->anal->reg, src, -1)) { + } else if (rz_reg_get (esil->analysis->reg, src, -1)) { esil->lastsz = esil_internal_sizeof_reg (esil, src); } else { // default size is set to 64 as internally operands are ut64 esil->lastsz = 64; } - rz_anal_esil_pushnum (esil, (num != num2) & + rz_analysis_esil_pushnum (esil, (num != num2) & !signed_compare_gt (num, num2, esil->lastsz)); } } @@ -2749,25 +2749,25 @@ static bool esil_smaller(RzAnalEsil *esil) { // 'dst < src' => 'src,dst,<' return ret; } -static bool esil_bigger(RzAnalEsil *esil) { // 'dst > src' => 'src,dst,>' +static bool esil_bigger(RzAnalysisEsil *esil) { // 'dst > src' => 'src,dst,>' ut64 num, num2; bool ret = false; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); - if (dst && rz_anal_esil_get_parm (esil, dst, &num)) { - if (src && rz_anal_esil_get_parm (esil, src, &num2)) { + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); + if (dst && rz_analysis_esil_get_parm (esil, dst, &num)) { + if (src && rz_analysis_esil_get_parm (esil, src, &num2)) { esil->old = num; esil->cur = num - num2; ret = true; - if (rz_reg_get (esil->anal->reg, dst, -1)) { + if (rz_reg_get (esil->analysis->reg, dst, -1)) { esil->lastsz = esil_internal_sizeof_reg (esil, dst); - } else if (rz_reg_get (esil->anal->reg, src, -1)) { + } else if (rz_reg_get (esil->analysis->reg, src, -1)) { esil->lastsz = esil_internal_sizeof_reg (esil, src); } else { // default size is set to 64 as internally operands are ut64 esil->lastsz = 64; } - rz_anal_esil_pushnum (esil, signed_compare_gt (num, num2, esil->lastsz)); + rz_analysis_esil_pushnum (esil, signed_compare_gt (num, num2, esil->lastsz)); } } free (dst); @@ -2775,25 +2775,25 @@ static bool esil_bigger(RzAnalEsil *esil) { // 'dst > src' => 'src,dst,>' return ret; } -static bool esil_smaller_equal(RzAnalEsil *esil) { // 'dst <= src' => 'src,dst,<=' +static bool esil_smaller_equal(RzAnalysisEsil *esil) { // 'dst <= src' => 'src,dst,<=' ut64 num, num2; bool ret = false; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); - if (dst && rz_anal_esil_get_parm (esil, dst, &num)) { - if (src && rz_anal_esil_get_parm (esil, src, &num2)) { + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); + if (dst && rz_analysis_esil_get_parm (esil, dst, &num)) { + if (src && rz_analysis_esil_get_parm (esil, src, &num2)) { esil->old = num; esil->cur = num - num2; ret = true; - if (rz_reg_get (esil->anal->reg, dst, -1)) { + if (rz_reg_get (esil->analysis->reg, dst, -1)) { esil->lastsz = esil_internal_sizeof_reg (esil, dst); - } else if (rz_reg_get (esil->anal->reg, src, -1)) { + } else if (rz_reg_get (esil->analysis->reg, src, -1)) { esil->lastsz = esil_internal_sizeof_reg (esil, src); } else { // default size is set to 64 as internally operands are ut64 esil->lastsz = 64; } - rz_anal_esil_pushnum (esil, !signed_compare_gt (num, num2, esil->lastsz)); + rz_analysis_esil_pushnum (esil, !signed_compare_gt (num, num2, esil->lastsz)); } } free (dst); @@ -2801,25 +2801,25 @@ static bool esil_smaller_equal(RzAnalEsil *esil) { // 'dst <= src' => 'src,dst,< return ret; } -static bool esil_bigger_equal(RzAnalEsil *esil) { // 'dst >= src' => 'src,dst,>=' +static bool esil_bigger_equal(RzAnalysisEsil *esil) { // 'dst >= src' => 'src,dst,>=' ut64 num, num2; bool ret = false; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); - if (dst && rz_anal_esil_get_parm (esil, dst, &num)) { - if (src && rz_anal_esil_get_parm (esil, src, &num2)) { + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); + if (dst && rz_analysis_esil_get_parm (esil, dst, &num)) { + if (src && rz_analysis_esil_get_parm (esil, src, &num2)) { esil->old = num; esil->cur = num - num2; ret = true; - if (rz_reg_get (esil->anal->reg, dst, -1)) { + if (rz_reg_get (esil->analysis->reg, dst, -1)) { esil->lastsz = esil_internal_sizeof_reg (esil, dst); - } else if (rz_reg_get (esil->anal->reg, src, -1)) { + } else if (rz_reg_get (esil->analysis->reg, src, -1)) { esil->lastsz = esil_internal_sizeof_reg (esil, src); } else { // default size is set to 64 as internally operands are ut64 esil->lastsz = 64; } - rz_anal_esil_pushnum (esil, (num == num2) | + rz_analysis_esil_pushnum (esil, (num == num2) | signed_compare_gt (num, num2, esil->lastsz)); } } @@ -2828,11 +2828,11 @@ static bool esil_bigger_equal(RzAnalEsil *esil) { // 'dst >= src' => 'src,dst,>= return ret; } -static bool esil_set_jump_target(RzAnalEsil *esil) { +static bool esil_set_jump_target(RzAnalysisEsil *esil) { bool ret = false; ut64 s; - char *src = rz_anal_esil_pop (esil); - if (src && rz_anal_esil_get_parm (esil, src, &s)) { + char *src = rz_analysis_esil_pop (esil); + if (src && rz_analysis_esil_get_parm (esil, src, &s)) { esil->jump_target = s; esil->jump_target_set = 1; ret = true; @@ -2844,11 +2844,11 @@ static bool esil_set_jump_target(RzAnalEsil *esil) { return ret; } -static bool esil_set_jump_target_set(RzAnalEsil *esil) { +static bool esil_set_jump_target_set(RzAnalysisEsil *esil) { bool ret = false; ut64 s; - char *src = rz_anal_esil_pop (esil); - if (src && rz_anal_esil_get_parm (esil, src, &s)) { + char *src = rz_analysis_esil_pop (esil); + if (src && rz_analysis_esil_get_parm (esil, src, &s)) { esil->jump_target_set = s; ret = true; } else { @@ -2859,11 +2859,11 @@ static bool esil_set_jump_target_set(RzAnalEsil *esil) { return ret; } -static bool esil_set_delay_slot(RzAnalEsil *esil) { +static bool esil_set_delay_slot(RzAnalysisEsil *esil) { bool ret = false; ut64 s; - char *src = rz_anal_esil_pop (esil); - if (src && rz_anal_esil_get_parm (esil, src, &s)) { + char *src = rz_analysis_esil_pop (esil); + if (src && rz_analysis_esil_get_parm (esil, src, &s)) { esil->delay = s; ret = true; } else { @@ -2874,8 +2874,8 @@ static bool esil_set_delay_slot(RzAnalEsil *esil) { return ret; } -static bool iscommand(RzAnalEsil *esil, const char *word, RzAnalEsilOp **op) { - RzAnalEsilOp *eop = ht_pp_find (esil->ops, word, NULL); +static bool iscommand(RzAnalysisEsil *esil, const char *word, RzAnalysisEsilOp **op) { + RzAnalysisEsilOp *eop = ht_pp_find (esil->ops, word, NULL); if (eop) { *op = eop; return true; @@ -2883,8 +2883,8 @@ static bool iscommand(RzAnalEsil *esil, const char *word, RzAnalEsilOp **op) { return false; } -static bool runword(RzAnalEsil *esil, const char *word) { - RzAnalEsilOp *op = NULL; +static bool runword(RzAnalysisEsil *esil, const char *word) { + RzAnalysisEsilOp *op = NULL; if (!word) { return false; } @@ -2910,8 +2910,8 @@ static bool runword(RzAnalEsil *esil, const char *word) { strncat (if_buf, word, sizeof (esil->Reil->if_buf) - strlen (if_buf) - 1); strncat (if_buf, ",", sizeof (esil->Reil->if_buf) - strlen (if_buf) - 1); if (!strcmp (word, "}")) { - rz_anal_esil_pushnum (esil, esil->Reil->addr + esil->Reil->cmd_count + 1); - rz_anal_esil_parse (esil, esil->Reil->if_buf); + rz_analysis_esil_pushnum (esil, esil->Reil->addr + esil->Reil->cmd_count + 1); + rz_analysis_esil_parse (esil, esil->Reil->if_buf); } else if (iscommand (esil, word, &op)) { esil->Reil->cmd_count++; } @@ -2965,7 +2965,7 @@ static bool runword(RzAnalEsil *esil, const char *word) { } // push value - if (!rz_anal_esil_push (esil, word)) { + if (!rz_analysis_esil_push (esil, word)) { ERR ("ESIL stack is full"); esil->trap = 1; esil->trap_code = 1; @@ -2996,7 +2996,7 @@ static const char *gotoWord(const char *str, int n) { * 2: continue in loop * 3: normal continuation */ -static int evalWord(RzAnalEsil *esil, const char *ostr, const char **str) { +static int evalWord(RzAnalysisEsil *esil, const char *ostr, const char **str) { rz_return_val_if_fail (esil && str, 0); if (!*str) { return 0; @@ -3028,7 +3028,7 @@ static int evalWord(RzAnalEsil *esil, const char *ostr, const char **str) { return 3; } -static bool __stepOut(RzAnalEsil *esil, const char *cmd) { +static bool __stepOut(RzAnalysisEsil *esil, const char *cmd) { static bool inCmdStep = false; if (cmd && esil && esil->cmd && !inCmdStep) { inCmdStep = true; @@ -3042,7 +3042,7 @@ static bool __stepOut(RzAnalEsil *esil, const char *cmd) { return false; } -RZ_API bool rz_anal_esil_parse(RzAnalEsil *esil, const char *str) { +RZ_API bool rz_analysis_esil_parse(RzAnalysisEsil *esil, const char *str) { int wordi = 0; int dorunword; char word[64]; @@ -3066,15 +3066,15 @@ loop: esil->parse_goto = -1; esil->parse_stop = 0; // memleak or failing aetr test. wat du -// rz_anal_esil_stack_free (esil); - esil->parse_goto_count = esil->anal? esil->anal->esil_goto_limit: RZ_ANAL_ESIL_GOTO_LIMIT; +// rz_analysis_esil_stack_free (esil); + esil->parse_goto_count = esil->analysis? esil->analysis->esil_goto_limit: RZ_ANAL_ESIL_GOTO_LIMIT; str = ostr; repeat: wordi = 0; while (*str) { if (str == hashbang) { - if (esil->anal && esil->anal->coreb.setab) { - esil->anal->coreb.cmd (esil->anal->coreb.core, str + 2); + if (esil->analysis && esil->analysis->coreb.setab) { + esil->analysis->coreb.cmd (esil->analysis->coreb.core, str + 2); } break; } @@ -3138,7 +3138,7 @@ repeat: return 1; } -RZ_API bool rz_anal_esil_runword(RzAnalEsil *esil, const char *word) { +RZ_API bool rz_analysis_esil_runword(RzAnalysisEsil *esil, const char *word) { const char *str = NULL; (void)runword (esil, word); if (*word) { @@ -3154,7 +3154,7 @@ RZ_API bool rz_anal_esil_runword(RzAnalEsil *esil, const char *word) { //frees all elements from the stack, not the stack itself //rename to stack_empty() ? -RZ_API void rz_anal_esil_stack_free(RzAnalEsil *esil) { +RZ_API void rz_analysis_esil_stack_free(RzAnalysisEsil *esil) { int i; if (esil) { for (i = 0; i < esil->stackptr; i++) { @@ -3164,7 +3164,7 @@ RZ_API void rz_anal_esil_stack_free(RzAnalEsil *esil) { } } -RZ_API int rz_anal_esil_condition(RzAnalEsil *esil, const char *str) { +RZ_API int rz_analysis_esil_condition(RzAnalysisEsil *esil, const char *str) { char *popped; int ret; if (!esil) { @@ -3173,8 +3173,8 @@ RZ_API int rz_anal_esil_condition(RzAnalEsil *esil, const char *str) { while (*str == ' ') { str++; // use proper string chop? } - (void) rz_anal_esil_parse (esil, str); - popped = rz_anal_esil_pop (esil); + (void) rz_analysis_esil_parse (esil, str); + popped = rz_analysis_esil_pop (esil); if (popped) { ut64 num; if (isregornum (esil, popped, &num)) { @@ -3190,8 +3190,8 @@ RZ_API int rz_anal_esil_condition(RzAnalEsil *esil, const char *str) { return ret; } -static void rz_anal_esil_setup_ops(RzAnalEsil *esil) { -#define OP(v, w, x, y, z) rz_anal_esil_set_op (esil, v, w, x, y, z) +static void rz_analysis_esil_setup_ops(RzAnalysisEsil *esil) { +#define OP(v, w, x, y, z) rz_analysis_esil_set_op (esil, v, w, x, y, z) #define OT_UNK RZ_ANAL_ESIL_OP_TYPE_UNKNOWN #define OT_CTR RZ_ANAL_ESIL_OP_TYPE_CONTROL_FLOW #define OT_MATH RZ_ANAL_ESIL_OP_TYPE_MATH @@ -3330,7 +3330,7 @@ static void rz_anal_esil_setup_ops(RzAnalEsil *esil) { OP ("[4]", esil_peek4, 1, 1, OT_MEMR); OP ("[8]", esil_peek8, 1, 1, OT_MEMR); OP ("[16]", esil_peek16, 1, 1, OT_MEMR); - OP ("STACK", rz_anal_esil_dumpstack, 0, 0, OT_UNK); + OP ("STACK", rz_analysis_esil_dumpstack, 0, 0, OT_UNK); OP ("REPEAT", esil_repeat, 0, 2, OT_CTR); OP ("POP", esil_pop, 0, 1, OT_UNK); OP ("TODO", esil_todo, 0, 0, OT_UNK); @@ -3348,11 +3348,11 @@ static void rz_anal_esil_setup_ops(RzAnalEsil *esil) { } /* register callbacks using this anal module. */ -RZ_API bool rz_anal_esil_setup(RzAnalEsil *esil, RzAnal *anal, int romem, int stats, int nonull) { +RZ_API bool rz_analysis_esil_setup(RzAnalysisEsil *esil, RzAnalysis *analysis, int romem, int stats, int nonull) { rz_return_val_if_fail (esil, false); //esil->debug = 0; - esil->anal = anal; - esil->parse_goto_count = anal->esil_goto_limit; + esil->analysis = analysis; + esil->parse_goto_count = analysis->esil_goto_limit; esil->trap = 0; esil->trap_code = 0; //esil->user = NULL; @@ -3372,10 +3372,10 @@ RZ_API bool rz_anal_esil_setup(RzAnalEsil *esil, RzAnal *anal, int romem, int st esil->cb.mem_read = internal_esil_mem_read; esil->cb.mem_write = internal_esil_mem_write; } - rz_anal_esil_mem_ro (esil, romem); - rz_anal_esil_stats (esil, stats); - rz_anal_esil_setup_ops (esil); + rz_analysis_esil_mem_ro (esil, romem); + rz_analysis_esil_stats (esil, stats); + rz_analysis_esil_setup_ops (esil); - return (anal->cur && anal->cur->esil_init) - ? anal->cur->esil_init (esil): true; + return (analysis->cur && analysis->cur->esil_init) + ? analysis->cur->esil_init (esil): true; } diff --git a/librz/analysis/esil2reil.c b/librz/analysis/esil2reil.c new file mode 100644 index 0000000000..e01e0bfba7 --- /dev/null +++ b/librz/analysis/esil2reil.c @@ -0,0 +1,1263 @@ +/* + * Convert from ESIL to REIL (Reverse Engineering Intermediate Language) + * Contributor: sushant94 + */ + +#include + +#define REIL_TEMP_PREFIX "V" +#define REIL_REG_PREFIX "R_" +#define REGBUFSZ 32 + +void reil_flag_spew_inst(RzAnalysisEsil *esil, const char *flag); +static const char *ops[] = { FOREACHOP(REIL_OP_STRING) }; + +// Get size of a register. +static ut8 esil_internal_sizeof_reg(RzAnalysisEsil *esil, const char *r) { + if (!esil || !esil->analysis || !esil->analysis->reg || !r) { + return false; + } + RzRegItem *i = rz_reg_get(esil->analysis->reg, r, -1); + return i ? (ut8)i->size : 0; +} + +RzAnalysisReilArgType reil_get_arg_type(RzAnalysisEsil *esil, char *s) { + if (!strncmp (s, REIL_TEMP_PREFIX, strlen (REIL_TEMP_PREFIX))) { + return ARG_TEMP; + } + int type = rz_analysis_esil_get_parm_type(esil, s); + switch (type) { + case RZ_ANAL_ESIL_PARM_REG: + return ARG_REG; + case RZ_ANAL_ESIL_PARM_NUM: + return ARG_CONST; + default: + return ARG_NONE; + } +} + +// Marshall the struct into a string +void reil_push_arg(RzAnalysisEsil *esil, RzAnalysisReilArg *op) { + char *s = rz_str_newf ("%s:%d", op->name, op->size); + rz_analysis_esil_push (esil, s); + free (s); +} + +// Unmarshall the string in stack to the struct. +RzAnalysisReilArg *reil_pop_arg(RzAnalysisEsil *esil) { + RzAnalysisReilArg *op; + int i, j = 0, flag = 0, len; + char tmp_buf[REGBUFSZ]; + char *buf = rz_analysis_esil_pop(esil); + if (!buf) { + return NULL; + } + len = strlen (buf); + op = RZ_NEW0(RzAnalysisReilArg); + for (i = 0; i < len; i++) { + if (buf[i] == ':') { + tmp_buf[j] = '\0'; + rz_str_ncpy (op->name, tmp_buf, sizeof (op->name)); + memset (tmp_buf, 0, sizeof (tmp_buf)); + j = 0; + flag = 1; + continue; + } + // Strip all spaces + if (buf[i] == ' ') { + continue; + } + tmp_buf[j] = buf[i]; + j++; + } + tmp_buf[j] = '\0'; + + // If we have not encountered a ':' we don't know the size yet. + if (!flag) { + rz_str_ncpy (op->name, tmp_buf, sizeof (op->name)); + op->type = reil_get_arg_type (esil, op->name); + if (op->type == ARG_REG) { + op->size = esil_internal_sizeof_reg(esil, op->name); + } else if (op->type == ARG_CONST) { + op->size = esil->analysis->bits; + } + free(buf); + return op; + } + + op->size = strtoll(tmp_buf, NULL, 10); + op->type = reil_get_arg_type(esil, op->name); + free(buf); + return op; +} + +// Get the next available temp register. +void get_next_temp_reg(RzAnalysisEsil *esil, char *buf) { + rz_snprintf (buf, REGBUFSZ, REIL_TEMP_PREFIX"_%02"PFMT64u, + esil->Reil->reilNextTemp); + esil->Reil->reilNextTemp++; +} + +void reil_make_arg(RzAnalysisEsil *esil, RzAnalysisReilArg *arg, char *name) { + if (!arg) { + return; + } + RzAnalysisReilArgType type = reil_get_arg_type (esil, name); + arg->size = 0; + arg->type = type; + rz_str_ncpy (arg->name, name, sizeof (arg->name) - 1); +} + +// Free ins and all its arguments +void reil_free_inst(RzAnalysisReilInst *ins) { + if (!ins) { + return; + } + if (ins->arg[0]) { RZ_FREE (ins->arg[0]); } + if (ins->arg[1]) { RZ_FREE (ins->arg[1]); } + if (ins->arg[2]) { RZ_FREE (ins->arg[2]); } + RZ_FREE(ins); +} + +// Automatically increments the seq_num of the instruction. +void reil_print_inst(RzAnalysisEsil *esil, RzAnalysisReilInst *ins) { + int i; + + if (!ins || !esil) { + return; + } + esil->analysis->cb_printf("%04"PFMT64x".%02x: %8s", + esil->Reil->addr, esil->Reil->seq_num++, ops[ins->opcode]); + for (i = 0; i < 3; i++) { + if (i > 0) { + esil->analysis->cb_printf (" ,"); + } + if (!ins->arg[i]) { + continue; + } + if (ins->arg[i]->type == ARG_NONE) { + esil->analysis->cb_printf ("%10s ", ins->arg[i]->name); + continue; + } + if (ins->arg[i]->type == ARG_REG) { + char *tmp_buf = rz_str_newf ("%s%s", REIL_REG_PREFIX, ins->arg[i]->name); + esil->analysis->cb_printf ("%10s:%02d", tmp_buf, ins->arg[i]->size); + free (tmp_buf); + continue; + } + esil->analysis->cb_printf ("%10s:%02d", ins->arg[i]->name, ins->arg[i]->size); + } + esil->analysis->cb_printf("\n"); +} + +// Used to cast sizes during assignment. OR is used for casting. +// Pushes the new *casted* src onto stack. Warning: Frees the original src! +void reil_cast_size(RzAnalysisEsil *esil, RzAnalysisReilArg *src, RzAnalysisReilArg *dst) { + char tmp_buf[REGBUFSZ]; + RzAnalysisReilInst *ins; + + if (!src || !dst) { + return; + } + // No need to case sizes if dst and src are of same size. + if (src->size == dst->size) { + reil_push_arg(esil, src); + return; + } + snprintf (tmp_buf, REGBUFSZ-1, "0:%d", dst->size); + rz_analysis_esil_push (esil, tmp_buf); + ins = RZ_NEW0 (RzAnalysisReilInst); + if (!ins) { + return; + } + ins->opcode = REIL_OR; + ins->arg[0] = src; + ins->arg[1] = reil_pop_arg (esil); + ins->arg[2] = RZ_NEW0(RzAnalysisReilArg); + get_next_temp_reg (esil, tmp_buf); + reil_make_arg (esil, ins->arg[2], tmp_buf); + if (ins->arg[2]) { + ins->arg[2]->size = dst->size; + } + reil_print_inst (esil, ins); + if (ins->arg[2]) { + reil_push_arg (esil, ins->arg[2]); + } + reil_free_inst (ins); +} + +// Here start translation functions! +static bool reil_eq(RzAnalysisEsil *esil) { + RzAnalysisReilInst *ins; + char tmp_buf[REGBUFSZ]; + RzAnalysisReilArgType src_type, dst_type; + RzAnalysisReilArg *dst, *src; + + dst = reil_pop_arg (esil); + if (!dst) { + return false; + } + src = reil_pop_arg (esil); + if (!src) { + RZ_FREE (dst); + return false; + } + + src_type = src->type; + // Check if the src is an internal var. If it is, we need to resolve it. + if (src_type == ARG_ESIL_INTERNAL) { + reil_flag_spew_inst (esil, src->name + 1); + RZ_FREE (src); + src = reil_pop_arg (esil); + } else if (src_type == ARG_REG) { + // No direct register to register transfer. + ins = RZ_NEW0 (RzAnalysisReilInst); + if (!ins) { + free (src); + free (dst); + return false; + } + ins->opcode = REIL_STR; + ins->arg[0] = src; + ins->arg[1] = RZ_NEW0 (RzAnalysisReilArg); + if (!ins->arg[1]) { + reil_free_inst (ins); + return false; + } + ins->arg[2] = RZ_NEW0(RzAnalysisReilArg); + if (!ins->arg[2]) { + reil_free_inst (ins); + return false; + } + reil_make_arg (esil, ins->arg[1], " "); + get_next_temp_reg (esil, tmp_buf); + reil_make_arg (esil, ins->arg[2], tmp_buf); + ins->arg[2]->size = ins->arg[0]->size; + reil_print_inst (esil, ins); + reil_push_arg( esil, ins->arg[2]); + reil_free_inst (ins); + src = reil_pop_arg (esil); + } + + // First, make a copy of the dst. We will need this to set the flags later on. + ins = RZ_NEW0 (RzAnalysisReilInst); + if (!ins) { + RZ_FREE (dst); + RZ_FREE (src); + return false; + } + dst_type = dst->type; + if (src_type != ARG_ESIL_INTERNAL && dst_type == ARG_REG) { + ins->opcode = REIL_STR; + ins->arg[0] = dst; + ins->arg[1] = RZ_NEW0 (RzAnalysisReilArg); + if (!ins->arg[1]) { + reil_free_inst (ins); + RZ_FREE (src); + return false; + } + ins->arg[2] = RZ_NEW0 (RzAnalysisReilArg); + if (!ins->arg[2]) { + reil_free_inst (ins); + RZ_FREE (src); + return false; + } + reil_make_arg (esil, ins->arg[1], " "); + get_next_temp_reg (esil, tmp_buf); + reil_make_arg (esil, ins->arg[2], tmp_buf); + ins->arg[2]->size = ins->arg[0]->size; + reil_print_inst (esil, ins); + + // Used for setting the flags + rz_snprintf (esil->Reil->old, sizeof (esil->Reil->old) - 1, "%s:%d", + ins->arg[2]->name, ins->arg[2]->size); + rz_snprintf (esil->Reil->cur, sizeof (esil->Reil->cur) - 1, "%s:%d", dst->name, + dst->size); + esil->Reil->lastsz = dst->size; + + RZ_FREE (ins->arg[1]); + RZ_FREE (ins->arg[2]); + } + + // If we are modifying the Instruction Pointer, then we need to emit JCC instead. + if (!strcmp(esil->Reil->pc, dst->name)) { + ins->opcode = REIL_JCC; + rz_analysis_esil_push (esil, "1:1"); + ins->arg[0] = reil_pop_arg (esil); + ins->arg[1] = RZ_NEW0 (RzAnalysisReilArg); + reil_make_arg (esil, ins->arg[1], " "); + ins->arg[2] = src; + reil_print_inst (esil, ins); + reil_free_inst (ins); + RZ_FREE (dst); + return true; + } + + reil_cast_size (esil, src, dst); + ins->opcode = REIL_STR; + ins->arg[0] = reil_pop_arg (esil); + if (!ins->arg[0]) { + RZ_FREE (dst); + reil_free_inst (ins); + return false; + } + + ins->arg[2] = dst; + ins->arg[1] = RZ_NEW0 (RzAnalysisReilArg); + reil_make_arg (esil, ins->arg[1], " "); + reil_print_inst (esil, ins); + reil_free_inst (ins); + return true; +} + +// General function for operations that take 2 operands +static int reil_binop(RzAnalysisEsil *esil, RzAnalysisReilOpcode opcode) { + RzAnalysisReilInst *ins; + char tmp_buf[REGBUFSZ]; + ut8 dst_size; + RzAnalysisReilArg *op2, *op1; + + op2 = reil_pop_arg(esil); + if (!op2) { + return false; + } + op1 = reil_pop_arg(esil); + if (!op1) { + RZ_FREE (op2); + return false; + } + + ins = RZ_NEW0 (RzAnalysisReilInst); + if (!ins) { + RZ_FREE (op1); + RZ_FREE (op2); + return false; + } + ins->opcode = opcode; + ins->arg[0] = op2; + ins->arg[1] = op1; + if (!ins->arg[1]) { + reil_free_inst (ins); + return false; + } + ins->arg[2] = RZ_NEW0(RzAnalysisReilArg); + if (!ins->arg[2]) { + reil_free_inst (ins); + return false; + } + get_next_temp_reg(esil, tmp_buf); + reil_make_arg(esil, ins->arg[2], tmp_buf); + // Choose the larger of the two sizes as the size of dst + dst_size = ins->arg[0]->size; + if (dst_size < ins->arg[1]->size) { + dst_size = ins->arg[1]->size; + } + // REIL_LT has a dst_size of 1. + if (opcode == REIL_LT) { + dst_size = 1; + } + ins->arg[2]->size = dst_size; + reil_print_inst(esil, ins); + reil_push_arg(esil, ins->arg[2]); + reil_free_inst(ins); + return true; +} + +// General function for operations which re-assign to dst. Example, addeq. +static int reil_bineqop(RzAnalysisEsil *esil, RzAnalysisReilOpcode opcode) { + int ret = 1; + RzAnalysisReilArg *op = reil_pop_arg(esil); + if (!op) { + return false; + } + + reil_push_arg(esil, op); + ret &= reil_binop(esil, opcode); + reil_push_arg(esil, op); + ret &= reil_eq(esil); + RZ_FREE(op); + return ret; +} + +static bool reil_add(RzAnalysisEsil *esil) { return reil_binop (esil, REIL_ADD); } +static bool reil_addeq(RzAnalysisEsil *esil) { return reil_bineqop (esil, REIL_ADD); } +static bool reil_mul(RzAnalysisEsil *esil) { return reil_binop (esil, REIL_MUL); } +static bool reil_muleq(RzAnalysisEsil *esil) { return reil_bineqop (esil, REIL_MUL); } +static bool reil_sub(RzAnalysisEsil *esil) { return reil_binop (esil, REIL_SUB); } +static bool reil_subeq(RzAnalysisEsil *esil) { return reil_bineqop (esil, REIL_SUB); } +static bool reil_div(RzAnalysisEsil *esil) { return reil_binop (esil, REIL_DIV); } +static bool reil_diveq(RzAnalysisEsil *esil) { return reil_bineqop (esil, REIL_DIV); } +static bool reil_xor(RzAnalysisEsil *esil) { return reil_binop (esil, REIL_XOR); } +static bool reil_xoreq(RzAnalysisEsil *esil) { return reil_bineqop (esil, REIL_XOR); } +static bool reil_and(RzAnalysisEsil *esil) { return reil_binop (esil, REIL_AND); } +static bool reil_andeq(RzAnalysisEsil *esil) { return reil_bineqop (esil, REIL_AND); } +static bool reil_or(RzAnalysisEsil *esil) { return reil_binop (esil, REIL_OR); } +static bool reil_oreq(RzAnalysisEsil *esil) { return reil_bineqop (esil, REIL_OR); } +static bool reil_lsl(RzAnalysisEsil *esil) { return reil_binop (esil, REIL_SHL); } +static bool reil_lsleq(RzAnalysisEsil *esil) { return reil_bineqop (esil, REIL_SHL); } +static bool reil_lsr(RzAnalysisEsil *esil) { return reil_binop (esil, REIL_SHR); } +static bool reil_lsreq(RzAnalysisEsil *esil) { return reil_bineqop (esil, REIL_SHR); } +static bool reil_smaller(RzAnalysisEsil *esil) { return reil_binop (esil, REIL_LT); } + +static bool reil_cmp(RzAnalysisEsil *esil) { + RzAnalysisReilInst *ins; + char tmp_buf[REGBUFSZ]; + RzAnalysisReilArg *op2, *op1; + + op2 = reil_pop_arg (esil); + if (!op2) { + return false; + } + op1 = reil_pop_arg (esil); + if (!op1) { + RZ_FREE (op2); + return false; + } + + ins = RZ_NEW0 (RzAnalysisReilInst); + if (!ins) { + RZ_FREE (op1); + RZ_FREE (op2); + return false; + } + ins->opcode = REIL_EQ; + ins->arg[0] = op2; + ins->arg[1] = op1; + ins->arg[2] = RZ_NEW0 (RzAnalysisReilArg); + if (!ins->arg[2]) { + reil_free_inst (ins); + return false; + } + get_next_temp_reg (esil, tmp_buf); + reil_make_arg (esil, ins->arg[2], tmp_buf); + ins->arg[2]->size = 1; + reil_print_inst (esil, ins); + // Set vars needed to determine flags. + rz_snprintf (esil->Reil->cur, sizeof (esil->Reil->old) - 1, "%s:%d", + ins->arg[2]->name, ins->arg[2]->size); + rz_snprintf (esil->Reil->old, sizeof (esil->Reil->cur) - 1, "%s:%d", + op2->name, op2->size); + if (rz_reg_get (esil->analysis->reg, op2->name, -1)) { + esil->Reil->lastsz = op2->size; + } else if (rz_reg_get (esil->analysis->reg, op1->name, -1)) { + esil->Reil->lastsz = op1->size; + } + reil_push_arg (esil, ins->arg[2]); + reil_free_inst (ins); + return true; +} + +static bool reil_smaller_equal(RzAnalysisEsil *esil) { + RzAnalysisReilArg *op2, *op1; + + op2 = reil_pop_arg(esil); + if (!op2) { + return false; + } + op1 = reil_pop_arg(esil); + if (!op1) { + RZ_FREE (op2); + return false; + } + + reil_push_arg(esil, op1); + reil_push_arg(esil, op2); + reil_smaller(esil); + reil_push_arg(esil, op1); + reil_push_arg(esil, op2); + reil_cmp(esil); + reil_or(esil); + + RZ_FREE(op1); + RZ_FREE(op2); + return true; +} + +static bool reil_larger(RzAnalysisEsil *esil) { + RzAnalysisReilArg *op2 = reil_pop_arg(esil); + if (!op2) { + return false; + } + RzAnalysisReilArg *op1 = reil_pop_arg(esil); + if (!op1) { + RZ_FREE (op2); + return false; + } + reil_push_arg (esil, op2); + reil_push_arg (esil, op1); + reil_smaller (esil); + RZ_FREE (op1); + RZ_FREE (op2); + return true; +} + +static bool reil_larger_equal(RzAnalysisEsil *esil) { + RzAnalysisReilArg *op2, *op1; + + op2 = reil_pop_arg(esil); + if (!op2) { + return false; + } + op1 = reil_pop_arg(esil); + if (!op1) { + RZ_FREE (op2); + return false; + } + + reil_push_arg (esil, op2); + reil_push_arg (esil, op1); + reil_smaller_equal (esil); + RZ_FREE (op1); + RZ_FREE (op2); + return true; +} + +static bool reil_dec(RzAnalysisEsil *esil) { + RzAnalysisReilArg *op = reil_pop_arg(esil); + if (!op) { + return false; + } + rz_analysis_esil_pushnum (esil, 1); + reil_push_arg (esil, op); + reil_sub (esil); + RZ_FREE (op); + return true; +} + +static bool reil_deceq(RzAnalysisEsil *esil) { + RzAnalysisReilArg *op1 = reil_pop_arg(esil); + if (!op1) { + return false; + } + reil_push_arg (esil, op1); + reil_dec (esil); + reil_push_arg (esil, op1); + reil_eq (esil); + RZ_FREE (op1); + return true; +} + +static bool reil_inc(RzAnalysisEsil *esil) { + RzAnalysisReilArg *op = reil_pop_arg(esil); + if (!op) { + return false; + } + + rz_analysis_esil_pushnum(esil, 1); + reil_push_arg(esil, op); + reil_add(esil); + RZ_FREE(op); + return true; +} + +static bool reil_inceq(RzAnalysisEsil *esil) { + RzAnalysisReilArg *op = reil_pop_arg(esil); + if (!op) { + return false; + } + reil_push_arg (esil, op); + reil_inc (esil); + reil_push_arg (esil, op); + reil_eq (esil); + RZ_FREE (op); + return true; +} + +static bool reil_neg(RzAnalysisEsil *esil) { + char tmp_buf[REGBUFSZ]; + RzAnalysisReilInst *ins; + RzAnalysisReilArg *op = reil_pop_arg (esil); + if (!op) { + return false; + } + ins = RZ_NEW0 (RzAnalysisReilInst); + if (!ins) { + RZ_FREE (op); + return false; + } + ins->opcode = REIL_EQ; + ins->arg[0] = op; + rz_analysis_esil_pushnum (esil, 0); + ins->arg[1] = reil_pop_arg(esil); + if (!ins->arg[1]) { + reil_free_inst (ins); + return false; + } + ins->arg[2] = RZ_NEW0 (RzAnalysisReilArg); + if (!ins->arg[2]) { + reil_free_inst (ins); + return false; + } + get_next_temp_reg (esil, tmp_buf); + reil_make_arg(esil, ins->arg[2], tmp_buf); + if (ins->arg[0]->size < ins->arg[1]->size) { + ins->arg[1]->size = ins->arg[0]->size; + } + + ins->arg[2]->size = 1; + reil_print_inst (esil, ins); + reil_push_arg (esil, ins->arg[2]); + reil_free_inst (ins); + return true; +} + +static bool reil_negeq(RzAnalysisEsil *esil) { + RzAnalysisReilArg *op = reil_pop_arg(esil); + if (!op) { + return false; + } + reil_push_arg (esil, op); + reil_neg (esil); + reil_push_arg (esil, op); + reil_eq (esil); + free (op); + return true; +} + +static bool reil_not(RzAnalysisEsil *esil) { + char tmp_buf[REGBUFSZ]; + RzAnalysisReilInst *ins; + RzAnalysisReilArg *op = reil_pop_arg (esil); + if (!op) { + return false; + } + + ins = RZ_NEW0 (RzAnalysisReilInst); + if (!ins) { + RZ_FREE (op); + return false; + } + ins->opcode = REIL_NOT; + ins->arg[0] = op; + ins->arg[1] = RZ_NEW0 (RzAnalysisReilArg); + if (!ins->arg[1]) { + reil_free_inst (ins); + return false; + } + ins->arg[2] = RZ_NEW0 (RzAnalysisReilArg); + if (!ins->arg[2]) { + reil_free_inst (ins); + return false; + } + reil_make_arg (esil, ins->arg[1], " "); + get_next_temp_reg (esil, tmp_buf); + reil_make_arg (esil, ins->arg[2], tmp_buf); + ins->arg[2]->size = ins->arg[0]->size; + reil_print_inst (esil, ins); + reil_push_arg (esil, ins->arg[2]); + reil_free_inst (ins); + return true; +} + +static bool reil_if(RzAnalysisEsil *esil) { + RzAnalysisReilInst *ins; + RzAnalysisReilArg *op2, *op1; + + op2 = reil_pop_arg (esil); + if (!op2) { + return false; + } + op1 = reil_pop_arg (esil); + if (!op1) { + RZ_FREE (op2); + return false; + } + + ins = RZ_NEW0 (RzAnalysisReilInst); + if (!ins) { + RZ_FREE (op2); + RZ_FREE (op1); + return false; + } + ins->opcode = REIL_JCC; + ins->arg[0] = op1; + ins->arg[2] = op2; + ins->arg[1] = RZ_NEW0 (RzAnalysisReilArg); + if (!ins->arg[1]) { + reil_free_inst (ins); + return false; + } + reil_make_arg (esil, ins->arg[1], " "); + reil_print_inst (esil, ins); + reil_free_inst (ins); + return true; +} + +static bool reil_if_end(RzAnalysisEsil *esil) { return true; } + +static bool reil_peek(RzAnalysisEsil *esil) { + RzAnalysisReilInst *ins; + char tmp_buf[REGBUFSZ]; + RzAnalysisReilArg *op1 = reil_pop_arg(esil); + if (!op1) { + return false; + } + + ins = RZ_NEW0 (RzAnalysisReilInst); + if (!ins) { + RZ_FREE (op1); + return false; + } + ins->opcode = REIL_LDM; + ins->arg[0] = op1; + ins->arg[1] = RZ_NEW0(RzAnalysisReilArg); + if (!ins->arg[1]) { + reil_free_inst (ins); + return false; + } + ins->arg[2] = RZ_NEW0(RzAnalysisReilArg); + if (!ins->arg[2]) { + reil_free_inst (ins); + return false; + } + reil_make_arg(esil, ins->arg[1], " "); + get_next_temp_reg(esil, tmp_buf); + reil_make_arg(esil, ins->arg[2], tmp_buf); + ins->arg[2]->size = ins->arg[0]->size; + reil_print_inst(esil, ins); + reil_push_arg(esil, ins->arg[2]); + reil_free_inst(ins); + return true; +} + +// n = 8, 4, 2, 1 +static bool reil_peekn(RzAnalysisEsil *esil, ut8 n) { + RzAnalysisReilArg *op2; + RzAnalysisReilArg *op1 = reil_pop_arg (esil); + if (!op1) { + return false; + } + + reil_push_arg (esil, op1); + reil_peek (esil); + // No need to cast if n = 0 + if (n == 0) { + RZ_FREE (op1); + return true; + } + + RZ_FREE (op1); + op1 = reil_pop_arg (esil); + if (!op1) { + return false; + } + + op2 = RZ_NEW0 (RzAnalysisReilArg); + if (!op2) { + RZ_FREE (op1); + return false; + } + op2->size = n * 8; + op2->type = ARG_TEMP; + get_next_temp_reg (esil, op2->name); + reil_cast_size (esil, op1, op2); + esil->Reil->lastsz = 8 * n; + + RZ_FREE (op2); + return true; +} + +static bool reil_peek1(RzAnalysisEsil *esil) { return reil_peekn(esil, 1); } +static bool reil_peek2(RzAnalysisEsil *esil) { return reil_peekn(esil, 2); } +static bool reil_peek4(RzAnalysisEsil *esil) { return reil_peekn(esil, 4); } +static bool reil_peek8(RzAnalysisEsil *esil) { return reil_peekn(esil, 8); } + +// n = 8, 4, 2, 1 +static bool reil_poken(RzAnalysisEsil *esil, ut8 n) { + char tmp_buf[REGBUFSZ]; + RzAnalysisReilInst *ins; + RzAnalysisReilArg *op2, *op1; + + op2 = reil_pop_arg (esil); + if (!op2) { + return false; + } + op1 = reil_pop_arg (esil); + if (!op1) { + RZ_FREE (op2); + return false; + } + + if (op1->type != ARG_ESIL_INTERNAL) { + ins = RZ_NEW0 (RzAnalysisReilInst); + if (!ins) { + RZ_FREE (op2); + RZ_FREE (op1); + return false; + } + ins->opcode = REIL_LDM; + ins->arg[0] = op2; + ins->arg[1] = RZ_NEW0(RzAnalysisReilArg); + if (!ins->arg[1]) { + RZ_FREE (op1); + reil_free_inst (ins); + return false; + } + ins->arg[2] = RZ_NEW0(RzAnalysisReilArg); + if (!ins->arg[2]) { + RZ_FREE (op1); + reil_free_inst (ins); + return false; + } + reil_make_arg (esil, ins->arg[1], " "); + get_next_temp_reg (esil, tmp_buf); + reil_make_arg (esil, ins->arg[2], tmp_buf); + ins->arg[2]->size = ins->arg[0]->size; + reil_print_inst (esil, ins); + rz_snprintf (esil->Reil->old, sizeof (esil->Reil->old) - 1, "%s:%d", + ins->arg[2]->name, ins->arg[2]->size); + rz_snprintf (esil->Reil->cur, sizeof (esil->Reil->cur) - 1, "%s:%d", + op2->name, op2->size); + esil->lastsz = n * 8; + reil_push_arg (esil, op1); + reil_push_arg (esil, op2); + RZ_FREE (op1); + reil_free_inst (ins); + } else { + reil_flag_spew_inst (esil, op1->name + 1); + RZ_FREE (op1); + op1 = reil_pop_arg (esil); + reil_push_arg (esil, op2); + reil_push_arg (esil, op1); + RZ_FREE (op2); + RZ_FREE (op1); + } + + ins = RZ_NEW0 (RzAnalysisReilInst); + if (!ins) { + return false; + } + ins->opcode = REIL_STM; + ins->arg[2] = reil_pop_arg (esil); + ins->arg[0] = reil_pop_arg (esil); + ins->arg[1] = RZ_NEW0 (RzAnalysisReilArg); + if (!ins->arg[1]) { + reil_free_inst (ins); + return false; + } + reil_make_arg(esil, ins->arg[1], " "); + reil_print_inst(esil, ins); + reil_free_inst(ins); + return true; +} + +static bool reil_poke(RzAnalysisEsil *esil) { + return reil_poken (esil, esil->analysis->bits / 8); +} + +static bool reil_poke1(RzAnalysisEsil *esil) { return reil_poken(esil, 1); } +static bool reil_poke2(RzAnalysisEsil *esil) { return reil_poken(esil, 2); } +static bool reil_poke4(RzAnalysisEsil *esil) { return reil_poken(esil, 4); } +static bool reil_poke8(RzAnalysisEsil *esil) { return reil_poken(esil, 8); } + +// Generic function to handle all mem_*eq_n functions. Example, mem_oreq_n +static bool reil_mem_bineq_n(RzAnalysisEsil *esil, RzAnalysisReilOpcode opcode, ut8 size) { + int ret = 1; + RzAnalysisReilArg *op2, *op1; + + op2 = reil_pop_arg (esil); + if (!op2) { + return false; + } + op1 = reil_pop_arg (esil); + if (!op1) { + RZ_FREE (op2); + return false; + } + + reil_push_arg(esil, op2); + ret &= reil_peekn(esil, size); + reil_push_arg(esil, op1); + ret &= reil_binop(esil, opcode); + reil_push_arg(esil, op2); + ret &= reil_poken(esil, size); + + free (op2); + free (op1); + return ret; +} + +static bool reil_mem_oreq(RzAnalysisEsil *esil) { return reil_mem_bineq_n(esil, REIL_OR, esil->analysis->bits / 8); } +static bool reil_mem_oreq1(RzAnalysisEsil *esil) { return reil_mem_bineq_n(esil, REIL_OR, 1); } +static bool reil_mem_oreq2(RzAnalysisEsil *esil) { return reil_mem_bineq_n(esil, REIL_OR, 2); } +static bool reil_mem_oreq4(RzAnalysisEsil *esil) { return reil_mem_bineq_n(esil, REIL_OR, 4); } +static bool reil_mem_oreq8(RzAnalysisEsil *esil) { return reil_mem_bineq_n(esil, REIL_OR, 8); } + +static bool reil_mem_andeq(RzAnalysisEsil *esil) { return reil_mem_bineq_n(esil, REIL_AND, esil->analysis->bits / 8); } +static bool reil_mem_andeq1(RzAnalysisEsil *esil) { return reil_mem_bineq_n(esil, REIL_AND, 1); } +static bool reil_mem_andeq2(RzAnalysisEsil *esil) { return reil_mem_bineq_n(esil, REIL_AND, 2); } +static bool reil_mem_andeq4(RzAnalysisEsil *esil) { return reil_mem_bineq_n(esil, REIL_AND, 4); } +static bool reil_mem_andeq8(RzAnalysisEsil *esil) { return reil_mem_bineq_n(esil, REIL_AND, 8); } + +static bool reil_mem_xoreq(RzAnalysisEsil *esil) { return reil_mem_bineq_n(esil, REIL_XOR, esil->analysis->bits / 8); } +static bool reil_mem_xoreq1(RzAnalysisEsil *esil) { return reil_mem_bineq_n(esil, REIL_XOR, 1); } +static bool reil_mem_xoreq2(RzAnalysisEsil *esil) { return reil_mem_bineq_n(esil, REIL_XOR, 2); } +static bool reil_mem_xoreq4(RzAnalysisEsil *esil) { return reil_mem_bineq_n(esil, REIL_XOR, 4); } +static bool reil_mem_xoreq8(RzAnalysisEsil *esil) { return reil_mem_bineq_n(esil, REIL_XOR, 8); } + +static bool reil_mem_addeq(RzAnalysisEsil *esil) { return reil_mem_bineq_n(esil, REIL_ADD, esil->analysis->bits / 8); } +static bool reil_mem_addeq1(RzAnalysisEsil *esil) { return reil_mem_bineq_n(esil, REIL_ADD, 1); } +static bool reil_mem_addeq2(RzAnalysisEsil *esil) { return reil_mem_bineq_n(esil, REIL_ADD, 2); } +static bool reil_mem_addeq4(RzAnalysisEsil *esil) { return reil_mem_bineq_n(esil, REIL_ADD, 4); } +static bool reil_mem_addeq8(RzAnalysisEsil *esil) { return reil_mem_bineq_n(esil, REIL_ADD, 8); } + +static bool reil_mem_subeq(RzAnalysisEsil *esil) { return reil_mem_bineq_n(esil, REIL_SUB, esil->analysis->bits / 8); } +static bool reil_mem_subeq1(RzAnalysisEsil *esil) { return reil_mem_bineq_n(esil, REIL_SUB, 1); } +static bool reil_mem_subeq2(RzAnalysisEsil *esil) { return reil_mem_bineq_n(esil, REIL_SUB, 2); } +static bool reil_mem_subeq4(RzAnalysisEsil *esil) { return reil_mem_bineq_n(esil, REIL_SUB, 4); } +static bool reil_mem_subeq8(RzAnalysisEsil *esil) { return reil_mem_bineq_n(esil, REIL_SUB, 8); } + +static bool reil_mem_muleq(RzAnalysisEsil *esil) { return reil_mem_bineq_n(esil, REIL_MUL, esil->analysis->bits / 8); } +static bool reil_mem_muleq1(RzAnalysisEsil *esil) { return reil_mem_bineq_n(esil, REIL_MUL, 1); } +static bool reil_mem_muleq2(RzAnalysisEsil *esil) { return reil_mem_bineq_n(esil, REIL_MUL, 2); } +static bool reil_mem_muleq4(RzAnalysisEsil *esil) { return reil_mem_bineq_n(esil, REIL_MUL, 4); } +static bool reil_mem_muleq8(RzAnalysisEsil *esil) { return reil_mem_bineq_n(esil, REIL_MUL, 8); } + +static bool reil_mem_inceq_n(RzAnalysisEsil *esil, ut8 size) { + int ret = 1; + RzAnalysisReilArg *op1 = reil_pop_arg(esil); + if (!op1) { + return false; + } + + rz_analysis_esil_pushnum(esil, 1); + reil_push_arg(esil, op1); + ret &= reil_mem_bineq_n(esil, REIL_ADD, size); + + free (op1); + return ret; +} + +static bool reil_mem_inceq(RzAnalysisEsil *esil) { + return reil_mem_inceq_n(esil, esil->analysis->bits / 8); +} +static bool reil_mem_inceq1(RzAnalysisEsil *esil) { return reil_mem_inceq_n(esil, 1); } +static bool reil_mem_inceq2(RzAnalysisEsil *esil) { return reil_mem_inceq_n(esil, 2); } +static bool reil_mem_inceq4(RzAnalysisEsil *esil) { return reil_mem_inceq_n(esil, 4); } +static bool reil_mem_inceq8(RzAnalysisEsil *esil) { return reil_mem_inceq_n(esil, 8); } + +static int reil_mem_deceq_n(RzAnalysisEsil *esil, ut8 size) { + int ret = 1; + RzAnalysisReilArg *op1 = reil_pop_arg(esil); + if (!op1) { + return false; + } + + rz_analysis_esil_pushnum(esil, 1); + reil_push_arg(esil, op1); + ret &= reil_mem_bineq_n(esil, REIL_SUB, size); + + free (op1); + return ret; +} + +static bool reil_mem_deceq(RzAnalysisEsil *esil) { + return reil_mem_deceq_n(esil, esil->analysis->bits / 8); +} +static bool reil_mem_deceq1(RzAnalysisEsil *esil) { return reil_mem_deceq_n(esil, 1); } +static bool reil_mem_deceq2(RzAnalysisEsil *esil) { return reil_mem_deceq_n(esil, 2); } +static bool reil_mem_deceq4(RzAnalysisEsil *esil) { return reil_mem_deceq_n(esil, 4); } +static bool reil_mem_deceq8(RzAnalysisEsil *esil) { return reil_mem_deceq_n(esil, 8); } + +// Functions to resolve internal vars. +// performs (2 << op) - 1 +void reil_generate_mask(RzAnalysisEsil *esil) { + rz_analysis_esil_pushnum(esil, 2); + reil_lsl(esil); + reil_dec(esil); +} + +void reil_generate_borrow_flag(RzAnalysisEsil *esil, ut8 bit) { + RzAnalysisReilArg *op1; + + rz_analysis_esil_pushnum(esil, bit); + rz_analysis_esil_pushnum(esil, 0x3f); + reil_and(esil); + rz_analysis_esil_pushnum(esil, 0x3f); + reil_add(esil); + rz_analysis_esil_pushnum(esil, 0x3f); + reil_and(esil); + // Generate the mask. 2 << bits - 1 + reil_generate_mask(esil); + op1 = reil_pop_arg(esil); + // old & mask + rz_analysis_esil_push(esil, esil->Reil->old); + reil_push_arg(esil, op1); + reil_and(esil); + // cur & mask + rz_analysis_esil_push(esil, esil->Reil->cur); + reil_push_arg(esil, op1); + reil_and(esil); + // Check + reil_larger(esil); + + free (op1); +} + +void reil_generate_carry_flag(RzAnalysisEsil *esil, ut8 bit) { + RzAnalysisReilArg *op1; + + rz_analysis_esil_pushnum(esil, bit); + rz_analysis_esil_pushnum(esil, 0x3f); + reil_and(esil); + // Generate the mask. 2 << bits - 1 + reil_generate_mask(esil); + op1 = reil_pop_arg(esil); + // old & mask + rz_analysis_esil_push(esil, esil->Reil->old); + reil_push_arg(esil, op1); + reil_and(esil); + // cur & mask + rz_analysis_esil_push(esil, esil->Reil->cur); + reil_push_arg(esil, op1); + reil_and(esil); + // Check + reil_smaller(esil); + + free (op1); +} + +void reil_generate_partity_flag(RzAnalysisEsil *esil) { + // Generation of parity flag taken from openreil README example. + RzAnalysisReilArg *op; + rz_analysis_esil_push(esil, esil->Reil->cur); + rz_analysis_esil_pushnum(esil, 0xff); + reil_and(esil); + op = reil_pop_arg(esil); + if (!op) { + return; + } + + rz_analysis_esil_pushnum(esil, 7); + reil_push_arg(esil, op); + reil_lsr(esil); + rz_analysis_esil_pushnum(esil, 6); + reil_push_arg(esil, op); + reil_lsr(esil); + reil_xor(esil); + rz_analysis_esil_pushnum(esil, 5); + reil_push_arg(esil, op); + reil_lsr(esil); + rz_analysis_esil_pushnum(esil, 4); + reil_push_arg(esil, op); + reil_lsr(esil); + reil_xor(esil); + reil_xor(esil); + rz_analysis_esil_pushnum(esil, 3); + reil_push_arg(esil, op); + reil_lsr(esil); + rz_analysis_esil_pushnum(esil, 2); + reil_push_arg(esil, op); + reil_lsr(esil); + reil_xor(esil); + rz_analysis_esil_pushnum(esil, 1); + reil_push_arg(esil, op); + reil_lsr(esil); + reil_push_arg(esil, op); + reil_xor(esil); + reil_xor(esil); + reil_xor(esil); + rz_analysis_esil_pushnum(esil, 1); + reil_and(esil); + reil_not(esil); + + free (op); +} + +void reil_generate_signature(RzAnalysisEsil *esil) { + if (!esil->Reil->lastsz || esil->Reil->lastsz == 0) { + rz_analysis_esil_pushnum(esil, 0); + return; + } + + RzAnalysisReilArg *op; + + rz_analysis_esil_pushnum(esil, esil->Reil->lastsz - 1); + rz_analysis_esil_pushnum(esil, 1); + reil_lsl(esil); + rz_analysis_esil_push(esil, esil->Reil->cur); + reil_and(esil); + + op = reil_pop_arg(esil); + if (!op) { + return; + } + + rz_analysis_esil_pushnum(esil, esil->Reil->lastsz - 1); + reil_push_arg(esil, op); + reil_lsr(esil); + + free (op); +} + +void reil_generate_overflow_flag(RzAnalysisEsil *esil) { + if (esil->Reil->lastsz < 2) { + rz_analysis_esil_pushnum (esil, 0); + } + + reil_generate_borrow_flag(esil, esil->Reil->lastsz); + reil_generate_carry_flag(esil, esil->Reil->lastsz - 2); + reil_xor(esil); +} + +void reil_flag_spew_inst(RzAnalysisEsil *esil, const char *flag) { + ut8 bit; + switch (flag[0]) { + case 'z': // zero-flag + rz_analysis_esil_push(esil, esil->Reil->cur); + break; + case 'b': + bit = (ut8)rz_num_get(NULL, &flag[1]); + reil_generate_borrow_flag(esil, bit); + break; + case 'c': + bit = (ut8)rz_num_get(NULL, &flag[1]); + reil_generate_carry_flag(esil, bit); + break; + case 'o': + reil_generate_overflow_flag(esil); + break; + case 'p': + reil_generate_partity_flag(esil); + break; + case 'r': + rz_analysis_esil_pushnum(esil, esil->analysis->bits / 8); + break; + case 's': + reil_generate_signature(esil); + break; + default: + return; + } + + return; +} + +/* Callback hook for command_hook */ +static int setup_reil_ins(RzAnalysisEsil *esil, const char *op) { + esil->Reil->addr++; // Increment the address location. + esil->Reil->seq_num = 0; // Reset the sequencing. + return 0; +} + +RZ_API int rz_analysis_esil_to_reil_setup(RzAnalysisEsil *esil, RzAnalysis *analysis, int romem, + int stats) { + if (!esil) { + return false; + } + esil->verbose = 2; + esil->analysis = analysis; + esil->trap = 0; + esil->trap_code = 0; + + /* Set up a callback for hook_command */ + esil->cb.hook_command = setup_reil_ins; + + esil->Reil = RZ_NEW0(RzAnalysisReil); + if (!esil->Reil) { + return false; + } + esil->Reil->reilNextTemp = 0; + esil->Reil->addr = -1; + esil->Reil->seq_num = 0; + esil->Reil->skip = 0; + + // Store the pc + const char *name = rz_reg_get_name (esil->analysis->reg, rz_reg_get_name_idx ("PC")); + strncpy (esil->Reil->pc, name, sizeof (esil->Reil->pc) - 1); + + rz_analysis_esil_mem_ro(esil, romem); + +#define OT_UNK RZ_ANAL_ESIL_OP_TYPE_UNKNOWN +#define OT_CTR RZ_ANAL_ESIL_OP_TYPE_CONTROL_FLOW +#define OT_MATH RZ_ANAL_ESIL_OP_TYPE_MATH +#define OT_REGW RZ_ANAL_ESIL_OP_TYPE_REG_WRITE +#define OT_MEMW RZ_ANAL_ESIL_OP_TYPE_MEM_WRITE +#define OT_MEMR RZ_ANAL_ESIL_OP_TYPE_MEM_READ + + rz_analysis_esil_set_op(esil, "=", reil_eq, 0, 2, OT_REGW); + rz_analysis_esil_set_op(esil, ":=", reil_eq, 0, 2, OT_REGW); + rz_analysis_esil_set_op(esil, "+", reil_add, 1, 2, OT_MATH); + rz_analysis_esil_set_op(esil, "+=", reil_addeq, 0, 2, OT_MATH | OT_REGW); + rz_analysis_esil_set_op(esil, "-", reil_sub, 1, 2, OT_MATH); + rz_analysis_esil_set_op(esil, "-=", reil_subeq, 0, 2, OT_MATH | OT_REGW); + rz_analysis_esil_set_op(esil, "*", reil_mul, 1, 2, OT_MATH); + rz_analysis_esil_set_op(esil, "*=", reil_muleq, 0, 2, OT_MATH | OT_REGW); + rz_analysis_esil_set_op(esil, "/", reil_div, 1, 2, OT_MATH); + rz_analysis_esil_set_op(esil, "/=", reil_diveq, 0, 2, OT_MATH | OT_REGW); + rz_analysis_esil_set_op(esil, "^", reil_xor, 1, 2, OT_MATH); + rz_analysis_esil_set_op(esil, "^=", reil_xoreq, 0, 2, OT_MATH | OT_REGW); + rz_analysis_esil_set_op(esil, "|", reil_or, 1, 2, OT_MATH); + rz_analysis_esil_set_op(esil, "|=", reil_oreq, 0, 2, OT_MATH | OT_REGW); + rz_analysis_esil_set_op(esil, "&", reil_and, 1, 2, OT_MATH); + rz_analysis_esil_set_op(esil, "&=", reil_andeq, 0, 2, OT_MATH | OT_REGW); + rz_analysis_esil_set_op(esil, "<<", reil_lsl, 1, 2, OT_MATH); + rz_analysis_esil_set_op(esil, "<<=", reil_lsleq, 0, 2, OT_MATH | OT_REGW); + rz_analysis_esil_set_op(esil, ">>", reil_lsr, 1, 2, OT_MATH); + rz_analysis_esil_set_op(esil, ">>=", reil_lsreq, 0, 2, OT_MATH | OT_REGW); + rz_analysis_esil_set_op(esil, "++=", reil_inceq, 0, 1, OT_MATH | OT_REGW); + rz_analysis_esil_set_op(esil, "++", reil_inc, 1, 1, OT_MATH); + rz_analysis_esil_set_op(esil, "--=", reil_deceq, 0, 1, OT_MATH | OT_REGW); + rz_analysis_esil_set_op(esil, "--", reil_dec, 1, 1, OT_MATH); + rz_analysis_esil_set_op(esil, "!", reil_neg, 1, 1, OT_MATH); + rz_analysis_esil_set_op(esil, "!=", reil_negeq, 0, 1, OT_MATH); + rz_analysis_esil_set_op(esil, "==", reil_cmp, 0, 2, OT_MATH); + rz_analysis_esil_set_op(esil, "<", reil_smaller, 1, 2, OT_MATH); + rz_analysis_esil_set_op(esil, ">", reil_larger, 1, 2, OT_MATH); + rz_analysis_esil_set_op(esil, "<=", reil_smaller_equal, 1, 2, OT_MATH); + rz_analysis_esil_set_op(esil, ">=", reil_larger_equal, 1, 2, OT_MATH); + rz_analysis_esil_set_op(esil, "[]", reil_peek, 1, 1, OT_MEMR); + rz_analysis_esil_set_op(esil, "=[]", reil_poke, 0, 2, OT_MEMW); + rz_analysis_esil_set_op(esil, "|=[]", reil_mem_oreq, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "^=[]", reil_mem_xoreq, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "&=[]", reil_mem_andeq, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "+=[]", reil_mem_addeq, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "-=[]", reil_mem_subeq, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "*=[]", reil_mem_muleq, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "++=[]", reil_mem_inceq, 0, 1, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "--=[]", reil_mem_deceq, 0, 1, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "=[1]", reil_poke1, 0, 2, OT_MEMW); + rz_analysis_esil_set_op(esil, "=[2]", reil_poke2, 0, 2, OT_MEMW); + rz_analysis_esil_set_op(esil, "=[4]", reil_poke4, 0, 2, OT_MEMW); + rz_analysis_esil_set_op(esil, "=[8]", reil_poke8, 0, 2, OT_MEMW); + rz_analysis_esil_set_op(esil, "[1]", reil_peek1, 1, 1, OT_MEMR); + rz_analysis_esil_set_op(esil, "[2]", reil_peek2, 1, 1, OT_MEMR); + rz_analysis_esil_set_op(esil, "[4]", reil_peek4, 1, 1, OT_MEMR); + rz_analysis_esil_set_op(esil, "[8]", reil_peek8, 1, 1, OT_MEMR); + rz_analysis_esil_set_op(esil, "|=[1]", reil_mem_oreq1, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "|=[2]", reil_mem_oreq2, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "|=[4]", reil_mem_oreq4, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "|=[8]", reil_mem_oreq8, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "^=[1]", reil_mem_xoreq1, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "^=[2]", reil_mem_xoreq2, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "^=[4]", reil_mem_xoreq4, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "^=[8]", reil_mem_xoreq8, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "&=[1]", reil_mem_andeq1, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "&=[2]", reil_mem_andeq2, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "&=[4]", reil_mem_andeq4, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "&=[8]", reil_mem_andeq8, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "+=[1]", reil_mem_addeq1, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "+=[2]", reil_mem_addeq2, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "+=[4]", reil_mem_addeq4, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "+=[8]", reil_mem_addeq8, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "-=[1]", reil_mem_subeq1, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "-=[2]", reil_mem_subeq2, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "-=[4]", reil_mem_subeq4, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "-=[8]", reil_mem_subeq8, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "*=[1]", reil_mem_muleq1, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "*=[2]", reil_mem_muleq2, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "*=[4]", reil_mem_muleq4, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "*=[8]", reil_mem_muleq8, 0, 2, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "++=[1]", reil_mem_inceq1, 0, 1, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "++=[2]", reil_mem_inceq2, 0, 1, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "++=[4]", reil_mem_inceq4, 0, 1, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "++=[8]", reil_mem_inceq8, 0, 1, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "--=[1]", reil_mem_deceq1, 0, 1, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "--=[2]", reil_mem_deceq2, 0, 1, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "--=[4]", reil_mem_deceq4, 0, 1, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "--=[8]", reil_mem_deceq8, 0, 1, OT_MATH | OT_MEMR | OT_MEMW); + rz_analysis_esil_set_op(esil, "?{", reil_if, 0, 1, OT_CTR); + rz_analysis_esil_set_op(esil, "}", reil_if_end, 0, 0, OT_CTR); + + return true; +} diff --git a/librz/anal/esil_cfg.c b/librz/analysis/esil_cfg.c similarity index 83% rename from librz/anal/esil_cfg.c rename to librz/analysis/esil_cfg.c index 1525cfca5d..f4777cedbc 100644 --- a/librz/anal/esil_cfg.c +++ b/librz/analysis/esil_cfg.c @@ -1,11 +1,11 @@ #include #include -#include +#include /* shared internal state of the subgraph generating functions */ typedef struct esil_cfg_generator_t { - RzAnalEsil *esil; + RzAnalysisEsil *esil; union { RzStack *ifelse; RzStack *vals; @@ -13,13 +13,13 @@ typedef struct esil_cfg_generator_t { // union for semantic purposes RContRBTree *blocks; // consider moving this to cfg? well, yes and no. - // making Graph nodes fast available in RzAnalEsilCFG is great idea + // making Graph nodes fast available in RzAnalysisEsilCFG is great idea // A balanced tree is only best solution, if we want to store and lookup intervals // We need to look for intervals, so that we can resolve goto destinations INSIDE of a cpu-instruction // After an instruction got graphed, we only need their entry node (nodes with first == {xxx, 0 }) // So after graphing an instruction, the blocks-tree should be cleared (don't free the content) // and nodes with first == {xxx, 0} should be stored in an sdb or similar in cfg, with xxx as key - RzAnalEsilCFG *cfg; + RzAnalysisEsilCFG *cfg; RzGraphNode *cur; // current graph-node, so that I don't have to abuse cfg->start RzIDStorage *atoms; @@ -66,7 +66,7 @@ static char *internal_esil_strchrtok(char *str, const char tok) { return NULL; } -RzAnalEsilOp *esil_get_op (RzAnalEsil *esil, const char *op) { +RzAnalysisEsilOp *esil_get_op (RzAnalysisEsil *esil, const char *op) { rz_return_val_if_fail (RZ_STR_ISNOTEMPTY (op) && esil && esil->ops, NULL); return ht_pp_find (esil->ops, op, NULL); } @@ -81,22 +81,22 @@ static void esil_expr_atomize(RzIDStorage *atoms, char *expr) { } static void _free_bb_cb(void *data) { - RzAnalEsilBB *bb = (RzAnalEsilBB *)data; + RzAnalysisEsilBB *bb = (RzAnalysisEsilBB *)data; free (bb->expr); free (bb); } // REMINDER: generating the block content needs to prepend setting the program counter -// rz_anal_esil_cfg_op does this ^, use it whenever generating cfg from op +// rz_analysis_esil_cfg_op does this ^, use it whenever generating cfg from op -// this nasty function is an insert-compare for RzGraphNodes that contain RzAnalEsilBB +// this nasty function is an insert-compare for RzGraphNodes that contain RzAnalysisEsilBB static int _graphnode_esilbb_insert_cmp(void *incoming, void *in, void *user) { RzGraphNode *incoming_gnode = (RzGraphNode *)incoming; RzGraphNode *in_gnode = (RzGraphNode *)in; - RzAnalEsilBB *incoming_bb = (RzAnalEsilBB *)incoming_gnode->data; - RzAnalEsilBB *in_bb = (RzAnalEsilBB *)in_gnode->data; + RzAnalysisEsilBB *incoming_bb = (RzAnalysisEsilBB *)incoming_gnode->data; + RzAnalysisEsilBB *in_bb = (RzAnalysisEsilBB *)in_gnode->data; - // RzAnalEsilBBs have the nice property, that they cannot intersect, + // RzAnalysisEsilBBs have the nice property, that they cannot intersect, // so just comparing first and first should be fine for inserting #if 0 return incoming_bb->first - in_bb->first; @@ -114,9 +114,9 @@ static int _graphnode_esilbb_insert_cmp(void *incoming, void *in, void *user) { } static int _graphnode_esilbb_find_cmp(void *incoming, void *in, void *user) { - RzAnalEsilEOffset *find_me = (RzAnalEsilEOffset *)incoming; + RzAnalysisEsilEOffset *find_me = (RzAnalysisEsilEOffset *)incoming; RzGraphNode *in_gnode = (RzGraphNode *)in; - RzAnalEsilBB *in_bb = (RzAnalEsilBB *)in_gnode->data; + RzAnalysisEsilBB *in_bb = (RzAnalysisEsilBB *)in_gnode->data; // not sure if this is needed that way if (find_me->off < in_bb->first.off) { return -1; @@ -136,7 +136,7 @@ static int _graphnode_esilbb_find_cmp(void *incoming, void *in, void *user) { static int _graphnode_delete_always_0_cmp(void *incoming, void *in, void *user) { EsilCfgGen *gen = (EsilCfgGen *)user; RzGraphNode *delete_me = (RzGraphNode *)in; - RzAnalEsilBB *delete_me_bb = (RzAnalEsilBB *)delete_me->data; + RzAnalysisEsilBB *delete_me_bb = (RzAnalysisEsilBB *)delete_me->data; rz_graph_del_node (gen->cfg->g, delete_me); ut32 id; for (id = delete_me_bb->first.idx; id <= delete_me_bb->last.idx; id++) { @@ -153,10 +153,10 @@ void _handle_if_enter (EsilCfgGen *gen, ut32 id, const bool has_next) { EsilCfgScopeCookie *cookie = RZ_NEW0 (EsilCfgScopeCookie); // get current bb - // RzAnalEsilBB *bb = (RzAnalEsilBB *)gen->cur->data; + // RzAnalysisEsilBB *bb = (RzAnalysisEsilBB *)gen->cur->data; // create if-enter-bb - RzAnalEsilBB *entered_bb = RZ_NEW0 (RzAnalEsilBB); + RzAnalysisEsilBB *entered_bb = RZ_NEW0 (RzAnalysisEsilBB); entered_bb->first.off = entered_bb->last.off = gen->off; entered_bb->first.idx = entered_bb->last.idx = id + 1; entered_bb->enter = RZ_ANAL_ESIL_BLOCK_ENTER_TRUE; @@ -184,7 +184,7 @@ void _handle_else_enter (EsilCfgGen *gen, ut32 id, const bool has_next) { EsilCfgScopeCookie *cookie = (EsilCfgScopeCookie *)rz_stack_peek (gen->ifelse); // create if-enter-bb - RzAnalEsilBB *entered_bb = RZ_NEW0 (RzAnalEsilBB); + RzAnalysisEsilBB *entered_bb = RZ_NEW0 (RzAnalysisEsilBB); entered_bb->first.off = entered_bb->last.off = gen->off; entered_bb->first.idx = entered_bb->last.idx = id + 1; @@ -216,12 +216,12 @@ void _handle_fi_leave (EsilCfgGen *gen, ut32 id, const bool has_next) { return; } - RzAnalEsilBB *cur_bb = (RzAnalEsilBB *)gen->cur->data; + RzAnalysisEsilBB *cur_bb = (RzAnalysisEsilBB *)gen->cur->data; // this block is not executed when the if or else block is empty - if (memcmp (&cur_bb->first, &cur_bb->last, sizeof (RzAnalEsilEOffset))) { + if (memcmp (&cur_bb->first, &cur_bb->last, sizeof (RzAnalysisEsilEOffset))) { // TODO: add some thoughts in comments here cur_bb->last.idx--; - RzAnalEsilBB *leaving_bb = RZ_NEW0 (RzAnalEsilBB); + RzAnalysisEsilBB *leaving_bb = RZ_NEW0 (RzAnalysisEsilBB); leaving_bb->first.off = leaving_bb->last.off = gen->off; leaving_bb->first.idx = leaving_bb->last.idx = id; RzGraphNode *leaving_node = rz_graph_add_node (gen->cfg->g, leaving_bb); @@ -258,8 +258,8 @@ void _handle_control_flow_ifelsefi (EsilCfgGen *gen, char *atom, ut32 id) { bool _round_0_cb (void *user, void *data, ut32 id) { EsilCfgGen *gen = (EsilCfgGen *)user; char *atom = (char *)data; - RzAnalEsilBB *bb = (RzAnalEsilBB *)gen->cur->data; - RzAnalEsilOp *op = esil_get_op (gen->esil, atom); + RzAnalysisEsilBB *bb = (RzAnalysisEsilBB *)gen->cur->data; + RzAnalysisEsilOp *op = esil_get_op (gen->esil, atom); bb->last.idx = (ut16)id; if (op && op->type == RZ_ANAL_ESIL_OP_TYPE_CONTROL_FLOW) { _handle_control_flow_ifelsefi (gen, atom, id); @@ -268,11 +268,11 @@ bool _round_0_cb (void *user, void *data, ut32 id) { } RzGraphNode *_common_break_goto (EsilCfgGen *gen, ut32 id) { - RzAnalEsilEOffset off = { gen->off, (ut16)id }; + RzAnalysisEsilEOffset off = { gen->off, (ut16)id }; RzGraphNode *gnode = rz_rbtree_cont_find (gen->blocks, &off, _graphnode_esilbb_find_cmp, NULL); - RzAnalEsilBB *bb = (RzAnalEsilBB *)gnode->data; + RzAnalysisEsilBB *bb = (RzAnalysisEsilBB *)gnode->data; if (id != bb->last.idx) { - RzAnalEsilBB *next_bb = RZ_NEW0 (RzAnalEsilBB); + RzAnalysisEsilBB *next_bb = RZ_NEW0 (RzAnalysisEsilBB); // split blocks next_bb->first.off = gen->off; next_bb->first.idx = id + 1; @@ -299,7 +299,7 @@ void _handle_break (EsilCfgGen *gen, ut32 id) { void _handle_goto (EsilCfgGen *gen, ut32 idx) { RzGraphNode *gnode = _common_break_goto (gen, idx); - RzAnalEsilBB *bb = (RzAnalEsilBB *)gnode->data; + RzAnalysisEsilBB *bb = (RzAnalysisEsilBB *)gnode->data; // so what we're doing here is emulating this block with a certain degree of abstraction: // no reg-access // no io-access @@ -315,7 +315,7 @@ void _handle_goto (EsilCfgGen *gen, ut32 idx) { // bb->last.idx is the GOTO operation itself, we do not reach this in the loop for (id = bb->first.idx; id < bb->last.idx; id++) { char *atom = (char *)rz_id_storage_get (gen->atoms, (ut32)id); - RzAnalEsilOp *op = esil_get_op (gen->esil, atom); + RzAnalysisEsilOp *op = esil_get_op (gen->esil, atom); if (op) { ut32 j; for (j = 0; j < op->pop; j++) { @@ -328,7 +328,7 @@ void _handle_goto (EsilCfgGen *gen, ut32 idx) { } } else { EsilVal *val = RZ_NEW (EsilVal); - if (rz_reg_get (gen->esil->anal->reg, atom, -1)) { + if (rz_reg_get (gen->esil->analysis->reg, atom, -1)) { val->type = ESIL_VAL_REG; } else { val->type = ESIL_VAL_CONST; @@ -345,16 +345,16 @@ void _handle_goto (EsilCfgGen *gen, ut32 idx) { } // get the node to the corresponding GOTO destination - RzAnalEsilEOffset dst_off = { gen->off, (ut16)v->val }; + RzAnalysisEsilEOffset dst_off = { gen->off, (ut16)v->val }; RzGraphNode *dst_node = rz_rbtree_cont_find (gen->blocks, &dst_off, _graphnode_esilbb_find_cmp, NULL); if (!dst_node) { // out-of-bounds // check if this works dst_node = gen->cfg->end; } else { - RzAnalEsilBB *dst_bb = (RzAnalEsilBB *)dst_node->data; + RzAnalysisEsilBB *dst_bb = (RzAnalysisEsilBB *)dst_node->data; if (dst_bb->first.idx != v->val) { - RzAnalEsilBB *split_bb = RZ_NEW0 (RzAnalEsilBB); + RzAnalysisEsilBB *split_bb = RZ_NEW0 (RzAnalysisEsilBB); split_bb[0] = dst_bb[0]; dst_bb->last.idx = v->val - 1; split_bb->first.idx = v->val; @@ -374,7 +374,7 @@ beach: bool _round_1_cb (void *user, void *data, ut32 id) { EsilCfgGen *gen = (EsilCfgGen *)user; char *atom = (char *)data; - RzAnalEsilOp *op = esil_get_op (gen->esil, atom); + RzAnalysisEsilOp *op = esil_get_op (gen->esil, atom); if (op && op->type == RZ_ANAL_ESIL_OP_TYPE_CONTROL_FLOW) { if (!strcmp ("BREAK", atom)) { _handle_break (gen, id); @@ -387,7 +387,7 @@ bool _round_1_cb (void *user, void *data, ut32 id) { } void _round_2_cb (RzGraphNode *n, RzGraphVisitor *vi) { - RzAnalEsilBB *bb = (RzAnalEsilBB *)n->data; + RzAnalysisEsilBB *bb = (RzAnalysisEsilBB *)n->data; EsilCfgGen *gen = (EsilCfgGen *)vi->data; RzStrBuf *buf = rz_strbuf_new ((char *)rz_id_storage_get (gen->atoms, bb->first.idx)); rz_strbuf_append (buf, ","); @@ -404,7 +404,7 @@ void _round_2_cb (RzGraphNode *n, RzGraphVisitor *vi) { // this function takes a cfg, an offset and an esil expression // concatinates to already existing graph. // Also expects RzIDStorage atoms and RContRBTree to be allocate in prior of the call -static RzAnalEsilCFG *esil_cfg_gen(RzAnalEsilCFG *cfg, RzAnal *anal, RzIDStorage *atoms, RContRBTree *blocks, RzStack *stack, ut64 off, char *expr) { +static RzAnalysisEsilCFG *esil_cfg_gen(RzAnalysisEsilCFG *cfg, RzAnalysis *analysis, RzIDStorage *atoms, RContRBTree *blocks, RzStack *stack, ut64 off, char *expr) { // consider expr as RzStrBuf, so that we can sanitze broken esil // (ex: "b,a,+=,$z,zf,:=,7,$c,cf,:=,zf,?{,1,b,+=,cf,?{,3,a,-=" => // "b,a,+=,$z,zf,:=,7,$c,cf,:=,zf,?{,1,b,+=,cf,?{,3,a,-=,},}") @@ -414,7 +414,7 @@ static RzAnalEsilCFG *esil_cfg_gen(RzAnalEsilCFG *cfg, RzAnal *anal, RzIDStorage if (!_expr) { return cfg; //NULL? } - RzAnalEsilBB *end_bb = RZ_NEW0 (RzAnalEsilBB); + RzAnalysisEsilBB *end_bb = RZ_NEW0 (RzAnalysisEsilBB); if (!end_bb) { free (_expr); return cfg; @@ -438,7 +438,7 @@ static RzAnalEsilCFG *esil_cfg_gen(RzAnalEsilCFG *cfg, RzAnal *anal, RzIDStorage // // without information about the outside cfg, we CANNOT merge cpu-instructions - RzAnalEsilBB *bb = (RzAnalEsilBB *)cfg->end->data; + RzAnalysisEsilBB *bb = (RzAnalysisEsilBB *)cfg->end->data; end_bb->expr = bb->expr; // FIXME: use end_bb here @@ -447,7 +447,7 @@ static RzAnalEsilCFG *esil_cfg_gen(RzAnalEsilCFG *cfg, RzAnal *anal, RzIDStorage bb->first.idx = bb->last.idx = 0; start = cfg->end; - EsilCfgGen gen = { anal->esil, { stack }, blocks, cfg, start, atoms, off }; + EsilCfgGen gen = { analysis->esil, { stack }, blocks, cfg, start, atoms, off }; cfg->end = end; // create an edge from cur to end? // Well yes, but no. Would be great to do this, @@ -494,10 +494,10 @@ static RzAnalEsilCFG *esil_cfg_gen(RzAnalEsilCFG *cfg, RzAnal *anal, RzIDStorage return cfg; } -RZ_API RzAnalEsilCFG *rz_anal_esil_cfg_new(void) { - RzAnalEsilCFG *cf = RZ_NEW0 (RzAnalEsilCFG); +RZ_API RzAnalysisEsilCFG *rz_analysis_esil_cfg_new(void) { + RzAnalysisEsilCFG *cf = RZ_NEW0 (RzAnalysisEsilCFG); if (cf) { - RzAnalEsilBB *p = RZ_NEW0 (RzAnalEsilBB); + RzAnalysisEsilBB *p = RZ_NEW0 (RzAnalysisEsilBB); if (!p) { free (cf); return NULL; @@ -534,8 +534,8 @@ RZ_API RzAnalEsilCFG *rz_anal_esil_cfg_new(void) { // this little function takes a cfg, an offset and an esil expression // concatinates to already existing graph -RZ_API RzAnalEsilCFG *rz_anal_esil_cfg_expr(RzAnalEsilCFG *cfg, RzAnal *anal, const ut64 off, char *expr) { - if (!anal || !anal->esil) { +RZ_API RzAnalysisEsilCFG *rz_analysis_esil_cfg_expr(RzAnalysisEsilCFG *cfg, RzAnalysis *analysis, const ut64 off, char *expr) { + if (!analysis || !analysis->esil) { return NULL; } RzStack *stack = rz_stack_new (4); @@ -553,25 +553,25 @@ RZ_API RzAnalEsilCFG *rz_anal_esil_cfg_expr(RzAnalEsilCFG *cfg, RzAnal *anal, co rz_rbtree_cont_free (blocks); return NULL; } - RzAnalEsilCFG *cf = cfg ? cfg : rz_anal_esil_cfg_new (); + RzAnalysisEsilCFG *cf = cfg ? cfg : rz_analysis_esil_cfg_new (); if (!cf) { rz_stack_free (stack); rz_id_storage_free (atoms); rz_rbtree_cont_free (blocks); return NULL; } - RzAnalEsilCFG *ret = esil_cfg_gen (cf, anal, atoms, blocks, stack, off, expr); + RzAnalysisEsilCFG *ret = esil_cfg_gen (cf, analysis, atoms, blocks, stack, off, expr); rz_stack_free (stack); rz_id_storage_free (atoms); rz_rbtree_cont_free (blocks); return ret; } -RZ_API RzAnalEsilCFG *rz_anal_esil_cfg_op(RzAnalEsilCFG *cfg, RzAnal *anal, RzAnalOp *op) { - if (!op || !anal || !anal->reg || !anal->esil) { +RZ_API RzAnalysisEsilCFG *rz_analysis_esil_cfg_op(RzAnalysisEsilCFG *cfg, RzAnalysis *analysis, RzAnalysisOp *op) { + if (!op || !analysis || !analysis->reg || !analysis->esil) { return NULL; } - RzAnalEsilBB *glue_bb = RZ_NEW0 (RzAnalEsilBB); + RzAnalysisEsilBB *glue_bb = RZ_NEW0 (RzAnalysisEsilBB); if (!glue_bb) { eprintf ("Couldn't allocate glue_bb\n"); return NULL; @@ -582,7 +582,7 @@ RZ_API RzAnalEsilCFG *rz_anal_esil_cfg_op(RzAnalEsilCFG *cfg, RzAnal *anal, RzAn eprintf ("Couldn't allocate glue\n"); return NULL; } - const char *pc = rz_reg_get_name (anal->reg, RZ_REG_NAME_PC); + const char *pc = rz_reg_get_name (analysis->reg, RZ_REG_NAME_PC); rz_strbuf_setf (glue, "0x%" PFMT64x ",%s,:=,", op->addr + op->size, pc); glue_bb->expr = strdup (rz_strbuf_get (glue)); rz_strbuf_free (glue); @@ -595,10 +595,10 @@ RZ_API RzAnalEsilCFG *rz_anal_esil_cfg_op(RzAnalEsilCFG *cfg, RzAnal *anal, RzAn glue_bb->first.off = glue_bb->last.off = op->addr; glue_bb->first.idx = glue_bb->last.idx = 0; - RzAnalEsilCFG *ret; + RzAnalysisEsilCFG *ret; if (!cfg) { - ret = rz_anal_esil_cfg_expr (cfg, anal, op->addr, rz_strbuf_get (&op->esil)); + ret = rz_analysis_esil_cfg_expr (cfg, analysis, op->addr, rz_strbuf_get (&op->esil)); RzGraphNode *glue_node = rz_graph_add_node (ret->g, glue_bb); glue_node->free = _free_bb_cb; rz_graph_add_edge (ret->g, glue_node, ret->start); @@ -611,12 +611,12 @@ RZ_API RzAnalEsilCFG *rz_anal_esil_cfg_op(RzAnalEsilCFG *cfg, RzAnal *anal, RzAn cfg->end->data = glue_node->data; glue_node->data = foo; cfg->end = glue_node; - ret = rz_anal_esil_cfg_expr (cfg, anal, op->addr, rz_strbuf_get (&op->esil)); + ret = rz_analysis_esil_cfg_expr (cfg, analysis, op->addr, rz_strbuf_get (&op->esil)); } return ret; } -static void merge_2_blocks(RzAnalEsilCFG *cfg, RzGraphNode *node, RzGraphNode *block) { +static void merge_2_blocks(RzAnalysisEsilCFG *cfg, RzGraphNode *node, RzGraphNode *block) { // merge node and block, block dies in this // block----->node ===> node if (node == cfg->end) { @@ -628,8 +628,8 @@ static void merge_2_blocks(RzAnalEsilCFG *cfg, RzGraphNode *node, RzGraphNode *b rz_list_foreach (block->in_nodes, iter, n) { rz_graph_add_edge (cfg->g, n, node); } - RzAnalEsilBB *block_bb, *node_bb = (RzAnalEsilBB *)node->data; - block_bb = (RzAnalEsilBB *)block->data; + RzAnalysisEsilBB *block_bb, *node_bb = (RzAnalysisEsilBB *)node->data; + block_bb = (RzAnalysisEsilBB *)block->data; if ((block_bb->enter == RZ_ANAL_ESIL_BLOCK_ENTER_TRUE) || (block_bb->enter == RZ_ANAL_ESIL_BLOCK_ENTER_FALSE)) { node_bb->enter = block_bb->enter; } else { @@ -647,7 +647,7 @@ static void merge_2_blocks(RzAnalEsilCFG *cfg, RzGraphNode *node, RzGraphNode *b } // this method is really slow, because of foolish graph api -RZ_API void rz_anal_esil_cfg_merge_blocks(RzAnalEsilCFG *cfg) { +RZ_API void rz_analysis_esil_cfg_merge_blocks(RzAnalysisEsilCFG *cfg) { if (!cfg || !cfg->g || !cfg->g->nodes) { return; } @@ -655,7 +655,7 @@ RZ_API void rz_anal_esil_cfg_merge_blocks(RzAnalEsilCFG *cfg) { RzGraphNode *node; rz_list_foreach_safe (cfg->g->nodes, iter, ator, node) { if (rz_list_length (node->in_nodes) == 1) { - RzAnalEsilBB *bb = (RzAnalEsilBB *)node->data; + RzAnalysisEsilBB *bb = (RzAnalysisEsilBB *)node->data; RzGraphNode *top = (RzGraphNode *)rz_list_get_top (node->out_nodes); // segfaults here ? if (!(top && bb->enter == RZ_ANAL_ESIL_BLOCK_ENTER_GLUE && (rz_list_length (top->in_nodes) > 1))) { @@ -668,7 +668,7 @@ RZ_API void rz_anal_esil_cfg_merge_blocks(RzAnalEsilCFG *cfg) { } } -RZ_API void rz_anal_esil_cfg_free(RzAnalEsilCFG *cfg) { +RZ_API void rz_analysis_esil_cfg_free(RzAnalysisEsilCFG *cfg) { if (cfg && cfg->g) { rz_graph_free (cfg->g); } diff --git a/librz/anal/esil_dfg.c b/librz/analysis/esil_dfg.c similarity index 68% rename from librz/anal/esil_dfg.c rename to librz/analysis/esil_dfg.c index 9ac41260da..367df7bba6 100644 --- a/librz/anal/esil_dfg.c +++ b/librz/analysis/esil_dfg.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: LGPL-3.0-only //#include -#include +#include //#include //#include @@ -11,22 +11,22 @@ typedef struct esil_dfg_reg_var_t { RzGraphNode *node; } EsilDFGRegVar; -typedef struct rz_anal_esil_dfg_filter_t { - RzAnalEsilDFG *dfg; +typedef struct rz_analysis_esil_dfg_filter_t { + RzAnalysisEsilDFG *dfg; RContRBTree *tree; Sdb *results; -} RzAnalEsilDFGFilter; +} RzAnalysisEsilDFGFilter; // TODO: simple const propagation - use node->type of srcs to propagate consts of pushed vars -RZ_API RzAnalEsilDFGNode *rz_anal_esil_dfg_node_new(RzAnalEsilDFG *edf, const char *c) { - RzAnalEsilDFGNode *ret = RZ_NEW0 (RzAnalEsilDFGNode); +RZ_API RzAnalysisEsilDFGNode *rz_analysis_esil_dfg_node_new(RzAnalysisEsilDFG *edf, const char *c) { + RzAnalysisEsilDFGNode *ret = RZ_NEW0 (RzAnalysisEsilDFGNode); ret->content = rz_strbuf_new (c); ret->idx = edf->idx++; return ret; } -static void _dfg_node_free (RzAnalEsilDFGNode *free_me) { +static void _dfg_node_free (RzAnalysisEsilDFGNode *free_me) { if (free_me) { rz_strbuf_free (free_me->content); free (free_me); @@ -36,7 +36,7 @@ static void _dfg_node_free (RzAnalEsilDFGNode *free_me) { static int _rv_del_alloc_cmp (void *incoming, void *in, void *user) { EsilDFGRegVar *rv_incoming = (EsilDFGRegVar *)incoming; EsilDFGRegVar *rv_in = (EsilDFGRegVar *)in; - RzAnalEsilDFG *dfg = (RzAnalEsilDFG *)user; + RzAnalysisEsilDFG *dfg = (RzAnalysisEsilDFG *)user; if (dfg->malloc_failed) { return -1; @@ -179,7 +179,7 @@ static int _rv_ins_cmp (void *incoming, void *in, void *user) { return rv_incoming->from - rv_in->from; } -static bool _edf_reg_set (RzAnalEsilDFG *dfg, const char *reg, RzGraphNode *node) { +static bool _edf_reg_set (RzAnalysisEsilDFG *dfg, const char *reg, RzGraphNode *node) { rz_return_val_if_fail (dfg && !dfg->malloc_failed && reg, false); const ut32 _reg_strlen = 4 + strlen (reg); char *_reg = RZ_NEWS0 (char, _reg_strlen + 1); @@ -233,7 +233,7 @@ static int _rv_find_cmp (void *incoming, void *in, void *user) { EsilDFGRegVar *rv_incoming = (EsilDFGRegVar *)incoming; EsilDFGRegVar *rv_in = (EsilDFGRegVar *)in; - RzAnalEsilDFG *dfg = (RzAnalEsilDFG *)user; + RzAnalysisEsilDFG *dfg = (RzAnalysisEsilDFG *)user; if (dfg->malloc_failed) { return -1; } @@ -315,7 +315,7 @@ static int _rv_find_cmp (void *incoming, void *in, void *user) { return 0; } -static RzGraphNode *_edf_origin_reg_get(RzAnalEsilDFG *dfg, const char *reg) { +static RzGraphNode *_edf_origin_reg_get(RzAnalysisEsilDFG *dfg, const char *reg) { rz_return_val_if_fail (dfg && reg, NULL); const ut32 _reg_strlen = 4 + strlen (reg); char *_reg = RZ_NEWS0 (char, _reg_strlen + 1); @@ -341,8 +341,8 @@ static RzGraphNode *_edf_origin_reg_get(RzAnalEsilDFG *dfg, const char *reg) { free (origin_reg); return origin_reg_node; } - RzGraphNode *reg_node = rz_graph_add_node (dfg->flow, rz_anal_esil_dfg_node_new (dfg, reg)); - RzAnalEsilDFGNode *_origin_reg_node = rz_anal_esil_dfg_node_new (dfg, reg); + RzGraphNode *reg_node = rz_graph_add_node (dfg->flow, rz_analysis_esil_dfg_node_new (dfg, reg)); + RzAnalysisEsilDFGNode *_origin_reg_node = rz_analysis_esil_dfg_node_new (dfg, reg); rz_strbuf_appendf (_origin_reg_node->content, ":var_%d", dfg->idx++); _origin_reg_node->type = RZ_ANAL_ESIL_DFG_BLOCK_VAR; origin_reg_node = rz_graph_add_node (dfg->flow, _origin_reg_node); @@ -353,7 +353,7 @@ static RzGraphNode *_edf_origin_reg_get(RzAnalEsilDFG *dfg, const char *reg) { } -static RzGraphNode *_edf_reg_get(RzAnalEsilDFG *dfg, const char *reg) { +static RzGraphNode *_edf_reg_get(RzAnalysisEsilDFG *dfg, const char *reg) { rz_return_val_if_fail (dfg && reg, NULL); const ut32 _reg_strlen = 4 + strlen (reg); char *_reg = RZ_NEWS0 (char, _reg_strlen + 1); @@ -435,7 +435,7 @@ static RzGraphNode *_edf_reg_get(RzAnalEsilDFG *dfg, const char *reg) { break; default: { - RzAnalEsilDFGNode *_reg_node = rz_anal_esil_dfg_node_new (dfg, "merge to "); + RzAnalysisEsilDFGNode *_reg_node = rz_analysis_esil_dfg_node_new (dfg, "merge to "); if (!_reg_node) { while (!rz_queue_is_empty (dfg->todo)) { free (rz_queue_dequeue (dfg->todo)); @@ -466,7 +466,7 @@ beach: } -static bool _edf_var_set (RzAnalEsilDFG *dfg, const char *var, RzGraphNode *node) { +static bool _edf_var_set (RzAnalysisEsilDFG *dfg, const char *var, RzGraphNode *node) { rz_return_val_if_fail (dfg && var, false); const ut32 _var_strlen = 4 + strlen (var); char *_var = RZ_NEWS0 (char, _var_strlen + 1); @@ -481,7 +481,7 @@ static bool _edf_var_set (RzAnalEsilDFG *dfg, const char *var, RzGraphNode *node } -static RzGraphNode *_edf_var_get (RzAnalEsilDFG *dfg, const char *var) { +static RzGraphNode *_edf_var_get (RzAnalysisEsilDFG *dfg, const char *var) { rz_return_val_if_fail (dfg && var, NULL); const ut32 _var_strlen = 4 + strlen (var); char *_var = RZ_NEWS0 (char, _var_strlen + 1); @@ -495,16 +495,16 @@ static RzGraphNode *_edf_var_get (RzAnalEsilDFG *dfg, const char *var) { return ret; } -static bool edf_consume_2_set_reg(RzAnalEsil *esil); -static bool edf_consume_2_push_1(RzAnalEsil *esil); -static bool edf_consume_1_push_1(RzAnalEsil *esil); +static bool edf_consume_2_set_reg(RzAnalysisEsil *esil); +static bool edf_consume_2_push_1(RzAnalysisEsil *esil); +static bool edf_consume_1_push_1(RzAnalysisEsil *esil); typedef void (*AddConstraintStringUseNewCB) (RzStrBuf *result, const char *new_node_str); -static bool edf_use_new_push_1(RzAnalEsil *esil, const char *op_string, AddConstraintStringUseNewCB cb); +static bool edf_use_new_push_1(RzAnalysisEsil *esil, const char *op_string, AddConstraintStringUseNewCB cb); typedef void (*AddConstraintStringConsume1UseOldNewCB) (RzStrBuf *result, const char *consume_str, const char *old_node_str, const char *new_node_str); -static bool edf_consume_1_use_old_new_push_1(RzAnalEsil *esil, const char *op_string, AddConstraintStringConsume1UseOldNewCB cb); +static bool edf_consume_1_use_old_new_push_1(RzAnalysisEsil *esil, const char *op_string, AddConstraintStringConsume1UseOldNewCB cb); -static bool edf_eq_weak(RzAnalEsil *esil) { - RzAnalEsilDFG *edf = (RzAnalEsilDFG *)esil->user; +static bool edf_eq_weak(RzAnalysisEsil *esil) { + RzAnalysisEsilDFG *edf = (RzAnalysisEsilDFG *)esil->user; RzGraphNode *o_old = edf->old; //node for esil->old RzGraphNode *o_new = edf->cur; //node for esil->cur if (!edf_consume_2_set_reg (esil)) { @@ -520,7 +520,7 @@ static void edf_zf_constraint(RzStrBuf *result, const char *new_node_str) { rz_strbuf_appendf (result, ":(%s==0)", new_node_str); } -static bool edf_zf(RzAnalEsil *esil) { +static bool edf_zf(RzAnalysisEsil *esil) { return edf_use_new_push_1 (esil, "$z", edf_zf_constraint); } @@ -528,7 +528,7 @@ static void edf_pf_constraint(RzStrBuf *result, const char *new_node_str) { rz_strbuf_appendf (result, ":parity_of(%s)", new_node_str); } -static bool edf_pf(RzAnalEsil *esil) { +static bool edf_pf(RzAnalysisEsil *esil) { return edf_use_new_push_1 (esil, "$p", edf_pf_constraint); } @@ -537,7 +537,7 @@ static void edf_cf_constraint(RzStrBuf *result, const char *consume, const char n, consume, o, consume); } -static bool edf_cf(RzAnalEsil *esil) { +static bool edf_cf(RzAnalysisEsil *esil) { return edf_consume_1_use_old_new_push_1 (esil, "$c", edf_cf_constraint); } @@ -546,15 +546,15 @@ static void edf_bf_constraint(RzStrBuf *result, const char *consume, const char o, consume, n, consume); } -static bool edf_bf(RzAnalEsil *esil) { +static bool edf_bf(RzAnalysisEsil *esil) { return edf_consume_1_use_old_new_push_1 (esil, "$b", edf_bf_constraint); } -static bool _edf_consume_2_set_reg(RzAnalEsil *esil, const bool use_origin) { +static bool _edf_consume_2_set_reg(RzAnalysisEsil *esil, const bool use_origin) { const char *op_string = esil->current_opstr; - RzAnalEsilDFG *edf = (RzAnalEsilDFG *)esil->user; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); + RzAnalysisEsilDFG *edf = (RzAnalysisEsilDFG *)esil->user; + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); if (!src || !dst) { free (dst); @@ -562,20 +562,20 @@ static bool _edf_consume_2_set_reg(RzAnalEsil *esil, const bool use_origin) { return false; } - int dst_type = rz_anal_esil_get_parm_type (esil, dst); + int dst_type = rz_analysis_esil_get_parm_type (esil, dst); if (dst_type == RZ_ANAL_ESIL_PARM_INVALID) { free (dst); free (src); return false; } - const int src_type = rz_anal_esil_get_parm_type (esil, src); + const int src_type = rz_analysis_esil_get_parm_type (esil, src); RzGraphNode *src_node = NULL; if (src_type == RZ_ANAL_ESIL_PARM_REG) { src_node = _edf_reg_get (edf, src); } else if (src_type == RZ_ANAL_ESIL_PARM_NUM) { - RzGraphNode *n_value = rz_graph_add_node (edf->flow, rz_anal_esil_dfg_node_new (edf, src)); - RzAnalEsilDFGNode *ec_node = rz_anal_esil_dfg_node_new (edf, src); + RzGraphNode *n_value = rz_graph_add_node (edf->flow, rz_analysis_esil_dfg_node_new (edf, src)); + RzAnalysisEsilDFGNode *ec_node = rz_analysis_esil_dfg_node_new (edf, src); ec_node->type = RZ_ANAL_ESIL_DFG_BLOCK_CONST; rz_strbuf_appendf (ec_node->content, ":const_%d", edf->idx++); src_node = rz_graph_add_node (edf->flow, ec_node); @@ -593,7 +593,7 @@ static bool _edf_consume_2_set_reg(RzAnalEsil *esil, const bool use_origin) { return false; } - RzAnalEsilDFGNode *eop_node = rz_anal_esil_dfg_node_new (edf, src); + RzAnalysisEsilDFGNode *eop_node = rz_analysis_esil_dfg_node_new (edf, src); rz_strbuf_appendf (eop_node->content, ",%s,%s", dst, op_string); eop_node->type = RZ_ANAL_ESIL_DFG_BLOCK_GENERATIVE; free (src); @@ -602,7 +602,7 @@ static bool _edf_consume_2_set_reg(RzAnalEsil *esil, const bool use_origin) { rz_graph_add_edge (edf->flow, dst_node, op_node); rz_graph_add_edge (edf->flow, src_node, op_node); edf->old = old_dst_node; - RzAnalEsilDFGNode *result = rz_anal_esil_dfg_node_new (edf, dst); + RzAnalysisEsilDFGNode *result = rz_analysis_esil_dfg_node_new (edf, dst); result->type = RZ_ANAL_ESIL_DFG_BLOCK_RESULT | RZ_ANAL_ESIL_DFG_BLOCK_VAR; rz_strbuf_appendf (result->content, ":var_%d", edf->idx++); @@ -614,37 +614,37 @@ static bool _edf_consume_2_set_reg(RzAnalEsil *esil, const bool use_origin) { return true; } -static bool edf_consume_2_use_set_reg(RzAnalEsil *esil) { +static bool edf_consume_2_use_set_reg(RzAnalysisEsil *esil) { return _edf_consume_2_set_reg (esil, false); } -static bool edf_consume_2_set_reg(RzAnalEsil *esil) { +static bool edf_consume_2_set_reg(RzAnalysisEsil *esil) { return _edf_consume_2_set_reg (esil, true); } -static bool edf_consume_2_push_1(RzAnalEsil *esil) { +static bool edf_consume_2_push_1(RzAnalysisEsil *esil) { const char *op_string = esil->current_opstr; - RzAnalEsilDFG *edf = (RzAnalEsilDFG *)esil->user; - char *src[2] = { rz_anal_esil_pop (esil), rz_anal_esil_pop (esil) }; + RzAnalysisEsilDFG *edf = (RzAnalysisEsilDFG *)esil->user; + char *src[2] = { rz_analysis_esil_pop (esil), rz_analysis_esil_pop (esil) }; if (!src[0] || !src[1]) { free (src[0]); free (src[1]); return false; } - RzAnalEsilDFGNode *eop_node = rz_anal_esil_dfg_node_new (edf, src[1]); + RzAnalysisEsilDFGNode *eop_node = rz_analysis_esil_dfg_node_new (edf, src[1]); rz_strbuf_appendf (eop_node->content, ",%s,%s", src[0], op_string); eop_node->type = RZ_ANAL_ESIL_DFG_BLOCK_RESULT | RZ_ANAL_ESIL_DFG_BLOCK_GENERATIVE; RzGraphNode *op_node = rz_graph_add_node (edf->flow, eop_node); RzGraphNode *src_node[2]; ut32 i; for (i = 0; i < 2; i++) { - const int src_type = rz_anal_esil_get_parm_type (esil, src[i]); + const int src_type = rz_analysis_esil_get_parm_type (esil, src[i]); if (src_type == RZ_ANAL_ESIL_PARM_REG) { src_node[i] = _edf_reg_get (edf, src[i]); } else if (src_type == RZ_ANAL_ESIL_PARM_NUM) { - RzGraphNode *n_value = rz_graph_add_node (edf->flow, rz_anal_esil_dfg_node_new (edf, src[i])); - RzAnalEsilDFGNode *ec_node = rz_anal_esil_dfg_node_new (edf, src[i]); + RzGraphNode *n_value = rz_graph_add_node (edf->flow, rz_analysis_esil_dfg_node_new (edf, src[i])); + RzAnalysisEsilDFGNode *ec_node = rz_analysis_esil_dfg_node_new (edf, src[i]); ec_node->type = RZ_ANAL_ESIL_DFG_BLOCK_CONST; rz_strbuf_appendf (ec_node->content, ":const_%d", edf->idx++); src_node[i] = rz_graph_add_node (edf->flow, ec_node); @@ -658,34 +658,34 @@ static bool edf_consume_2_push_1(RzAnalEsil *esil) { free (src[0]); free (src[1]); - RzAnalEsilDFGNode *result = rz_anal_esil_dfg_node_new (edf, "result_"); + RzAnalysisEsilDFGNode *result = rz_analysis_esil_dfg_node_new (edf, "result_"); result->type = RZ_ANAL_ESIL_DFG_BLOCK_RESULT; rz_strbuf_appendf (result->content, "%d", edf->idx++); RzGraphNode *result_node = rz_graph_add_node (edf->flow, result); rz_graph_add_edge (edf->flow, op_node, result_node); _edf_var_set (edf, rz_strbuf_get (result->content), result_node); - rz_anal_esil_push (esil, rz_strbuf_get (result->content)); + rz_analysis_esil_push (esil, rz_strbuf_get (result->content)); return true; } -static bool edf_consume_1_push_1(RzAnalEsil *esil) { +static bool edf_consume_1_push_1(RzAnalysisEsil *esil) { const char *op_string = esil->current_opstr; - RzAnalEsilDFG *edf = (RzAnalEsilDFG *)esil->user; - char *src = rz_anal_esil_pop (esil); + RzAnalysisEsilDFG *edf = (RzAnalysisEsilDFG *)esil->user; + char *src = rz_analysis_esil_pop (esil); if (!src) { return false; } - RzAnalEsilDFGNode *eop_node = rz_anal_esil_dfg_node_new (edf, src); + RzAnalysisEsilDFGNode *eop_node = rz_analysis_esil_dfg_node_new (edf, src); rz_strbuf_appendf (eop_node->content, ",%s", op_string); eop_node->type = RZ_ANAL_ESIL_DFG_BLOCK_RESULT | RZ_ANAL_ESIL_DFG_BLOCK_GENERATIVE; RzGraphNode *op_node = rz_graph_add_node (edf->flow, eop_node); - const int src_type = rz_anal_esil_get_parm_type (esil, src); + const int src_type = rz_analysis_esil_get_parm_type (esil, src); RzGraphNode *src_node = NULL; if (src_type == RZ_ANAL_ESIL_PARM_REG) { src_node = _edf_reg_get (edf, src); } else if (src_type == RZ_ANAL_ESIL_PARM_NUM) { - RzGraphNode *n_value = rz_graph_add_node (edf->flow, rz_anal_esil_dfg_node_new (edf, src)); - RzAnalEsilDFGNode *ec_node = rz_anal_esil_dfg_node_new (edf, src); + RzGraphNode *n_value = rz_graph_add_node (edf->flow, rz_analysis_esil_dfg_node_new (edf, src)); + RzAnalysisEsilDFGNode *ec_node = rz_analysis_esil_dfg_node_new (edf, src); ec_node->type = RZ_ANAL_ESIL_DFG_BLOCK_CONST; rz_strbuf_appendf (ec_node->content, ":const_%d", edf->idx++); src_node = rz_graph_add_node (edf->flow, ec_node); @@ -698,21 +698,21 @@ static bool edf_consume_1_push_1(RzAnalEsil *esil) { rz_graph_add_edge (edf->flow, src_node, op_node); - RzAnalEsilDFGNode *result = rz_anal_esil_dfg_node_new (edf, "result_"); + RzAnalysisEsilDFGNode *result = rz_analysis_esil_dfg_node_new (edf, "result_"); result->type = RZ_ANAL_ESIL_DFG_BLOCK_RESULT; //TODO: propgate type from src here rz_strbuf_appendf (result->content, "%d", edf->idx++); RzGraphNode *result_node = rz_graph_add_node (edf->flow, result); rz_graph_add_edge (edf->flow, op_node, result_node); _edf_var_set (edf, rz_strbuf_get (result->content), result_node); - rz_anal_esil_push (esil, rz_strbuf_get (result->content)); + rz_analysis_esil_push (esil, rz_strbuf_get (result->content)); return true; } -static bool edf_consume_2_set_mem(RzAnalEsil *esil) { +static bool edf_consume_2_set_mem(RzAnalysisEsil *esil) { const char *op_string = esil->current_opstr; - RzAnalEsilDFG *edf = (RzAnalEsilDFG *)esil->user; - char *dst = rz_anal_esil_pop (esil); - char *src = rz_anal_esil_pop (esil); + RzAnalysisEsilDFG *edf = (RzAnalysisEsilDFG *)esil->user; + char *dst = rz_analysis_esil_pop (esil); + char *src = rz_analysis_esil_pop (esil); if (!src || !dst) { free (dst); @@ -720,15 +720,15 @@ static bool edf_consume_2_set_mem(RzAnalEsil *esil) { return 0; } - int dst_type = rz_anal_esil_get_parm_type (esil, dst); + int dst_type = rz_analysis_esil_get_parm_type (esil, dst); - const int src_type = rz_anal_esil_get_parm_type (esil, src); + const int src_type = rz_analysis_esil_get_parm_type (esil, src); RzGraphNode *src_node = NULL; if (src_type == RZ_ANAL_ESIL_PARM_REG) { src_node = _edf_reg_get (edf, src); } else if (src_type == RZ_ANAL_ESIL_PARM_NUM) { - RzGraphNode *n_value = rz_graph_add_node (edf->flow, rz_anal_esil_dfg_node_new (edf, src)); - RzAnalEsilDFGNode *ec_node = rz_anal_esil_dfg_node_new (edf, src); + RzGraphNode *n_value = rz_graph_add_node (edf->flow, rz_analysis_esil_dfg_node_new (edf, src)); + RzAnalysisEsilDFGNode *ec_node = rz_analysis_esil_dfg_node_new (edf, src); ec_node->type = RZ_ANAL_ESIL_DFG_BLOCK_CONST; rz_strbuf_appendf (ec_node->content, ":const_%d", edf->idx++); src_node = rz_graph_add_node (edf->flow, ec_node); @@ -744,8 +744,8 @@ static bool edf_consume_2_set_mem(RzAnalEsil *esil) { //probably dead code if (!dst_node) { if (dst_type == RZ_ANAL_ESIL_PARM_REG) { - RzGraphNode *n_reg = rz_graph_add_node (edf->flow, rz_anal_esil_dfg_node_new (edf, dst)); - RzAnalEsilDFGNode *ev_node = rz_anal_esil_dfg_node_new (edf, dst); + RzGraphNode *n_reg = rz_graph_add_node (edf->flow, rz_analysis_esil_dfg_node_new (edf, dst)); + RzAnalysisEsilDFGNode *ev_node = rz_analysis_esil_dfg_node_new (edf, dst); ev_node->type = RZ_ANAL_ESIL_DFG_BLOCK_VAR | RZ_ANAL_ESIL_DFG_BLOCK_PTR; rz_strbuf_appendf (ev_node->content, ":var_ptr_%d", edf->idx++); dst_node = rz_graph_add_node (edf->flow, ev_node); @@ -761,7 +761,7 @@ static bool edf_consume_2_set_mem(RzAnalEsil *esil) { return false; } - RzAnalEsilDFGNode *eop_node = rz_anal_esil_dfg_node_new (edf, src); + RzAnalysisEsilDFGNode *eop_node = rz_analysis_esil_dfg_node_new (edf, src); rz_strbuf_appendf (eop_node->content, ",%s,%s", dst, op_string); eop_node->type = RZ_ANAL_ESIL_DFG_BLOCK_GENERATIVE; free (src); @@ -769,7 +769,7 @@ static bool edf_consume_2_set_mem(RzAnalEsil *esil) { RzGraphNode *op_node = rz_graph_add_node (edf->flow, eop_node); rz_graph_add_edge (edf->flow, dst_node, op_node); rz_graph_add_edge (edf->flow, src_node, op_node); - RzAnalEsilDFGNode *result = rz_anal_esil_dfg_node_new (edf, dst); + RzAnalysisEsilDFGNode *result = rz_analysis_esil_dfg_node_new (edf, dst); // result->type = RZ_ANAL_ESIL_DFG_BLOCK_RESULT | RZ_ANAL_ESIL_DFG_BLOCK_GENERATIVE; result->type = RZ_ANAL_ESIL_DFG_BLOCK_VAR; rz_strbuf_appendf (result->content, ":var_mem_%d", edf->idx++); @@ -779,47 +779,47 @@ static bool edf_consume_2_set_mem(RzAnalEsil *esil) { return true; } -static bool edf_use_new_push_1(RzAnalEsil *esil, const char *op_string, AddConstraintStringUseNewCB cb) { - RzAnalEsilDFG *edf = (RzAnalEsilDFG *)esil->user; - RzGraphNode *op_node = rz_graph_add_node (edf->flow, rz_anal_esil_dfg_node_new (edf, op_string)); +static bool edf_use_new_push_1(RzAnalysisEsil *esil, const char *op_string, AddConstraintStringUseNewCB cb) { + RzAnalysisEsilDFG *edf = (RzAnalysisEsilDFG *)esil->user; + RzGraphNode *op_node = rz_graph_add_node (edf->flow, rz_analysis_esil_dfg_node_new (edf, op_string)); RzGraphNode *latest_new = edf->cur; if (!latest_new) { return 0; } - RzAnalEsilDFGNode *result = rz_anal_esil_dfg_node_new (edf, "result_"); + RzAnalysisEsilDFGNode *result = rz_analysis_esil_dfg_node_new (edf, "result_"); result->type = RZ_ANAL_ESIL_DFG_BLOCK_RESULT; // is this generative? rz_strbuf_appendf (result->content, "%d", edf->idx++); if (cb) { - RzAnalEsilDFGNode *e_new_node = (RzAnalEsilDFGNode *)latest_new->data; + RzAnalysisEsilDFGNode *e_new_node = (RzAnalysisEsilDFGNode *)latest_new->data; cb (result->content, rz_strbuf_get (e_new_node->content)); } RzGraphNode *result_node = rz_graph_add_node (edf->flow, result); _edf_var_set (edf, rz_strbuf_get (result->content), result_node); rz_graph_add_edge (edf->flow, latest_new, op_node); rz_graph_add_edge (edf->flow, op_node, result_node); - return rz_anal_esil_push (esil, rz_strbuf_get (result->content)); + return rz_analysis_esil_push (esil, rz_strbuf_get (result->content)); } -static bool edf_consume_1_use_old_new_push_1(RzAnalEsil *esil, const char *op_string, AddConstraintStringConsume1UseOldNewCB cb) { - RzAnalEsilDFG *edf = (RzAnalEsilDFG *)esil->user; - char *src = rz_anal_esil_pop (esil); +static bool edf_consume_1_use_old_new_push_1(RzAnalysisEsil *esil, const char *op_string, AddConstraintStringConsume1UseOldNewCB cb) { + RzAnalysisEsilDFG *edf = (RzAnalysisEsilDFG *)esil->user; + char *src = rz_analysis_esil_pop (esil); if (!src) { return false; } - RzAnalEsilDFGNode *eop_node = rz_anal_esil_dfg_node_new (edf, src); + RzAnalysisEsilDFGNode *eop_node = rz_analysis_esil_dfg_node_new (edf, src); #if 0 eop_node->type = RZ_ANAL_ESIL_DFG_BLOCK_GENERATIVE; #endif rz_strbuf_appendf (eop_node->content, ",%s", op_string); RzGraphNode *op_node = rz_graph_add_node (edf->flow, eop_node); - const int src_type = rz_anal_esil_get_parm_type (esil, src); + const int src_type = rz_analysis_esil_get_parm_type (esil, src); RzGraphNode *src_node = NULL; if (src_type == RZ_ANAL_ESIL_PARM_REG) { src_node = _edf_reg_get (edf, src); } else if (src_type == RZ_ANAL_ESIL_PARM_NUM) { - RzGraphNode *n_value = rz_graph_add_node (edf->flow, rz_anal_esil_dfg_node_new (edf, src)); - RzAnalEsilDFGNode *ec_node = rz_anal_esil_dfg_node_new (edf, src); + RzGraphNode *n_value = rz_graph_add_node (edf->flow, rz_analysis_esil_dfg_node_new (edf, src)); + RzAnalysisEsilDFGNode *ec_node = rz_analysis_esil_dfg_node_new (edf, src); ec_node->type = RZ_ANAL_ESIL_DFG_BLOCK_CONST; rz_strbuf_appendf (ec_node->content, ":const_%d", edf->idx++); src_node = rz_graph_add_node (edf->flow, ec_node); @@ -833,13 +833,13 @@ static bool edf_consume_1_use_old_new_push_1(RzAnalEsil *esil, const char *op_st RzGraphNode *latest_new = edf->cur; RzGraphNode *latest_old = edf->old; - RzAnalEsilDFGNode *result = rz_anal_esil_dfg_node_new (edf, "result_"); + RzAnalysisEsilDFGNode *result = rz_analysis_esil_dfg_node_new (edf, "result_"); result->type = RZ_ANAL_ESIL_DFG_BLOCK_RESULT; // propagate type here rz_strbuf_appendf (result->content, "%d", edf->idx++); if (cb) { - RzAnalEsilDFGNode *e_src_node = (RzAnalEsilDFGNode *)src_node->data; - RzAnalEsilDFGNode *e_new_node = (RzAnalEsilDFGNode *)latest_new->data; - RzAnalEsilDFGNode *e_old_node = (RzAnalEsilDFGNode *)latest_old->data; + RzAnalysisEsilDFGNode *e_src_node = (RzAnalysisEsilDFGNode *)src_node->data; + RzAnalysisEsilDFGNode *e_new_node = (RzAnalysisEsilDFGNode *)latest_new->data; + RzAnalysisEsilDFGNode *e_old_node = (RzAnalysisEsilDFGNode *)latest_old->data; cb (result->content, rz_strbuf_get (e_src_node->content), rz_strbuf_get (e_new_node->content), rz_strbuf_get (e_old_node->content)); } @@ -848,14 +848,14 @@ static bool edf_consume_1_use_old_new_push_1(RzAnalEsil *esil, const char *op_st rz_graph_add_edge (edf->flow, latest_new, op_node); rz_graph_add_edge (edf->flow, latest_old, op_node); rz_graph_add_edge (edf->flow, op_node, result_node); - return rz_anal_esil_push (esil, rz_strbuf_get (result->content)); + return rz_analysis_esil_push (esil, rz_strbuf_get (result->content)); } -RZ_API RzAnalEsilDFG *rz_anal_esil_dfg_new(RzReg *regs) { +RZ_API RzAnalysisEsilDFG *rz_analysis_esil_dfg_new(RzReg *regs) { if (!regs) { return NULL; } - RzAnalEsilDFG *dfg = RZ_NEW0 (RzAnalEsilDFG); + RzAnalysisEsilDFG *dfg = RZ_NEW0 (RzAnalysisEsilDFG); if (!dfg) { return NULL; } @@ -906,7 +906,7 @@ RZ_API RzAnalEsilDFG *rz_anal_esil_dfg_new(RzReg *regs) { return dfg; } -RZ_API void rz_anal_esil_dfg_free(RzAnalEsilDFG *dfg) { +RZ_API void rz_analysis_esil_dfg_free(RzAnalysisEsilDFG *dfg) { if (dfg) { if (dfg->flow) { RzGraphNode *n; @@ -923,75 +923,75 @@ RZ_API void rz_anal_esil_dfg_free(RzAnalEsilDFG *dfg) { } } -RZ_API RzAnalEsilDFG *rz_anal_esil_dfg_expr(RzAnal *anal, RzAnalEsilDFG *dfg, const char *expr) { +RZ_API RzAnalysisEsilDFG *rz_analysis_esil_dfg_expr(RzAnalysis *analysis, RzAnalysisEsilDFG *dfg, const char *expr) { if (!expr) { return NULL; } - RzAnalEsil *esil = rz_anal_esil_new (4096, 0, 1); + RzAnalysisEsil *esil = rz_analysis_esil_new (4096, 0, 1); if (!esil) { return NULL; } - esil->anal = anal; + esil->analysis = analysis; - RzAnalEsilDFG *edf = dfg ? dfg : rz_anal_esil_dfg_new (anal->reg); + RzAnalysisEsilDFG *edf = dfg ? dfg : rz_analysis_esil_dfg_new (analysis->reg); if (!edf) { - rz_anal_esil_free (esil); + rz_analysis_esil_free (esil); return NULL; } - rz_anal_esil_set_op (esil, "=", edf_consume_2_set_reg, 0, 2, RZ_ANAL_ESIL_OP_TYPE_REG_WRITE); - rz_anal_esil_set_op (esil, ":=", edf_eq_weak, 0, 2, RZ_ANAL_ESIL_OP_TYPE_REG_WRITE); - rz_anal_esil_set_op (esil, "$z", edf_zf, 1, 0, RZ_ANAL_ESIL_OP_TYPE_UNKNOWN); - rz_anal_esil_set_op (esil, "$p", edf_pf, 1, 0, RZ_ANAL_ESIL_OP_TYPE_UNKNOWN); - rz_anal_esil_set_op (esil, "$c", edf_cf, 1, 1, RZ_ANAL_ESIL_OP_TYPE_UNKNOWN); - rz_anal_esil_set_op (esil, "$b", edf_bf, 1, 1, RZ_ANAL_ESIL_OP_TYPE_UNKNOWN); - rz_anal_esil_set_op (esil, "^=", edf_consume_2_use_set_reg, 0, 2, RZ_ANAL_ESIL_OP_TYPE_MATH | RZ_ANAL_ESIL_OP_TYPE_REG_WRITE); - rz_anal_esil_set_op (esil, "-=", edf_consume_2_use_set_reg, 0, 2, RZ_ANAL_ESIL_OP_TYPE_MATH | RZ_ANAL_ESIL_OP_TYPE_REG_WRITE); - rz_anal_esil_set_op (esil, "+=", edf_consume_2_use_set_reg, 0, 2, RZ_ANAL_ESIL_OP_TYPE_MATH | RZ_ANAL_ESIL_OP_TYPE_REG_WRITE); - rz_anal_esil_set_op (esil, "*=", edf_consume_2_use_set_reg, 0, 2, RZ_ANAL_ESIL_OP_TYPE_MATH | RZ_ANAL_ESIL_OP_TYPE_REG_WRITE); - rz_anal_esil_set_op (esil, "/=", edf_consume_2_use_set_reg, 0, 2, RZ_ANAL_ESIL_OP_TYPE_MATH | RZ_ANAL_ESIL_OP_TYPE_REG_WRITE); - rz_anal_esil_set_op (esil, "&=", edf_consume_2_use_set_reg, 0, 2, RZ_ANAL_ESIL_OP_TYPE_MATH | RZ_ANAL_ESIL_OP_TYPE_REG_WRITE); - rz_anal_esil_set_op (esil, "|=", edf_consume_2_use_set_reg, 0, 2, RZ_ANAL_ESIL_OP_TYPE_MATH | RZ_ANAL_ESIL_OP_TYPE_REG_WRITE); - rz_anal_esil_set_op (esil, "^=", edf_consume_2_use_set_reg, 0, 2, RZ_ANAL_ESIL_OP_TYPE_MATH | RZ_ANAL_ESIL_OP_TYPE_REG_WRITE); - rz_anal_esil_set_op (esil, "+", edf_consume_2_push_1, 1, 2, RZ_ANAL_ESIL_OP_TYPE_MATH); - rz_anal_esil_set_op (esil, "-", edf_consume_2_push_1, 1, 2, RZ_ANAL_ESIL_OP_TYPE_MATH); - rz_anal_esil_set_op (esil, "&", edf_consume_2_push_1, 1, 2, RZ_ANAL_ESIL_OP_TYPE_MATH); - rz_anal_esil_set_op (esil, "|", edf_consume_2_push_1, 1, 2, RZ_ANAL_ESIL_OP_TYPE_MATH); - rz_anal_esil_set_op (esil, "^", edf_consume_2_push_1, 1, 2, RZ_ANAL_ESIL_OP_TYPE_MATH); - rz_anal_esil_set_op (esil, "%", edf_consume_2_push_1, 1, 2, RZ_ANAL_ESIL_OP_TYPE_MATH); - rz_anal_esil_set_op (esil, "*", edf_consume_2_push_1, 1, 2, RZ_ANAL_ESIL_OP_TYPE_MATH); - rz_anal_esil_set_op (esil, "/", edf_consume_2_push_1, 1, 2, RZ_ANAL_ESIL_OP_TYPE_MATH); - rz_anal_esil_set_op (esil, ">>", edf_consume_2_push_1, 1, 2, RZ_ANAL_ESIL_OP_TYPE_MATH); - rz_anal_esil_set_op (esil, "<<", edf_consume_2_push_1, 1, 2, RZ_ANAL_ESIL_OP_TYPE_MATH); - rz_anal_esil_set_op (esil, ">>>", edf_consume_2_push_1, 1, 2, RZ_ANAL_ESIL_OP_TYPE_MATH); - rz_anal_esil_set_op (esil, ">>>", edf_consume_2_push_1, 1, 2, RZ_ANAL_ESIL_OP_TYPE_MATH); - rz_anal_esil_set_op (esil, "!", edf_consume_1_push_1, 1, 1, RZ_ANAL_ESIL_OP_TYPE_MATH); - rz_anal_esil_set_op (esil, "[1]", edf_consume_1_push_1, 1, 1, RZ_ANAL_ESIL_OP_TYPE_MEM_READ); - rz_anal_esil_set_op (esil, "[2]", edf_consume_1_push_1, 1, 1, RZ_ANAL_ESIL_OP_TYPE_MEM_READ); - rz_anal_esil_set_op (esil, "[4]", edf_consume_1_push_1, 1, 1, RZ_ANAL_ESIL_OP_TYPE_MEM_READ); - rz_anal_esil_set_op (esil, "[8]", edf_consume_1_push_1, 1, 1, RZ_ANAL_ESIL_OP_TYPE_MEM_READ); - rz_anal_esil_set_op (esil, "[16]", edf_consume_1_push_1, 1, 1, RZ_ANAL_ESIL_OP_TYPE_MEM_READ); - rz_anal_esil_set_op (esil, "=[1]", edf_consume_2_set_mem, 0, 2, RZ_ANAL_ESIL_OP_TYPE_MEM_WRITE); - rz_anal_esil_set_op (esil, "=[2]", edf_consume_2_set_mem, 0, 2, RZ_ANAL_ESIL_OP_TYPE_MEM_WRITE); - rz_anal_esil_set_op (esil, "=[4]", edf_consume_2_set_mem, 0, 2, RZ_ANAL_ESIL_OP_TYPE_MEM_WRITE); - rz_anal_esil_set_op (esil, "=[8]", edf_consume_2_set_mem, 0, 2, RZ_ANAL_ESIL_OP_TYPE_MEM_WRITE); + rz_analysis_esil_set_op (esil, "=", edf_consume_2_set_reg, 0, 2, RZ_ANAL_ESIL_OP_TYPE_REG_WRITE); + rz_analysis_esil_set_op (esil, ":=", edf_eq_weak, 0, 2, RZ_ANAL_ESIL_OP_TYPE_REG_WRITE); + rz_analysis_esil_set_op (esil, "$z", edf_zf, 1, 0, RZ_ANAL_ESIL_OP_TYPE_UNKNOWN); + rz_analysis_esil_set_op (esil, "$p", edf_pf, 1, 0, RZ_ANAL_ESIL_OP_TYPE_UNKNOWN); + rz_analysis_esil_set_op (esil, "$c", edf_cf, 1, 1, RZ_ANAL_ESIL_OP_TYPE_UNKNOWN); + rz_analysis_esil_set_op (esil, "$b", edf_bf, 1, 1, RZ_ANAL_ESIL_OP_TYPE_UNKNOWN); + rz_analysis_esil_set_op (esil, "^=", edf_consume_2_use_set_reg, 0, 2, RZ_ANAL_ESIL_OP_TYPE_MATH | RZ_ANAL_ESIL_OP_TYPE_REG_WRITE); + rz_analysis_esil_set_op (esil, "-=", edf_consume_2_use_set_reg, 0, 2, RZ_ANAL_ESIL_OP_TYPE_MATH | RZ_ANAL_ESIL_OP_TYPE_REG_WRITE); + rz_analysis_esil_set_op (esil, "+=", edf_consume_2_use_set_reg, 0, 2, RZ_ANAL_ESIL_OP_TYPE_MATH | RZ_ANAL_ESIL_OP_TYPE_REG_WRITE); + rz_analysis_esil_set_op (esil, "*=", edf_consume_2_use_set_reg, 0, 2, RZ_ANAL_ESIL_OP_TYPE_MATH | RZ_ANAL_ESIL_OP_TYPE_REG_WRITE); + rz_analysis_esil_set_op (esil, "/=", edf_consume_2_use_set_reg, 0, 2, RZ_ANAL_ESIL_OP_TYPE_MATH | RZ_ANAL_ESIL_OP_TYPE_REG_WRITE); + rz_analysis_esil_set_op (esil, "&=", edf_consume_2_use_set_reg, 0, 2, RZ_ANAL_ESIL_OP_TYPE_MATH | RZ_ANAL_ESIL_OP_TYPE_REG_WRITE); + rz_analysis_esil_set_op (esil, "|=", edf_consume_2_use_set_reg, 0, 2, RZ_ANAL_ESIL_OP_TYPE_MATH | RZ_ANAL_ESIL_OP_TYPE_REG_WRITE); + rz_analysis_esil_set_op (esil, "^=", edf_consume_2_use_set_reg, 0, 2, RZ_ANAL_ESIL_OP_TYPE_MATH | RZ_ANAL_ESIL_OP_TYPE_REG_WRITE); + rz_analysis_esil_set_op (esil, "+", edf_consume_2_push_1, 1, 2, RZ_ANAL_ESIL_OP_TYPE_MATH); + rz_analysis_esil_set_op (esil, "-", edf_consume_2_push_1, 1, 2, RZ_ANAL_ESIL_OP_TYPE_MATH); + rz_analysis_esil_set_op (esil, "&", edf_consume_2_push_1, 1, 2, RZ_ANAL_ESIL_OP_TYPE_MATH); + rz_analysis_esil_set_op (esil, "|", edf_consume_2_push_1, 1, 2, RZ_ANAL_ESIL_OP_TYPE_MATH); + rz_analysis_esil_set_op (esil, "^", edf_consume_2_push_1, 1, 2, RZ_ANAL_ESIL_OP_TYPE_MATH); + rz_analysis_esil_set_op (esil, "%", edf_consume_2_push_1, 1, 2, RZ_ANAL_ESIL_OP_TYPE_MATH); + rz_analysis_esil_set_op (esil, "*", edf_consume_2_push_1, 1, 2, RZ_ANAL_ESIL_OP_TYPE_MATH); + rz_analysis_esil_set_op (esil, "/", edf_consume_2_push_1, 1, 2, RZ_ANAL_ESIL_OP_TYPE_MATH); + rz_analysis_esil_set_op (esil, ">>", edf_consume_2_push_1, 1, 2, RZ_ANAL_ESIL_OP_TYPE_MATH); + rz_analysis_esil_set_op (esil, "<<", edf_consume_2_push_1, 1, 2, RZ_ANAL_ESIL_OP_TYPE_MATH); + rz_analysis_esil_set_op (esil, ">>>", edf_consume_2_push_1, 1, 2, RZ_ANAL_ESIL_OP_TYPE_MATH); + rz_analysis_esil_set_op (esil, ">>>", edf_consume_2_push_1, 1, 2, RZ_ANAL_ESIL_OP_TYPE_MATH); + rz_analysis_esil_set_op (esil, "!", edf_consume_1_push_1, 1, 1, RZ_ANAL_ESIL_OP_TYPE_MATH); + rz_analysis_esil_set_op (esil, "[1]", edf_consume_1_push_1, 1, 1, RZ_ANAL_ESIL_OP_TYPE_MEM_READ); + rz_analysis_esil_set_op (esil, "[2]", edf_consume_1_push_1, 1, 1, RZ_ANAL_ESIL_OP_TYPE_MEM_READ); + rz_analysis_esil_set_op (esil, "[4]", edf_consume_1_push_1, 1, 1, RZ_ANAL_ESIL_OP_TYPE_MEM_READ); + rz_analysis_esil_set_op (esil, "[8]", edf_consume_1_push_1, 1, 1, RZ_ANAL_ESIL_OP_TYPE_MEM_READ); + rz_analysis_esil_set_op (esil, "[16]", edf_consume_1_push_1, 1, 1, RZ_ANAL_ESIL_OP_TYPE_MEM_READ); + rz_analysis_esil_set_op (esil, "=[1]", edf_consume_2_set_mem, 0, 2, RZ_ANAL_ESIL_OP_TYPE_MEM_WRITE); + rz_analysis_esil_set_op (esil, "=[2]", edf_consume_2_set_mem, 0, 2, RZ_ANAL_ESIL_OP_TYPE_MEM_WRITE); + rz_analysis_esil_set_op (esil, "=[4]", edf_consume_2_set_mem, 0, 2, RZ_ANAL_ESIL_OP_TYPE_MEM_WRITE); + rz_analysis_esil_set_op (esil, "=[8]", edf_consume_2_set_mem, 0, 2, RZ_ANAL_ESIL_OP_TYPE_MEM_WRITE); esil->user = edf; - rz_anal_esil_parse (esil, expr); - rz_anal_esil_free (esil); + rz_analysis_esil_parse (esil, expr); + rz_analysis_esil_free (esil); return edf; } static int _dfg_node_filter_insert_cmp(void *incoming, void *in, void *user) { - RzAnalEsilDFGNode *incoming_node = (RzAnalEsilDFGNode *)incoming; - RzAnalEsilDFGNode *in_node = (RzAnalEsilDFGNode *)in; + RzAnalysisEsilDFGNode *incoming_node = (RzAnalysisEsilDFGNode *)incoming; + RzAnalysisEsilDFGNode *in_node = (RzAnalysisEsilDFGNode *)in; return incoming_node->idx - in_node->idx; } static void _dfg_rev_dfs_cb(RzGraphNode *n, RzGraphVisitor *vi) { - RzAnalEsilDFGNode *node = (RzAnalEsilDFGNode *)n->data; - RzAnalEsilDFGFilter *filter = (RzAnalEsilDFGFilter *)vi->data; + RzAnalysisEsilDFGNode *node = (RzAnalysisEsilDFGNode *)n->data; + RzAnalysisEsilDFGFilter *filter = (RzAnalysisEsilDFGFilter *)vi->data; switch (node->type) { case RZ_ANAL_ESIL_DFG_BLOCK_CONST: case RZ_ANAL_ESIL_DFG_BLOCK_VAR: @@ -1026,7 +1026,7 @@ static char *internal_esil_strchrtok(char *str, const char tok) { return NULL; } -static RzStrBuf *get_resolved_expr(RzAnalEsilDFGFilter *filter, RzAnalEsilDFGNode *node) { +static RzStrBuf *get_resolved_expr(RzAnalysisEsilDFGFilter *filter, RzAnalysisEsilDFGNode *node) { char *expr = strdup (rz_strbuf_get (node->content)); RzStrBuf *res = rz_strbuf_new (""); if (!expr) { //empty expressions. can this happen? @@ -1039,7 +1039,7 @@ static RzStrBuf *get_resolved_expr(RzAnalEsilDFGFilter *filter, RzAnalEsilDFGNod if (!gn) { rz_strbuf_appendf (res, ",%s,", p); } else { - RzStrBuf *r = get_resolved_expr (filter, (RzAnalEsilDFGNode *)gn->data); + RzStrBuf *r = get_resolved_expr (filter, (RzAnalysisEsilDFGNode *)gn->data); rz_strbuf_appendf (res, ",%s,", rz_strbuf_get (r)); rz_strbuf_free (r); } @@ -1049,7 +1049,7 @@ static RzStrBuf *get_resolved_expr(RzAnalEsilDFGFilter *filter, RzAnalEsilDFGNod return res; } -RZ_API RzStrBuf *rz_anal_esil_dfg_filter(RzAnalEsilDFG *dfg, const char *reg) { +RZ_API RzStrBuf *rz_analysis_esil_dfg_filter(RzAnalysisEsilDFG *dfg, const char *reg) { if (!dfg || !reg) { return NULL; } @@ -1059,7 +1059,7 @@ RZ_API RzStrBuf *rz_anal_esil_dfg_filter(RzAnalEsilDFG *dfg, const char *reg) { } // allocate stuff - RzAnalEsilDFGFilter filter = { dfg, rz_rbtree_cont_new (), sdb_new0 () }; + RzAnalysisEsilDFGFilter filter = { dfg, rz_rbtree_cont_new (), sdb_new0 () }; RzStrBuf *filtered = rz_strbuf_new (""); RzGraphVisitor vi = { _dfg_rev_dfs_cb, NULL, NULL, NULL, NULL, &filter }; @@ -1067,7 +1067,7 @@ RZ_API RzStrBuf *rz_anal_esil_dfg_filter(RzAnalEsilDFG *dfg, const char *reg) { rz_graph_dfs_node_reverse (dfg->flow, resolve_me, &vi); RBIter ator; - RzAnalEsilDFGNode *node; + RzAnalysisEsilDFGNode *node; rz_rbtree_cont_foreach (filter.tree, ator, node) { // resolve results to opstr here RzStrBuf *resolved = get_resolved_expr (&filter, node); @@ -1084,15 +1084,15 @@ RZ_API RzStrBuf *rz_anal_esil_dfg_filter(RzAnalEsilDFG *dfg, const char *reg) { return filtered; } -RZ_API RzStrBuf *rz_anal_esil_dfg_filter_expr(RzAnal *anal, const char *expr, const char *reg) { +RZ_API RzStrBuf *rz_analysis_esil_dfg_filter_expr(RzAnalysis *analysis, const char *expr, const char *reg) { if (!reg) { return NULL; } - RzAnalEsilDFG *dfg = rz_anal_esil_dfg_expr (anal, NULL, expr); + RzAnalysisEsilDFG *dfg = rz_analysis_esil_dfg_expr (analysis, NULL, expr); if (!dfg) { return NULL; } - RzStrBuf *filtered = rz_anal_esil_dfg_filter (dfg, reg); - rz_anal_esil_dfg_free (dfg); + RzStrBuf *filtered = rz_analysis_esil_dfg_filter (dfg, reg); + rz_analysis_esil_dfg_free (dfg); return filtered; } diff --git a/librz/anal/esil_interrupt.c b/librz/analysis/esil_interrupt.c similarity index 53% rename from librz/anal/esil_interrupt.c rename to librz/analysis/esil_interrupt.c index 318ebee2a8..7df799bea6 100644 --- a/librz/anal/esil_interrupt.c +++ b/librz/analysis/esil_interrupt.c @@ -1,29 +1,29 @@ -#include +#include #include #include #include static void _interrupt_free_cb(void *user) { - RzAnalEsilInterrupt *intr = (RzAnalEsilInterrupt *)user; + RzAnalysisEsilInterrupt *intr = (RzAnalysisEsilInterrupt *)user; if (intr && intr->handler && intr->handler->fini) { intr->handler->fini (intr->user); } free (intr); } -static bool _set_interrupt(RzAnalEsil *esil, RzAnalEsilInterrupt *intr) { +static bool _set_interrupt(RzAnalysisEsil *esil, RzAnalysisEsilInterrupt *intr) { return intr->handler->num ? dict_set (esil->interrupts, intr->handler->num, intr->handler->num, intr) : (esil->intr0 = intr, true); } -static RzAnalEsilInterrupt *_get_interrupt(RzAnalEsil *esil, ut32 intr_num) { +static RzAnalysisEsilInterrupt *_get_interrupt(RzAnalysisEsil *esil, ut32 intr_num) { return intr_num ? - (RzAnalEsilInterrupt *)dict_getu(esil->interrupts, intr_num) : + (RzAnalysisEsilInterrupt *)dict_getu(esil->interrupts, intr_num) : esil->intr0; } -static void _del_interrupt(RzAnalEsil *esil, ut32 intr_num) { +static void _del_interrupt(RzAnalysisEsil *esil, ut32 intr_num) { if (intr_num) { dict_del (esil->interrupts, intr_num); } else { @@ -31,15 +31,15 @@ static void _del_interrupt(RzAnalEsil *esil, ut32 intr_num) { } } -RZ_API void rz_anal_esil_interrupts_init(RzAnalEsil *esil) { +RZ_API void rz_analysis_esil_interrupts_init(RzAnalysisEsil *esil) { rz_return_if_fail (esil); esil->interrupts = dict_new (sizeof (ut32), NULL); esil->intr0 = NULL; // is this needed? } -RZ_API RzAnalEsilInterrupt *rz_anal_esil_interrupt_new(RzAnalEsil *esil, ut32 src_id, RzAnalEsilInterruptHandler *ih) { +RZ_API RzAnalysisEsilInterrupt *rz_analysis_esil_interrupt_new(RzAnalysisEsil *esil, ut32 src_id, RzAnalysisEsilInterruptHandler *ih) { rz_return_val_if_fail (esil && ih && ih->cb, NULL); - RzAnalEsilInterrupt *intr = RZ_NEW0 (RzAnalEsilInterrupt); + RzAnalysisEsilInterrupt *intr = RZ_NEW0 (RzAnalysisEsilInterrupt); if (!intr) { return NULL; } @@ -48,11 +48,11 @@ RZ_API RzAnalEsilInterrupt *rz_anal_esil_interrupt_new(RzAnalEsil *esil, ut32 sr intr->user = ih->init (esil); } intr->src_id = src_id; - rz_anal_esil_claim_source (esil, src_id); + rz_analysis_esil_claim_source (esil, src_id); return intr; } -RZ_API void rz_anal_esil_interrupt_free(RzAnalEsil *esil, RzAnalEsilInterrupt *intr) { +RZ_API void rz_analysis_esil_interrupt_free(RzAnalysisEsil *esil, RzAnalysisEsilInterrupt *intr) { if (intr && esil) { _del_interrupt (esil, intr->handler->num); } @@ -60,23 +60,23 @@ RZ_API void rz_anal_esil_interrupt_free(RzAnalEsil *esil, RzAnalEsilInterrupt *i if (intr->user) { intr->handler->fini (intr->user); //fini must exist when user is !NULL } - rz_anal_esil_release_source (esil, intr->src_id); + rz_analysis_esil_release_source (esil, intr->src_id); } free (intr); } -RZ_API bool rz_anal_esil_set_interrupt(RzAnalEsil *esil, RzAnalEsilInterrupt *intr) { +RZ_API bool rz_analysis_esil_set_interrupt(RzAnalysisEsil *esil, RzAnalysisEsilInterrupt *intr) { rz_return_val_if_fail (esil && esil->interrupts && intr && intr->handler && intr->handler->cb, false); // check if interrupt is already set - RzAnalEsilInterrupt *o_intr = _get_interrupt(esil, intr->handler->num); + RzAnalysisEsilInterrupt *o_intr = _get_interrupt(esil, intr->handler->num); if (o_intr) { - rz_anal_esil_interrupt_free (esil, o_intr); + rz_analysis_esil_interrupt_free (esil, o_intr); } //set the new interrupt return _set_interrupt(esil, intr); } -RZ_API int rz_anal_esil_fire_interrupt(RzAnalEsil *esil, ut32 intr_num) { +RZ_API int rz_analysis_esil_fire_interrupt(RzAnalysisEsil *esil, ut32 intr_num) { rz_return_val_if_fail (esil, false); if (esil->cmd && esil->cmd (esil, esil->cmd_intr, intr_num, 0)) { //compatibility @@ -87,7 +87,7 @@ RZ_API int rz_anal_esil_fire_interrupt(RzAnalEsil *esil, ut32 intr_num) { eprintf ("no interrupts initialized\n"); return false; } - RzAnalEsilInterrupt *intr = _get_interrupt (esil, intr_num); + RzAnalysisEsilInterrupt *intr = _get_interrupt (esil, intr_num); #if 0 // we don't want this warning if (!intr) { @@ -98,8 +98,8 @@ RZ_API int rz_anal_esil_fire_interrupt(RzAnalEsil *esil, ut32 intr_num) { intr->handler->cb (esil, intr_num, intr->user) : false; } -RZ_API bool rz_anal_esil_load_interrupts (RzAnalEsil *esil, RzAnalEsilInterruptHandler *handlers[], ut32 src_id) { - RzAnalEsilInterrupt *intr; +RZ_API bool rz_analysis_esil_load_interrupts (RzAnalysisEsil *esil, RzAnalysisEsilInterruptHandler *handlers[], ut32 src_id) { + RzAnalysisEsilInterrupt *intr; ut32 i = 0; rz_return_val_if_fail (esil && esil->interrupts && handlers, false); @@ -108,35 +108,35 @@ RZ_API bool rz_anal_esil_load_interrupts (RzAnalEsil *esil, RzAnalEsilInterruptH intr = _get_interrupt (esil, handlers[i]->num); if (intr) { //first free, then load the new handler or stuff might break in the handlers - rz_anal_esil_interrupt_free (esil, intr); + rz_analysis_esil_interrupt_free (esil, intr); } - intr = rz_anal_esil_interrupt_new (esil, src_id, handlers[i]); + intr = rz_analysis_esil_interrupt_new (esil, src_id, handlers[i]); if (!intr) { return false; } - rz_anal_esil_set_interrupt (esil, intr); + rz_analysis_esil_set_interrupt (esil, intr); i++; } return true; } -RZ_API bool rz_anal_esil_load_interrupts_from_lib(RzAnalEsil *esil, const char *path) { +RZ_API bool rz_analysis_esil_load_interrupts_from_lib(RzAnalysisEsil *esil, const char *path) { rz_return_val_if_fail (esil, false); - ut32 src_id = rz_anal_esil_load_source (esil, path); + ut32 src_id = rz_analysis_esil_load_source (esil, path); if (!src_id) { // why id=0 is invalid? return false; } - RzAnalEsilInterruptHandler **handlers = (RzAnalEsilInterruptHandler **)\ - rz_lib_dl_sym (rz_anal_esil_get_source (esil, src_id), "interrupts"); + RzAnalysisEsilInterruptHandler **handlers = (RzAnalysisEsilInterruptHandler **)\ + rz_lib_dl_sym (rz_analysis_esil_get_source (esil, src_id), "interrupts"); if (!handlers) { - rz_anal_esil_release_source (esil, src_id); //unload + rz_analysis_esil_release_source (esil, src_id); //unload return false; } - return rz_anal_esil_load_interrupts (esil, handlers, src_id); + return rz_analysis_esil_load_interrupts (esil, handlers, src_id); } -RZ_API void rz_anal_esil_interrupts_fini(RzAnalEsil *esil) { +RZ_API void rz_analysis_esil_interrupts_fini(RzAnalysisEsil *esil) { if (esil && esil->interrupts) { _interrupt_free_cb (esil->intr0); esil->intr0 = NULL; diff --git a/librz/anal/esil_sources.c b/librz/analysis/esil_sources.c similarity index 53% rename from librz/anal/esil_sources.c rename to librz/analysis/esil_sources.c index 06415e0e45..aec66716d7 100644 --- a/librz/anal/esil_sources.c +++ b/librz/analysis/esil_sources.c @@ -1,22 +1,22 @@ -#include +#include #include #include -RZ_API void rz_anal_esil_sources_init (RzAnalEsil *esil) { +RZ_API void rz_analysis_esil_sources_init (RzAnalysisEsil *esil) { if (esil && !esil->sources) { esil->sources =rz_id_storage_new (1, 0xffffffff); //0 is reserved for stuff from plugins } } -RZ_API ut32 rz_anal_esil_load_source(RzAnalEsil *esil, const char *path) { - RzAnalEsilSource *src; +RZ_API ut32 rz_analysis_esil_load_source(RzAnalysisEsil *esil, const char *path) { + RzAnalysisEsilSource *src; if (!esil) { eprintf ("no esil?\n"); return 0; } - src = RZ_NEW0 (RzAnalEsilSource); + src = RZ_NEW0 (RzAnalysisEsilSource); src->content = rz_lib_dl_open(path); if (!src->content) { eprintf ("no content\n"); @@ -24,7 +24,7 @@ RZ_API ut32 rz_anal_esil_load_source(RzAnalEsil *esil, const char *path) { return 0; } - rz_anal_esil_sources_init (esil); + rz_analysis_esil_sources_init (esil); if (!rz_id_storage_add(esil->sources, src, &src->id)) { eprintf ("cannot add to storage\n"); rz_lib_dl_close (src->content); @@ -35,21 +35,21 @@ RZ_API ut32 rz_anal_esil_load_source(RzAnalEsil *esil, const char *path) { return src->id; } -static RzAnalEsilSource *_get_source(RzAnalEsil *esil, ut32 src_id) { +static RzAnalysisEsilSource *_get_source(RzAnalysisEsil *esil, ut32 src_id) { if (!esil || !esil->sources) { return NULL; } - return (RzAnalEsilSource *)rz_id_storage_get (esil->sources, src_id); + return (RzAnalysisEsilSource *)rz_id_storage_get (esil->sources, src_id); } -RZ_API void *rz_anal_esil_get_source(RzAnalEsil *esil, ut32 src_id) { - RzAnalEsilSource *src = _get_source(esil, src_id); +RZ_API void *rz_analysis_esil_get_source(RzAnalysisEsil *esil, ut32 src_id) { + RzAnalysisEsilSource *src = _get_source(esil, src_id); return src ? src->content : NULL; } -RZ_API bool rz_anal_esil_claim_source(RzAnalEsil *esil, ut32 src_id) { - RzAnalEsilSource *src = _get_source(esil, src_id); +RZ_API bool rz_analysis_esil_claim_source(RzAnalysisEsil *esil, ut32 src_id) { + RzAnalysisEsilSource *src = _get_source(esil, src_id); if (src) { src->claimed++; @@ -58,8 +58,8 @@ RZ_API bool rz_anal_esil_claim_source(RzAnalEsil *esil, ut32 src_id) { return false; } -RZ_API void rz_anal_esil_release_source(RzAnalEsil *esil, ut32 src_id) { - RzAnalEsilSource *src = _get_source(esil, src_id); +RZ_API void rz_analysis_esil_release_source(RzAnalysisEsil *esil, ut32 src_id) { + RzAnalysisEsilSource *src = _get_source(esil, src_id); if (!src) { return; @@ -74,7 +74,7 @@ RZ_API void rz_anal_esil_release_source(RzAnalEsil *esil, ut32 src_id) { } static bool _free_source_cb(void *user, void *data, ut32 id) { - RzAnalEsilSource *src = (RzAnalEsilSource *)data; + RzAnalysisEsilSource *src = (RzAnalysisEsilSource *)data; if (src) { rz_lib_dl_close (src->content); @@ -83,7 +83,7 @@ static bool _free_source_cb(void *user, void *data, ut32 id) { return true; } -RZ_API void rz_anal_esil_sources_fini(RzAnalEsil *esil) { +RZ_API void rz_analysis_esil_sources_fini(RzAnalysisEsil *esil) { if (esil) { rz_id_storage_foreach(esil->sources, _free_source_cb, NULL); rz_id_storage_free(esil->sources); diff --git a/librz/anal/esil_stats.c b/librz/analysis/esil_stats.c similarity index 63% rename from librz/anal/esil_stats.c rename to librz/analysis/esil_stats.c index 495483fe28..fc5c4b8beb 100644 --- a/librz/anal/esil_stats.c +++ b/librz/analysis/esil_stats.c @@ -1,44 +1,44 @@ // SPDX-License-Identifier: LGPL-3.0-only -#include +#include -static int hook_flag_read(RzAnalEsil *esil, const char *flag, ut64 *num) { +static int hook_flag_read(RzAnalysisEsil *esil, const char *flag, ut64 *num) { sdb_array_add (esil->stats, "flg.read", flag, 0); return 0; } -static int hook_command(RzAnalEsil *esil, const char *op) { +static int hook_command(RzAnalysisEsil *esil, const char *op) { sdb_array_add (esil->stats, "ops.list", op, 0); return 0; } -static int hook_mem_read(RzAnalEsil *esil, ut64 addr, ut8 *buf, int len) { +static int hook_mem_read(RzAnalysisEsil *esil, ut64 addr, ut8 *buf, int len) { sdb_array_add_num (esil->stats, "mem.read", addr, 0); return 0; } -static int hook_mem_write(RzAnalEsil *esil, ut64 addr, const ut8 *buf, int len) { +static int hook_mem_write(RzAnalysisEsil *esil, ut64 addr, const ut8 *buf, int len) { sdb_array_add_num (esil->stats, "mem.write", addr, 0); return 0; } -static int hook_reg_read(RzAnalEsil *esil, const char *name, ut64 *res, int *size) { +static int hook_reg_read(RzAnalysisEsil *esil, const char *name, ut64 *res, int *size) { const char *key = (*name>='0' && *name<='9')? "num.load": "reg.read"; sdb_array_add (esil->stats, key, name, 0); return 0; } -static int hook_reg_write(RzAnalEsil *esil, const char *name, ut64 *val) { +static int hook_reg_write(RzAnalysisEsil *esil, const char *name, ut64 *val) { sdb_array_add (esil->stats, "reg.write", name, 0); return 0; } -static int hook_NOP_mem_write(RzAnalEsil *esil, ut64 addr, const ut8 *buf, int len) { +static int hook_NOP_mem_write(RzAnalysisEsil *esil, ut64 addr, const ut8 *buf, int len) { eprintf ("NOP WRITE AT 0x%08"PFMT64x"\n", addr); return 1; // override } -RZ_API void rz_anal_esil_mem_ro(RzAnalEsil *esil, int mem_readonly) { +RZ_API void rz_analysis_esil_mem_ro(RzAnalysisEsil *esil, int mem_readonly) { if (mem_readonly) { esil->cb.hook_mem_write = hook_NOP_mem_write; } else { @@ -46,7 +46,7 @@ RZ_API void rz_anal_esil_mem_ro(RzAnalEsil *esil, int mem_readonly) { } } -RZ_API void rz_anal_esil_stats(RzAnalEsil *esil, int enable) { +RZ_API void rz_analysis_esil_stats(RzAnalysisEsil *esil, int enable) { if (enable) { if (esil->stats) { sdb_reset (esil->stats); diff --git a/librz/anal/esil_trace.c b/librz/analysis/esil_trace.c similarity index 75% rename from librz/anal/esil_trace.c rename to librz/analysis/esil_trace.c index 9ab3a15bf0..3775ab46a4 100644 --- a/librz/anal/esil_trace.c +++ b/librz/analysis/esil_trace.c @@ -1,25 +1,25 @@ // SPDX-License-Identifier: LGPL-3.0-only -#include +#include #define DB esil->trace->db #define KEY(x) sdb_fmt ("%d."x, esil->trace->idx) #define KEYAT(x,y) sdb_fmt ("%d."x".0x%"PFMT64x, esil->trace->idx, y) #define KEYREG(x,y) sdb_fmt ("%d."x".%s", esil->trace->idx, y) -#define CMP_REG_CHANGE(x, y) ((x) - ((RzAnalEsilRegChange *)y)->idx) -#define CMP_MEM_CHANGE(x, y) ((x) - ((RzAnalEsilMemChange *)y)->idx) +#define CMP_REG_CHANGE(x, y) ((x) - ((RzAnalysisEsilRegChange *)y)->idx) +#define CMP_MEM_CHANGE(x, y) ((x) - ((RzAnalysisEsilMemChange *)y)->idx) static int ocbs_set = false; -static RzAnalEsilCallbacks ocbs = {0}; +static RzAnalysisEsilCallbacks ocbs = {0}; static void htup_vector_free(HtUPKv *kv) { rz_vector_free (kv->value); } -RZ_API RzAnalEsilTrace *rz_anal_esil_trace_new(RzAnalEsil *esil) { +RZ_API RzAnalysisEsilTrace *rz_analysis_esil_trace_new(RzAnalysisEsil *esil) { rz_return_val_if_fail (esil && esil->stack_addr && esil->stack_size, NULL); size_t i; - RzAnalEsilTrace *trace = RZ_NEW0 (RzAnalEsilTrace); + RzAnalysisEsilTrace *trace = RZ_NEW0 (RzAnalysisEsilTrace); if (!trace) { return NULL; } @@ -42,11 +42,11 @@ RZ_API RzAnalEsilTrace *rz_anal_esil_trace_new(RzAnalEsil *esil) { if (!trace->stack_data) { goto error; } - esil->anal->iob.read_at (esil->anal->iob.io, trace->stack_addr, + esil->analysis->iob.read_at (esil->analysis->iob.io, trace->stack_addr, trace->stack_data, trace->stack_size); // Save initial registers arenas for (i = 0; i < RZ_REG_TYPE_LAST; i++) { - RzRegArena *a = esil->anal->reg->regset[i].arena; + RzRegArena *a = esil->analysis->reg->regset[i].arena; RzRegArena *b = rz_reg_arena_new (a->size); if (!b) { goto error; @@ -57,11 +57,11 @@ RZ_API RzAnalEsilTrace *rz_anal_esil_trace_new(RzAnalEsil *esil) { return trace; error: eprintf ("error\n"); - rz_anal_esil_trace_free (trace); + rz_analysis_esil_trace_free (trace); return NULL; } -RZ_API void rz_anal_esil_trace_free(RzAnalEsilTrace *trace) { +RZ_API void rz_analysis_esil_trace_free(RzAnalysisEsilTrace *trace) { size_t i; if (trace) { ht_up_free (trace->registers); @@ -75,43 +75,43 @@ RZ_API void rz_anal_esil_trace_free(RzAnalEsilTrace *trace) { } } -static void add_reg_change(RzAnalEsilTrace *trace, int idx, RzRegItem *ri, ut64 data) { +static void add_reg_change(RzAnalysisEsilTrace *trace, int idx, RzRegItem *ri, ut64 data) { ut64 addr = ri->offset | (ri->arena << 16); RzVector *vreg = ht_up_find (trace->registers, addr, NULL); if (!vreg) { - vreg = rz_vector_new (sizeof (RzAnalEsilRegChange), NULL, NULL); + vreg = rz_vector_new (sizeof (RzAnalysisEsilRegChange), NULL, NULL); if (!vreg) { eprintf ("Error: creating a register vector.\n"); return; } ht_up_insert (trace->registers, addr, vreg); } - RzAnalEsilRegChange reg = { idx, data }; + RzAnalysisEsilRegChange reg = { idx, data }; rz_vector_push (vreg, ®); } -static void add_mem_change(RzAnalEsilTrace *trace, int idx, ut64 addr, ut8 data) { +static void add_mem_change(RzAnalysisEsilTrace *trace, int idx, ut64 addr, ut8 data) { RzVector *vmem = ht_up_find (trace->memory, addr, NULL); if (!vmem) { - vmem = rz_vector_new (sizeof (RzAnalEsilMemChange), NULL, NULL); + vmem = rz_vector_new (sizeof (RzAnalysisEsilMemChange), NULL, NULL); if (!vmem) { eprintf ("Error: creating a memory vector.\n"); return; } ht_up_insert (trace->memory, addr, vmem); } - RzAnalEsilMemChange mem = { idx, data }; + RzAnalysisEsilMemChange mem = { idx, data }; rz_vector_push (vmem, &mem); } -static int trace_hook_reg_read(RzAnalEsil *esil, const char *name, ut64 *res, int *size) { +static int trace_hook_reg_read(RzAnalysisEsil *esil, const char *name, ut64 *res, int *size) { int ret = 0; if (*name == '0') { //eprintf ("Register not found in profile\n"); return 0; } if (ocbs.hook_reg_read) { - RzAnalEsilCallbacks cbs = esil->cb; + RzAnalysisEsilCallbacks cbs = esil->cb; esil->cb = ocbs; ret = ocbs.hook_reg_read (esil, name, res, size); esil->cb = cbs; @@ -130,15 +130,15 @@ static int trace_hook_reg_read(RzAnalEsil *esil, const char *name, ut64 *res, in return ret; } -static int trace_hook_reg_write(RzAnalEsil *esil, const char *name, ut64 *val) { +static int trace_hook_reg_write(RzAnalysisEsil *esil, const char *name, ut64 *val) { int ret = 0; //eprintf ("[ESIL] REG WRITE %s 0x%08"PFMT64x"\n", name, *val); sdb_array_add (DB, KEY ("reg.write"), name, 0); sdb_num_set (DB, KEYREG ("reg.write", name), *val, 0); - RzRegItem *ri = rz_reg_get (esil->anal->reg, name, -1); + RzRegItem *ri = rz_reg_get (esil->analysis->reg, name, -1); add_reg_change (esil->trace, esil->trace->idx + 1, ri, *val); if (ocbs.hook_reg_write) { - RzAnalEsilCallbacks cbs = esil->cb; + RzAnalysisEsilCallbacks cbs = esil->cb; esil->cb = ocbs; ret = ocbs.hook_reg_write (esil, name, val); esil->cb = cbs; @@ -146,7 +146,7 @@ static int trace_hook_reg_write(RzAnalEsil *esil, const char *name, ut64 *val) { return ret; } -static int trace_hook_mem_read(RzAnalEsil *esil, ut64 addr, ut8 *buf, int len) { +static int trace_hook_mem_read(RzAnalysisEsil *esil, ut64 addr, ut8 *buf, int len) { char *hexbuf = calloc ((1 + len), 4); int ret = 0; if (esil->cb.mem_read) { @@ -159,7 +159,7 @@ static int trace_hook_mem_read(RzAnalEsil *esil, ut64 addr, ut8 *buf, int len) { free (hexbuf); if (ocbs.hook_mem_read) { - RzAnalEsilCallbacks cbs = esil->cb; + RzAnalysisEsilCallbacks cbs = esil->cb; esil->cb = ocbs; ret = ocbs.hook_mem_read (esil, addr, buf, len); esil->cb = cbs; @@ -167,7 +167,7 @@ static int trace_hook_mem_read(RzAnalEsil *esil, ut64 addr, ut8 *buf, int len) { return ret; } -static int trace_hook_mem_write(RzAnalEsil *esil, ut64 addr, const ut8 *buf, int len) { +static int trace_hook_mem_write(RzAnalysisEsil *esil, ut64 addr, const ut8 *buf, int len) { size_t i; int ret = 0; char *hexbuf = malloc ((1+len)*3); @@ -181,7 +181,7 @@ static int trace_hook_mem_write(RzAnalEsil *esil, ut64 addr, const ut8 *buf, int } if (ocbs.hook_mem_write) { - RzAnalEsilCallbacks cbs = esil->cb; + RzAnalysisEsilCallbacks cbs = esil->cb; esil->cb = ocbs; ret = ocbs.hook_mem_write (esil, addr, buf, len); esil->cb = cbs; @@ -189,7 +189,7 @@ static int trace_hook_mem_write(RzAnalEsil *esil, ut64 addr, const ut8 *buf, int return ret; } -RZ_API void rz_anal_esil_trace_op(RzAnalEsil *esil, RzAnalOp *op) { +RZ_API void rz_analysis_esil_trace_op(RzAnalysisEsil *esil, RzAnalysisOp *op) { rz_return_if_fail (esil && op); const char *expr = rz_strbuf_get (&op->esil); if (RZ_STR_ISEMPTY (expr)) { @@ -197,14 +197,14 @@ RZ_API void rz_anal_esil_trace_op(RzAnalEsil *esil, RzAnalOp *op) { return; } if (!esil->trace) { - esil->trace = rz_anal_esil_trace_new (esil); + esil->trace = rz_analysis_esil_trace_new (esil); if (!esil->trace) { return; } } /* restore from trace when `idx` is not at the end */ if (esil->trace->idx != esil->trace->end_idx) { - rz_anal_esil_trace_restore (esil, esil->trace->idx + 1); + rz_analysis_esil_trace_restore (esil, esil->trace->idx + 1); return; } /* save old callbacks */ @@ -216,7 +216,7 @@ RZ_API void rz_anal_esil_trace_op(RzAnalEsil *esil, RzAnalOp *op) { ocbs_set = true; sdb_num_set (DB, "idx", esil->trace->idx, 0); sdb_num_set (DB, KEY ("addr"), op->addr, 0); - RzRegItem *pc_ri = rz_reg_get (esil->anal->reg, "PC", -1); + RzRegItem *pc_ri = rz_reg_get (esil->analysis->reg, "PC", -1); add_reg_change (esil->trace, esil->trace->idx, pc_ri, op->addr); // sdb_set (DB, KEY ("opcode"), op->mnemonic, 0); // sdb_set (DB, KEY ("addr"), expr, 0); @@ -230,8 +230,8 @@ RZ_API void rz_anal_esil_trace_op(RzAnalEsil *esil, RzAnalOp *op) { esil->cb.hook_mem_read = trace_hook_mem_read; esil->cb.hook_mem_write = trace_hook_mem_write; /* evaluate esil expression */ - rz_anal_esil_parse (esil, expr); - rz_anal_esil_stack_free (esil); + rz_analysis_esil_parse (esil, expr); + rz_analysis_esil_stack_free (esil); /* restore hooks */ esil->cb = ocbs; ocbs_set = false; @@ -244,52 +244,52 @@ RZ_API void rz_anal_esil_trace_op(RzAnalEsil *esil, RzAnalOp *op) { static bool restore_memory_cb(void *user, const ut64 key, const void *value) { size_t index; - RzAnalEsil *esil = user; + RzAnalysisEsil *esil = user; RzVector *vmem = (RzVector *)value; rz_vector_upper_bound (vmem, esil->trace->idx, index, CMP_MEM_CHANGE); if (index > 0 && index <= vmem->len) { - RzAnalEsilMemChange *c = rz_vector_index_ptr (vmem, index - 1); - esil->anal->iob.write_at (esil->anal->iob.io, key, &c->data, 1); + RzAnalysisEsilMemChange *c = rz_vector_index_ptr (vmem, index - 1); + esil->analysis->iob.write_at (esil->analysis->iob.io, key, &c->data, 1); } return true; } -static bool restore_register(RzAnalEsil *esil, RzRegItem *ri, int idx) { +static bool restore_register(RzAnalysisEsil *esil, RzRegItem *ri, int idx) { size_t index; RzVector *vreg = ht_up_find (esil->trace->registers, ri->offset | (ri->arena << 16), NULL); if (vreg) { rz_vector_upper_bound (vreg, idx, index, CMP_REG_CHANGE); if (index > 0 && index <= vreg->len) { - RzAnalEsilRegChange *c = rz_vector_index_ptr (vreg, index - 1); - rz_reg_set_value (esil->anal->reg, ri, c->data); + RzAnalysisEsilRegChange *c = rz_vector_index_ptr (vreg, index - 1); + rz_reg_set_value (esil->analysis->reg, ri, c->data); } } return true; } -RZ_API void rz_anal_esil_trace_restore(RzAnalEsil *esil, int idx) { +RZ_API void rz_analysis_esil_trace_restore(RzAnalysisEsil *esil, int idx) { size_t i; - RzAnalEsilTrace *trace = esil->trace; + RzAnalysisEsilTrace *trace = esil->trace; // Restore initial state when going backward if (idx < esil->trace->idx) { // Restore initial registers value for (i = 0; i < RZ_REG_TYPE_LAST; i++) { - RzRegArena *a = esil->anal->reg->regset[i].arena; + RzRegArena *a = esil->analysis->reg->regset[i].arena; RzRegArena *b = trace->arena[i]; if (a && b) { memcpy (a->bytes, b->bytes, a->size); } } // Restore initial stack memory - esil->anal->iob.write_at (esil->anal->iob.io, trace->stack_addr, + esil->analysis->iob.write_at (esil->analysis->iob.io, trace->stack_addr, trace->stack_data, trace->stack_size); } // Apply latest changes to registers and memory esil->trace->idx = idx; RzListIter *iter; RzRegItem *ri; - rz_list_foreach (esil->anal->reg->allregs, iter, ri) { + rz_list_foreach (esil->analysis->reg->allregs, iter, ri) { restore_register (esil, ri, idx); } ht_up_foreach (trace->memory, restore_memory_cb, esil); @@ -347,8 +347,8 @@ static int cmp_strings_by_leading_number(void *data1, void *data2) { return 0; } -RZ_API void rz_anal_esil_trace_list (RzAnalEsil *esil) { - PrintfCallback p = esil->anal->cb_printf; +RZ_API void rz_analysis_esil_trace_list (RzAnalysisEsil *esil) { + PrintfCallback p = esil->analysis->cb_printf; SdbKv *kv; SdbListIter *iter; SdbList *list = sdb_foreach_list (esil->trace->db, true); @@ -359,8 +359,8 @@ RZ_API void rz_anal_esil_trace_list (RzAnalEsil *esil) { ls_free (list); } -RZ_API void rz_anal_esil_trace_show(RzAnalEsil *esil, int idx) { - PrintfCallback p = esil->anal->cb_printf; +RZ_API void rz_analysis_esil_trace_show(RzAnalysisEsil *esil, int idx) { + PrintfCallback p = esil->analysis->cb_printf; const char *str2; const char *str; int trace_idx = esil->trace->idx; diff --git a/librz/anal/fcn.c b/librz/analysis/fcn.c similarity index 63% rename from librz/anal/fcn.c rename to librz/analysis/fcn.c index 1b4a9e9ec1..baeafe7dc2 100644 --- a/librz/anal/fcn.c +++ b/librz/analysis/fcn.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: LGPL-3.0-only -#include +#include #include #include #include @@ -37,7 +37,7 @@ typedef struct fcn_tree_iter_t { RBNode *path[RZ_RBTREE_MAX_HEIGHT]; } FcnTreeIter; -RZ_API const char *rz_anal_fcntype_tostring(int type) { +RZ_API const char *rz_analysis_fcntype_tostring(int type) { switch (type) { case RZ_ANAL_FCN_TYPE_NULL: return "null"; case RZ_ANAL_FCN_TYPE_FCN: return "fcn"; @@ -54,7 +54,7 @@ RZ_API const char *rz_anal_fcntype_tostring(int type) { static ut64 cache_addr = UT64_MAX; // TODO: move into io :? -static int read_ahead(RzAnal *anal, ut64 addr, ut8 *buf, int len) { +static int read_ahead(RzAnalysis *analysis, ut64 addr, ut8 *buf, int len) { static ut8 cache[1024]; const int cache_len = sizeof (cache); @@ -62,7 +62,7 @@ static int read_ahead(RzAnal *anal, ut64 addr, ut8 *buf, int len) { return 0; } if (len > cache_len) { - int a = anal->iob.read_at (anal->iob.io, addr, buf, len); // double read + int a = analysis->iob.read_at (analysis->iob.io, addr, buf, len); // double read memcpy (cache, buf, cache_len); cache_addr = addr; return a; @@ -74,32 +74,32 @@ static int read_ahead(RzAnal *anal, ut64 addr, ut8 *buf, int len) { if (isCached) { memcpy (buf, cache + (addr - cache_addr), len); } else { - anal->iob.read_at (anal->iob.io, addr, cache, sizeof (cache)); + analysis->iob.read_at (analysis->iob.io, addr, cache, sizeof (cache)); memcpy (buf, cache, len); cache_addr = addr; } return len; } #else -static int read_ahead(RzAnal *anal, ut64 addr, ut8 *buf, int len) { - return anal->iob.read_at (anal->iob.io, addr, buf, len); +static int read_ahead(RzAnalysis *analysis, ut64 addr, ut8 *buf, int len) { + return analysis->iob.read_at (analysis->iob.io, addr, buf, len); } #endif -RZ_API void rz_anal_fcn_invalidate_read_ahead_cache(void) { +RZ_API void rz_analysis_fcn_invalidate_read_ahead_cache(void) { #if READ_AHEAD cache_addr = UT64_MAX; #endif } static int cmpaddr(const void *_a, const void *_b) { - const RzAnalBlock *a = _a, *b = _b; + const RzAnalysisBlock *a = _a, *b = _b; return a->addr > b->addr ? 1 : (a->addr < b->addr ? -1 : 0); } -RZ_API int rz_anal_function_resize(RzAnalFunction *fcn, int newsize) { - RzAnal *anal = fcn->anal; - RzAnalBlock *bb; +RZ_API int rz_analysis_function_resize(RzAnalysisFunction *fcn, int newsize) { + RzAnalysis *analysis = fcn->analysis; + RzAnalysisBlock *bb; RzListIter *iter, *iter2; rz_return_val_if_fail (fcn, false); @@ -109,7 +109,7 @@ RZ_API int rz_anal_function_resize(RzAnalFunction *fcn, int newsize) { } // XXX this is something we should probably do for all the archs - bool is_arm = anal->cur->arch && !strncmp (anal->cur->arch, "arm", 3); + bool is_arm = analysis->cur->arch && !strncmp (analysis->cur->arch, "arm", 3); if (is_arm) { return true; } @@ -117,11 +117,11 @@ RZ_API int rz_anal_function_resize(RzAnalFunction *fcn, int newsize) { ut64 eof = fcn->addr + newsize; rz_list_foreach_safe (fcn->bbs, iter, iter2, bb) { if (bb->addr >= eof) { - rz_anal_function_remove_block (fcn, bb); + rz_analysis_function_remove_block (fcn, bb); continue; } if (bb->addr + bb->size >= eof) { - rz_anal_block_set_size (bb, eof - bb->addr); + rz_analysis_block_set_size (bb, eof - bb->addr); } if (bb->jump != UT64_MAX && bb->jump >= eof) { bb->jump = UT64_MAX; @@ -134,12 +134,12 @@ RZ_API int rz_anal_function_resize(RzAnalFunction *fcn, int newsize) { } // Create a new 0-sized basic block inside the function -static RzAnalBlock *fcn_append_basic_block(RzAnal *anal, RzAnalFunction *fcn, ut64 addr) { - RzAnalBlock *bb = rz_anal_create_block (anal, addr, 0); +static RzAnalysisBlock *fcn_append_basic_block(RzAnalysis *analysis, RzAnalysisFunction *fcn, ut64 addr) { + RzAnalysisBlock *bb = rz_analysis_create_block (analysis, addr, 0); if (!bb) { return NULL; } - rz_anal_function_add_block (fcn, bb); + rz_analysis_function_add_block (fcn, bb); bb->stackptr = fcn->stack; bb->parent_stackptr = fcn->stack; return bb; @@ -147,10 +147,10 @@ static RzAnalBlock *fcn_append_basic_block(RzAnal *anal, RzAnalFunction *fcn, ut #define gotoBeach(x) ret = x; goto beach; -static bool isInvalidMemory(RzAnal *anal, const ut8 *buf, int len) { - if (anal->opt.nonull > 0) { +static bool isInvalidMemory(RzAnalysis *analysis, const ut8 *buf, int len) { + if (analysis->opt.nonull > 0) { int i; - const int count = RZ_MIN (len, anal->opt.nonull); + const int count = RZ_MIN (len, analysis->opt.nonull); for (i = 0; i < count; i++) { if (buf[i]) { break; @@ -163,32 +163,32 @@ static bool isInvalidMemory(RzAnal *anal, const ut8 *buf, int len) { return !memcmp (buf, "\xff\xff\xff\xff", RZ_MIN (len, 4)); } -static bool isSymbolNextInstruction(RzAnal *anal, RzAnalOp *op) { - rz_return_val_if_fail (anal && op && anal->flb.get_at, false); +static bool isSymbolNextInstruction(RzAnalysis *analysis, RzAnalysisOp *op) { + rz_return_val_if_fail (analysis && op && analysis->flb.get_at, false); - RzFlagItem *fi = anal->flb.get_at (anal->flb.f, op->addr + op->size, false); + RzFlagItem *fi = analysis->flb.get_at (analysis->flb.f, op->addr + op->size, false); return (fi && fi->name && (strstr (fi->name, "imp.") || strstr (fi->name, "sym.") || strstr (fi->name, "entry") || strstr (fi->name, "main"))); } -static bool is_delta_pointer_table(RzAnal *anal, RzAnalFunction *fcn, ut64 addr, ut64 lea_ptr, ut64 *jmptbl_addr, ut64 *casetbl_addr, RzAnalOp *jmp_aop) { +static bool is_delta_pointer_table(RzAnalysis *analysis, RzAnalysisFunction *fcn, ut64 addr, ut64 lea_ptr, ut64 *jmptbl_addr, ut64 *casetbl_addr, RzAnalysisOp *jmp_aop) { int i; ut64 dst; st32 jmptbl[64] = {0}; /* check if current instruction is followed by an ujmp */ ut8 buf[JMPTBL_LEA_SEARCH_SZ]; - RzAnalOp *aop = jmp_aop; - RzAnalOp omov_aop = {0}; - RzAnalOp mov_aop = {0}; - RzAnalOp add_aop = {0}; + RzAnalysisOp *aop = jmp_aop; + RzAnalysisOp omov_aop = {0}; + RzAnalysisOp mov_aop = {0}; + RzAnalysisOp add_aop = {0}; RzRegItem *reg_src = NULL, *o_reg_dst = NULL; - RzAnalValue cur_scr, cur_dst = { 0 }; - read_ahead (anal, addr, (ut8*)buf, sizeof (buf)); + RzAnalysisValue cur_scr, cur_dst = { 0 }; + read_ahead (analysis, addr, (ut8*)buf, sizeof (buf)); bool isValid = false; for (i = 0; i + 8 < JMPTBL_LEA_SEARCH_SZ; i++) { ut64 at = addr + i; int left = JMPTBL_LEA_SEARCH_SZ - i; - int len = rz_anal_op (anal, aop, at, buf + i, left, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_HINT | RZ_ANAL_OP_MASK_VAL); + int len = rz_analysis_op (analysis, aop, at, buf + i, left, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_HINT | RZ_ANAL_OP_MASK_VAL); if (len < 1) { len = 1; } @@ -211,7 +211,7 @@ static bool is_delta_pointer_table(RzAnal *anal, RzAnalFunction *fcn, ut64 addr, if (aop->type == RZ_ANAL_OP_TYPE_ADD) { add_aop = *aop; } - rz_anal_op_fini (aop); + rz_analysis_op_fini (aop); i += len - 1; } if (!isValid) { @@ -246,26 +246,26 @@ static bool is_delta_pointer_table(RzAnal *anal, RzAnalFunction *fcn, ut64 addr, } #endif /* check if jump table contains valid deltas */ - read_ahead (anal, *jmptbl_addr, (ut8 *)&jmptbl, 64); + read_ahead (analysis, *jmptbl_addr, (ut8 *)&jmptbl, 64); for (i = 0; i < 3; i++) { dst = lea_ptr + (st32)rz_read_le32 (jmptbl); - if (!anal->iob.is_valid_offset (anal->iob.io, dst, 0)) { + if (!analysis->iob.is_valid_offset (analysis->iob.io, dst, 0)) { return false; } if (dst > fcn->addr + JMPTBL_MAXFCNSIZE) { return false; } - if (anal->opt.jmpabove && dst < (fcn->addr < JMPTBL_MAXFCNSIZE ? 0 : fcn->addr - JMPTBL_MAXFCNSIZE)) { + if (analysis->opt.jmpabove && dst < (fcn->addr < JMPTBL_MAXFCNSIZE ? 0 : fcn->addr - JMPTBL_MAXFCNSIZE)) { return false; } } return true; } -static ut64 try_get_cmpval_from_parents(RzAnal * anal, RzAnalFunction *fcn, RzAnalBlock *my_bb, const char * cmp_reg) { +static ut64 try_get_cmpval_from_parents(RzAnalysis * analysis, RzAnalysisFunction *fcn, RzAnalysisBlock *my_bb, const char * cmp_reg) { rz_return_val_if_fail (fcn && fcn->bbs && cmp_reg, UT64_MAX); RzListIter *iter; - RzAnalBlock *tmp_bb; + RzAnalysisBlock *tmp_bb; rz_list_foreach (fcn->bbs, iter, tmp_bb) { if (tmp_bb->jump == my_bb->addr || tmp_bb->fail == my_bb->addr) { if (tmp_bb->cmpreg == cmp_reg) { @@ -281,22 +281,22 @@ static ut64 try_get_cmpval_from_parents(RzAnal * anal, RzAnalFunction *fcn, RzAn return UT64_MAX; } -static bool regs_exist(RzAnalValue *src, RzAnalValue *dst) { +static bool regs_exist(RzAnalysisValue *src, RzAnalysisValue *dst) { rz_return_val_if_fail (src && dst, false); return src->reg && dst->reg && src->reg->name && dst->reg->name; } // 0 if not skipped; 1 if skipped; 2 if skipped before -static int skip_hp(RzAnal *anal, RzAnalFunction *fcn, RzAnalOp *op, RzAnalBlock *bb, ut64 addr, +static int skip_hp(RzAnalysis *analysis, RzAnalysisFunction *fcn, RzAnalysisOp *op, RzAnalysisBlock *bb, ut64 addr, char *tmp_buf, int oplen, int un_idx, int *idx) { // this step is required in order to prevent infinite recursion in some cases if ((addr + un_idx - oplen) == fcn->addr) { // use addr instead of op->addr to mark repeat - if (!anal->flb.exist_at (anal->flb.f, "skip", 4, addr)) { + if (!analysis->flb.exist_at (analysis->flb.f, "skip", 4, addr)) { snprintf (tmp_buf + 5, MAX_FLG_NAME_SIZE - 6, "%"PFMT64u, addr); - anal->flb.set (anal->flb.f, tmp_buf, addr, oplen); + analysis->flb.set (analysis->flb.f, tmp_buf, addr, oplen); fcn->addr += oplen; - rz_anal_block_relocate (bb, bb->addr + oplen, bb->size - oplen); + rz_analysis_block_relocate (bb, bb->addr + oplen, bb->size - oplen); *idx = un_idx; return 1; } @@ -305,7 +305,7 @@ static int skip_hp(RzAnal *anal, RzAnalFunction *fcn, RzAnalOp *op, RzAnalBlock return 0; } -static bool purity_checked(HtUP *ht, RzAnalFunction *fcn) { +static bool purity_checked(HtUP *ht, RzAnalysisFunction *fcn) { bool checked; ht_up_find (ht, fcn->addr, &checked); return checked; @@ -318,15 +318,15 @@ static bool purity_checked(HtUP *ht, RzAnalFunction *fcn) { * Probably worth changing it in the future, so that it marks fcn 'impure' only when it * (or any function called by fcn) MODIFIES external data. */ -static void check_purity(HtUP *ht, RzAnalFunction *fcn) { +static void check_purity(HtUP *ht, RzAnalysisFunction *fcn) { RzListIter *iter; - RzList *refs = rz_anal_function_get_refs (fcn); - RzAnalRef *ref; + RzList *refs = rz_analysis_function_get_refs (fcn); + RzAnalysisRef *ref; ht_up_insert (ht, fcn->addr, NULL); fcn->is_pure = true; rz_list_foreach (refs, iter, ref) { if (ref->type == RZ_ANAL_REF_TYPE_CALL || ref->type == RZ_ANAL_REF_TYPE_CODE) { - RzAnalFunction *called_fcn = rz_anal_get_fcn_in (fcn->anal, ref->addr, 0); + RzAnalysisFunction *called_fcn = rz_analysis_get_fcn_in (fcn->analysis, ref->addr, 0); if (!called_fcn) { continue; } @@ -351,39 +351,39 @@ typedef struct { ut64 leaddr; } leaddr_pair; -static RzAnalBlock *bbget(RzAnal *anal, ut64 addr, bool jumpmid) { - RzList *intersecting = rz_anal_get_blocks_in (anal, addr); +static RzAnalysisBlock *bbget(RzAnalysis *analysis, ut64 addr, bool jumpmid) { + RzList *intersecting = rz_analysis_get_blocks_in (analysis, addr); RzListIter *iter; - RzAnalBlock *bb; + RzAnalysisBlock *bb; - RzAnalBlock *ret = NULL; + RzAnalysisBlock *ret = NULL; rz_list_foreach (intersecting, iter, bb) { ut64 eaddr = bb->addr + bb->size; if (((bb->addr >= eaddr && addr == bb->addr) - || rz_anal_block_contains (bb, addr)) - && (!jumpmid || rz_anal_block_op_starts_at (bb, addr))) { - if (anal->opt.delay) { + || rz_analysis_block_contains (bb, addr)) + && (!jumpmid || rz_analysis_block_op_starts_at (bb, addr))) { + if (analysis->opt.delay) { ut8 *buf = malloc (bb->size); - if (anal->iob.read_at (anal->iob.io, bb->addr, buf, bb->size)) { + if (analysis->iob.read_at (analysis->iob.io, bb->addr, buf, bb->size)) { const int last_instr_idx = bb->ninstr - 1; bool in_delay_slot = false; int i; for (i = last_instr_idx; i >= 0; i--) { - const ut64 off = rz_anal_bb_offset_inst (bb, i); + const ut64 off = rz_analysis_bb_offset_inst (bb, i); const ut64 at = bb->addr + off; if (addr <= at || off >= bb->size) { continue; } - RzAnalOp op; - int size = rz_anal_op (anal, &op, at, buf + off, bb->size - off, RZ_ANAL_OP_MASK_BASIC); + RzAnalysisOp op; + int size = rz_analysis_op (analysis, &op, at, buf + off, bb->size - off, RZ_ANAL_OP_MASK_BASIC); if (size > 0 && op.delay) { if (op.delay >= last_instr_idx - i) { in_delay_slot = true; } - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); break; } - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); } if (in_delay_slot) { free (buf); @@ -401,71 +401,71 @@ static RzAnalBlock *bbget(RzAnal *anal, ut64 addr, bool jumpmid) { } typedef struct { - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; const int stack_diff; } BlockTakeoverCtx; -static bool fcn_takeover_block_recursive_followthrough_cb(RzAnalBlock *block, void *user) { +static bool fcn_takeover_block_recursive_followthrough_cb(RzAnalysisBlock *block, void *user) { BlockTakeoverCtx *ctx = user; - RzAnalFunction *our_fcn = ctx->fcn; - rz_anal_block_ref (block); + RzAnalysisFunction *our_fcn = ctx->fcn; + rz_analysis_block_ref (block); while (!rz_list_empty (block->fcns)) { - RzAnalFunction *other_fcn = rz_list_first (block->fcns); + RzAnalysisFunction *other_fcn = rz_list_first (block->fcns); if (other_fcn->addr == block->addr) { return false; } // Steal vars from this block size_t i; for (i = 0; i < block->ninstr; i++) { - const ut64 addr = rz_anal_bb_opaddr_i (block, i); - RzPVector *vars_used = rz_anal_function_get_vars_used_at (other_fcn, addr); + const ut64 addr = rz_analysis_bb_opaddr_i (block, i); + RzPVector *vars_used = rz_analysis_function_get_vars_used_at (other_fcn, addr); if (!vars_used) { continue; } - // vars_used will get modified if rz_anal_var_remove_access_at gets called + // vars_used will get modified if rz_analysis_var_remove_access_at gets called RzPVector *cloned_vars_used = (RzPVector *)rz_vector_clone ((RzVector *)vars_used); void **it; rz_pvector_foreach (cloned_vars_used, it) { - RzAnalVar *other_var = *it; + RzAnalysisVar *other_var = *it; const int actual_delta = other_var->kind == RZ_ANAL_VAR_KIND_SPV ? other_var->delta + ctx->stack_diff : other_var->delta + (other_fcn->bp_off - our_fcn->bp_off); - RzAnalVar *our_var = rz_anal_function_get_var (our_fcn, other_var->kind, actual_delta); + RzAnalysisVar *our_var = rz_analysis_function_get_var (our_fcn, other_var->kind, actual_delta); if (!our_var) { - our_var = rz_anal_function_set_var (our_fcn, actual_delta, other_var->kind, other_var->type, 0, other_var->isarg, other_var->name); + our_var = rz_analysis_function_set_var (our_fcn, actual_delta, other_var->kind, other_var->type, 0, other_var->isarg, other_var->name); } if (our_var) { - RzAnalVarAccess *acc = rz_anal_var_get_access_at (other_var, addr); - rz_anal_var_set_access (our_var, acc->reg, addr, acc->type, acc->stackptr); + RzAnalysisVarAccess *acc = rz_analysis_var_get_access_at (other_var, addr); + rz_analysis_var_set_access (our_var, acc->reg, addr, acc->type, acc->stackptr); } - rz_anal_var_remove_access_at (other_var, addr); + rz_analysis_var_remove_access_at (other_var, addr); if (rz_vector_empty (&other_var->accesses)) { - rz_anal_function_delete_var (other_fcn, other_var); + rz_analysis_function_delete_var (other_fcn, other_var); } } rz_pvector_free (cloned_vars_used); } // TODO: remove block->ninstr from other_fcn considering delay slots - rz_anal_function_remove_block (other_fcn, block); + rz_analysis_function_remove_block (other_fcn, block); } block->stackptr -= ctx->stack_diff; block->parent_stackptr -= ctx->stack_diff; - rz_anal_function_add_block (our_fcn, block); + rz_analysis_function_add_block (our_fcn, block); // TODO: add block->ninstr from our_fcn considering delay slots our_fcn += block->ninstr; - rz_anal_block_unref (block); + rz_analysis_block_unref (block); return true; } // Remove block and all of its recursive successors from all its functions and add them only to fcn -static void fcn_takeover_block_recursive(RzAnalFunction *fcn, RzAnalBlock *start_block) { +static void fcn_takeover_block_recursive(RzAnalysisFunction *fcn, RzAnalysisBlock *start_block) { BlockTakeoverCtx ctx = { fcn, start_block->parent_stackptr - fcn->stack}; - rz_anal_block_recurse_followthrough (start_block, fcn_takeover_block_recursive_followthrough_cb, &ctx); + rz_analysis_block_recurse_followthrough (start_block, fcn_takeover_block_recursive_followthrough_cb, &ctx); } -static const char *retpoline_reg(RzAnal *anal, ut64 addr) { - RzFlagItem *flag = anal->flag_get (anal->flb.f, addr); +static const char *retpoline_reg(RzAnalysis *analysis, ut64 addr) { + RzFlagItem *flag = analysis->flag_get (analysis->flb.f, addr); if (flag) { const char *token = "x86_indirect_thunk_"; const char *thunk = strstr (flag->name, token); @@ -491,9 +491,9 @@ static const char *retpoline_reg(RzAnal *anal, ut64 addr) { return NULL; } -static void analyze_retpoline(RzAnal *anal, RzAnalOp *op) { - if (anal->opt.retpoline) { - const char *rr = retpoline_reg (anal, op->jump); +static void analyze_retpoline(RzAnalysis *analysis, RzAnalysisOp *op) { + if (analysis->opt.retpoline) { + const char *rr = retpoline_reg (analysis, op->jump); if (rr) { op->type = RZ_ANAL_OP_TYPE_RJMP; op->reg = rr; @@ -501,7 +501,7 @@ static void analyze_retpoline(RzAnal *anal, RzAnalOp *op) { } } -static inline bool op_is_set_bp(RzAnalOp *op, const char *bp_reg, const char *sp_reg) { +static inline bool op_is_set_bp(RzAnalysisOp *op, const char *bp_reg, const char *sp_reg) { bool has_dst_reg = op->dst && op->dst->reg && op->dst->reg->name; bool has_src_reg = op->src[0] && op->src[0]->reg && op->src[0]->reg->name; if (has_dst_reg && has_src_reg) { @@ -514,15 +514,15 @@ static inline bool does_arch_destroys_dst(const char *arch) { return arch && (!strncmp (arch, "arm", 3) || !strcmp (arch, "riscv") || !strcmp (arch, "ppc")); } -static int fcn_recurse(RzAnal *anal, RzAnalFunction *fcn, ut64 addr, ut64 len, int depth) { - const int continue_after_jump = anal->opt.afterjmp; - const int addrbytes = anal->iob.io ? anal->iob.io->addrbytes : 1; +static int fcn_recurse(RzAnalysis *analysis, RzAnalysisFunction *fcn, ut64 addr, ut64 len, int depth) { + const int continue_after_jump = analysis->opt.afterjmp; + const int addrbytes = analysis->iob.io ? analysis->iob.io->addrbytes : 1; char *last_reg_mov_lea_name = NULL; - RzAnalBlock *bb = NULL; - RzAnalBlock *bbg = NULL; + RzAnalysisBlock *bb = NULL; + RzAnalysisBlock *bbg = NULL; int ret = RZ_ANAL_RET_END, skip_ret = 0; bool overlapped = false; - RzAnalOp op = {0}; + RzAnalysisOp op = {0}; int oplen, idx = 0; static ut64 cmpval = UT64_MAX; // inherited across functions, otherwise it breaks :? bool varset = false; @@ -536,51 +536,51 @@ static int fcn_recurse(RzAnal *anal, RzAnalFunction *fcn, ut64 addr, ut64 len, i } delay = { 0 }; - bool arch_destroys_dst = does_arch_destroys_dst (anal->cur->arch); - bool is_arm = anal->cur->arch && !strncmp (anal->cur->arch, "arm", 3); + bool arch_destroys_dst = does_arch_destroys_dst (analysis->cur->arch); + bool is_arm = analysis->cur->arch && !strncmp (analysis->cur->arch, "arm", 3); char tmp_buf[MAX_FLG_NAME_SIZE + 5] = "skip"; - bool is_x86 = is_arm ? false: anal->cur->arch && !strncmp (anal->cur->arch, "x86", 3); + bool is_x86 = is_arm ? false: analysis->cur->arch && !strncmp (analysis->cur->arch, "x86", 3); bool is_amd64 = is_x86 ? fcn->cc && !strcmp (fcn->cc, "amd64") : false; - bool is_dalvik = is_x86? false: anal->cur->arch && !strncmp (anal->cur->arch, "dalvik", 6); + bool is_dalvik = is_x86? false: analysis->cur->arch && !strncmp (analysis->cur->arch, "dalvik", 6); RzRegItem *variadic_reg = NULL; if (is_amd64) { - variadic_reg = rz_reg_get (anal->reg, "rax", RZ_REG_TYPE_GPR); + variadic_reg = rz_reg_get (analysis->reg, "rax", RZ_REG_TYPE_GPR); } bool has_variadic_reg = !!variadic_reg; if (rz_cons_is_breaked ()) { return RZ_ANAL_RET_END; } - if (anal->sleep) { - rz_sys_usleep (anal->sleep); + if (analysis->sleep) { + rz_sys_usleep (analysis->sleep); } if (depth < 1) { - if (anal->verbose) { + if (analysis->verbose) { eprintf ("Anal went too deep at address 0x%"PFMT64x ".\n", addr); } return RZ_ANAL_RET_ERROR; // MUST BE TOO DEEP } // check if address is readable //: - if (!anal->iob.is_valid_offset (anal->iob.io, addr, 0)) { - if (addr != UT64_MAX && !anal->iob.io->va) { - if (anal->verbose) { + if (!analysis->iob.is_valid_offset (analysis->iob.io, addr, 0)) { + if (addr != UT64_MAX && !analysis->iob.io->va) { + if (analysis->verbose) { eprintf ("Invalid address 0x%"PFMT64x ". Try with io.va=true\n", addr); } } return RZ_ANAL_RET_ERROR; // MUST BE TOO DEEP } - RzAnalFunction *fcn_at_addr = rz_anal_get_function_at (anal, addr); + RzAnalysisFunction *fcn_at_addr = rz_analysis_get_function_at (analysis, addr); if (fcn_at_addr && fcn_at_addr != fcn) { return RZ_ANAL_RET_ERROR; // MUST BE NOT FOUND } - RzAnalBlock *existing_bb = bbget (anal, addr, anal->opt.jmpmid && is_x86); + RzAnalysisBlock *existing_bb = bbget (analysis, addr, analysis->opt.jmpmid && is_x86); if (existing_bb) { bool existing_in_fcn = rz_list_contains (existing_bb->fcns, fcn); - existing_bb = rz_anal_block_split (existing_bb, addr); + existing_bb = rz_analysis_block_split (existing_bb, addr); if (!existing_in_fcn && existing_bb) { if (existing_bb->addr == fcn->addr) { // our function starts directly there, so we steal what is ours! @@ -588,24 +588,24 @@ static int fcn_recurse(RzAnal *anal, RzAnalFunction *fcn, ut64 addr, ut64 len, i } } if (existing_bb) { - rz_anal_block_unref (existing_bb); + rz_analysis_block_unref (existing_bb); } - if (anal->opt.recont) { + if (analysis->opt.recont) { return RZ_ANAL_RET_END; } - if (anal->verbose) { - eprintf ("rz_anal_fcn_bb() fails at 0x%"PFMT64x ".\n", addr); + if (analysis->verbose) { + eprintf ("rz_analysis_fcn_bb() fails at 0x%"PFMT64x ".\n", addr); } return RZ_ANAL_RET_ERROR; // MUST BE NOT DUP } - bb = fcn_append_basic_block (anal, fcn, addr); + bb = fcn_append_basic_block (analysis, fcn, addr); // we checked before whether there is a bb at addr, so the create should have succeeded rz_return_val_if_fail (bb, RZ_ANAL_RET_ERROR); - if (!anal->leaddrs) { - anal->leaddrs = rz_list_newf (free); - if (!anal->leaddrs) { + if (!analysis->leaddrs) { + analysis->leaddrs = rz_list_newf (free); + if (!analysis->leaddrs) { eprintf ("Cannot create leaddr list\n"); gotoBeach (RZ_ANAL_RET_ERROR); } @@ -616,13 +616,13 @@ static int fcn_recurse(RzAnal *anal, RzAnalFunction *fcn, ut64 addr, ut64 len, i bool last_is_push = false; bool last_is_mov_lr_pc = false; ut64 last_push_addr = UT64_MAX; - if (anal->limit && addr + idx < anal->limit->from) { + if (analysis->limit && addr + idx < analysis->limit->from) { gotoBeach (RZ_ANAL_RET_END); } - RzAnalFunction *tmp_fcn = rz_anal_get_fcn_in (anal, addr, 0); + RzAnalysisFunction *tmp_fcn = rz_analysis_get_fcn_in (analysis, addr, 0); if (tmp_fcn) { // Checks if var is already analyzed at given addr - RzList *list = rz_anal_var_all_list (anal, tmp_fcn); + RzList *list = rz_analysis_var_all_list (analysis, tmp_fcn); if (!rz_list_empty (list)) { varset = true; } @@ -646,7 +646,7 @@ static int fcn_recurse(RzAnal *anal, RzAnalFunction *fcn, ut64 addr, ut64 len, i } } if ((maxlen - (addrbytes * idx)) > MAX_SCAN_SIZE) { - if (anal->verbose) { + if (analysis->verbose) { eprintf ("Warning: Skipping large memory region.\n"); } maxlen = 0; @@ -657,7 +657,7 @@ static int fcn_recurse(RzAnal *anal, RzAnalFunction *fcn, ut64 addr, ut64 len, i free (last_reg_mov_lea_name); last_reg_mov_lea_name = NULL; } - if (anal->limit && anal->limit->to <= addr + idx) { + if (analysis->limit && analysis->limit->to <= addr + idx) { break; } repeat: @@ -667,36 +667,36 @@ repeat: ut32 at_delta = addrbytes * idx; ut64 at = addr + at_delta; ut64 bytes_read = RZ_MIN (len - at_delta, sizeof (buf)); - ret = read_ahead (anal, at, buf, bytes_read); + ret = read_ahead (analysis, at, buf, bytes_read); if (ret < 0) { eprintf ("Failed to read\n"); break; } - if (isInvalidMemory (anal, buf, bytes_read)) { - if (anal->verbose) { + if (isInvalidMemory (analysis, buf, bytes_read)) { + if (analysis->verbose) { eprintf ("Warning: FFFF opcode at 0x%08"PFMT64x "\n", at); } gotoBeach (RZ_ANAL_RET_ERROR) } - rz_anal_op_fini (&op); - if ((oplen = rz_anal_op (anal, &op, at, buf, bytes_read, RZ_ANAL_OP_MASK_ESIL | RZ_ANAL_OP_MASK_VAL | RZ_ANAL_OP_MASK_HINT)) < 1) { - if (anal->verbose) { - eprintf ("Invalid instruction at 0x%"PFMT64x" with %d bits\n", at, anal->bits); + rz_analysis_op_fini (&op); + if ((oplen = rz_analysis_op (analysis, &op, at, buf, bytes_read, RZ_ANAL_OP_MASK_ESIL | RZ_ANAL_OP_MASK_VAL | RZ_ANAL_OP_MASK_HINT)) < 1) { + if (analysis->verbose) { + eprintf ("Invalid instruction at 0x%"PFMT64x" with %d bits\n", at, analysis->bits); } // gotoBeach (RZ_ANAL_RET_ERROR); // RET_END causes infinite loops somehow gotoBeach (RZ_ANAL_RET_END); } - const char *bp_reg = anal->reg->name[RZ_REG_NAME_BP]; - const char *sp_reg = anal->reg->name[RZ_REG_NAME_SP]; + const char *bp_reg = analysis->reg->name[RZ_REG_NAME_BP]; + const char *sp_reg = analysis->reg->name[RZ_REG_NAME_SP]; bool has_stack_regs = bp_reg && sp_reg; - if (anal->opt.nopskip && fcn->addr == at) { - RzFlagItem *fi = anal->flb.get_at (anal->flb.f, addr, false); + if (analysis->opt.nopskip && fcn->addr == at) { + RzFlagItem *fi = analysis->flb.get_at (analysis->flb.f, addr, false); if (!fi || strncmp (fi->name, "sym.", 4)) { if ((addr + delay.un_idx - oplen) == fcn->addr) { - if (rz_anal_block_relocate (bb, bb->addr + oplen, bb->size - oplen)) { + if (rz_analysis_block_relocate (bb, bb->addr + oplen, bb->size - oplen)) { fcn->addr += oplen; idx = delay.un_idx; goto repeat; @@ -707,7 +707,7 @@ repeat: case RZ_ANAL_OP_TYPE_TRAP: case RZ_ANAL_OP_TYPE_ILL: case RZ_ANAL_OP_TYPE_NOP: - if (rz_anal_block_relocate (bb, at + op.size, bb->size)) { + if (rz_analysis_block_relocate (bb, at + op.size, bb->size)) { addr = at + op.size; fcn->addr = addr; goto repeat; @@ -715,21 +715,21 @@ repeat: } } if (op.hint.new_bits) { - rz_anal_hint_set_bits (anal, op.jump, op.hint.new_bits); + rz_analysis_hint_set_bits (analysis, op.jump, op.hint.new_bits); } if (idx > 0 && !overlapped) { - bbg = bbget (anal, at, anal->opt.jmpmid && is_x86); + bbg = bbget (analysis, at, analysis->opt.jmpmid && is_x86); if (bbg && bbg != bb) { bb->jump = at; - if (anal->opt.jmpmid && is_x86) { + if (analysis->opt.jmpmid && is_x86) { // This happens when we purposefully walked over another block and overlapped it // and now we hit an offset where the instructions match again. // So we need to split the overwalked block. - RzAnalBlock *split = rz_anal_block_split (bbg, at); - rz_anal_block_unref (split); + RzAnalysisBlock *split = rz_analysis_block_split (bbg, at); + rz_analysis_block_unref (split); } overlapped = true; - if (anal->verbose) { + if (analysis->verbose) { eprintf ("Overlapped at 0x%08"PFMT64x "\n", at); } } @@ -739,29 +739,29 @@ repeat: if (newbbsize > MAX_FCN_SIZE) { gotoBeach (RZ_ANAL_RET_ERROR); } - rz_anal_bb_set_offset (bb, bb->ninstr++, at - bb->addr); - rz_anal_block_set_size (bb, newbbsize); + rz_analysis_bb_set_offset (bb, bb->ninstr++, at - bb->addr); + rz_analysis_block_set_size (bb, newbbsize); fcn->ninstr++; } - if (anal->opt.trycatch) { - const char *name = anal->coreb.getName (anal->coreb.core, at); + if (analysis->opt.trycatch) { + const char *name = analysis->coreb.getName (analysis->coreb.core, at); if (name) { if (rz_str_startswith (name, "try.") && rz_str_endswith (name, ".from")) { char *handle = strdup (name); // handle = rz_str_replace (handle, ".from", ".to", 0); - ut64 from_addr = anal->coreb.numGet (anal->coreb.core, handle); + ut64 from_addr = analysis->coreb.numGet (analysis->coreb.core, handle); handle = rz_str_replace (handle, ".from", ".catch", 0); - ut64 handle_addr = anal->coreb.numGet (anal->coreb.core, handle); + ut64 handle_addr = analysis->coreb.numGet (analysis->coreb.core, handle); bb->jump = at + oplen; if (from_addr != bb->addr) { bb->fail = handle_addr; - ret = rz_anal_fcn_bb (anal, fcn, handle_addr, depth); + ret = rz_analysis_fcn_bb (analysis, fcn, handle_addr, depth); eprintf ("(%s) 0x%08"PFMT64x"\n", handle, handle_addr); if (bb->size == 0) { - rz_anal_function_remove_block (fcn, bb); + rz_analysis_function_remove_block (fcn, bb); } - rz_anal_block_unref (bb); - bb = fcn_append_basic_block (anal, fcn, addr); + rz_analysis_block_unref (bb); + bb = fcn_append_basic_block (analysis, fcn, addr); if (!bb) { gotoBeach (RZ_ANAL_RET_ERROR); } @@ -771,13 +771,13 @@ repeat: } idx += oplen; delay.un_idx = idx; - if (anal->opt.delay && op.delay > 0 && !delay.pending) { + if (analysis->opt.delay && op.delay > 0 && !delay.pending) { // Handle first pass through a branch delay jump: // Come back and handle the current instruction later. // Save the location of it in `delay.idx` // note, we have still increased size of basic block // (and function) - if (anal->verbose) { + if (analysis->verbose) { eprintf("Enter branch delay at 0x%08"PFMT64x ". bb->sz=%"PFMT64u"\n", at - oplen, bb->size); } delay.idx = idx - oplen; @@ -792,7 +792,7 @@ repeat: // track of how many still to process. delay.cnt--; if (!delay.cnt) { - if (anal->verbose) { + if (analysis->verbose) { eprintf("Last branch delayed opcode at 0x%08"PFMT64x ". bb->sz=%"PFMT64u"\n", addr + idx - oplen, bb->size); } delay.after = idx; @@ -804,18 +804,18 @@ repeat: // the branch delay. } } else if (op.delay > 0 && delay.pending) { - if (anal->verbose) { + if (analysis->verbose) { eprintf ("Revisit branch delay jump at 0x%08"PFMT64x ". bb->sz=%"PFMT64u"\n", addr + idx - oplen, bb->size); } // This is the second pass of the branch delaying opcode // But we also already counted this instruction in the // size of the current basic block, so we need to fix that if (delay.adjust) { - rz_anal_block_set_size (bb, (ut64)addrbytes * (ut64)delay.after); + rz_analysis_block_set_size (bb, (ut64)addrbytes * (ut64)delay.after); fcn->ninstr--; - if (anal->verbose) { + if (analysis->verbose) { eprintf ("Correct for branch delay @ %08"PFMT64x " bb.addr=%08"PFMT64x " corrected.bb=%"PFMT64u" f.uncorr=%"PFMT64u"\n", - addr + idx - oplen, bb->addr, bb->size, rz_anal_function_linear_size (fcn)); + addr + idx - oplen, bb->addr, bb->size, rz_analysis_function_linear_size (fcn)); } } // Next time, we go to the opcode after the delay count @@ -843,9 +843,9 @@ repeat: } if (op.ptr && op.ptr != UT64_MAX && op.ptr != UT32_MAX) { // swapped parameters - rz_anal_xrefs_set (anal, op.addr, op.ptr, RZ_ANAL_REF_TYPE_DATA); + rz_analysis_xrefs_set (analysis, op.addr, op.ptr, RZ_ANAL_REF_TYPE_DATA); } - analyze_retpoline (anal, &op); + analyze_retpoline (analysis, &op); switch (op.type & RZ_ANAL_OP_TYPE_MASK) { case RZ_ANAL_OP_TYPE_CMOV: case RZ_ANAL_OP_TYPE_MOV: @@ -868,14 +868,14 @@ repeat: } } // skip mov reg, reg - if (anal->opt.jmptbl) { + if (analysis->opt.jmptbl) { if (op.scale && op.ireg) { movdisp = op.disp; } } - if (anal->opt.hpskip && regs_exist (op.src[0], op.dst) + if (analysis->opt.hpskip && regs_exist (op.src[0], op.dst) && !strcmp (op.src[0]->reg->name, op.dst->reg->name)) { - skip_ret = skip_hp (anal, fcn, &op, bb, addr, tmp_buf, oplen, delay.un_idx, &idx); + skip_ret = skip_hp (analysis, fcn, &op, bb, addr, tmp_buf, oplen, delay.un_idx, &idx); if (skip_ret == 1) { goto repeat; } @@ -889,7 +889,7 @@ repeat: // if first byte in op.ptr is 0xff, then set leaddr assuming its a jumptable { ut8 buf[4]; - anal->iob.read_at (anal->iob.io, op.ptr, buf, sizeof (buf)); + analysis->iob.read_at (analysis->iob.io, op.ptr, buf, sizeof (buf)); if ((buf[2] == 0xff || buf[2] == 0xfe) && buf[3] == 0xff) { leaddr_pair *pair = RZ_NEW (leaddr_pair); if (!pair) { @@ -898,7 +898,7 @@ repeat: } pair->op_addr = op.addr; pair->leaddr = op.ptr; // XXX movdisp is dupped but seems to be trashed sometimes(?), better track leaddr separately - rz_list_append (anal->leaddrs, pair); + rz_list_append (analysis->leaddrs, pair); } if (has_stack_regs && op_is_set_bp (&op, bp_reg, sp_reg)) { fcn->bp_off = fcn->stack - op.src[0]->delta; @@ -912,9 +912,9 @@ repeat: } } // skip lea reg,[reg] - if (anal->opt.hpskip && regs_exist (op.src[0], op.dst) + if (analysis->opt.hpskip && regs_exist (op.src[0], op.dst) && !strcmp (op.src[0]->reg->name, op.dst->reg->name)) { - skip_ret = skip_hp (anal, fcn, &op, bb, at, tmp_buf, oplen, delay.un_idx, &idx); + skip_ret = skip_hp (analysis, fcn, &op, bb, at, tmp_buf, oplen, delay.un_idx, &idx); if (skip_ret == 1) { goto repeat; } @@ -922,11 +922,11 @@ repeat: gotoBeach (RZ_ANAL_RET_END); } } - if (anal->opt.jmptbl) { - RzAnalOp jmp_aop = {0}; + if (analysis->opt.jmptbl) { + RzAnalysisOp jmp_aop = {0}; ut64 jmptbl_addr = op.ptr; ut64 casetbl_addr = op.ptr; - if (is_delta_pointer_table (anal, fcn, op.addr, op.ptr, &jmptbl_addr, &casetbl_addr, &jmp_aop)) { + if (is_delta_pointer_table (analysis, fcn, op.addr, op.ptr, &jmptbl_addr, &casetbl_addr, &jmp_aop)) { ut64 table_size, default_case = 0; // we require both checks here since try_get_jmptbl_info uses // BB info of the final jmptbl jump, which is no present with @@ -934,31 +934,31 @@ repeat: // try_get_delta_jmptbl_info doesn't work at times where the // lea comes after the cmp/default case cjmp, which can be // handled with try_get_jmptbl_info - if (try_get_jmptbl_info (anal, fcn, jmp_aop.addr, bb, &table_size, &default_case) - || try_get_delta_jmptbl_info (anal, fcn, jmp_aop.addr, op.addr, &table_size, &default_case)) { + if (try_get_jmptbl_info (analysis, fcn, jmp_aop.addr, bb, &table_size, &default_case) + || try_get_delta_jmptbl_info (analysis, fcn, jmp_aop.addr, op.addr, &table_size, &default_case)) { ret = casetbl_addr == op.ptr - ? try_walkthrough_jmptbl (anal, fcn, bb, depth, jmp_aop.addr, jmptbl_addr, op.ptr, 4, table_size, default_case, 4) - : try_walkthrough_casetbl (anal, fcn, bb, depth, jmp_aop.addr, jmptbl_addr, casetbl_addr, op.ptr, 4, table_size, default_case, 4); + ? try_walkthrough_jmptbl (analysis, fcn, bb, depth, jmp_aop.addr, jmptbl_addr, op.ptr, 4, table_size, default_case, 4) + : try_walkthrough_casetbl (analysis, fcn, bb, depth, jmp_aop.addr, jmptbl_addr, casetbl_addr, op.ptr, 4, table_size, default_case, 4); if (ret) { lea_jmptbl_ip = jmp_aop.addr; } } } - rz_anal_op_fini (&jmp_aop); + rz_analysis_op_fini (&jmp_aop); } break; case RZ_ANAL_OP_TYPE_LOAD: - if (anal->opt.loads) { - if (anal->iob.is_valid_offset (anal->iob.io, op.ptr, 0)) { - rz_meta_set (anal, RZ_META_TYPE_DATA, op.ptr, 4, ""); + if (analysis->opt.loads) { + if (analysis->iob.is_valid_offset (analysis->iob.io, op.ptr, 0)) { + rz_meta_set (analysis, RZ_META_TYPE_DATA, op.ptr, 4, ""); } } break; // Case of valid but unused "add [rax], al" case RZ_ANAL_OP_TYPE_ADD: - if (anal->opt.ijmp) { + if (analysis->opt.ijmp) { if ((op.size + 4 <= bytes_read) && !memcmp (buf + op.size, "\x00\x00\x00\x00", 4)) { - rz_anal_block_set_size (bb, bb->size - oplen); + rz_analysis_block_set_size (bb, bb->size - oplen); op.type = RZ_ANAL_OP_TYPE_RET; gotoBeach (RZ_ANAL_RET_END); } @@ -976,7 +976,7 @@ repeat: gotoBeach (RZ_ANAL_RET_END); } { - RzFlagItem *fi = anal->flb.get_at (anal->flb.f, op.jump, false); + RzFlagItem *fi = analysis->flb.get_at (analysis->flb.f, op.jump, false); if (fi && strstr (fi->name, "imp.")) { gotoBeach (RZ_ANAL_RET_END); } @@ -984,18 +984,18 @@ repeat: if (rz_cons_is_breaked ()) { gotoBeach (RZ_ANAL_RET_END); } - if (anal->opt.jmpref) { - (void) rz_anal_xrefs_set (anal, op.addr, op.jump, RZ_ANAL_REF_TYPE_CODE); + if (analysis->opt.jmpref) { + (void) rz_analysis_xrefs_set (analysis, op.addr, op.jump, RZ_ANAL_REF_TYPE_CODE); } - if (!anal->opt.jmpabove && (op.jump < fcn->addr)) { + if (!analysis->opt.jmpabove && (op.jump < fcn->addr)) { gotoBeach (RZ_ANAL_RET_END); } - if (rz_anal_noreturn_at (anal, op.jump)) { + if (rz_analysis_noreturn_at (analysis, op.jump)) { gotoBeach (RZ_ANAL_RET_END); } { bool must_eob = true; - RzIOMap *map = anal->iob.map_get (anal->iob.io, addr); + RzIOMap *map = analysis->iob.map_get (analysis->iob.io, addr); if (map) { must_eob = (op.jump < map->itv.addr || op.jump >= map->itv.addr + map->itv.size); } @@ -1014,20 +1014,20 @@ repeat: bb->jump = op.jump; bb->fail = UT64_MAX; } - ret = rz_anal_fcn_bb (anal, fcn, op.jump, depth); - int tc = anal->opt.tailcall; + ret = rz_analysis_fcn_bb (analysis, fcn, op.jump, depth); + int tc = analysis->opt.tailcall; if (tc) { // eprintf ("TAIL CALL AT 0x%llx\n", op.addr); int diff = op.jump - op.addr; if (tc < 0) { ut8 buf[32]; - (void)anal->iob.read_at (anal->iob.io, op.jump, (ut8 *) buf, sizeof (buf)); - if (rz_anal_is_prelude (anal, buf, sizeof (buf))) { - fcn_recurse (anal, fcn, op.jump, anal->opt.bb_max_size, depth - 1); + (void)analysis->iob.read_at (analysis->iob.io, op.jump, (ut8 *) buf, sizeof (buf)); + if (rz_analysis_is_prelude (analysis, buf, sizeof (buf))) { + fcn_recurse (analysis, fcn, op.jump, analysis->opt.bb_max_size, depth - 1); } } else if (RZ_ABS (diff) > tc) { - (void) rz_anal_xrefs_set (anal, op.addr, op.jump, RZ_ANAL_REF_TYPE_CALL); - fcn_recurse (anal, fcn, op.jump, anal->opt.bb_max_size, depth - 1); + (void) rz_analysis_xrefs_set (analysis, op.addr, op.jump, RZ_ANAL_REF_TYPE_CALL); + fcn_recurse (analysis, fcn, op.jump, analysis->opt.bb_max_size, depth - 1); gotoBeach (RZ_ANAL_RET_END); } } @@ -1046,8 +1046,8 @@ repeat: cmpval = val; bb->cmpval = cmpval; bb->cmpreg = op.reg; - rz_anal_cond_free (bb->cond); - bb->cond = rz_anal_cond_new_from_op (&op); + rz_analysis_cond_free (bb->cond); + bb->cond = rz_analysis_cond_new_from_op (&op); } } break; @@ -1055,8 +1055,8 @@ repeat: case RZ_ANAL_OP_TYPE_MCJMP: case RZ_ANAL_OP_TYPE_RCJMP: case RZ_ANAL_OP_TYPE_UCJMP: - if (anal->opt.cjmpref) { - (void) rz_anal_xrefs_set (anal, op.addr, op.jump, RZ_ANAL_REF_TYPE_CODE); + if (analysis->opt.cjmpref) { + (void) rz_analysis_xrefs_set (analysis, op.addr, op.jump, RZ_ANAL_REF_TYPE_CODE); } if (!overlapped) { bb->jump = op.jump; @@ -1065,16 +1065,16 @@ repeat: if (bb->cond) { bb->cond->type = op.cond; } - if (anal->opt.jmptbl) { + if (analysis->opt.jmptbl) { if (op.ptr != UT64_MAX) { ut64 table_size, default_case; table_size = cmpval + 1; default_case = op.fail; // is this really default case? if (cmpval != UT64_MAX && default_case != UT64_MAX && (op.reg || op.ireg)) { if (op.ireg) { - ret = try_walkthrough_jmptbl (anal, fcn, bb, depth, op.addr, op.ptr, op.ptr, anal->bits >> 3, table_size, default_case, ret); + ret = try_walkthrough_jmptbl (analysis, fcn, bb, depth, op.addr, op.ptr, op.ptr, analysis->bits >> 3, table_size, default_case, ret); } else { // op.reg - ret = walkthrough_arm_jmptbl_style (anal, fcn, bb, depth, op.addr, op.ptr, anal->bits >> 3, table_size, default_case, ret); + ret = walkthrough_arm_jmptbl_style (analysis, fcn, bb, depth, op.addr, op.ptr, analysis->bits >> 3, table_size, default_case, ret); } // check if op.jump and op.fail contain jump table location // clear jump address, because it's jump table location @@ -1089,14 +1089,14 @@ repeat: } int saved_stack = fcn->stack; if (continue_after_jump) { - rz_anal_fcn_bb (anal, fcn, op.jump, depth); + rz_analysis_fcn_bb (analysis, fcn, op.jump, depth); fcn->stack = saved_stack; - ret = rz_anal_fcn_bb (anal, fcn, op.fail, depth); + ret = rz_analysis_fcn_bb (analysis, fcn, op.fail, depth); fcn->stack = saved_stack; } else { - ret = rz_anal_fcn_bb (anal, fcn, op.jump, depth); + ret = rz_analysis_fcn_bb (analysis, fcn, op.jump, depth); fcn->stack = saved_stack; - ret = rz_anal_fcn_bb (anal, fcn, op.fail, depth); + ret = rz_analysis_fcn_bb (analysis, fcn, op.fail, depth); fcn->stack = saved_stack; if (op.jump < fcn->addr) { if (!overlapped) { @@ -1121,10 +1121,10 @@ repeat: case RZ_ANAL_OP_TYPE_IRCALL: /* call [dst] */ // XXX: this is TYPE_MCALL or indirect-call - (void) rz_anal_xrefs_set (anal, op.addr, op.ptr, RZ_ANAL_REF_TYPE_CALL); + (void) rz_analysis_xrefs_set (analysis, op.addr, op.ptr, RZ_ANAL_REF_TYPE_CALL); - if (rz_anal_noreturn_at (anal, op.ptr)) { - RzAnalFunction *f = rz_anal_get_function_at (anal, op.ptr); + if (rz_analysis_noreturn_at (analysis, op.ptr)) { + RzAnalysisFunction *f = rz_analysis_get_function_at (analysis, op.ptr); if (f) { f->is_noreturn = true; } @@ -1134,10 +1134,10 @@ repeat: case RZ_ANAL_OP_TYPE_CCALL: case RZ_ANAL_OP_TYPE_CALL: /* call dst */ - (void) rz_anal_xrefs_set (anal, op.addr, op.jump, RZ_ANAL_REF_TYPE_CALL); + (void) rz_analysis_xrefs_set (analysis, op.addr, op.jump, RZ_ANAL_REF_TYPE_CALL); - if (rz_anal_noreturn_at (anal, op.jump)) { - RzAnalFunction *f = rz_anal_get_function_at (anal, op.jump); + if (rz_analysis_noreturn_at (analysis, op.jump)) { + RzAnalysisFunction *f = rz_analysis_get_function_at (analysis, op.jump); if (f) { f->is_noreturn = true; } @@ -1154,20 +1154,20 @@ repeat: case RZ_ANAL_OP_TYPE_IJMP: case RZ_ANAL_OP_TYPE_IRJMP: // if the next instruction is a symbol - if (anal->opt.ijmp && isSymbolNextInstruction (anal, &op)) { + if (analysis->opt.ijmp && isSymbolNextInstruction (analysis, &op)) { gotoBeach (RZ_ANAL_RET_END); } // switch statement - if (anal->opt.jmptbl && lea_jmptbl_ip != op.addr) { + if (analysis->opt.jmptbl && lea_jmptbl_ip != op.addr) { // op.ireg since rip relative addressing produces way too many false positives otherwise // op.ireg is 0 for rip relative, "rax", etc otherwise if (op.ptr != UT64_MAX && op.ireg) { // direct jump ut64 table_size, default_case; - if (try_get_jmptbl_info (anal, fcn, op.addr, bb, &table_size, &default_case)) { + if (try_get_jmptbl_info (analysis, fcn, op.addr, bb, &table_size, &default_case)) { bool case_table = false; - RzAnalOp prev_op; - anal->iob.read_at (anal->iob.io, op.addr - op.size, buf, sizeof (buf)); - if (rz_anal_op (anal, &prev_op, op.addr - op.size, buf, sizeof (buf), RZ_ANAL_OP_MASK_VAL) > 0) { + RzAnalysisOp prev_op; + analysis->iob.read_at (analysis->iob.io, op.addr - op.size, buf, sizeof (buf)); + if (rz_analysis_op (analysis, &prev_op, op.addr - op.size, buf, sizeof (buf), RZ_ANAL_OP_MASK_VAL) > 0) { bool prev_op_has_dst_name = prev_op.dst && prev_op.dst->reg && prev_op.dst->reg->name; bool op_has_src_name = op.src[0] && op.src[0]->reg && op.src[0]->reg->name; bool same_reg = (op.ireg && prev_op_has_dst_name && !strcmp (op.ireg, prev_op.dst->reg->name)) @@ -1175,20 +1175,20 @@ repeat: if (prev_op.type == RZ_ANAL_OP_TYPE_MOV && prev_op.disp && prev_op.disp != UT64_MAX && same_reg) { // movzx reg, byte [reg + case_table] // jmp dword [reg*4 + jump_table] - if (try_walkthrough_casetbl (anal, fcn, bb, depth, op.addr, op.ptr, prev_op.disp, op.ptr, anal->bits >> 3, table_size, default_case, ret)) { + if (try_walkthrough_casetbl (analysis, fcn, bb, depth, op.addr, op.ptr, prev_op.disp, op.ptr, analysis->bits >> 3, table_size, default_case, ret)) { ret = case_table = true; } } } - rz_anal_op_fini (&prev_op); + rz_analysis_op_fini (&prev_op); if (!case_table) { - ret = try_walkthrough_jmptbl (anal, fcn, bb, depth, op.addr, op.ptr, op.ptr, anal->bits >> 3, table_size, default_case, ret); + ret = try_walkthrough_jmptbl (analysis, fcn, bb, depth, op.addr, op.ptr, op.ptr, analysis->bits >> 3, table_size, default_case, ret); } } } else if (op.ptr != UT64_MAX && op.reg) { // direct jump ut64 table_size, default_case; - if (try_get_jmptbl_info (anal, fcn, op.addr, bb, &table_size, &default_case)) { - ret = try_walkthrough_jmptbl (anal, fcn, bb, depth, op.addr, op.ptr, op.ptr, anal->bits >> 3, table_size, default_case, ret); + if (try_get_jmptbl_info (analysis, fcn, op.addr, bb, &table_size, &default_case)) { + ret = try_walkthrough_jmptbl (analysis, fcn, bb, depth, op.addr, op.ptr, op.ptr, analysis->bits >> 3, table_size, default_case, ret); } } else if (movdisp == 0) { ut64 jmptbl_base = UT64_MAX; @@ -1197,7 +1197,7 @@ repeat: RzListIter *iter; leaddr_pair *pair; // find nearest candidate leaddr before op.addr - rz_list_foreach (anal->leaddrs, iter, pair) { + rz_list_foreach (analysis->leaddrs, iter, pair) { if (pair->op_addr >= op.addr) { continue; } @@ -1208,42 +1208,42 @@ repeat: } } if (lea_op_iter) { - rz_list_delete (anal->leaddrs, lea_op_iter); + rz_list_delete (analysis->leaddrs, lea_op_iter); } ut64 table_size = cmpval + 1; - ret = try_walkthrough_jmptbl (anal, fcn, bb, depth, op.addr, jmptbl_base, jmptbl_base, 4, table_size, -1, ret); + ret = try_walkthrough_jmptbl (analysis, fcn, bb, depth, op.addr, jmptbl_base, jmptbl_base, 4, table_size, -1, ret); cmpval = UT64_MAX; } else if (movdisp != UT64_MAX) { ut64 table_size, default_case; - if (try_get_jmptbl_info (anal, fcn, op.addr, bb, &table_size, &default_case)) { + if (try_get_jmptbl_info (analysis, fcn, op.addr, bb, &table_size, &default_case)) { op.ptr = movdisp; - ret = try_walkthrough_jmptbl (anal, fcn, bb, depth, op.addr, op.ptr, op.ptr, anal->bits >> 3, table_size, default_case, ret); + ret = try_walkthrough_jmptbl (analysis, fcn, bb, depth, op.addr, op.ptr, op.ptr, analysis->bits >> 3, table_size, default_case, ret); } movdisp = UT64_MAX; } else if (is_arm) { if (op.ptrsize == 1) { // TBB - ut64 pred_cmpval = try_get_cmpval_from_parents(anal, fcn, bb, op.ireg); + ut64 pred_cmpval = try_get_cmpval_from_parents(analysis, fcn, bb, op.ireg); ut64 table_size = 0; if (pred_cmpval != UT64_MAX) { table_size += pred_cmpval; } else { table_size += cmpval; } - ret = try_walkthrough_jmptbl (anal, fcn, bb, depth, op.addr, op.addr + op.size, + ret = try_walkthrough_jmptbl (analysis, fcn, bb, depth, op.addr, op.addr + op.size, op.addr + 4, 1, table_size, UT64_MAX, ret); // skip inlined jumptable idx += table_size; } if (op.ptrsize == 2) { // LDRH on thumb/arm - ut64 pred_cmpval = try_get_cmpval_from_parents(anal, fcn, bb, op.ireg); + ut64 pred_cmpval = try_get_cmpval_from_parents(analysis, fcn, bb, op.ireg); int tablesize = 1; if (pred_cmpval != UT64_MAX) { tablesize += pred_cmpval; } else { tablesize += cmpval; } - ret = try_walkthrough_jmptbl (anal, fcn, bb, depth, op.addr, op.addr + op.size, + ret = try_walkthrough_jmptbl (analysis, fcn, bb, depth, op.addr, op.addr + op.size, op.addr + 4, 2, tablesize, UT64_MAX, ret); // skip inlined jumptable idx += (tablesize * 2); @@ -1253,15 +1253,15 @@ repeat: if (lea_jmptbl_ip == op.addr) { lea_jmptbl_ip = UT64_MAX; } - if (anal->opt.ijmp) { + if (analysis->opt.ijmp) { if (continue_after_jump) { - rz_anal_fcn_bb (anal, fcn, op.jump, depth); - ret = rz_anal_fcn_bb (anal, fcn, op.fail, depth); + rz_analysis_fcn_bb (analysis, fcn, op.jump, depth); + ret = rz_analysis_fcn_bb (analysis, fcn, op.fail, depth); if (overlapped) { goto analopfinish; } } - if (rz_anal_noreturn_at (anal, op.jump) || op.eob) { + if (rz_analysis_noreturn_at (analysis, op.jump) || op.eob) { goto analopfinish; } } else { @@ -1277,8 +1277,8 @@ analopfinish: case RZ_ANAL_OP_TYPE_PUSH: last_is_push = true; last_push_addr = op.val; - if (anal->iob.is_valid_offset (anal->iob.io, last_push_addr, 1)) { - (void) rz_anal_xrefs_set (anal, op.addr, last_push_addr, RZ_ANAL_REF_TYPE_DATA); + if (analysis->iob.is_valid_offset (analysis->iob.io, last_push_addr, 1)) { + (void) rz_analysis_xrefs_set (analysis, op.addr, last_push_addr, RZ_ANAL_REF_TYPE_DATA); } break; case RZ_ANAL_OP_TYPE_UPUSH: @@ -1286,8 +1286,8 @@ analopfinish: && op.src[0]->reg->name && !strcmp (op.src[0]->reg->name, last_reg_mov_lea_name)) { last_is_push = true; last_push_addr = last_reg_mov_lea_val; - if (anal->iob.is_valid_offset (anal->iob.io, last_push_addr, 1)) { - (void) rz_anal_xrefs_set (anal, op.addr, last_push_addr, RZ_ANAL_REF_TYPE_DATA); + if (analysis->iob.is_valid_offset (analysis->iob.io, last_push_addr, 1)) { + (void) rz_analysis_xrefs_set (analysis, op.addr, last_push_addr, RZ_ANAL_REF_TYPE_DATA); } } break; @@ -1295,18 +1295,18 @@ analopfinish: if (op.family == RZ_ANAL_OP_FAMILY_PRIV) { fcn->type = RZ_ANAL_FCN_TYPE_INT; } - if (last_is_push && anal->opt.pushret) { + if (last_is_push && analysis->opt.pushret) { op.type = RZ_ANAL_OP_TYPE_JMP; op.jump = last_push_addr; bb->jump = op.jump; - ret = rz_anal_fcn_bb (anal, fcn, op.jump, depth); + ret = rz_analysis_fcn_bb (analysis, fcn, op.jump, depth); goto beach; } if (!op.cond) { - if (anal->verbose) { + if (analysis->verbose) { eprintf ("RET 0x%08"PFMT64x ". overlap=%s %"PFMT64u" %"PFMT64u"\n", addr + delay.un_idx - oplen, rz_str_bool (overlapped), - bb->size, rz_anal_function_linear_size (fcn)); + bb->size, rz_analysis_function_linear_size (fcn)); } gotoBeach (RZ_ANAL_RET_END); } @@ -1324,8 +1324,8 @@ analopfinish: } } } - if (anal->opt.vars && !varset) { - rz_anal_extract_vars (anal, fcn, &op); + if (analysis->opt.vars && !varset) { + rz_analysis_extract_vars (analysis, fcn, &op); } if (op.type != RZ_ANAL_OP_TYPE_MOV && op.type != RZ_ANAL_OP_TYPE_CMOV && op.type != RZ_ANAL_OP_TYPE_LEA) { last_is_reg_mov_lea = false; @@ -1337,7 +1337,7 @@ analopfinish: last_is_mov_lr_pc = false; } if (has_variadic_reg && !fcn->is_variadic) { - variadic_reg = rz_reg_get (anal->reg, "rax", RZ_REG_TYPE_GPR); + variadic_reg = rz_reg_get (analysis->reg, "rax", RZ_REG_TYPE_GPR); bool dst_is_variadic = op.dst && op.dst->reg && variadic_reg && op.dst->reg->offset == variadic_reg->offset; bool op_is_cmp = (op.type == RZ_ANAL_OP_TYPE_CMP) || op.type == RZ_ANAL_OP_TYPE_ACMP; @@ -1351,31 +1351,31 @@ analopfinish: } } beach: - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); RZ_FREE (last_reg_mov_lea_name); if (bb && bb->size == 0) { - rz_anal_function_remove_block (fcn, bb); + rz_analysis_function_remove_block (fcn, bb); } - rz_anal_block_update_hash (bb); - rz_anal_block_unref (bb); + rz_analysis_block_update_hash (bb); + rz_analysis_block_unref (bb); return ret; } -RZ_API int rz_anal_fcn_bb(RzAnal *anal, RzAnalFunction *fcn, ut64 addr, int depth) { - return fcn_recurse (anal, fcn, addr, anal->opt.bb_max_size, depth - 1); +RZ_API int rz_analysis_fcn_bb(RzAnalysis *analysis, RzAnalysisFunction *fcn, ut64 addr, int depth) { + return fcn_recurse (analysis, fcn, addr, analysis->opt.bb_max_size, depth - 1); } -RZ_API bool rz_anal_check_fcn(RzAnal *anal, ut8 *buf, ut16 bufsz, ut64 addr, ut64 low, ut64 high) { - RzAnalOp op = { +RZ_API bool rz_analysis_check_fcn(RzAnalysis *analysis, ut8 *buf, ut16 bufsz, ut64 addr, ut64 low, ut64 high) { + RzAnalysisOp op = { 0 }; int i, oplen, opcnt = 0, pushcnt = 0, movcnt = 0, brcnt = 0; - if (rz_anal_is_prelude (anal, buf, bufsz)) { + if (rz_analysis_is_prelude (analysis, buf, bufsz)) { return true; } for (i = 0; i < bufsz && opcnt < 10; i += oplen, opcnt++) { - rz_anal_op_fini (&op); - if ((oplen = rz_anal_op (anal, &op, addr + i, buf + i, bufsz - i, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_HINT)) < 1) { + rz_analysis_op_fini (&op); + if ((oplen = rz_analysis_op (analysis, &op, addr + i, buf + i, bufsz - i, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_HINT)) < 1) { return false; } switch (op.type) { @@ -1405,40 +1405,40 @@ RZ_API bool rz_anal_check_fcn(RzAnal *anal, ut8 *buf, ut16 bufsz, ut64 addr, ut6 return (pushcnt + movcnt + brcnt > 5); } -RZ_API void rz_anal_trim_jmprefs(RzAnal *anal, RzAnalFunction *fcn) { - RzAnalRef *ref; - RzList *refs = rz_anal_function_get_refs (fcn); +RZ_API void rz_analysis_trim_jmprefs(RzAnalysis *analysis, RzAnalysisFunction *fcn) { + RzAnalysisRef *ref; + RzList *refs = rz_analysis_function_get_refs (fcn); RzListIter *iter; - const bool is_x86 = anal->cur->arch && !strcmp (anal->cur->arch, "x86"); // HACK + const bool is_x86 = analysis->cur->arch && !strcmp (analysis->cur->arch, "x86"); // HACK rz_list_foreach (refs, iter, ref) { - if (ref->type == RZ_ANAL_REF_TYPE_CODE && rz_anal_function_contains (fcn, ref->addr) - && (!is_x86 || !rz_anal_function_contains (fcn, ref->at))) { - rz_anal_xrefs_deln (anal, ref->at, ref->addr, ref->type); + if (ref->type == RZ_ANAL_REF_TYPE_CODE && rz_analysis_function_contains (fcn, ref->addr) + && (!is_x86 || !rz_analysis_function_contains (fcn, ref->at))) { + rz_analysis_xrefs_deln (analysis, ref->at, ref->addr, ref->type); } } rz_list_free (refs); } -RZ_API void rz_anal_del_jmprefs(RzAnal *anal, RzAnalFunction *fcn) { - RzAnalRef *ref; - RzList *refs = rz_anal_function_get_refs (fcn); +RZ_API void rz_analysis_del_jmprefs(RzAnalysis *analysis, RzAnalysisFunction *fcn) { + RzAnalysisRef *ref; + RzList *refs = rz_analysis_function_get_refs (fcn); RzListIter *iter; rz_list_foreach (refs, iter, ref) { if (ref->type == RZ_ANAL_REF_TYPE_CODE) { - rz_anal_xrefs_deln (anal, ref->at, ref->addr, ref->type); + rz_analysis_xrefs_deln (analysis, ref->at, ref->addr, ref->type); } } rz_list_free (refs); } /* Does NOT invalidate read-ahead cache. */ -RZ_API int rz_anal_fcn(RzAnal *anal, RzAnalFunction *fcn, ut64 addr, ut64 len, int reftype) { - RzPVector *metas = rz_meta_get_all_in(anal, addr, RZ_META_TYPE_ANY); +RZ_API int rz_analysis_fcn(RzAnalysis *analysis, RzAnalysisFunction *fcn, ut64 addr, ut64 len, int reftype) { + RzPVector *metas = rz_meta_get_all_in(analysis, addr, RZ_META_TYPE_ANY); void **it; rz_pvector_foreach (metas, it) { - RzAnalMetaItem *meta = ((RzIntervalNode *)*it)->data; + RzAnalysisMetaItem *meta = ((RzIntervalNode *)*it)->data; switch (meta->type) { case RZ_META_TYPE_DATA: case RZ_META_TYPE_STRING: @@ -1450,19 +1450,19 @@ RZ_API int rz_anal_fcn(RzAnal *anal, RzAnalFunction *fcn, ut64 addr, ut64 len, i } } rz_pvector_free (metas); - if (anal->opt.norevisit) { - if (!anal->visited) { - anal->visited = set_u_new (); + if (analysis->opt.norevisit) { + if (!analysis->visited) { + analysis->visited = set_u_new (); } - if (set_u_contains (anal->visited, addr)) { - eprintf ("rz_anal_fcn: anal.norevisit at 0x%08"PFMT64x" %c\n", addr, reftype); + if (set_u_contains (analysis->visited, addr)) { + eprintf ("rz_analysis_fcn: anal.norevisit at 0x%08"PFMT64x" %c\n", addr, reftype); return RZ_ANAL_RET_END; } - set_u_add (anal->visited, addr); + set_u_add (analysis->visited, addr); } else { - if (anal->visited) { - set_u_free (anal->visited); - anal->visited = NULL; + if (analysis->visited) { + set_u_free (analysis->visited); + analysis->visited = NULL; } } /* defines fcn. or loc. prefix */ @@ -1476,17 +1476,17 @@ RZ_API int rz_anal_fcn(RzAnal *anal, RzAnalFunction *fcn, ut64 addr, ut64 len, i const int shadow_store = 0x28; // First 4 args + retaddr fcn->stack = fcn->maxstack = fcn->reg_save_area = shadow_store; } - int ret = rz_anal_fcn_bb (anal, fcn, addr, anal->opt.depth); + int ret = rz_analysis_fcn_bb (analysis, fcn, addr, analysis->opt.depth); if (ret < 0) { - if (anal->verbose) { + if (analysis->verbose) { eprintf ("Failed to analyze basic block at 0x%"PFMT64x"\n", addr); } } - if (anal->opt.endsize && ret == RZ_ANAL_RET_END && rz_anal_function_realsize (fcn)) { // cfg analysis completed + if (analysis->opt.endsize && ret == RZ_ANAL_RET_END && rz_analysis_function_realsize (fcn)) { // cfg analysis completed RzListIter *iter; - RzAnalBlock *bb; + RzAnalysisBlock *bb; ut64 endaddr = fcn->addr; - const bool is_x86 = anal->cur->arch && !strcmp (anal->cur->arch, "x86"); + const bool is_x86 = analysis->cur->arch && !strcmp (analysis->cur->arch, "x86"); // set function size as length of continuous sequence of bbs rz_list_sort (fcn->bbs, &cmpaddr); @@ -1494,7 +1494,7 @@ RZ_API int rz_anal_fcn(RzAnal *anal, RzAnalFunction *fcn, ut64 addr, ut64 len, i if (endaddr == bb->addr) { endaddr += bb->size; } else if ((endaddr < bb->addr && bb->addr - endaddr < BB_ALIGN) - || (anal->opt.jmpmid && is_x86 && endaddr > bb->addr + || (analysis->opt.jmpmid && is_x86 && endaddr > bb->addr && bb->addr + bb->size > endaddr)) { endaddr = bb->addr + bb->size; } else { @@ -1503,50 +1503,50 @@ RZ_API int rz_anal_fcn(RzAnal *anal, RzAnalFunction *fcn, ut64 addr, ut64 len, i } #if JAYRO_04 // fcn is not yet in anal => pass NULL - rz_anal_function_resize (fcn, endaddr - fcn->addr); + rz_analysis_function_resize (fcn, endaddr - fcn->addr); #endif - rz_anal_trim_jmprefs (anal, fcn); + rz_analysis_trim_jmprefs (analysis, fcn); } return ret; } // XXX deprecate -RZ_API int rz_anal_fcn_del_locs(RzAnal *anal, ut64 addr) { +RZ_API int rz_analysis_fcn_del_locs(RzAnalysis *analysis, ut64 addr) { RzListIter *iter, *iter2; - RzAnalFunction *fcn, *f = rz_anal_get_fcn_in (anal, addr, RZ_ANAL_FCN_TYPE_ROOT); + RzAnalysisFunction *fcn, *f = rz_analysis_get_fcn_in (analysis, addr, RZ_ANAL_FCN_TYPE_ROOT); if (!f) { return false; } - rz_list_foreach_safe (anal->fcns, iter, iter2, fcn) { + rz_list_foreach_safe (analysis->fcns, iter, iter2, fcn) { if (fcn->type != RZ_ANAL_FCN_TYPE_LOC) { continue; } - if (rz_anal_function_contains (fcn, addr)) { - rz_anal_function_delete (fcn); + if (rz_analysis_function_contains (fcn, addr)) { + rz_analysis_function_delete (fcn); } } - rz_anal_fcn_del (anal, addr); + rz_analysis_fcn_del (analysis, addr); return true; } -RZ_API int rz_anal_fcn_del(RzAnal *a, ut64 addr) { - RzAnalFunction *fcn; +RZ_API int rz_analysis_fcn_del(RzAnalysis *a, ut64 addr) { + RzAnalysisFunction *fcn; RzListIter *iter, *iter_tmp; rz_list_foreach_safe (a->fcns, iter, iter_tmp, fcn) { D eprintf ("fcn at %llx %llx\n", fcn->addr, addr); if (fcn->addr == addr) { - rz_anal_function_delete (fcn); + rz_analysis_function_delete (fcn); } } return true; } -RZ_API RzAnalFunction *rz_anal_get_fcn_in(RzAnal *anal, ut64 addr, int type) { - RzList *list = rz_anal_get_functions_in (anal, addr); - RzAnalFunction *ret = NULL; +RZ_API RzAnalysisFunction *rz_analysis_get_fcn_in(RzAnalysis *analysis, ut64 addr, int type) { + RzList *list = rz_analysis_get_functions_in (analysis, addr); + RzAnalysisFunction *ret = NULL; if (list && !rz_list_empty (list)) { if (type == RZ_ANAL_FCN_TYPE_ROOT) { - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; RzListIter *iter; rz_list_foreach (list, iter, fcn) { if (fcn->addr == addr) { @@ -1562,20 +1562,20 @@ RZ_API RzAnalFunction *rz_anal_get_fcn_in(RzAnal *anal, ut64 addr, int type) { return ret; } -RZ_API RzAnalFunction *rz_anal_get_fcn_in_bounds(RzAnal *anal, ut64 addr, int type) { - RzAnalFunction *fcn, *ret = NULL; +RZ_API RzAnalysisFunction *rz_analysis_get_fcn_in_bounds(RzAnalysis *analysis, ut64 addr, int type) { + RzAnalysisFunction *fcn, *ret = NULL; RzListIter *iter; if (type == RZ_ANAL_FCN_TYPE_ROOT) { - rz_list_foreach (anal->fcns, iter, fcn) { + rz_list_foreach (analysis->fcns, iter, fcn) { if (addr == fcn->addr) { return fcn; } } return NULL; } - rz_list_foreach (anal->fcns, iter, fcn) { + rz_list_foreach (analysis->fcns, iter, fcn) { if (!type || (fcn && fcn->type & type)) { - if (rz_anal_function_contains (fcn, addr)) { + if (rz_analysis_function_contains (fcn, addr)) { return fcn; } } @@ -1583,17 +1583,17 @@ RZ_API RzAnalFunction *rz_anal_get_fcn_in_bounds(RzAnal *anal, ut64 addr, int ty return ret; } -RZ_API RzAnalFunction *rz_anal_get_function_byname(RzAnal *a, const char *name) { +RZ_API RzAnalysisFunction *rz_analysis_get_function_byname(RzAnalysis *a, const char *name) { bool found = false; - RzAnalFunction *f = ht_pp_find (a->ht_name_fun, name, &found); + RzAnalysisFunction *f = ht_pp_find (a->ht_name_fun, name, &found); if (f && found) { return f; } return NULL; } -/* rename RzAnalFunctionBB.add() */ -RZ_API bool rz_anal_fcn_add_bb(RzAnal *a, RzAnalFunction *fcn, ut64 addr, ut64 size, ut64 jump, ut64 fail, RZ_BORROW RzAnalDiff *diff) { +/* rename RzAnalysisFunctionBB.add() */ +RZ_API bool rz_analysis_fcn_add_bb(RzAnalysis *a, RzAnalysisFunction *fcn, ut64 addr, ut64 size, ut64 jump, ut64 fail, RZ_BORROW RzAnalysisDiff *diff) { D eprintf ("Add bb\n"); if (size == 0) { // empty basic blocks allowed? eprintf ("Warning: empty basic block at 0x%08"PFMT64x" is not allowed. pending discussion.\n", addr); @@ -1606,38 +1606,38 @@ RZ_API bool rz_anal_fcn_add_bb(RzAnal *a, RzAnalFunction *fcn, ut64 addr, ut64 s return false; } - RzAnalBlock *block = rz_anal_get_block_at (a, addr); + RzAnalysisBlock *block = rz_analysis_get_block_at (a, addr); if (block) { - rz_anal_delete_block (block); + rz_analysis_delete_block (block); block = NULL; } const bool is_x86 = a->cur->arch && !strcmp (a->cur->arch, "x86"); // TODO fix this x86-ism if (is_x86) { - rz_anal_fcn_invalidate_read_ahead_cache (); + rz_analysis_fcn_invalidate_read_ahead_cache (); fcn_recurse (a, fcn, addr, size, 1); - block = rz_anal_get_block_at (a, addr); + block = rz_analysis_get_block_at (a, addr); if (block) { - rz_anal_block_set_size (block, size); + rz_analysis_block_set_size (block, size); } } else { - block = rz_anal_create_block (a, addr, size); + block = rz_analysis_create_block (a, addr, size); } if (!block) { - D eprintf ("Warning: rz_anal_fcn_add_bb failed in fcn 0x%08"PFMT64x" at 0x%08"PFMT64x"\n", fcn->addr, addr); + D eprintf ("Warning: rz_analysis_fcn_add_bb failed in fcn 0x%08"PFMT64x" at 0x%08"PFMT64x"\n", fcn->addr, addr); return false; } - rz_anal_function_add_block (fcn, block); + rz_analysis_function_add_block (fcn, block); block->jump = jump; block->fail = fail; block->fail = fail; if (diff) { if (!block->diff) { - block->diff = rz_anal_diff_new (); + block->diff = rz_analysis_diff_new (); } if (block->diff) { block->diff->type = diff->type; @@ -1651,9 +1651,9 @@ RZ_API bool rz_anal_fcn_add_bb(RzAnal *a, RzAnalFunction *fcn, ut64 addr, ut64 s return true; } -RZ_API int rz_anal_function_loops(RzAnalFunction *fcn) { +RZ_API int rz_analysis_function_loops(RzAnalysisFunction *fcn) { RzListIter *iter; - RzAnalBlock *bb; + RzAnalysisBlock *bb; ut32 loops = 0; rz_list_foreach (fcn->bbs, iter, bb) { if (bb->jump != UT64_MAX && bb->jump < bb->addr) { @@ -1666,21 +1666,21 @@ RZ_API int rz_anal_function_loops(RzAnalFunction *fcn) { return loops; } -RZ_API int rz_anal_function_complexity(RzAnalFunction *fcn) { +RZ_API int rz_analysis_function_complexity(RzAnalysisFunction *fcn) { /* CC = E - N + 2P E = the number of edges of the graph. N = the number of nodes of the graph. P = the number of connected components (exit nodes). */ - RzAnal *anal = fcn->anal; + RzAnalysis *analysis = fcn->analysis; int E = 0, N = 0, P = 0; RzListIter *iter; - RzAnalBlock *bb; + RzAnalysisBlock *bb; rz_list_foreach (fcn->bbs, iter, bb) { N++; // nodes - if ((!anal || anal->verbose) && bb->jump == UT64_MAX && bb->fail != UT64_MAX) { + if ((!analysis || analysis->verbose) && bb->jump == UT64_MAX && bb->fail != UT64_MAX) { eprintf ("Warning: invalid bb jump/fail pair at 0x%08"PFMT64x" (fcn 0x%08"PFMT64x"\n", bb->addr, fcn->addr); } if (bb->jump == UT64_MAX && bb->fail == UT64_MAX) { @@ -1697,7 +1697,7 @@ RZ_API int rz_anal_function_complexity(RzAnalFunction *fcn) { } int result = E - N + (2 * P); - if (result < 1 && (!anal || anal->verbose)) { + if (result < 1 && (!analysis || analysis->verbose)) { eprintf ("Warning: CC = E(%d) - N(%d) + (2 * P(%d)) < 1 at 0x%08"PFMT64x"\n", E, N, P, fcn->addr); } // rz_return_val_if_fail (result > 0, 0); @@ -1705,8 +1705,8 @@ RZ_API int rz_anal_function_complexity(RzAnalFunction *fcn) { } // tfj and afsj call this function -RZ_API char *rz_anal_function_get_json(RzAnalFunction *function) { - RzAnal *a = function->anal; +RZ_API char *rz_analysis_function_get_json(RzAnalysisFunction *function) { + RzAnalysis *a = function->analysis; PJ *pj = a->coreb.pjWithEncoding (a->coreb.core); char *args = strdup (""); char *sdb_ret = rz_str_newf ("func.%s.ret", function->name); @@ -1720,7 +1720,7 @@ RZ_API char *rz_anal_function_get_json(RzAnalFunction *function) { pj_o (pj); pj_ks (pj, "name", function->name); - const bool no_return = rz_anal_noreturn_at_addr (a, function->addr); + const bool no_return = rz_analysis_noreturn_at_addr (a, function->addr); pj_kb (pj, "noreturn", no_return); pj_ks (pj, "ret", ret_type?ret_type: "void"); if (function->cc) { @@ -1754,8 +1754,8 @@ RZ_API char *rz_anal_function_get_json(RzAnalFunction *function) { return pj_drain (pj); } -RZ_API char *rz_anal_function_get_signature(RzAnalFunction *function) { - RzAnal *a = function->anal; +RZ_API char *rz_analysis_function_get_signature(RzAnalysisFunction *function) { + RzAnalysis *a = function->analysis; const char *realname = NULL, *import_substring = NULL; RzFlagItem *flag = a->flag_get (a->flb.f, function->addr); @@ -1813,12 +1813,12 @@ RZ_API char *rz_anal_function_get_signature(RzAnalFunction *function) { } /* set function signature from string */ -RZ_API int rz_anal_str_to_fcn(RzAnal *a, RzAnalFunction *f, const char *sig) { +RZ_API int rz_analysis_str_to_fcn(RzAnalysis *a, RzAnalysisFunction *f, const char *sig) { rz_return_val_if_fail (a || f || sig, false); char *error_msg = NULL; const char *out = rz_parse_c_string (a, sig, &error_msg); if (out) { - rz_anal_save_parsed_type (a, out); + rz_analysis_save_parsed_type (a, out); } if (error_msg) { eprintf ("%s", error_msg); @@ -1828,11 +1828,11 @@ RZ_API int rz_anal_str_to_fcn(RzAnal *a, RzAnalFunction *f, const char *sig) { return true; } -RZ_API RzAnalFunction *rz_anal_fcn_next(RzAnal *anal, ut64 addr) { - RzAnalFunction *fcni; +RZ_API RzAnalysisFunction *rz_analysis_fcn_next(RzAnalysis *analysis, ut64 addr) { + RzAnalysisFunction *fcni; RzListIter *iter; - RzAnalFunction *closer = NULL; - rz_list_foreach (anal->fcns, iter, fcni) { + RzAnalysisFunction *closer = NULL; + rz_list_foreach (analysis->fcns, iter, fcni) { // if (fcni->addr == addr) if (fcni->addr > addr && (!closer || fcni->addr < closer->addr)) { closer = fcni; @@ -1841,11 +1841,11 @@ RZ_API RzAnalFunction *rz_anal_fcn_next(RzAnal *anal, ut64 addr) { return closer; } -RZ_API int rz_anal_fcn_count(RzAnal *anal, ut64 from, ut64 to) { +RZ_API int rz_analysis_fcn_count(RzAnalysis *analysis, ut64 from, ut64 to) { int n = 0; - RzAnalFunction *fcni; + RzAnalysisFunction *fcni; RzListIter *iter; - rz_list_foreach (anal->fcns, iter, fcni) { + rz_list_foreach (analysis->fcns, iter, fcni) { if (fcni->addr >= from && fcni->addr < to) { n++; } @@ -1855,31 +1855,31 @@ RZ_API int rz_anal_fcn_count(RzAnal *anal, ut64 from, ut64 to) { /* return the basic block in fcn found at the given address. * NULL is returned if such basic block doesn't exist. */ -RZ_API RzAnalBlock *rz_anal_fcn_bbget_in(const RzAnal *anal, RzAnalFunction *fcn, ut64 addr) { - rz_return_val_if_fail (anal && fcn, NULL); +RZ_API RzAnalysisBlock *rz_analysis_fcn_bbget_in(const RzAnalysis *analysis, RzAnalysisFunction *fcn, ut64 addr) { + rz_return_val_if_fail (analysis && fcn, NULL); if (addr == UT64_MAX) { return NULL; } - const bool is_x86 = anal->cur->arch && !strcmp (anal->cur->arch, "x86"); + const bool is_x86 = analysis->cur->arch && !strcmp (analysis->cur->arch, "x86"); RzListIter *iter; - RzAnalBlock *bb; + RzAnalysisBlock *bb; rz_list_foreach (fcn->bbs, iter, bb) { if (addr >= bb->addr && addr < (bb->addr + bb->size) - && (!anal->opt.jmpmid || !is_x86 || rz_anal_block_op_starts_at (bb, addr))) { + && (!analysis->opt.jmpmid || !is_x86 || rz_analysis_block_op_starts_at (bb, addr))) { return bb; } } return NULL; } -RZ_API RzAnalBlock *rz_anal_fcn_bbget_at(RzAnal *anal, RzAnalFunction *fcn, ut64 addr) { +RZ_API RzAnalysisBlock *rz_analysis_fcn_bbget_at(RzAnalysis *analysis, RzAnalysisFunction *fcn, ut64 addr) { rz_return_val_if_fail (fcn && addr != UT64_MAX, NULL); - RzAnalBlock *b = rz_anal_get_block_at (anal, addr); + RzAnalysisBlock *b = rz_analysis_get_block_at (analysis, addr); if (b) { return b; } RzListIter *iter; - RzAnalBlock *bb; + RzAnalysisBlock *bb; rz_list_foreach (fcn->bbs, iter, bb) { if (addr == bb->addr) { return bb; @@ -1889,43 +1889,43 @@ RZ_API RzAnalBlock *rz_anal_fcn_bbget_at(RzAnal *anal, RzAnalFunction *fcn, ut64 } // compute the cyclomatic cost -RZ_API ut32 rz_anal_function_cost(RzAnalFunction *fcn) { +RZ_API ut32 rz_analysis_function_cost(RzAnalysisFunction *fcn) { RzListIter *iter; - RzAnalBlock *bb; + RzAnalysisBlock *bb; ut32 totalCycles = 0; if (!fcn) { return 0; } - RzAnal *anal = fcn->anal; + RzAnalysis *analysis = fcn->analysis; rz_list_foreach (fcn->bbs, iter, bb) { - RzAnalOp op; + RzAnalysisOp op; ut64 at, end = bb->addr + bb->size; ut8 *buf = malloc (bb->size); if (!buf) { continue; } - (void)anal->iob.read_at (anal->iob.io, bb->addr, (ut8 *) buf, bb->size); + (void)analysis->iob.read_at (analysis->iob.io, bb->addr, (ut8 *) buf, bb->size); int idx = 0; for (at = bb->addr; at < end;) { memset (&op, 0, sizeof (op)); - (void) rz_anal_op (anal, &op, at, buf + idx, bb->size - idx, RZ_ANAL_OP_MASK_BASIC); + (void) rz_analysis_op (analysis, &op, at, buf + idx, bb->size - idx, RZ_ANAL_OP_MASK_BASIC); if (op.size < 1) { op.size = 1; } idx += op.size; at += op.size; totalCycles += op.cycles; - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); } free (buf); } return totalCycles; } -RZ_API int rz_anal_function_count_edges(const RzAnalFunction *fcn, RZ_NULLABLE int *ebbs) { +RZ_API int rz_analysis_function_count_edges(const RzAnalysisFunction *fcn, RZ_NULLABLE int *ebbs) { rz_return_val_if_fail (fcn, 0); RzListIter *iter; - RzAnalBlock *bb; + RzAnalysisBlock *bb; int edges = 0; if (ebbs) { *ebbs = 0; @@ -1945,7 +1945,7 @@ RZ_API int rz_anal_function_count_edges(const RzAnalFunction *fcn, RZ_NULLABLE i return edges; } -RZ_API bool rz_anal_function_purity(RzAnalFunction *fcn) { +RZ_API bool rz_analysis_function_purity(RzAnalysisFunction *fcn) { if (fcn->has_changed) { HtUP *ht = ht_up_new (NULL, NULL, NULL); if (ht) { @@ -1956,12 +1956,12 @@ RZ_API bool rz_anal_function_purity(RzAnalFunction *fcn) { return fcn->is_pure; } -static bool can_affect_bp(RzAnal *anal, RzAnalOp* op) { - RzAnalValue *dst = op->dst; - RzAnalValue *src = op->src[0]; +static bool can_affect_bp(RzAnalysis *analysis, RzAnalysisOp* op) { + RzAnalysisValue *dst = op->dst; + RzAnalysisValue *src = op->src[0]; const char *opdreg = (dst && dst->reg) ? dst->reg->name : NULL; const char *opsreg = (src && src->reg) ? src->reg->name : NULL; - const char *bp_name = anal->reg->name[RZ_REG_NAME_BP]; + const char *bp_name = analysis->reg->name[RZ_REG_NAME_BP]; bool is_bp_dst = opdreg && !dst->memref && !strcmp (opdreg, bp_name); bool is_bp_src = opsreg && !src->memref && !strcmp (opsreg, bp_name); if (op->type == RZ_ANAL_OP_TYPE_XCHG) { @@ -1974,36 +1974,36 @@ static bool can_affect_bp(RzAnal *anal, RzAnalOp* op) { * This function checks whether any operation in a given function may change bp (excluding "mov bp, sp" * and "pop bp" at the end). */ -static void __anal_fcn_check_bp_use(RzAnal *anal, RzAnalFunction *fcn) { +static void __anal_fcn_check_bp_use(RzAnalysis *analysis, RzAnalysisFunction *fcn) { RzListIter *iter; - RzAnalBlock *bb; + RzAnalysisBlock *bb; char str_to_find[40] = "\"type\":\"reg\",\"value\":\""; char *pos; - strncat (str_to_find, anal->reg->name[RZ_REG_NAME_BP], 39); + strncat (str_to_find, analysis->reg->name[RZ_REG_NAME_BP], 39); if (!fcn) { return; } rz_list_foreach (fcn->bbs, iter, bb) { - RzAnalOp op; + RzAnalysisOp op; ut64 at, end = bb->addr + bb->size; ut8 *buf = malloc (bb->size); if (!buf) { continue; } - (void)anal->iob.read_at (anal->iob.io, bb->addr, (ut8 *) buf, bb->size); + (void)analysis->iob.read_at (analysis->iob.io, bb->addr, (ut8 *) buf, bb->size); int idx = 0; for (at = bb->addr; at < end;) { - rz_anal_op (anal, &op, at, buf + idx, bb->size - idx, RZ_ANAL_OP_MASK_VAL | RZ_ANAL_OP_MASK_OPEX); + rz_analysis_op (analysis, &op, at, buf + idx, bb->size - idx, RZ_ANAL_OP_MASK_VAL | RZ_ANAL_OP_MASK_OPEX); if (op.size < 1) { op.size = 1; } switch (op.type) { case RZ_ANAL_OP_TYPE_MOV: case RZ_ANAL_OP_TYPE_LEA: - if (can_affect_bp (anal, &op) && op.src[0] && op.src[0]->reg && op.src[0]->reg->name - && strcmp (op.src[0]->reg->name, anal->reg->name[RZ_REG_NAME_SP])) { + if (can_affect_bp (analysis, &op) && op.src[0] && op.src[0]->reg && op.src[0]->reg->name + && strcmp (op.src[0]->reg->name, analysis->reg->name[RZ_REG_NAME_SP])) { fcn->bp_frame = false; - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); free (buf); return; } @@ -2025,7 +2025,7 @@ static void __anal_fcn_check_bp_use(RzAnal *anal, RzAnalFunction *fcn) { pos = op.opex.ptr ? strstr (op.opex.ptr, str_to_find) : NULL; if (pos && pos - op.opex.ptr < 60) { fcn->bp_frame = false; - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); free (buf); return; } @@ -2033,7 +2033,7 @@ static void __anal_fcn_check_bp_use(RzAnal *anal, RzAnalFunction *fcn) { case RZ_ANAL_OP_TYPE_XCHG: if (op.opex.ptr && strstr (op.opex.ptr, str_to_find)) { fcn->bp_frame = false; - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); free (buf); return; } @@ -2045,23 +2045,23 @@ static void __anal_fcn_check_bp_use(RzAnal *anal, RzAnalFunction *fcn) { } idx += op.size; at += op.size; - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); } free (buf); } } -RZ_API void rz_anal_function_check_bp_use(RzAnalFunction *fcn) { +RZ_API void rz_analysis_function_check_bp_use(RzAnalysisFunction *fcn) { rz_return_if_fail (fcn); - __anal_fcn_check_bp_use (fcn->anal, fcn); + __anal_fcn_check_bp_use (fcn->analysis, fcn); } typedef struct { - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; HtUP *visited; } BlockRecurseCtx; -static bool mark_as_visited(RzAnalBlock *bb, void *user) { +static bool mark_as_visited(RzAnalysisBlock *bb, void *user) { BlockRecurseCtx *ctx = user; ht_up_insert (ctx->visited, bb->addr, NULL); return true; @@ -2069,29 +2069,29 @@ static bool mark_as_visited(RzAnalBlock *bb, void *user) { static bool analize_addr_cb(ut64 addr, void *user) { BlockRecurseCtx *ctx = user; - RzAnal *anal = ctx->fcn->anal; - RzAnalBlock *existing_bb = rz_anal_get_block_at (anal, addr); + RzAnalysis *analysis = ctx->fcn->analysis; + RzAnalysisBlock *existing_bb = rz_analysis_get_block_at (analysis, addr); if (!existing_bb || !rz_list_contains (ctx->fcn->bbs, existing_bb)) { int old_len = rz_list_length (ctx->fcn->bbs); - rz_anal_fcn_bb (ctx->fcn->anal, ctx->fcn, addr, anal->opt.depth); + rz_analysis_fcn_bb (ctx->fcn->analysis, ctx->fcn, addr, analysis->opt.depth); if (old_len != rz_list_length (ctx->fcn->bbs)) { - rz_anal_block_recurse (rz_anal_get_block_at (anal, addr), mark_as_visited, user); + rz_analysis_block_recurse (rz_analysis_get_block_at (analysis, addr), mark_as_visited, user); } } ht_up_insert (ctx->visited, addr, NULL); return true; } -static bool analize_descendents(RzAnalBlock *bb, void *user) { - return rz_anal_block_successor_addrs_foreach (bb, analize_addr_cb, user); +static bool analize_descendents(RzAnalysisBlock *bb, void *user) { + return rz_analysis_block_successor_addrs_foreach (bb, analize_addr_cb, user); } static void free_ht_up(HtUPKv *kv) { ht_up_free ((HtUP *)kv->value); } -static void update_varz_analysis(RzAnalFunction *fcn, int align, ut64 from, ut64 to) { - RzAnal *anal = fcn->anal; +static void update_varz_analysisysis(RzAnalysisFunction *fcn, int align, ut64 from, ut64 to) { + RzAnalysis *analysis = fcn->analysis; ut64 cur_addr; int opsz; from = align ? from - (from % align) : from; @@ -2104,62 +2104,62 @@ static void update_varz_analysis(RzAnalFunction *fcn, int align, ut64 from, ut64 if (!buf) { return; } - if (anal->iob.read_at (anal->iob.io, from, buf, len) < len) { + if (analysis->iob.read_at (analysis->iob.io, from, buf, len) < len) { return; } for (cur_addr = from; cur_addr < to; cur_addr += opsz, len -= opsz) { - RzAnalOp op; - int ret = rz_anal_op (anal->coreb.core, &op, cur_addr, buf, len, RZ_ANAL_OP_MASK_ESIL | RZ_ANAL_OP_MASK_VAL); + RzAnalysisOp op; + int ret = rz_analysis_op (analysis->coreb.core, &op, cur_addr, buf, len, RZ_ANAL_OP_MASK_ESIL | RZ_ANAL_OP_MASK_VAL); if (ret < 1 || op.size < 1) { - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); break; } opsz = op.size; - rz_anal_extract_vars (anal, fcn, &op); - rz_anal_op_fini (&op); + rz_analysis_extract_vars (analysis, fcn, &op); + rz_analysis_op_fini (&op); } free (buf); } // Clear function variable acesses inside in a block -static void clear_bb_vars(RzAnalFunction *fcn, RzAnalBlock *bb, ut64 from, ut64 to) { +static void clear_bb_vars(RzAnalysisFunction *fcn, RzAnalysisBlock *bb, ut64 from, ut64 to) { int i; if (rz_pvector_empty (&fcn->vars)) { return; } for (i = 0; i < bb->ninstr; i++) { - const ut64 addr = rz_anal_bb_opaddr_i (bb, i); + const ut64 addr = rz_analysis_bb_opaddr_i (bb, i); if (addr < from) { continue; } if (addr >= to || addr == UT64_MAX) { break; } - RzPVector *vars = rz_anal_function_get_vars_used_at (fcn, addr); + RzPVector *vars = rz_analysis_function_get_vars_used_at (fcn, addr); if (vars) { RzPVector *vars_clone = (RzPVector *)rz_vector_clone ((RzVector *)vars); void **v; rz_pvector_foreach (vars_clone, v) { - rz_anal_var_remove_access_at ((RzAnalVar *)*v, addr); + rz_analysis_var_remove_access_at ((RzAnalysisVar *)*v, addr); } rz_pvector_clear (vars_clone); } } } -static void update_analysis(RzAnal *anal, RzList *fcns, HtUP *reachable) { +static void update_analysis(RzAnalysis *analysis, RzList *fcns, HtUP *reachable) { RzListIter *it, *it2, *tmp; - RzAnalFunction *fcn; - bool old_jmpmid = anal->opt.jmpmid; - anal->opt.jmpmid = true; - rz_anal_fcn_invalidate_read_ahead_cache (); + RzAnalysisFunction *fcn; + bool old_jmpmid = analysis->opt.jmpmid; + analysis->opt.jmpmid = true; + rz_analysis_fcn_invalidate_read_ahead_cache (); rz_list_foreach (fcns, it, fcn) { // Recurse through blocks of function, mark reachable, // analyze edges that don't have a block - RzAnalBlock *bb = rz_anal_get_block_at (anal, fcn->addr); + RzAnalysisBlock *bb = rz_analysis_get_block_at (analysis, fcn->addr); if (!bb) { - rz_anal_fcn_bb (anal, fcn, fcn->addr, anal->opt.depth); - bb = rz_anal_get_block_at (anal, fcn->addr); + rz_analysis_fcn_bb (analysis, fcn, fcn->addr, analysis->opt.depth); + bb = rz_analysis_get_block_at (analysis, fcn->addr); if (!bb) { continue; } @@ -2167,7 +2167,7 @@ static void update_analysis(RzAnal *anal, RzList *fcns, HtUP *reachable) { HtUP *ht = ht_up_new0 (); ht_up_insert (ht, bb->addr, NULL); BlockRecurseCtx ctx = { fcn, ht }; - rz_anal_block_recurse (bb, analize_descendents, &ctx); + rz_analysis_block_recurse (bb, analize_descendents, &ctx); // Remove non-reachable blocks rz_list_foreach_safe (fcn->bbs, it2, tmp, bb) { @@ -2180,18 +2180,18 @@ static void update_analysis(RzAnal *anal, RzList *fcns, HtUP *reachable) { continue; } fcn->ninstr -= bb->ninstr; - rz_anal_function_remove_block (fcn, bb); + rz_analysis_function_remove_block (fcn, bb); } RzList *bbs = rz_list_clone (fcn->bbs); - rz_anal_block_automerge (bbs); - rz_anal_function_delete_unused_vars (fcn); + rz_analysis_block_automerge (bbs); + rz_analysis_function_delete_unused_vars (fcn); rz_list_free (bbs); } - anal->opt.jmpmid = old_jmpmid; + analysis->opt.jmpmid = old_jmpmid; } -static void calc_reachable_and_remove_block(RzList *fcns, RzAnalFunction *fcn, RzAnalBlock *bb, HtUP *reachable) { +static void calc_reachable_and_remove_block(RzList *fcns, RzAnalysisFunction *fcn, RzAnalysisBlock *bb, HtUP *reachable) { clear_bb_vars (fcn, bb, bb->addr, bb->addr + bb->size); if (!rz_list_contains (fcns, fcn)) { rz_list_append (fcns, fcn); @@ -2199,68 +2199,68 @@ static void calc_reachable_and_remove_block(RzList *fcns, RzAnalFunction *fcn, R // Calculate reachable blocks from the start of function HtUP *ht = ht_up_new0 (); BlockRecurseCtx ctx = { fcn, ht }; - rz_anal_block_recurse (rz_anal_get_block_at (fcn->anal, fcn->addr), mark_as_visited, &ctx); + rz_analysis_block_recurse (rz_analysis_get_block_at (fcn->analysis, fcn->addr), mark_as_visited, &ctx); ht_up_insert (reachable, fcn->addr, ht); } fcn->ninstr -= bb->ninstr; - rz_anal_function_remove_block (fcn, bb); + rz_analysis_function_remove_block (fcn, bb); } -RZ_API void rz_anal_update_analysis_range(RzAnal *anal, ut64 addr, int size) { - rz_return_if_fail (anal); +RZ_API void rz_analysis_update_analysis_range(RzAnalysis *analysis, ut64 addr, int size) { + rz_return_if_fail (analysis); RzListIter *it, *it2, *tmp; - RzAnalBlock *bb; - RzAnalFunction *fcn; - RzList *blocks = rz_anal_get_blocks_intersect (anal, addr, size); + RzAnalysisBlock *bb; + RzAnalysisFunction *fcn; + RzList *blocks = rz_analysis_get_blocks_intersect (analysis, addr, size); if (rz_list_empty (blocks)) { rz_list_free (blocks); return; } RzList *fcns = rz_list_new (); HtUP *reachable = ht_up_new (NULL, free_ht_up, NULL); - const int align = rz_anal_archinfo (anal, RZ_ANAL_ARCHINFO_ALIGN); + const int align = rz_analysis_archinfo (analysis, RZ_ANAL_ARCHINFO_ALIGN); const ut64 end_write = addr + size; rz_list_foreach (blocks, it, bb) { - if (!rz_anal_block_was_modified (bb)) { + if (!rz_analysis_block_was_modified (bb)) { continue; } rz_list_foreach_safe (bb->fcns, it2, tmp, fcn) { if (align > 1) { - if ((end_write < rz_anal_bb_opaddr_i (bb, bb->ninstr - 1)) + if ((end_write < rz_analysis_bb_opaddr_i (bb, bb->ninstr - 1)) && (!bb->switch_op || end_write < bb->switch_op->addr)) { // Special case when instructions are aligned and we don't // need to worry about a write messing with the jump instructions clear_bb_vars (fcn, bb, addr > bb->addr ? addr : bb->addr, end_write); - update_varz_analysis (fcn, align, addr > bb->addr ? addr : bb->addr, end_write); - rz_anal_function_delete_unused_vars (fcn); + update_varz_analysisysis (fcn, align, addr > bb->addr ? addr : bb->addr, end_write); + rz_analysis_function_delete_unused_vars (fcn); continue; } } calc_reachable_and_remove_block (fcns, fcn, bb, reachable); } } - rz_list_free (blocks); // This will call rz_anal_block_unref to actually remove blocks from RzAnal - update_analysis (anal, fcns, reachable); + rz_list_free (blocks); // This will call rz_analysis_block_unref to actually remove blocks from RzAnalysis + update_analysis (analysis, fcns, reachable); ht_up_free (reachable); rz_list_free (fcns); } -RZ_API void rz_anal_function_update_analysis(RzAnalFunction *fcn) { +RZ_API void rz_analysis_function_update_analysis(RzAnalysisFunction *fcn) { rz_return_if_fail (fcn); RzListIter *it, *it2, *tmp, *tmp2; - RzAnalBlock *bb; - RzAnalFunction *f; + RzAnalysisBlock *bb; + RzAnalysisFunction *f; RzList *fcns = rz_list_new (); HtUP *reachable = ht_up_new (NULL, free_ht_up, NULL); rz_list_foreach_safe (fcn->bbs, it, tmp, bb) { - if (rz_anal_block_was_modified (bb)) { + if (rz_analysis_block_was_modified (bb)) { rz_list_foreach_safe (bb->fcns, it2, tmp2, f) { calc_reachable_and_remove_block (fcns, f, bb, reachable); } } } - update_analysis (fcn->anal, fcns, reachable); + update_analysis (fcn->analysis, fcns, reachable); ht_up_free (reachable); rz_list_free (fcns); } diff --git a/librz/anal/flirt.c b/librz/analysis/flirt.c similarity index 91% rename from librz/anal/flirt.c rename to librz/analysis/flirt.c index 59036076ac..fb58d02715 100644 --- a/librz/anal/flirt.c +++ b/librz/analysis/flirt.c @@ -444,64 +444,64 @@ static void node_free(RzFlirtNode *node) { free (node); } -static void print_module(const RzAnal *anal, const RzFlirtModule *module) { +static void print_module(const RzAnalysis *analysis, const RzFlirtModule *module) { RzListIter *pub_func_it, *ref_func_it, *tail_byte_it; RzFlirtFunction *func, *ref_func; RzFlirtTailByte *tail_byte; - anal->cb_printf ("%02X %04X %04X ", module->crc_length, module->crc16, module->length); + analysis->cb_printf ("%02X %04X %04X ", module->crc_length, module->crc16, module->length); rz_list_foreach (module->public_functions, pub_func_it, func) { if (func->is_local || func->is_collision) { - anal->cb_printf ("("); + analysis->cb_printf ("("); if (func->is_local) { - anal->cb_printf ("l"); + analysis->cb_printf ("l"); } if (func->is_collision) { - anal->cb_printf ("!"); + analysis->cb_printf ("!"); } - anal->cb_printf (")"); + analysis->cb_printf (")"); } - anal->cb_printf ("%04X:%s", func->offset, func->name); + analysis->cb_printf ("%04X:%s", func->offset, func->name); if (pub_func_it->n) { - anal->cb_printf (" "); + analysis->cb_printf (" "); } } if (module->tail_bytes) { rz_list_foreach (module->tail_bytes, tail_byte_it, tail_byte) { - anal->cb_printf (" (%04X: %02X)", tail_byte->offset, tail_byte->value); + analysis->cb_printf (" (%04X: %02X)", tail_byte->offset, tail_byte->value); } } if (module->referenced_functions) { - anal->cb_printf (" (REF "); + analysis->cb_printf (" (REF "); rz_list_foreach (module->referenced_functions, ref_func_it, ref_func) { - anal->cb_printf ("%04X: %s", ref_func->offset, ref_func->name); + analysis->cb_printf ("%04X: %s", ref_func->offset, ref_func->name); if (ref_func_it->n) { - anal->cb_printf (" "); + analysis->cb_printf (" "); } } - anal->cb_printf (")"); + analysis->cb_printf (")"); } - anal->cb_printf ("\n"); + analysis->cb_printf ("\n"); } -static void print_node_pattern(const RzAnal *anal, const RzFlirtNode *node) { +static void print_node_pattern(const RzAnalysis *analysis, const RzFlirtNode *node) { int i; for (i = 0; i < node->length; i++) { if (node->variant_bool_array[i]) { - anal->cb_printf (".."); + analysis->cb_printf (".."); } else { - anal->cb_printf ("%02X", node->pattern_bytes[i]); + analysis->cb_printf ("%02X", node->pattern_bytes[i]); } } - anal->cb_printf (":\n"); + analysis->cb_printf (":\n"); } -static void print_indentation(const RzAnal *anal, int indent) { - anal->cb_printf ("%s", rz_str_pad (' ', indent)); +static void print_indentation(const RzAnalysis *analysis, int indent) { + analysis->cb_printf ("%s", rz_str_pad (' ', indent)); } -static void print_node(const RzAnal *anal, const RzFlirtNode *node, int indent) { +static void print_node(const RzAnalysis *analysis, const RzFlirtNode *node, int indent) { /*Prints a signature node. The output is similar to dumpsig*/ int i; RzListIter *child_it, *module_it; @@ -509,31 +509,31 @@ static void print_node(const RzAnal *anal, const RzFlirtNode *node, int indent) RzFlirtModule *module; if (node->pattern_bytes) { // avoid printing the root node - print_indentation (anal, indent); - print_node_pattern (anal, node); + print_indentation (analysis, indent); + print_node_pattern (analysis, node); } if (node->child_list) { rz_list_foreach (node->child_list, child_it, child) { - print_node (anal, child, indent + 1); + print_node (analysis, child, indent + 1); } } else if (node->module_list) { i = 0; rz_list_foreach (node->module_list, module_it, module) { - print_indentation (anal, indent + 1); - anal->cb_printf ("%d. ", i); - print_module (anal, module); + print_indentation (analysis, indent + 1); + analysis->cb_printf ("%d. ", i); + print_module (analysis, module); i++; } } } -static int module_match_buffer(RzAnal *anal, const RzFlirtModule *module, +static int module_match_buffer(RzAnalysis *analysis, const RzFlirtModule *module, ut8 *b, ut64 address, ut32 buf_size) { /* Returns true if module matches b, according to the signatures infos. * Return false otherwise. * The buffer starts from the first byte after the pattern */ RzFlirtFunction *flirt_func; - RzAnalFunction *next_module_function; + RzAnalysisFunction *next_module_function; RzListIter *tail_byte_it, *flirt_func_it; RzFlirtTailByte *tail_byte; @@ -556,7 +556,7 @@ static int module_match_buffer(RzAnal *anal, const RzFlirtModule *module, // Once the first module function is found, we need to go through the module->public_functions // list to identify the others. See flirt doc for more information - next_module_function = rz_anal_get_function_at ((RzAnal *) anal, address + flirt_func->offset); + next_module_function = rz_analysis_get_function_at ((RzAnalysis *) analysis, address + flirt_func->offset); if (next_module_function) { char *name; int name_offs = 0; @@ -575,27 +575,27 @@ static int module_match_buffer(RzAnal *anal, const RzFlirtModule *module, next_flirt_func_it = next_flirt_func_it->n; } // resize function if needed - next_module_function_size = rz_anal_function_linear_size (next_module_function); + next_module_function_size = rz_analysis_function_linear_size (next_module_function); if (next_module_function_size < flirt_fcn_size) { RzListIter *iter; RzListIter *iter_tmp; - RzAnalFunction *fcn; - rz_list_foreach_safe (anal->fcns, iter, iter_tmp, fcn) { + RzAnalysisFunction *fcn; + rz_list_foreach_safe (analysis->fcns, iter, iter_tmp, fcn) { if (fcn != next_module_function && fcn->addr >= next_module_function->addr + next_module_function_size && fcn->addr < next_module_function->addr + flirt_fcn_size) { RzListIter *iter_bb; - RzAnalBlock *block; + RzAnalysisBlock *block; rz_list_foreach (fcn->bbs, iter_bb, block) { - rz_anal_function_add_block (next_module_function, block); + rz_analysis_function_add_block (next_module_function, block); } next_module_function->ninstr += fcn->ninstr; - rz_anal_function_delete (fcn); + rz_analysis_function_delete (fcn); } } - rz_anal_function_resize (next_module_function, flirt_fcn_size); - next_module_function_size = rz_anal_function_linear_size (next_module_function); - rz_anal_trim_jmprefs ((RzAnal *)anal, next_module_function); + rz_analysis_function_resize (next_module_function, flirt_fcn_size); + next_module_function_size = rz_analysis_function_linear_size (next_module_function); + rz_analysis_trim_jmprefs ((RzAnalysis *)analysis, next_module_function); } @@ -608,9 +608,9 @@ static int module_match_buffer(RzAnal *anal, const RzFlirtModule *module, name = rz_name_filter2 (flirt_func->name + name_offs); free (next_module_function->name); next_module_function->name = rz_str_newf ("flirt.%s", name); - anal->flb.set (anal->flb.f, next_module_function->name, + analysis->flb.set (analysis->flb.f, next_module_function->name, next_module_function->addr, next_module_function_size); - anal->cb_printf ("Found %s\n", next_module_function->name); + analysis->cb_printf ("Found %s\n", next_module_function->name); free (name); } } @@ -634,7 +634,7 @@ static int node_pattern_match(const RzFlirtNode *node, ut8 *b, int buf_size) { return true; } -static int node_match_buffer(RzAnal *anal, const RzFlirtNode *node, ut8 *b, ut64 address, ut32 buf_size, ut32 buf_idx) { +static int node_match_buffer(RzAnalysis *analysis, const RzFlirtNode *node, ut8 *b, ut64 address, ut32 buf_size, ut32 buf_idx) { RzListIter *node_child_it, *module_it; RzFlirtNode *child; RzFlirtModule *module; @@ -642,13 +642,13 @@ static int node_match_buffer(RzAnal *anal, const RzFlirtNode *node, ut8 *b, ut64 if (node_pattern_match (node, b + buf_idx, buf_size - buf_idx)) { if (node->child_list) { rz_list_foreach (node->child_list, node_child_it, child) { - if (node_match_buffer (anal, child, b, address, buf_size, buf_idx + node->length)) { + if (node_match_buffer (analysis, child, b, address, buf_size, buf_idx + node->length)) { return true; } } } else if (node->module_list) { rz_list_foreach (node->module_list, module_it, module) { - if (module_match_buffer (anal, module, b, address, buf_size)) { + if (module_match_buffer (analysis, module, b, address, buf_size)) { return true; } } @@ -658,30 +658,30 @@ static int node_match_buffer(RzAnal *anal, const RzFlirtNode *node, ut8 *b, ut64 return false; } -static int node_match_functions(RzAnal *anal, const RzFlirtNode *root_node) { +static int node_match_functions(RzAnalysis *analysis, const RzFlirtNode *root_node) { /* Tries to find matching functions between the signature infos in root_node * and the analyzed functions in anal * Returns false on error. */ - if (rz_list_length (anal->fcns) == 0) { - anal->cb_printf ("There are no analyzed functions. Have you run 'aa'?\n"); + if (rz_list_length (analysis->fcns) == 0) { + analysis->cb_printf ("There are no analyzed functions. Have you run 'aa'?\n"); return true; } - anal->flb.push_fs (anal->flb.f, "flirt"); + analysis->flb.push_fs (analysis->flb.f, "flirt"); RzListIter *it_func; - RzAnalFunction *func; - rz_list_foreach (anal->fcns, it_func, func) { + RzAnalysisFunction *func; + rz_list_foreach (analysis->fcns, it_func, func) { if (func->type != RZ_ANAL_FCN_TYPE_FCN && func->type != RZ_ANAL_FCN_TYPE_LOC) { // scan only for unknown functions continue; } - ut64 func_size = rz_anal_function_linear_size (func); + ut64 func_size = rz_analysis_function_linear_size (func); ut8 *func_buf = malloc (func_size); if (!func_buf) { continue; } - if (!anal->iob.read_at (anal->iob.io, func->addr, func_buf, (int)func_size)) { + if (!analysis->iob.read_at (analysis->iob.io, func->addr, func_buf, (int)func_size)) { eprintf ("Couldn't read function %s at 0x%"PFMT64x"\n", func->name, func->addr); free (func_buf); continue; @@ -689,13 +689,13 @@ static int node_match_functions(RzAnal *anal, const RzFlirtNode *root_node) { RzListIter *node_child_it; RzFlirtNode *child; rz_list_foreach (root_node->child_list, node_child_it, child) { - if (node_match_buffer (anal, child, func_buf, func->addr, func_size, 0)) { + if (node_match_buffer (analysis, child, func_buf, func->addr, func_size, 0)) { break; } } free (func_buf); } - anal->flb.pop_fs (anal->flb.f); + analysis->flb.pop_fs (analysis->flb.f); return true; } @@ -909,7 +909,7 @@ err_exit: return false; } -static ut8 parse_leaf(const RzAnal *anal, RzBuffer *b, RzFlirtNode *node) { +static ut8 parse_leaf(const RzAnalysis *analysis, RzBuffer *b, RzFlirtNode *node) { /*parses a signature leaf: modules with same leading pattern*/ /*returns false on parsing error*/ ut8 flags, crc_length; @@ -1048,7 +1048,7 @@ static bool read_node_bytes(RzFlirtNode *node, RzBuffer *b) { return true; } -static ut8 parse_tree(const RzAnal *anal, RzBuffer *b, RzFlirtNode *root_node) { +static ut8 parse_tree(const RzAnalysis *analysis, RzBuffer *b, RzFlirtNode *root_node) { /*parse a signature pattern tree or sub-tree*/ /*returns false on parsing error*/ RzFlirtNode *node = NULL; @@ -1057,7 +1057,7 @@ static ut8 parse_tree(const RzAnal *anal, RzBuffer *b, RzFlirtNode *root_node) { return false; } if (tree_nodes == 0) { // if there's no tree nodes remaining, that means we are on the leaf - return parse_leaf (anal, b, root_node); + return parse_leaf (analysis, b, root_node); } root_node->child_list = rz_list_new (); @@ -1075,7 +1075,7 @@ static ut8 parse_tree(const RzAnal *anal, RzBuffer *b, RzFlirtNode *root_node) { goto err_exit; } rz_list_append (root_node->child_list, node); - if (!parse_tree (anal, b, node)) { + if (!parse_tree (analysis, b, node)) { goto err_exit; // parse child nodes } } @@ -1290,7 +1290,7 @@ static int parse_v10_header(RzBuffer *buf, idasig_v10_t *header) { return true; } -static RzFlirtNode *flirt_parse(const RzAnal *anal, RzBuffer *flirt_buf) { +static RzFlirtNode *flirt_parse(const RzAnalysis *analysis, RzBuffer *flirt_buf) { ut8 *name = NULL; ut8 *buf = NULL, *decompressed_buf = NULL; RzBuffer *rz_buf = NULL; @@ -1358,7 +1358,7 @@ static RzFlirtNode *flirt_parse(const RzAnal *anal, RzBuffer *flirt_buf) { name[header->library_name_len] = '\0'; - // anal->cb_printf ("Loading: %s\n", name); + // analysis->cb_printf ("Loading: %s\n", name); #if DEBUG print_header (header); header_size = rz_buf_tell (flirt_buf); @@ -1392,7 +1392,7 @@ static RzFlirtNode *flirt_parse(const RzAnal *anal, RzBuffer *flirt_buf) { #if DEBUG rz_file_dump ("sig_dump", rz_buf->buf, rz_buf_size (rz_buf)); #endif - if (parse_tree (anal, rz_buf, node)) { + if (parse_tree (analysis, rz_buf, node)) { ret = node; } else { free (node); @@ -1433,7 +1433,7 @@ exit: return ret; } -RZ_API void rz_sign_flirt_dump(const RzAnal *anal, const char *flirt_file) { +RZ_API void rz_sign_flirt_dump(const RzAnalysis *analysis, const char *flirt_file) { /*dump a flirt signature content on screen.*/ RzBuffer *flirt_buf; RzFlirtNode *node; @@ -1443,10 +1443,10 @@ RZ_API void rz_sign_flirt_dump(const RzAnal *anal, const char *flirt_file) { return; } - node = flirt_parse (anal, flirt_buf); + node = flirt_parse (analysis, flirt_buf); rz_buf_free (flirt_buf); if (node) { - print_node (anal, node, -1); + print_node (analysis, node, -1); node_free (node); return; } else { @@ -1455,7 +1455,7 @@ RZ_API void rz_sign_flirt_dump(const RzAnal *anal, const char *flirt_file) { } } -RZ_API void rz_sign_flirt_scan(RzAnal *anal, const char *flirt_file) { +RZ_API void rz_sign_flirt_scan(RzAnalysis *analysis, const char *flirt_file) { /*parses a flirt signature file and scan the currently opened file against it.*/ RzBuffer *flirt_buf; RzFlirtNode *node; @@ -1465,10 +1465,10 @@ RZ_API void rz_sign_flirt_scan(RzAnal *anal, const char *flirt_file) { return; } - node = flirt_parse (anal, flirt_buf); + node = flirt_parse (analysis, flirt_buf); rz_buf_free (flirt_buf); if (node) { - if (!node_match_functions (anal, node)) { + if (!node_match_functions (analysis, node)) { eprintf ("Error while scanning the file %s\n", flirt_file); } node_free (node); diff --git a/librz/anal/function.c b/librz/analysis/function.c similarity index 55% rename from librz/anal/function.c rename to librz/analysis/function.c index fc7155b1de..b22d03484f 100644 --- a/librz/anal/function.c +++ b/librz/analysis/function.c @@ -1,13 +1,13 @@ // SPDX-License-Identifier: LGPL-3.0-only -#include +#include -#define D if (anal->verbose) +#define D if (analysis->verbose) -static bool get_functions_block_cb(RzAnalBlock *block, void *user) { +static bool get_functions_block_cb(RzAnalysisBlock *block, void *user) { RzList *list = user; RzListIter *iter; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; rz_list_foreach (block->fcns, iter, fcn) { if (rz_list_contains (list, fcn)) { continue; @@ -17,16 +17,16 @@ static bool get_functions_block_cb(RzAnalBlock *block, void *user) { return true; } -RZ_API RzList *rz_anal_get_functions_in(RzAnal *anal, ut64 addr) { +RZ_API RzList *rz_analysis_get_functions_in(RzAnalysis *analysis, ut64 addr) { RzList *list = rz_list_new (); if (!list) { return NULL; } - rz_anal_blocks_foreach_in (anal, addr, get_functions_block_cb, list); + rz_analysis_blocks_foreach_in (analysis, addr, get_functions_block_cb, list); return list; } -static bool __fcn_exists(RzAnal *anal, const char *name, ut64 addr) { +static bool __fcn_exists(RzAnalysis *analysis, const char *name, ut64 addr) { // check if name is already registered bool found = false; if (addr == UT64_MAX) { @@ -37,14 +37,14 @@ static bool __fcn_exists(RzAnal *anal, const char *name, ut64 addr) { eprintf ("TODO: Empty function name, we must auto generate one\n"); return true; } - RzAnalFunction *f = ht_pp_find (anal->ht_name_fun, name, &found); + RzAnalysisFunction *f = ht_pp_find (analysis->ht_name_fun, name, &found); if (f && found) { eprintf ("Invalid function name '%s' at 0x%08"PFMT64x"\n", name, addr); return true; } // check if there's a function already in the given address found = false; - f = ht_up_find (anal->ht_addr_fun, addr, &found); + f = ht_up_find (analysis->ht_addr_fun, addr, &found); if (f && found) { eprintf ("Function already defined in 0x%08"PFMT64x"\n", addr); return true; @@ -52,7 +52,7 @@ static bool __fcn_exists(RzAnal *anal, const char *name, ut64 addr) { return false; } -RZ_IPI void rz_anal_var_free(RzAnalVar *av); +RZ_IPI void rz_analysis_var_free(RzAnalysisVar *av); static void inst_vars_kv_free(HtUPKv *kv) { rz_pvector_free (kv->value); @@ -67,17 +67,17 @@ static void label_addrs_kv_free(HtPPKv *kv) { free (kv->value); } -RZ_API RzAnalFunction *rz_anal_function_new(RzAnal *anal) { - RzAnalFunction *fcn = RZ_NEW0 (RzAnalFunction); +RZ_API RzAnalysisFunction *rz_analysis_function_new(RzAnalysis *analysis) { + RzAnalysisFunction *fcn = RZ_NEW0 (RzAnalysisFunction); if (!fcn) { return NULL; } - fcn->anal = anal; + fcn->analysis = analysis; fcn->addr = UT64_MAX; - fcn->cc = rz_str_constpool_get (&anal->constpool, rz_anal_cc_default (anal)); - fcn->bits = anal->bits; + fcn->cc = rz_str_constpool_get (&analysis->constpool, rz_analysis_cc_default (analysis)); + fcn->bits = analysis->bits; fcn->bbs = rz_list_new (); - fcn->diff = rz_anal_diff_new (); + fcn->diff = rz_analysis_diff_new (); fcn->has_changed = true; fcn->bp_frame = true; fcn->is_noreturn = false; @@ -89,31 +89,31 @@ RZ_API RzAnalFunction *rz_anal_function_new(RzAnal *anal) { return fcn; } -RZ_API void rz_anal_function_free(void *_fcn) { - RzAnalFunction *fcn = _fcn; +RZ_API void rz_analysis_function_free(void *_fcn) { + RzAnalysisFunction *fcn = _fcn; if (!_fcn) { return; } - RzAnalBlock *block; + RzAnalysisBlock *block; RzListIter *iter; rz_list_foreach (fcn->bbs, iter, block) { rz_list_delete_data (block->fcns, fcn); - rz_anal_block_unref (block); + rz_analysis_block_unref (block); } rz_list_free (fcn->bbs); - RzAnal *anal = fcn->anal; - if (ht_up_find (anal->ht_addr_fun, fcn->addr, NULL) == _fcn) { - ht_up_delete (anal->ht_addr_fun, fcn->addr); + RzAnalysis *analysis = fcn->analysis; + if (ht_up_find (analysis->ht_addr_fun, fcn->addr, NULL) == _fcn) { + ht_up_delete (analysis->ht_addr_fun, fcn->addr); } - if (ht_pp_find (anal->ht_name_fun, fcn->name, NULL) == _fcn) { - ht_pp_delete (anal->ht_name_fun, fcn->name); + if (ht_pp_find (analysis->ht_name_fun, fcn->name, NULL) == _fcn) { + ht_pp_delete (analysis->ht_name_fun, fcn->name); } ht_up_free (fcn->inst_vars); fcn->inst_vars = NULL; - rz_anal_function_delete_all_vars (fcn); + rz_analysis_function_delete_all_vars (fcn); ht_up_free (fcn->labels); ht_pp_free (fcn->label_addrs); @@ -121,42 +121,42 @@ RZ_API void rz_anal_function_free(void *_fcn) { free (fcn->name); fcn->bbs = NULL; free (fcn->fingerprint); - rz_anal_diff_free (fcn->diff); + rz_analysis_diff_free (fcn->diff); rz_list_free (fcn->imports); free (fcn); } -RZ_API bool rz_anal_add_function(RzAnal *anal, RzAnalFunction *fcn) { - if (__fcn_exists (anal, fcn->name, fcn->addr)) { +RZ_API bool rz_analysis_add_function(RzAnalysis *analysis, RzAnalysisFunction *fcn) { + if (__fcn_exists (analysis, fcn->name, fcn->addr)) { return false; } - if (anal->cb.on_fcn_new) { - anal->cb.on_fcn_new (anal, anal->user, fcn); + if (analysis->cb.on_fcn_new) { + analysis->cb.on_fcn_new (analysis, analysis->user, fcn); } - if (anal->flg_fcn_set) { - anal->flg_fcn_set (anal->flb.f, fcn->name, fcn->addr, rz_anal_function_size_from_entry (fcn)); + if (analysis->flg_fcn_set) { + analysis->flg_fcn_set (analysis->flb.f, fcn->name, fcn->addr, rz_analysis_function_size_from_entry (fcn)); } - fcn->is_noreturn = rz_anal_noreturn_at_addr (anal, fcn->addr); - rz_list_append (anal->fcns, fcn); - ht_pp_insert (anal->ht_name_fun, fcn->name, fcn); - ht_up_insert (anal->ht_addr_fun, fcn->addr, fcn); + fcn->is_noreturn = rz_analysis_noreturn_at_addr (analysis, fcn->addr); + rz_list_append (analysis->fcns, fcn); + ht_pp_insert (analysis->ht_name_fun, fcn->name, fcn); + ht_up_insert (analysis->ht_addr_fun, fcn->addr, fcn); return true; } -RZ_API RzAnalFunction *rz_anal_create_function(RzAnal *anal, const char *name, ut64 addr, int type, RzAnalDiff *diff) { - RzAnalFunction *fcn = rz_anal_function_new (anal); +RZ_API RzAnalysisFunction *rz_analysis_create_function(RzAnalysis *analysis, const char *name, ut64 addr, int type, RzAnalysisDiff *diff) { + RzAnalysisFunction *fcn = rz_analysis_function_new (analysis); if (!fcn) { return NULL; } fcn->addr = addr; fcn->type = type; - fcn->cc = rz_str_constpool_get (&anal->constpool, rz_anal_cc_default (anal)); - fcn->bits = anal->bits; + fcn->cc = rz_str_constpool_get (&analysis->constpool, rz_analysis_cc_default (analysis)); + fcn->bits = analysis->bits; if (name) { free (fcn->name); fcn->name = strdup (name); } else { - const char *fcnprefix = anal->coreb.cfgGet ? anal->coreb.cfgGet (anal->coreb.core, "anal.fcnprefix") : NULL; + const char *fcnprefix = analysis->coreb.cfgGet ? analysis->coreb.cfgGet (analysis->coreb.core, "anal.fcnprefix") : NULL; if (!fcnprefix) { fcnprefix = "fcn"; } @@ -170,20 +170,20 @@ RZ_API RzAnalFunction *rz_anal_create_function(RzAnal *anal, const char *name, u fcn->diff->name = strdup (diff->name); } } - if (!rz_anal_add_function (anal, fcn)) { - rz_anal_function_free (fcn); + if (!rz_analysis_add_function (analysis, fcn)) { + rz_analysis_function_free (fcn); return NULL; } return fcn; } -RZ_API bool rz_anal_function_delete(RzAnalFunction *fcn) { - return rz_list_delete_data (fcn->anal->fcns, fcn); +RZ_API bool rz_analysis_function_delete(RzAnalysisFunction *fcn) { + return rz_list_delete_data (fcn->analysis->fcns, fcn); } -RZ_API RzAnalFunction *rz_anal_get_function_at(RzAnal *anal, ut64 addr) { +RZ_API RzAnalysisFunction *rz_analysis_get_function_at(RzAnalysis *analysis, ut64 addr) { bool found = false; - RzAnalFunction *f = ht_up_find (anal->ht_addr_fun, addr, &found); + RzAnalysisFunction *f = ht_up_find (analysis->ht_addr_fun, addr, &found); if (f && found) { return f; } @@ -201,21 +201,21 @@ static bool inst_vars_relocate_cb(void *user, const ut64 k, const void *v) { return true; } -RZ_API bool rz_anal_function_relocate(RzAnalFunction *fcn, ut64 addr) { +RZ_API bool rz_analysis_function_relocate(RzAnalysisFunction *fcn, ut64 addr) { if (fcn->addr == addr) { return true; } - if (rz_anal_get_function_at (fcn->anal, addr)) { + if (rz_analysis_get_function_at (fcn->analysis, addr)) { return false; } - ht_up_delete (fcn->anal->ht_addr_fun, fcn->addr); + ht_up_delete (fcn->analysis->ht_addr_fun, fcn->addr); // relocate the var accesses (their addrs are relative to the function addr) st64 delta = (st64)addr - (st64)fcn->addr; void **it; rz_pvector_foreach (&fcn->vars, it) { - RzAnalVar *var = *it; - RzAnalVarAccess *acc; + RzAnalysisVar *var = *it; + RzAnalysisVarAccess *acc; rz_vector_foreach (&var->accesses, acc) { acc->offset -= delta; } @@ -233,13 +233,13 @@ RZ_API bool rz_anal_function_relocate(RzAnalFunction *fcn, ut64 addr) { } fcn->addr = addr; - ht_up_insert (fcn->anal->ht_addr_fun, addr, fcn); + ht_up_insert (fcn->analysis->ht_addr_fun, addr, fcn); return true; } -RZ_API bool rz_anal_function_rename(RzAnalFunction *fcn, const char *name) { - RzAnal *anal = fcn->anal; - RzAnalFunction *existing = ht_pp_find (anal->ht_name_fun, name, NULL); +RZ_API bool rz_analysis_function_rename(RzAnalysisFunction *fcn, const char *name) { + RzAnalysis *analysis = fcn->analysis; + RzAnalysisFunction *existing = ht_pp_find (analysis->ht_name_fun, name, NULL); if (existing) { if (existing == fcn) { // fcn->name == name, nothing to do @@ -251,22 +251,22 @@ RZ_API bool rz_anal_function_rename(RzAnalFunction *fcn, const char *name) { if (!newname) { return false; } - bool in_tree = ht_pp_delete (anal->ht_name_fun, fcn->name); + bool in_tree = ht_pp_delete (analysis->ht_name_fun, fcn->name); free (fcn->name); fcn->name = newname; if (in_tree) { // only re-insert if it really was in the tree before - ht_pp_insert (anal->ht_name_fun, fcn->name, fcn); + ht_pp_insert (analysis->ht_name_fun, fcn->name, fcn); } return true; } -RZ_API void rz_anal_function_add_block(RzAnalFunction *fcn, RzAnalBlock *bb) { +RZ_API void rz_analysis_function_add_block(RzAnalysisFunction *fcn, RzAnalysisBlock *bb) { if (rz_list_contains (bb->fcns, fcn)) { return; } rz_list_append (bb->fcns, fcn); // associate the given fcn with this bb - rz_anal_block_ref (bb); + rz_analysis_block_ref (bb); rz_list_append (fcn->bbs, bb); if (fcn->meta._min != UT64_MAX) { @@ -278,12 +278,12 @@ RZ_API void rz_anal_function_add_block(RzAnalFunction *fcn, RzAnalBlock *bb) { } } - if (fcn->anal->cb.on_fcn_bb_new) { - fcn->anal->cb.on_fcn_bb_new (fcn->anal, fcn->anal->user, fcn, bb); + if (fcn->analysis->cb.on_fcn_bb_new) { + fcn->analysis->cb.on_fcn_bb_new (fcn->analysis, fcn->analysis->user, fcn, bb); } } -RZ_API void rz_anal_function_remove_block(RzAnalFunction *fcn, RzAnalBlock *bb) { +RZ_API void rz_analysis_function_remove_block(RzAnalysisFunction *fcn, RzAnalysisBlock *bb) { rz_list_delete_data (bb->fcns, fcn); if (fcn->meta._min != UT64_MAX @@ -293,16 +293,16 @@ RZ_API void rz_anal_function_remove_block(RzAnalFunction *fcn, RzAnalBlock *bb) } rz_list_delete_data (fcn->bbs, bb); - rz_anal_block_unref (bb); + rz_analysis_block_unref (bb); } -static void ensure_fcn_range(RzAnalFunction *fcn) { +static void ensure_fcn_range(RzAnalysisFunction *fcn) { if (fcn->meta._min != UT64_MAX) { // recalculate only if invalid return; } ut64 minval = UT64_MAX; ut64 maxval = UT64_MIN; - RzAnalBlock *block; + RzAnalysisBlock *block; RzListIter *iter; rz_list_foreach (fcn->bbs, iter, block) { if (block->addr < minval) { @@ -316,29 +316,29 @@ static void ensure_fcn_range(RzAnalFunction *fcn) { fcn->meta._max = minval == UT64_MAX ? UT64_MAX : maxval; } -RZ_API ut64 rz_anal_function_linear_size(RzAnalFunction *fcn) { +RZ_API ut64 rz_analysis_function_linear_size(RzAnalysisFunction *fcn) { ensure_fcn_range (fcn); return fcn->meta._max - fcn->meta._min; } -RZ_API ut64 rz_anal_function_min_addr(RzAnalFunction *fcn) { +RZ_API ut64 rz_analysis_function_min_addr(RzAnalysisFunction *fcn) { ensure_fcn_range (fcn); return fcn->meta._min; } -RZ_API ut64 rz_anal_function_max_addr(RzAnalFunction *fcn) { +RZ_API ut64 rz_analysis_function_max_addr(RzAnalysisFunction *fcn) { ensure_fcn_range (fcn); return fcn->meta._max; } -RZ_API ut64 rz_anal_function_size_from_entry(RzAnalFunction *fcn) { +RZ_API ut64 rz_analysis_function_size_from_entry(RzAnalysisFunction *fcn) { ensure_fcn_range (fcn); return fcn->meta._min == UT64_MAX ? 0 : fcn->meta._max - fcn->addr; } -RZ_API ut64 rz_anal_function_realsize(const RzAnalFunction *fcn) { +RZ_API ut64 rz_analysis_function_realsize(const RzAnalysisFunction *fcn) { RzListIter *iter; - RzAnalBlock *bb; + RzAnalysisBlock *bb; ut64 sz = 0; if (!sz) { rz_list_foreach (fcn->bbs, iter, bb) { @@ -348,9 +348,9 @@ RZ_API ut64 rz_anal_function_realsize(const RzAnalFunction *fcn) { return sz; } -static bool fcn_in_cb(RzAnalBlock *block, void *user) { +static bool fcn_in_cb(RzAnalysisBlock *block, void *user) { RzListIter *iter; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; rz_list_foreach (block->fcns, iter, fcn) { if (fcn == user) { return false; @@ -359,17 +359,17 @@ static bool fcn_in_cb(RzAnalBlock *block, void *user) { return true; } -RZ_API bool rz_anal_function_contains(RzAnalFunction *fcn, ut64 addr) { +RZ_API bool rz_analysis_function_contains(RzAnalysisFunction *fcn, ut64 addr) { // fcn_in_cb breaks with false if it finds the fcn - return !rz_anal_blocks_foreach_in (fcn->anal, addr, fcn_in_cb, fcn); + return !rz_analysis_blocks_foreach_in (fcn->analysis, addr, fcn_in_cb, fcn); } -RZ_API bool rz_anal_function_was_modified(RzAnalFunction *fcn) { +RZ_API bool rz_analysis_function_was_modified(RzAnalysisFunction *fcn) { rz_return_val_if_fail (fcn, false); RzListIter *it; - RzAnalBlock *bb; + RzAnalysisBlock *bb; rz_list_foreach (fcn->bbs, it, bb) { - if (rz_anal_block_was_modified (bb)) { + if (rz_analysis_block_was_modified (bb)) { return true; } } diff --git a/librz/anal/hint.c b/librz/analysis/hint.c similarity index 54% rename from librz/anal/hint.c rename to librz/analysis/hint.c index f5b2222c84..1526b75ffe 100644 --- a/librz/anal/hint.c +++ b/librz/analysis/hint.c @@ -1,29 +1,29 @@ // SPDX-License-Identifier: LGPL-3.0-only -#include +#include // Common base-struct for hints which affect an entire range as opposed to only one single address // They are saved in a RBTree per hint type. // Each ranged record in a tree affects every address address greater or equal to its specified address until // the next record or the end of the address space. -typedef struct rz_anal_ranged_hint_record_base_t { +typedef struct rz_analysis_ranged_hint_record_base_t { RBNode rb; ut64 addr; -} RzAnalRangedHintRecordBase; +} RzAnalysisRangedHintRecordBase; -typedef struct rz_anal_arch_hint_record_t { - RzAnalRangedHintRecordBase base; // MUST be the first member! +typedef struct rz_analysis_arch_hint_record_t { + RzAnalysisRangedHintRecordBase base; // MUST be the first member! char *arch; // NULL => reset to global -} RzAnalArchHintRecord; +} RzAnalysisArchHintRecord; -typedef struct rz_anal_bits_hint_record_t { - RzAnalRangedHintRecordBase base; // MUST be the first member! +typedef struct rz_analysis_bits_hint_record_t { + RzAnalysisRangedHintRecordBase base; // MUST be the first member! int bits; // 0 => reset to global -} RzAnalBitsHintRecord; +} RzAnalysisBitsHintRecord; static int ranged_hint_record_cmp(const void *incoming, const RBNode *in_tree, void *user) { ut64 addr = *(const ut64 *)incoming; - const RzAnalRangedHintRecordBase *in_tree_record = container_of (in_tree, const RzAnalRangedHintRecordBase, rb); + const RzAnalysisRangedHintRecordBase *in_tree_record = container_of (in_tree, const RzAnalysisRangedHintRecordBase, rb); if (addr < in_tree_record->addr) { return -1; } else if (addr > in_tree_record->addr) { @@ -34,7 +34,7 @@ static int ranged_hint_record_cmp(const void *incoming, const RBNode *in_tree, v static void addr_hint_record_fini(void *element, void *user) { (void)user; - RzAnalAddrHintRecord *record = element; + RzAnalysisAddrHintRecord *record = element; switch (record->type) { case RZ_ANAL_ADDR_HINT_TYPE_TYPE_OFFSET: free (record->type_offset); @@ -58,32 +58,32 @@ static void addr_hint_record_ht_free(HtUPKv *kv) { } static void bits_hint_record_free_rb(RBNode *node, void *user) { - free (container_of (node, RzAnalRangedHintRecordBase, rb)); + free (container_of (node, RzAnalysisRangedHintRecordBase, rb)); } static void arch_hint_record_free_rb(RBNode *node, void *user) { - RzAnalArchHintRecord *record = (RzAnalArchHintRecord *)container_of (node, RzAnalRangedHintRecordBase, rb); + RzAnalysisArchHintRecord *record = (RzAnalysisArchHintRecord *)container_of (node, RzAnalysisRangedHintRecordBase, rb); free (record->arch); free (record); } // used in anal.c, but no API needed -void rz_anal_hint_storage_init(RzAnal *a) { +void rz_analysis_hint_storage_init(RzAnalysis *a) { a->addr_hints = ht_up_new (NULL, addr_hint_record_ht_free, NULL); a->arch_hints = NULL; a->bits_hints = NULL; } // used in anal.c, but no API needed -void rz_anal_hint_storage_fini(RzAnal *a) { +void rz_analysis_hint_storage_fini(RzAnalysis *a) { ht_up_free (a->addr_hints); rz_rbtree_free (a->arch_hints, arch_hint_record_free_rb, NULL); rz_rbtree_free (a->bits_hints, bits_hint_record_free_rb, NULL); } -RZ_API void rz_anal_hint_clear(RzAnal *a) { - rz_anal_hint_storage_fini (a); - rz_anal_hint_storage_init (a); +RZ_API void rz_analysis_hint_clear(RzAnalysis *a) { + rz_analysis_hint_storage_fini (a); + rz_analysis_hint_storage_init (a); } typedef struct { @@ -101,12 +101,12 @@ static bool addr_hint_range_delete_cb(void *user, const ut64 key, const void *va return true; } -RZ_API void rz_anal_hint_del(RzAnal *a, ut64 addr, ut64 size) { +RZ_API void rz_analysis_hint_del(RzAnalysis *a, ut64 addr, ut64 size) { if (size <= 1) { // only single address ht_up_delete (a->addr_hints, addr); - rz_anal_hint_unset_arch (a, addr); - rz_anal_hint_unset_bits (a, addr); + rz_analysis_hint_unset_arch (a, addr); + rz_analysis_hint_unset_bits (a, addr); return; } // ranged delete @@ -117,33 +117,33 @@ RZ_API void rz_anal_hint_del(RzAnal *a, ut64 addr, ut64 size) { if (!node) { return; } - RzAnalRangedHintRecordBase *base = container_of (node, RzAnalRangedHintRecordBase, rb); + RzAnalysisRangedHintRecordBase *base = container_of (node, RzAnalysisRangedHintRecordBase, rb); if (base->addr >= addr + size) { break; } - rz_anal_hint_unset_arch (a, base->addr); + rz_analysis_hint_unset_arch (a, base->addr); } while (true) { // bits RBNode *node = rz_rbtree_lower_bound (a->bits_hints, &addr, ranged_hint_record_cmp, NULL); if (!node) { return; } - RzAnalRangedHintRecordBase *base = container_of (node, RzAnalRangedHintRecordBase, rb); + RzAnalysisRangedHintRecordBase *base = container_of (node, RzAnalysisRangedHintRecordBase, rb); if (base->addr >= addr + size) { break; } - rz_anal_hint_unset_bits (a, base->addr); + rz_analysis_hint_unset_bits (a, base->addr); } } -static void unset_addr_hint_record(RzAnal *anal, RzAnalAddrHintType type, ut64 addr) { - RzVector *records = ht_up_find (anal->addr_hints, addr, NULL); +static void unset_addr_hint_record(RzAnalysis *analysis, RzAnalysisAddrHintType type, ut64 addr) { + RzVector *records = ht_up_find (analysis->addr_hints, addr, NULL); if (!records) { return; } size_t i; for (i = 0; i < records->len; i++) { - RzAnalAddrHintRecord *record = rz_vector_index_ptr (records, i); + RzAnalysisAddrHintRecord *record = rz_vector_index_ptr (records, i); if (record->type == type) { addr_hint_record_fini (record, NULL); rz_vector_remove_at (records, i, NULL); @@ -153,42 +153,42 @@ static void unset_addr_hint_record(RzAnal *anal, RzAnalAddrHintType type, ut64 a } // create or return the existing addr hint record of the given type at addr -static RzAnalAddrHintRecord *ensure_addr_hint_record(RzAnal *anal, RzAnalAddrHintType type, ut64 addr) { - RzVector *records = ht_up_find (anal->addr_hints, addr, NULL); +static RzAnalysisAddrHintRecord *ensure_addr_hint_record(RzAnalysis *analysis, RzAnalysisAddrHintType type, ut64 addr) { + RzVector *records = ht_up_find (analysis->addr_hints, addr, NULL); if (!records) { - records = rz_vector_new (sizeof (RzAnalAddrHintRecord), addr_hint_record_fini, NULL); + records = rz_vector_new (sizeof (RzAnalysisAddrHintRecord), addr_hint_record_fini, NULL); if (!records) { return NULL; } - ht_up_insert (anal->addr_hints, addr, records); + ht_up_insert (analysis->addr_hints, addr, records); } void *pos; rz_vector_foreach (records, pos) { - RzAnalAddrHintRecord *record = pos; + RzAnalysisAddrHintRecord *record = pos; if (record->type == type) { return record; } } - RzAnalAddrHintRecord *record = rz_vector_push (records, NULL); + RzAnalysisAddrHintRecord *record = rz_vector_push (records, NULL); memset (record, 0, sizeof (*record)); record->type = type; return record; } #define SET_HINT(type, setcode) do { \ - RzAnalAddrHintRecord *r = ensure_addr_hint_record (a, type, addr); \ + RzAnalysisAddrHintRecord *r = ensure_addr_hint_record (a, type, addr); \ if (!r) { \ break; \ } \ setcode \ } while(0) -static RzAnalRangedHintRecordBase *ensure_ranged_hint_record(RBTree *tree, ut64 addr, size_t sz) { +static RzAnalysisRangedHintRecordBase *ensure_ranged_hint_record(RBTree *tree, ut64 addr, size_t sz) { RBNode *node = rz_rbtree_find (*tree, &addr, ranged_hint_record_cmp, NULL); if (node) { - return container_of (node, RzAnalRangedHintRecordBase, rb); + return container_of (node, RzAnalysisRangedHintRecordBase, rb); } - RzAnalRangedHintRecordBase *record = malloc (sz); + RzAnalysisRangedHintRecordBase *record = malloc (sz); memset (record, 0, sz); if (!record) { return NULL; @@ -198,34 +198,34 @@ static RzAnalRangedHintRecordBase *ensure_ranged_hint_record(RBTree *tree, ut64 return record; } -RZ_API void rz_anal_hint_set_offset(RzAnal *a, ut64 addr, const char *typeoff) { +RZ_API void rz_analysis_hint_set_offset(RzAnalysis *a, ut64 addr, const char *typeoff) { SET_HINT (RZ_ANAL_ADDR_HINT_TYPE_TYPE_OFFSET, free (r->type_offset); r->type_offset = strdup (typeoff); ); } -RZ_API void rz_anal_hint_set_nword(RzAnal *a, ut64 addr, int nword) { +RZ_API void rz_analysis_hint_set_nword(RzAnalysis *a, ut64 addr, int nword) { SET_HINT (RZ_ANAL_ADDR_HINT_TYPE_NWORD, r->nword = nword;); } -RZ_API void rz_anal_hint_set_jump(RzAnal *a, ut64 addr, ut64 jump) { +RZ_API void rz_analysis_hint_set_jump(RzAnalysis *a, ut64 addr, ut64 jump) { SET_HINT (RZ_ANAL_ADDR_HINT_TYPE_JUMP, r->jump = jump;); } -RZ_API void rz_anal_hint_set_fail(RzAnal *a, ut64 addr, ut64 fail) { +RZ_API void rz_analysis_hint_set_fail(RzAnalysis *a, ut64 addr, ut64 fail) { SET_HINT (RZ_ANAL_ADDR_HINT_TYPE_FAIL, r->fail = fail;); } -RZ_API void rz_anal_hint_set_newbits(RzAnal *a, ut64 addr, int bits) { +RZ_API void rz_analysis_hint_set_newbits(RzAnalysis *a, ut64 addr, int bits) { SET_HINT (RZ_ANAL_ADDR_HINT_TYPE_NEW_BITS, r->newbits = bits;); } -RZ_API void rz_anal_hint_set_high(RzAnal *a, ut64 addr) { +RZ_API void rz_analysis_hint_set_high(RzAnalysis *a, ut64 addr) { SET_HINT (RZ_ANAL_ADDR_HINT_TYPE_HIGH,); } -RZ_API void rz_anal_hint_set_immbase(RzAnal *a, ut64 addr, int base) { +RZ_API void rz_analysis_hint_set_immbase(RzAnalysis *a, ut64 addr, int base) { if (base) { SET_HINT (RZ_ANAL_ADDR_HINT_TYPE_IMMBASE, r->immbase = base;); } else { @@ -233,53 +233,53 @@ RZ_API void rz_anal_hint_set_immbase(RzAnal *a, ut64 addr, int base) { } } -RZ_API void rz_anal_hint_set_pointer(RzAnal *a, ut64 addr, ut64 ptr) { +RZ_API void rz_analysis_hint_set_pointer(RzAnalysis *a, ut64 addr, ut64 ptr) { SET_HINT (RZ_ANAL_ADDR_HINT_TYPE_PTR, r->ptr = ptr;); } -RZ_API void rz_anal_hint_set_ret(RzAnal *a, ut64 addr, ut64 val) { +RZ_API void rz_analysis_hint_set_ret(RzAnalysis *a, ut64 addr, ut64 val) { SET_HINT (RZ_ANAL_ADDR_HINT_TYPE_RET, r->retval = val;); } -RZ_API void rz_anal_hint_set_syntax(RzAnal *a, ut64 addr, const char *syn) { +RZ_API void rz_analysis_hint_set_syntax(RzAnalysis *a, ut64 addr, const char *syn) { SET_HINT (RZ_ANAL_ADDR_HINT_TYPE_SYNTAX, free (r->syntax); r->syntax = strdup (syn); ); } -RZ_API void rz_anal_hint_set_opcode(RzAnal *a, ut64 addr, const char *opcode) { +RZ_API void rz_analysis_hint_set_opcode(RzAnalysis *a, ut64 addr, const char *opcode) { SET_HINT (RZ_ANAL_ADDR_HINT_TYPE_OPCODE, free (r->opcode); r->opcode = strdup (opcode); ); } -RZ_API void rz_anal_hint_set_esil(RzAnal *a, ut64 addr, const char *esil) { +RZ_API void rz_analysis_hint_set_esil(RzAnalysis *a, ut64 addr, const char *esil) { SET_HINT (RZ_ANAL_ADDR_HINT_TYPE_ESIL, free (r->esil); r->esil = strdup (esil); ); } -RZ_API void rz_anal_hint_set_type (RzAnal *a, ut64 addr, int type) { +RZ_API void rz_analysis_hint_set_type (RzAnalysis *a, ut64 addr, int type) { SET_HINT (RZ_ANAL_ADDR_HINT_TYPE_OPTYPE, r->optype = type;); } -RZ_API void rz_anal_hint_set_size(RzAnal *a, ut64 addr, ut64 size) { +RZ_API void rz_analysis_hint_set_size(RzAnalysis *a, ut64 addr, ut64 size) { SET_HINT (RZ_ANAL_ADDR_HINT_TYPE_SIZE, r->size = size;); } -RZ_API void rz_anal_hint_set_stackframe(RzAnal *a, ut64 addr, ut64 size) { +RZ_API void rz_analysis_hint_set_stackframe(RzAnalysis *a, ut64 addr, ut64 size) { SET_HINT (RZ_ANAL_ADDR_HINT_TYPE_STACKFRAME, r->stackframe = size;); } -RZ_API void rz_anal_hint_set_val(RzAnal *a, ut64 addr, ut64 v) { +RZ_API void rz_analysis_hint_set_val(RzAnalysis *a, ut64 addr, ut64 v) { SET_HINT (RZ_ANAL_ADDR_HINT_TYPE_VAL, r->val = v;); } -RZ_API void rz_anal_hint_set_arch(RzAnal *a, ut64 addr, const char *arch) { - RzAnalArchHintRecord *record = (RzAnalArchHintRecord *)ensure_ranged_hint_record (&a->arch_hints, addr, sizeof (RzAnalArchHintRecord)); +RZ_API void rz_analysis_hint_set_arch(RzAnalysis *a, ut64 addr, const char *arch) { + RzAnalysisArchHintRecord *record = (RzAnalysisArchHintRecord *)ensure_ranged_hint_record (&a->arch_hints, addr, sizeof (RzAnalysisArchHintRecord)); if (!record) { return; } @@ -287,8 +287,8 @@ RZ_API void rz_anal_hint_set_arch(RzAnal *a, ut64 addr, const char *arch) { record->arch = arch ? strdup (arch) : NULL; } -RZ_API void rz_anal_hint_set_bits(RzAnal *a, ut64 addr, int bits) { - RzAnalBitsHintRecord *record = (RzAnalBitsHintRecord *)ensure_ranged_hint_record (&a->bits_hints, addr, sizeof (RzAnalBitsHintRecord)); +RZ_API void rz_analysis_hint_set_bits(RzAnalysis *a, ut64 addr, int bits) { + RzAnalysisBitsHintRecord *record = (RzAnalysisBitsHintRecord *)ensure_ranged_hint_record (&a->bits_hints, addr, sizeof (RzAnalysisBitsHintRecord)); if (!record) { return; } @@ -298,79 +298,79 @@ RZ_API void rz_anal_hint_set_bits(RzAnal *a, ut64 addr, int bits) { } } -RZ_API void rz_anal_hint_unset_size(RzAnal *a, ut64 addr) { +RZ_API void rz_analysis_hint_unset_size(RzAnalysis *a, ut64 addr) { unset_addr_hint_record (a, RZ_ANAL_ADDR_HINT_TYPE_SIZE, addr); } -RZ_API void rz_anal_hint_unset_esil(RzAnal *a, ut64 addr) { +RZ_API void rz_analysis_hint_unset_esil(RzAnalysis *a, ut64 addr) { unset_addr_hint_record (a, RZ_ANAL_ADDR_HINT_TYPE_ESIL, addr); } -RZ_API void rz_anal_hint_unset_opcode(RzAnal *a, ut64 addr) { +RZ_API void rz_analysis_hint_unset_opcode(RzAnalysis *a, ut64 addr) { unset_addr_hint_record (a, RZ_ANAL_ADDR_HINT_TYPE_OPCODE, addr); } -RZ_API void rz_anal_hint_unset_high(RzAnal *a, ut64 addr) { +RZ_API void rz_analysis_hint_unset_high(RzAnalysis *a, ut64 addr) { unset_addr_hint_record (a, RZ_ANAL_ADDR_HINT_TYPE_HIGH, addr); } -RZ_API void rz_anal_hint_unset_immbase(RzAnal *a, ut64 addr) { +RZ_API void rz_analysis_hint_unset_immbase(RzAnalysis *a, ut64 addr) { unset_addr_hint_record (a, RZ_ANAL_ADDR_HINT_TYPE_IMMBASE, addr); } -RZ_API void rz_anal_hint_unset_nword(RzAnal *a, ut64 addr) { +RZ_API void rz_analysis_hint_unset_nword(RzAnalysis *a, ut64 addr) { unset_addr_hint_record (a, RZ_ANAL_ADDR_HINT_TYPE_NWORD, addr); } -RZ_API void rz_anal_hint_unset_syntax(RzAnal *a, ut64 addr) { +RZ_API void rz_analysis_hint_unset_syntax(RzAnalysis *a, ut64 addr) { unset_addr_hint_record (a, RZ_ANAL_ADDR_HINT_TYPE_SYNTAX, addr); } -RZ_API void rz_anal_hint_unset_pointer(RzAnal *a, ut64 addr) { +RZ_API void rz_analysis_hint_unset_pointer(RzAnalysis *a, ut64 addr) { unset_addr_hint_record (a, RZ_ANAL_ADDR_HINT_TYPE_PTR, addr); } -RZ_API void rz_anal_hint_unset_ret(RzAnal *a, ut64 addr) { +RZ_API void rz_analysis_hint_unset_ret(RzAnalysis *a, ut64 addr) { unset_addr_hint_record (a, RZ_ANAL_ADDR_HINT_TYPE_RET, addr); } -RZ_API void rz_anal_hint_unset_offset(RzAnal *a, ut64 addr) { +RZ_API void rz_analysis_hint_unset_offset(RzAnalysis *a, ut64 addr) { unset_addr_hint_record (a, RZ_ANAL_ADDR_HINT_TYPE_TYPE_OFFSET, addr); } -RZ_API void rz_anal_hint_unset_jump(RzAnal *a, ut64 addr) { +RZ_API void rz_analysis_hint_unset_jump(RzAnalysis *a, ut64 addr) { unset_addr_hint_record (a, RZ_ANAL_ADDR_HINT_TYPE_JUMP, addr); } -RZ_API void rz_anal_hint_unset_fail(RzAnal *a, ut64 addr) { +RZ_API void rz_analysis_hint_unset_fail(RzAnalysis *a, ut64 addr) { unset_addr_hint_record (a, RZ_ANAL_ADDR_HINT_TYPE_FAIL, addr); } -RZ_API void rz_anal_hint_unset_newbits(RzAnal *a, ut64 addr) { +RZ_API void rz_analysis_hint_unset_newbits(RzAnalysis *a, ut64 addr) { unset_addr_hint_record (a, RZ_ANAL_ADDR_HINT_TYPE_NEW_BITS, addr); } -RZ_API void rz_anal_hint_unset_val (RzAnal *a, ut64 addr) { +RZ_API void rz_analysis_hint_unset_val (RzAnalysis *a, ut64 addr) { unset_addr_hint_record (a, RZ_ANAL_ADDR_HINT_TYPE_VAL, addr); } -RZ_API void rz_anal_hint_unset_type (RzAnal *a, ut64 addr) { +RZ_API void rz_analysis_hint_unset_type (RzAnalysis *a, ut64 addr) { unset_addr_hint_record (a, RZ_ANAL_ADDR_HINT_TYPE_OPTYPE, addr); } -RZ_API void rz_anal_hint_unset_stackframe(RzAnal *a, ut64 addr) { +RZ_API void rz_analysis_hint_unset_stackframe(RzAnalysis *a, ut64 addr) { unset_addr_hint_record (a, RZ_ANAL_ADDR_HINT_TYPE_STACKFRAME, addr); } -RZ_API void rz_anal_hint_unset_arch(RzAnal *a, ut64 addr) { +RZ_API void rz_analysis_hint_unset_arch(RzAnalysis *a, ut64 addr) { rz_rbtree_delete (&a->arch_hints, &addr, ranged_hint_record_cmp, NULL, arch_hint_record_free_rb, NULL); } -RZ_API void rz_anal_hint_unset_bits(RzAnal *a, ut64 addr) { +RZ_API void rz_analysis_hint_unset_bits(RzAnalysis *a, ut64 addr) { rz_rbtree_delete (&a->bits_hints, &addr, ranged_hint_record_cmp, NULL, bits_hint_record_free_rb, NULL); } -RZ_API void rz_anal_hint_free(RzAnalHint *h) { +RZ_API void rz_analysis_hint_free(RzAnalysisHint *h) { if (h) { free (h->arch); free (h->esil); @@ -381,42 +381,42 @@ RZ_API void rz_anal_hint_free(RzAnalHint *h) { } } -RZ_API RZ_NULLABLE RZ_BORROW const char *rz_anal_hint_arch_at(RzAnal *anal, ut64 addr, RZ_NULLABLE ut64 *hint_addr) { - RBNode *node = rz_rbtree_upper_bound (anal->arch_hints, &addr, ranged_hint_record_cmp, NULL); +RZ_API RZ_NULLABLE RZ_BORROW const char *rz_analysis_hint_arch_at(RzAnalysis *analysis, ut64 addr, RZ_NULLABLE ut64 *hint_addr) { + RBNode *node = rz_rbtree_upper_bound (analysis->arch_hints, &addr, ranged_hint_record_cmp, NULL); if (!node) { if (hint_addr) { *hint_addr = UT64_MAX; } return NULL; } - RzAnalArchHintRecord *record = (RzAnalArchHintRecord *)container_of (node, RzAnalRangedHintRecordBase, rb); + RzAnalysisArchHintRecord *record = (RzAnalysisArchHintRecord *)container_of (node, RzAnalysisRangedHintRecordBase, rb); if (hint_addr) { *hint_addr = record->base.addr; } return record->arch; } -RZ_API int rz_anal_hint_bits_at(RzAnal *anal, ut64 addr, RZ_NULLABLE ut64 *hint_addr) { - RBNode *node = rz_rbtree_upper_bound (anal->bits_hints, &addr, ranged_hint_record_cmp, NULL); +RZ_API int rz_analysis_hint_bits_at(RzAnalysis *analysis, ut64 addr, RZ_NULLABLE ut64 *hint_addr) { + RBNode *node = rz_rbtree_upper_bound (analysis->bits_hints, &addr, ranged_hint_record_cmp, NULL); if (!node) { if (hint_addr) { *hint_addr = UT64_MAX; } return 0; } - RzAnalBitsHintRecord *record = (RzAnalBitsHintRecord *)container_of (node, RzAnalRangedHintRecordBase, rb); + RzAnalysisBitsHintRecord *record = (RzAnalysisBitsHintRecord *)container_of (node, RzAnalysisRangedHintRecordBase, rb); if (hint_addr) { *hint_addr = record->base.addr; } return record->bits; } -RZ_API RZ_NULLABLE const RzVector/**/ *rz_anal_addr_hints_at(RzAnal *anal, ut64 addr) { - return ht_up_find (anal->addr_hints, addr, NULL); +RZ_API RZ_NULLABLE const RzVector/**/ *rz_analysis_addr_hints_at(RzAnalysis *analysis, ut64 addr) { + return ht_up_find (analysis->addr_hints, addr, NULL); } typedef struct { - RzAnalAddrHintRecordsCb cb; + RzAnalysisAddrHintRecordsCb cb; void *user; } AddrHintForeachCtx; @@ -425,34 +425,34 @@ static bool addr_hint_foreach_cb(void *user, const ut64 key, const void *value) return ctx->cb (key, value, ctx->user); } -RZ_API void rz_anal_addr_hints_foreach(RzAnal *anal, RzAnalAddrHintRecordsCb cb, void *user) { +RZ_API void rz_analysis_addr_hints_foreach(RzAnalysis *analysis, RzAnalysisAddrHintRecordsCb cb, void *user) { AddrHintForeachCtx ctx = { cb, user }; - ht_up_foreach (anal->addr_hints, addr_hint_foreach_cb, &ctx); + ht_up_foreach (analysis->addr_hints, addr_hint_foreach_cb, &ctx); } -RZ_API void rz_anal_arch_hints_foreach(RzAnal *anal, RzAnalArchHintCb cb, void *user) { +RZ_API void rz_analysis_arch_hints_foreach(RzAnalysis *analysis, RzAnalysisArchHintCb cb, void *user) { RBIter iter; - RzAnalRangedHintRecordBase *record; - rz_rbtree_foreach (anal->arch_hints, iter, record, RzAnalRangedHintRecordBase, rb) { - bool cont = cb (record->addr, ((RzAnalArchHintRecord *)record)->arch, user); + RzAnalysisRangedHintRecordBase *record; + rz_rbtree_foreach (analysis->arch_hints, iter, record, RzAnalysisRangedHintRecordBase, rb) { + bool cont = cb (record->addr, ((RzAnalysisArchHintRecord *)record)->arch, user); if (!cont) { break; } } } -RZ_API void rz_anal_bits_hints_foreach(RzAnal *anal, RzAnalBitsHintCb cb, void *user) { +RZ_API void rz_analysis_bits_hints_foreach(RzAnalysis *analysis, RzAnalysisBitsHintCb cb, void *user) { RBIter iter; - RzAnalRangedHintRecordBase *record; - rz_rbtree_foreach (anal->bits_hints, iter, record, RzAnalRangedHintRecordBase, rb) { - bool cont = cb (record->addr, ((RzAnalBitsHintRecord *)record)->bits, user); + RzAnalysisRangedHintRecordBase *record; + rz_rbtree_foreach (analysis->bits_hints, iter, record, RzAnalysisRangedHintRecordBase, rb) { + bool cont = cb (record->addr, ((RzAnalysisBitsHintRecord *)record)->bits, user); if (!cont) { break; } } } -static void hint_merge(RzAnalHint *hint, RzAnalAddrHintRecord *record) { +static void hint_merge(RzAnalysisHint *hint, RzAnalysisAddrHintRecord *record) { switch (record->type) { case RZ_ANAL_ADDR_HINT_TYPE_IMMBASE: hint->immbase = record->immbase; @@ -505,8 +505,8 @@ static void hint_merge(RzAnalHint *hint, RzAnalAddrHintRecord *record) { } } -RZ_API RzAnalHint *rz_anal_hint_get(RzAnal *a, ut64 addr) { - RzAnalHint *hint = RZ_NEW0 (RzAnalHint); +RZ_API RzAnalysisHint *rz_analysis_hint_get(RzAnalysis *a, ut64 addr) { + RzAnalysisHint *hint = RZ_NEW0 (RzAnalysisHint); if (!hint) { return NULL; } @@ -516,16 +516,16 @@ RZ_API RzAnalHint *rz_anal_hint_get(RzAnal *a, ut64 addr) { hint->ret = UT64_MAX; hint->val = UT64_MAX; hint->stackframe = UT64_MAX; - const RzVector *records = rz_anal_addr_hints_at (a, addr); + const RzVector *records = rz_analysis_addr_hints_at (a, addr); if (records) { - RzAnalAddrHintRecord *record; + RzAnalysisAddrHintRecord *record; rz_vector_foreach (records, record) { hint_merge (hint, record); } } - const char *arch = rz_anal_hint_arch_at (a, addr, NULL); + const char *arch = rz_analysis_hint_arch_at (a, addr, NULL); hint->arch = arch ? strdup (arch) : NULL; - hint->bits = rz_anal_hint_bits_at (a, addr, NULL); + hint->bits = rz_analysis_hint_bits_at (a, addr, NULL); if ((!records || rz_vector_empty (records)) && !hint->arch && !hint->bits) { // no hints found free (hint); diff --git a/librz/anal/jmptbl.c b/librz/analysis/jmptbl.c similarity index 65% rename from librz/anal/jmptbl.c rename to librz/analysis/jmptbl.c index f9b23d226d..5156c6347a 100644 --- a/librz/anal/jmptbl.c +++ b/librz/analysis/jmptbl.c @@ -1,51 +1,51 @@ // SPDX-License-Identifier: LGPL-3.0-only -#include +#include #include #include #include -#define aprintf(format, ...) if (anal->verbose) eprintf (format, __VA_ARGS__) +#define aprintf(format, ...) if (analysis->verbose) eprintf (format, __VA_ARGS__) #define JMPTBL_MAXSZ 512 -static void apply_case(RzAnal *anal, RzAnalBlock *block, ut64 switch_addr, ut64 offset_sz, ut64 case_addr, ut64 id, ut64 case_addr_loc) { +static void apply_case(RzAnalysis *analysis, RzAnalysisBlock *block, ut64 switch_addr, ut64 offset_sz, ut64 case_addr, ut64 id, ut64 case_addr_loc) { // eprintf ("** apply_case: 0x%"PFMT64x " from 0x%"PFMT64x "\n", case_addr, case_addr_loc); - rz_meta_set_data_at (anal, case_addr_loc, offset_sz); - rz_anal_hint_set_immbase (anal, case_addr_loc, 10); - rz_anal_xrefs_set (anal, switch_addr, case_addr, RZ_ANAL_REF_TYPE_CODE); + rz_meta_set_data_at (analysis, case_addr_loc, offset_sz); + rz_analysis_hint_set_immbase (analysis, case_addr_loc, 10); + rz_analysis_xrefs_set (analysis, switch_addr, case_addr, RZ_ANAL_REF_TYPE_CODE); if (block) { - rz_anal_block_add_switch_case (block, switch_addr, id, case_addr); + rz_analysis_block_add_switch_case (block, switch_addr, id, case_addr); } - if (anal->flb.set) { + if (analysis->flb.set) { char flagname[0x30]; snprintf (flagname, sizeof (flagname), "case.0x%"PFMT64x ".%d", (ut64)switch_addr, (int)id); - anal->flb.set (anal->flb.f, flagname, case_addr, 1); + analysis->flb.set (analysis->flb.f, flagname, case_addr, 1); } } -static void apply_switch(RzAnal *anal, ut64 switch_addr, ut64 jmptbl_addr, ut64 cases_count, ut64 default_case_addr) { +static void apply_switch(RzAnalysis *analysis, ut64 switch_addr, ut64 jmptbl_addr, ut64 cases_count, ut64 default_case_addr) { char tmp[0x30]; snprintf (tmp, sizeof (tmp), "switch table (%"PFMT64u" cases) at 0x%"PFMT64x, cases_count, jmptbl_addr); - rz_meta_set_string (anal, RZ_META_TYPE_COMMENT, switch_addr, tmp); - if (anal->flb.set) { + rz_meta_set_string (analysis, RZ_META_TYPE_COMMENT, switch_addr, tmp); + if (analysis->flb.set) { snprintf (tmp, sizeof (tmp), "switch.0x%08"PFMT64x, switch_addr); - anal->flb.set (anal->flb.f, tmp, switch_addr, 1); + analysis->flb.set (analysis->flb.f, tmp, switch_addr, 1); if (default_case_addr != UT64_MAX) { - rz_anal_xrefs_set (anal, switch_addr, default_case_addr, RZ_ANAL_REF_TYPE_CODE); + rz_analysis_xrefs_set (analysis, switch_addr, default_case_addr, RZ_ANAL_REF_TYPE_CODE); snprintf (tmp, sizeof (tmp), "case.default.0x%"PFMT64x, switch_addr); - anal->flb.set (anal->flb.f, tmp, default_case_addr, 1); + analysis->flb.set (analysis->flb.f, tmp, default_case_addr, 1); } } } -// analyze a jmptablle inside a function // maybe rename to rz_anal_fcn_jmptbl() ? -RZ_API bool rz_anal_jmptbl(RzAnal *anal, RzAnalFunction *fcn, RzAnalBlock *block, ut64 jmpaddr, ut64 table, ut64 tablesize, ut64 default_addr) { +// analyze a jmptablle inside a function // maybe rename to rz_analysis_fcn_jmptbl() ? +RZ_API bool rz_analysis_jmptbl(RzAnalysis *analysis, RzAnalysisFunction *fcn, RzAnalysisBlock *block, ut64 jmpaddr, ut64 table, ut64 tablesize, ut64 default_addr) { const int depth = 50; - return try_walkthrough_jmptbl (anal, fcn, block, depth, jmpaddr, table, table, tablesize, tablesize, default_addr, false); + return try_walkthrough_jmptbl (analysis, fcn, block, depth, jmpaddr, table, table, tablesize, tablesize, default_addr, false); } -RZ_API bool try_walkthrough_casetbl(RzAnal *anal, RzAnalFunction *fcn, RzAnalBlock *block, int depth, ut64 ip, ut64 jmptbl_loc, ut64 casetbl_loc, ut64 jmptbl_off, ut64 sz, ut64 jmptbl_size, ut64 default_case, bool ret0) { +RZ_API bool try_walkthrough_casetbl(RzAnalysis *analysis, RzAnalysisFunction *fcn, RzAnalysisBlock *block, int depth, ut64 ip, ut64 jmptbl_loc, ut64 casetbl_loc, ut64 jmptbl_off, ut64 sz, ut64 jmptbl_size, ut64 default_case, bool ret0) { bool ret = ret0; if (jmptbl_size == 0) { jmptbl_size = JMPTBL_MAXSZ; @@ -64,12 +64,12 @@ RZ_API bool try_walkthrough_casetbl(RzAnal *anal, RzAnalFunction *fcn, RzAnalBlo } ut64 jmpptr, case_idx, jmpptr_idx; ut8 *jmptbl = calloc (jmptbl_size, sz); - if (!jmptbl || !anal->iob.read_at (anal->iob.io, jmptbl_loc, jmptbl, jmptbl_size * sz)) { + if (!jmptbl || !analysis->iob.read_at (analysis->iob.io, jmptbl_loc, jmptbl, jmptbl_size * sz)) { free (jmptbl); return false; } ut8 *casetbl = calloc (jmptbl_size, sizeof (ut8)); - if (!casetbl || !anal->iob.read_at (anal->iob.io, casetbl_loc, casetbl, jmptbl_size)) { + if (!casetbl || !analysis->iob.read_at (analysis->iob.io, casetbl_loc, casetbl, jmptbl_size)) { free (jmptbl); free (casetbl); return false; @@ -99,33 +99,33 @@ RZ_API bool try_walkthrough_casetbl(RzAnal *anal, RzAnalFunction *fcn, RzAnalBlo if (jmpptr == 0 || jmpptr == UT32_MAX || jmpptr == UT64_MAX) { break; } - if (!anal->iob.is_valid_offset (anal->iob.io, jmpptr, 0)) { + if (!analysis->iob.is_valid_offset (analysis->iob.io, jmpptr, 0)) { st32 jmpdelta = (st32)jmpptr; // jump tables where sign extended movs are used jmpptr = jmptbl_off + jmpdelta; - if (!anal->iob.is_valid_offset (anal->iob.io, jmpptr, 0)) { + if (!analysis->iob.is_valid_offset (analysis->iob.io, jmpptr, 0)) { break; } } - if (anal->limit) { - if (jmpptr < anal->limit->from || jmpptr > anal->limit->to) { + if (analysis->limit) { + if (jmpptr < analysis->limit->from || jmpptr > analysis->limit->to) { break; } } const ut64 jmpptr_idx_off = casetbl_loc + case_idx; - rz_meta_set_data_at (anal, jmpptr_idx_off, 1); - rz_anal_hint_set_immbase (anal, jmpptr_idx_off, 10); + rz_meta_set_data_at (analysis, jmpptr_idx_off, 1); + rz_analysis_hint_set_immbase (analysis, jmpptr_idx_off, 10); - apply_case (anal, block, ip, sz, jmpptr, case_idx, jmptbl_loc + jmpptr_idx * sz); - (void)rz_anal_fcn_bb (anal, fcn, jmpptr, depth - 1); + apply_case (analysis, block, ip, sz, jmpptr, case_idx, jmptbl_loc + jmpptr_idx * sz); + (void)rz_analysis_fcn_bb (analysis, fcn, jmpptr, depth - 1); } if (case_idx > 0) { if (default_case == 0) { default_case = UT64_MAX; } - apply_switch (anal, ip, jmptbl_loc, case_idx, default_case); + apply_switch (analysis, ip, jmptbl_loc, case_idx, default_case); } free (jmptbl); @@ -133,7 +133,7 @@ RZ_API bool try_walkthrough_casetbl(RzAnal *anal, RzAnalFunction *fcn, RzAnalBlo return ret; } -RZ_API bool try_walkthrough_jmptbl(RzAnal *anal, RzAnalFunction *fcn, RzAnalBlock *block, int depth, ut64 ip, ut64 jmptbl_loc, ut64 jmptbl_off, ut64 sz, ut64 jmptbl_size, ut64 default_case, bool ret0) { +RZ_API bool try_walkthrough_jmptbl(RzAnalysis *analysis, RzAnalysisFunction *fcn, RzAnalysisBlock *block, int depth, ut64 ip, ut64 jmptbl_loc, ut64 jmptbl_off, ut64 sz, ut64 jmptbl_size, ut64 default_case, bool ret0) { bool ret = ret0; // jmptbl_size can not always be determined if (jmptbl_size == 0) { @@ -152,9 +152,9 @@ RZ_API bool try_walkthrough_jmptbl(RzAnal *anal, RzAnalFunction *fcn, RzAnalBloc if (!jmptbl) { return false; } - bool is_arm = anal->cur->arch && !strncmp (anal->cur->arch, "arm", 3); + bool is_arm = analysis->cur->arch && !strncmp (analysis->cur->arch, "arm", 3); // eprintf ("JMPTBL AT 0x%"PFMT64x"\n", jmptbl_loc); - anal->iob.read_at (anal->iob.io, jmptbl_loc, jmptbl, jmptbl_size * sz); + analysis->iob.read_at (analysis->iob.io, jmptbl_loc, jmptbl, jmptbl_size * sz); for (offs = 0; offs + sz - 1 < jmptbl_size * sz; offs += sz) { switch (sz) { case 1: @@ -184,28 +184,28 @@ RZ_API bool try_walkthrough_jmptbl(RzAnal *anal, RzAnalFunction *fcn, RzAnalBloc jmpptr = ip + 4 + (jmpptr * 2); // tbh [pc, r2, lsl 1] // assume lsl 1 } else if (sz == 1 && is_arm) { jmpptr = ip + 4 + (jmpptr * 2); // lbb [pc, r2] // assume lsl 1 - } else if (!anal->iob.is_valid_offset (anal->iob.io, jmpptr, 0)) { + } else if (!analysis->iob.is_valid_offset (analysis->iob.io, jmpptr, 0)) { st32 jmpdelta = (st32)jmpptr; // jump tables where sign extended movs are used jmpptr = jmptbl_off + jmpdelta; - if (!anal->iob.is_valid_offset (anal->iob.io, jmpptr, 0)) { + if (!analysis->iob.is_valid_offset (analysis->iob.io, jmpptr, 0)) { break; } } - if (anal->limit) { - if (jmpptr < anal->limit->from || jmpptr > anal->limit->to) { + if (analysis->limit) { + if (jmpptr < analysis->limit->from || jmpptr > analysis->limit->to) { break; } } - apply_case (anal, block, ip, sz, jmpptr, offs / sz, jmptbl_loc + offs); - (void)rz_anal_fcn_bb (anal, fcn, jmpptr, depth - 1); + apply_case (analysis, block, ip, sz, jmpptr, offs / sz, jmptbl_loc + offs); + (void)rz_analysis_fcn_bb (analysis, fcn, jmpptr, depth - 1); } if (offs > 0) { if (default_case == 0) { default_case = UT64_MAX; } - apply_switch (anal, ip, jmptbl_loc, offs / sz, default_case); + apply_switch (analysis, ip, jmptbl_loc, offs / sz, default_case); } free (jmptbl); @@ -213,12 +213,12 @@ RZ_API bool try_walkthrough_jmptbl(RzAnal *anal, RzAnalFunction *fcn, RzAnalBloc } // TODO: RENAME -RZ_API bool try_get_delta_jmptbl_info(RzAnal *anal, RzAnalFunction *fcn, ut64 jmp_addr, ut64 lea_addr, ut64 *table_size, ut64 *default_case) { +RZ_API bool try_get_delta_jmptbl_info(RzAnalysis *analysis, RzAnalysisFunction *fcn, ut64 jmp_addr, ut64 lea_addr, ut64 *table_size, ut64 *default_case) { bool isValid = false; bool foundCmp = false; int i; - RzAnalOp tmp_aop = {0}; + RzAnalysisOp tmp_aop = {0}; if (lea_addr > jmp_addr) { return false; } @@ -228,10 +228,10 @@ RZ_API bool try_get_delta_jmptbl_info(RzAnal *anal, RzAnalFunction *fcn, ut64 jm return false; } // search for a cmp register with a reasonable size - anal->iob.read_at (anal->iob.io, lea_addr, (ut8 *)buf, search_sz); + analysis->iob.read_at (analysis->iob.io, lea_addr, (ut8 *)buf, search_sz); for (i = 0; i + 8 < search_sz; i++) { - int len = rz_anal_op (anal, &tmp_aop, lea_addr + i, buf + i, search_sz - i, RZ_ANAL_OP_MASK_BASIC); + int len = rz_analysis_op (analysis, &tmp_aop, lea_addr + i, buf + i, search_sz - i, RZ_ANAL_OP_MASK_BASIC); if (len < 1) { len = 1; } @@ -273,7 +273,7 @@ RZ_API bool try_get_delta_jmptbl_info(RzAnal *anal, RzAnalFunction *fcn, ut64 jm } // TODO: find a better function name -RZ_API int walkthrough_arm_jmptbl_style(RzAnal *anal, RzAnalFunction *fcn, RzAnalBlock *block, int depth, ut64 ip, ut64 jmptbl_loc, ut64 sz, ut64 jmptbl_size, ut64 default_case, int ret0) { +RZ_API int walkthrough_arm_jmptbl_style(RzAnalysis *analysis, RzAnalysisFunction *fcn, RzAnalysisBlock *block, int depth, ut64 ip, ut64 jmptbl_loc, ut64 sz, ut64 jmptbl_size, ut64 default_case, int ret0) { /* * Example about arm jump table * @@ -302,31 +302,31 @@ RZ_API int walkthrough_arm_jmptbl_style(RzAnal *anal, RzAnalFunction *fcn, RzAna for (offs = 0; offs + sz - 1 < jmptbl_size * sz; offs += sz) { jmpptr = jmptbl_loc + offs; - apply_case (anal, block, ip, sz, jmpptr, offs / sz, jmptbl_loc + offs); - (void)rz_anal_fcn_bb (anal, fcn, jmpptr, depth - 1); + apply_case (analysis, block, ip, sz, jmpptr, offs / sz, jmptbl_loc + offs); + (void)rz_analysis_fcn_bb (analysis, fcn, jmpptr, depth - 1); } if (offs > 0) { if (default_case == 0 || default_case == UT32_MAX) { default_case = UT64_MAX; } - apply_switch (anal, ip, jmptbl_loc, offs / sz, default_case); + apply_switch (analysis, ip, jmptbl_loc, offs / sz, default_case); } return ret; } -RZ_API bool try_get_jmptbl_info(RzAnal *anal, RzAnalFunction *fcn, ut64 addr, RzAnalBlock *my_bb, ut64 *table_size, ut64 *default_case) { +RZ_API bool try_get_jmptbl_info(RzAnalysis *analysis, RzAnalysisFunction *fcn, ut64 addr, RzAnalysisBlock *my_bb, ut64 *table_size, ut64 *default_case) { bool isValid = false; int i; RzListIter *iter; - RzAnalBlock *tmp_bb, *prev_bb; + RzAnalysisBlock *tmp_bb, *prev_bb; prev_bb = 0; if (!fcn->bbs) { return false; } /* if UJMP is in .plt section just skip it */ - RzBinSection *s = anal->binb.get_vsect_at (anal->binb.bin, addr); + RzBinSection *s = analysis->binb.get_vsect_at (analysis->binb.bin, addr); if (s && s->name[0]) { bool in_plt = strstr (s->name, ".plt") != NULL; if (!in_plt && strstr (s->name, "_stubs") != NULL) { @@ -354,19 +354,19 @@ RZ_API bool try_get_jmptbl_info(RzAnal *anal, RzAnalFunction *fcn, ut64 addr, Rz // default case is the jump target of the unconditional jump *default_case = prev_bb->jump == my_bb->addr ? prev_bb->fail : prev_bb->jump; - RzAnalOp tmp_aop = {0}; + RzAnalysisOp tmp_aop = {0}; ut8 *bb_buf = calloc (1, prev_bb->size); if (!bb_buf) { return false; } // search for a cmp register with a reasonable size - anal->iob.read_at (anal->iob.io, prev_bb->addr, (ut8 *) bb_buf, prev_bb->size); + analysis->iob.read_at (analysis->iob.io, prev_bb->addr, (ut8 *) bb_buf, prev_bb->size); isValid = false; - RzAnalHint *hint = rz_anal_hint_get (anal, addr); + RzAnalysisHint *hint = rz_analysis_hint_get (analysis, addr); if (hint) { ut64 val = hint->val; - rz_anal_hint_free (hint); + rz_analysis_hint_free (hint); if (val != UT64_MAX) { *table_size = val; return true; @@ -380,12 +380,12 @@ RZ_API bool try_get_jmptbl_info(RzAnal *anal, RzAnalFunction *fcn, ut64 addr, Rz continue; } int buflen = prev_bb->size - prev_pos; - int len = rz_anal_op (anal, &tmp_aop, op_addr, + int len = rz_analysis_op (analysis, &tmp_aop, op_addr, bb_buf + prev_pos, buflen, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_HINT); ut32 type = tmp_aop.type & RZ_ANAL_OP_TYPE_MASK; if (len < 1 || type != RZ_ANAL_OP_TYPE_CMP) { - rz_anal_op_fini (&tmp_aop); + rz_analysis_op_fini (&tmp_aop); continue; } // get the value of the cmp @@ -404,7 +404,7 @@ RZ_API bool try_get_jmptbl_info(RzAnal *anal, RzAnalFunction *fcn, ut64 addr, Rz isValid = tmp_aop.refptr < 0x200; *table_size = tmp_aop.refptr + 1; } - rz_anal_op_fini (&tmp_aop); + rz_analysis_op_fini (&tmp_aop); // TODO: check the jmp for whether val is included in valid range or not (ja vs jae) break; } diff --git a/librz/anal/labels.c b/librz/analysis/labels.c similarity index 67% rename from librz/anal/labels.c rename to librz/analysis/labels.c index 723fe065dc..db9f1baec2 100644 --- a/librz/anal/labels.c +++ b/librz/analysis/labels.c @@ -1,21 +1,21 @@ // SPDX-License-Identifier: LGPL-3.0-only -#include +#include HEAPTYPE (ut64); -RZ_API ut64 rz_anal_function_get_label(RzAnalFunction *fcn, const char *name) { +RZ_API ut64 rz_analysis_function_get_label(RzAnalysisFunction *fcn, const char *name) { rz_return_val_if_fail (fcn, UT64_MAX); ut64 *addr = ht_pp_find (fcn->label_addrs, name, NULL); return addr? *addr: UT64_MAX; } -RZ_API const char *rz_anal_function_get_label_at(RzAnalFunction *fcn, ut64 addr) { +RZ_API const char *rz_analysis_function_get_label_at(RzAnalysisFunction *fcn, ut64 addr) { rz_return_val_if_fail (fcn, NULL); return ht_up_find (fcn->labels, addr, NULL); } -RZ_API bool rz_anal_function_set_label(RzAnalFunction *fcn, const char *name, ut64 addr) { +RZ_API bool rz_analysis_function_set_label(RzAnalysisFunction *fcn, const char *name, ut64 addr) { rz_return_val_if_fail (fcn && name, false); if (ht_pp_find (fcn->label_addrs, name, NULL)) { return false; @@ -29,7 +29,7 @@ RZ_API bool rz_anal_function_set_label(RzAnalFunction *fcn, const char *name, ut return true; } -RZ_API bool rz_anal_function_delete_label(RzAnalFunction *fcn, const char *name) { +RZ_API bool rz_analysis_function_delete_label(RzAnalysisFunction *fcn, const char *name) { rz_return_val_if_fail (fcn && name, false); ut64 *addr = ht_pp_find (fcn->label_addrs, name, NULL); if (!addr) { @@ -40,7 +40,7 @@ RZ_API bool rz_anal_function_delete_label(RzAnalFunction *fcn, const char *name) return true; } -RZ_API bool rz_anal_function_delete_label_at(RzAnalFunction *fcn, ut64 addr) { +RZ_API bool rz_analysis_function_delete_label_at(RzAnalysisFunction *fcn, ut64 addr) { rz_return_val_if_fail (fcn, false); char *name = ht_up_find (fcn->labels, addr, NULL); if (!name) { diff --git a/librz/anal/meson.build b/librz/analysis/meson.build similarity index 66% rename from librz/anal/meson.build rename to librz/analysis/meson.build index d059f404a8..b17142ce07 100644 --- a/librz/anal/meson.build +++ b/librz/analysis/meson.build @@ -1,5 +1,5 @@ -rz_anal_sources = [ - 'anal.c', +rz_analysis_sources = [ + 'analysis.c', 'bb.c', 'block.c', 'function.c', @@ -38,63 +38,63 @@ rz_anal_sources = [ 'var.c', 'vtable.c', 'xrefs.c', - 'serialize_anal.c', - 'p/anal_6502.c', - 'p/anal_6502_cs.c', - 'p/anal_8051.c', - 'p/anal_amd29k.c', - 'p/anal_arc.c', - 'p/anal_arm_cs.c', - 'p/anal_arm_gnu.c', - 'p/anal_avr.c', - 'p/anal_bf.c', - 'p/anal_chip8.c', - 'p/anal_cr16.c', - 'p/anal_cris.c', - 'p/anal_dalvik.c', - 'p/anal_ebc.c', - 'p/anal_gb.c', - 'p/anal_h8300.c', - 'p/anal_hexagon.c', - 'p/anal_i4004.c', - 'p/anal_i8080.c', - 'p/anal_java.c', - 'p/anal_m68k_cs.c', - 'p/anal_m680x_cs.c', - 'p/anal_malbolge.c', - 'p/anal_mcore.c', - 'p/anal_mips_cs.c', - 'p/anal_mips_gnu.c', - 'p/anal_msp430.c', - 'p/anal_nios2.c', - 'p/anal_null.c', - 'p/anal_or1k.c', - 'p/anal_pic.c', - 'p/anal_ppc_cs.c', - 'p/anal_ppc_gnu.c', - 'p/anal_propeller.c', - 'p/anal_pyc.c', - 'p/anal_riscv.c', - 'p/anal_rsp.c', - 'p/anal_sh.c', - 'p/anal_snes.c', - 'p/anal_sparc_cs.c', - 'p/anal_sparc_gnu.c', - 'p/anal_sysz.c', - 'p/anal_tms320.c', - 'p/anal_tms320_c55x_plus.c', - #'p/anal_tms320c64x.c', - 'p/anal_tricore.c', - 'p/anal_v810.c', - 'p/anal_v850.c', - 'p/anal_vax.c', - 'p/anal_wasm.c', - 'p/anal_ws.c', - 'p/anal_x86_cs.c', - 'p/anal_xap.c', - 'p/anal_xcore_cs.c', - 'p/anal_xtensa.c', - 'p/anal_z80.c', + 'serialize_analysis.c', + 'p/analysis_6502.c', + 'p/analysis_6502_cs.c', + 'p/analysis_8051.c', + 'p/analysis_amd29k.c', + 'p/analysis_arc.c', + 'p/analysis_arm_cs.c', + 'p/analysis_arm_gnu.c', + 'p/analysis_avr.c', + 'p/analysis_bf.c', + 'p/analysis_chip8.c', + 'p/analysis_cr16.c', + 'p/analysis_cris.c', + 'p/analysis_dalvik.c', + 'p/analysis_ebc.c', + 'p/analysis_gb.c', + 'p/analysis_h8300.c', + 'p/analysis_hexagon.c', + 'p/analysis_i4004.c', + 'p/analysis_i8080.c', + 'p/analysis_java.c', + 'p/analysis_m68k_cs.c', + 'p/analysis_m680x_cs.c', + 'p/analysis_malbolge.c', + 'p/analysis_mcore.c', + 'p/analysis_mips_cs.c', + 'p/analysis_mips_gnu.c', + 'p/analysis_msp430.c', + 'p/analysis_nios2.c', + 'p/analysis_null.c', + 'p/analysis_or1k.c', + 'p/analysis_pic.c', + 'p/analysis_ppc_cs.c', + 'p/analysis_ppc_gnu.c', + 'p/analysis_propeller.c', + 'p/analysis_pyc.c', + 'p/analysis_riscv.c', + 'p/analysis_rsp.c', + 'p/analysis_sh.c', + 'p/analysis_snes.c', + 'p/analysis_sparc_cs.c', + 'p/analysis_sparc_gnu.c', + 'p/analysis_sysz.c', + 'p/analysis_tms320.c', + 'p/analysis_tms320_c55x_plus.c', + #'p/analysis_tms320c64x.c', + 'p/analysis_tricore.c', + 'p/analysis_v810.c', + 'p/analysis_v850.c', + 'p/analysis_vax.c', + 'p/analysis_wasm.c', + 'p/analysis_ws.c', + 'p/analysis_x86_cs.c', + 'p/analysis_xap.c', + 'p/analysis_xcore_cs.c', + 'p/analysis_xtensa.c', + 'p/analysis_z80.c', #'arch/gb/meta_gb_cmt.c', 'arch/hexagon/hexagon_anal.c', '../asm/arch/amd29k/amd29k.c', @@ -158,7 +158,7 @@ rz_anal_sources = [ '../asm/arch/pyc/pyc_dis.c' ] -rz_anal_inc = [ +rz_analysis_inc = [ platform_inc, include_directories( 'arch/gb', @@ -166,8 +166,8 @@ rz_anal_inc = [ ) ] -rz_anal = library('rz_anal', rz_anal_sources, - include_directories: rz_anal_inc, +rz_analysis = library('rz_analysis', rz_analysis_sources, + include_directories: rz_analysis_inc, c_args: library_cflags, dependencies: [ rz_util_dep, @@ -189,14 +189,14 @@ rz_anal = library('rz_anal', rz_anal_sources, soversion: rizin_libversion ) -rz_anal_dep = declare_dependency(link_with: rz_anal, - include_directories: rz_anal_inc) +rz_analysis_dep = declare_dependency(link_with: rz_analysis, + include_directories: rz_analysis_inc) -pkgconfig_mod.generate(rz_anal, +pkgconfig_mod.generate(rz_analysis, subdirs: 'librz', version: rizin_version, - name: 'rz_anal', - filebase: 'rz_anal', + name: 'rz_analysis', + filebase: 'rz_analysis', libraries: pkgcfg_sanitize_libs, requires: [ 'rz_util', diff --git a/librz/anal/meta.c b/librz/analysis/meta.c similarity index 76% rename from librz/anal/meta.c rename to librz/analysis/meta.c index c8179d58b1..cdc7aa88e4 100644 --- a/librz/anal/meta.c +++ b/librz/analysis/meta.c @@ -1,15 +1,15 @@ // SPDX-License-Identifier: LGPL-3.0-only -#include +#include #include -static bool item_matches_filter(RzAnalMetaItem *item, RzAnalMetaType type, RZ_NULLABLE const RzSpace *space) { +static bool item_matches_filter(RzAnalysisMetaItem *item, RzAnalysisMetaType type, RZ_NULLABLE const RzSpace *space) { return (type == RZ_META_TYPE_ANY || item->type == type) && (!space || item->space == space); } typedef struct { - RzAnalMetaType type; + RzAnalysisMetaType type; const RzSpace *space; RzIntervalNode *node; @@ -24,28 +24,28 @@ static bool find_node_cb(RzIntervalNode *node, void *user) { return true; } -static RzIntervalNode *find_node_at(RzAnal *anal, RzAnalMetaType type, RZ_NULLABLE const RzSpace *space, ut64 addr) { +static RzIntervalNode *find_node_at(RzAnalysis *analysis, RzAnalysisMetaType type, RZ_NULLABLE const RzSpace *space, ut64 addr) { FindCtx ctx = { .type = type, .space = space, .node = NULL }; - rz_interval_tree_all_at (&anal->meta, addr, find_node_cb, &ctx); + rz_interval_tree_all_at (&analysis->meta, addr, find_node_cb, &ctx); return ctx.node; } -static RzIntervalNode *find_node_in(RzAnal *anal, RzAnalMetaType type, RZ_NULLABLE const RzSpace *space, ut64 addr) { +static RzIntervalNode *find_node_in(RzAnalysis *analysis, RzAnalysisMetaType type, RZ_NULLABLE const RzSpace *space, ut64 addr) { FindCtx ctx = { .type = type, .space = space, .node = NULL }; - rz_interval_tree_all_in (&anal->meta, addr, true, find_node_cb, &ctx); + rz_interval_tree_all_in (&analysis->meta, addr, true, find_node_cb, &ctx); return ctx.node; } typedef struct { - RzAnalMetaType type; + RzAnalysisMetaType type; const RzSpace *space; RzPVector/*RzIntervalNode*/ *result; @@ -59,7 +59,7 @@ static bool collect_nodes_cb(RzIntervalNode *node, void *user) { return true; } -static RzPVector *collect_nodes_at(RzAnal *anal, RzAnalMetaType type, RZ_NULLABLE const RzSpace *space, ut64 addr) { +static RzPVector *collect_nodes_at(RzAnalysis *analysis, RzAnalysisMetaType type, RZ_NULLABLE const RzSpace *space, ut64 addr) { CollectCtx ctx = { .type = type, .space = space, @@ -68,11 +68,11 @@ static RzPVector *collect_nodes_at(RzAnal *anal, RzAnalMetaType type, RZ_NULLABL if (!ctx.result) { return NULL; } - rz_interval_tree_all_at (&anal->meta, addr, collect_nodes_cb, &ctx); + rz_interval_tree_all_at (&analysis->meta, addr, collect_nodes_cb, &ctx); return ctx.result; } -static RzPVector *collect_nodes_in(RzAnal *anal, RzAnalMetaType type, RZ_NULLABLE const RzSpace *space, ut64 addr) { +static RzPVector *collect_nodes_in(RzAnalysis *analysis, RzAnalysisMetaType type, RZ_NULLABLE const RzSpace *space, ut64 addr) { CollectCtx ctx = { .type = type, .space = space, @@ -81,11 +81,11 @@ static RzPVector *collect_nodes_in(RzAnal *anal, RzAnalMetaType type, RZ_NULLABL if (!ctx.result) { return NULL; } - rz_interval_tree_all_in (&anal->meta, addr, true, collect_nodes_cb, &ctx); + rz_interval_tree_all_in (&analysis->meta, addr, true, collect_nodes_cb, &ctx); return ctx.result; } -static RzPVector *collect_nodes_intersect(RzAnal *anal, RzAnalMetaType type, RZ_NULLABLE const RzSpace *space, ut64 start, ut64 end) { +static RzPVector *collect_nodes_intersect(RzAnalysis *analysis, RzAnalysisMetaType type, RZ_NULLABLE const RzSpace *space, ut64 start, ut64 end) { CollectCtx ctx = { .type = type, .space = space, @@ -94,17 +94,17 @@ static RzPVector *collect_nodes_intersect(RzAnal *anal, RzAnalMetaType type, RZ_ if (!ctx.result) { return NULL; } - rz_interval_tree_all_intersect (&anal->meta, start, end, true, collect_nodes_cb, &ctx); + rz_interval_tree_all_intersect (&analysis->meta, start, end, true, collect_nodes_cb, &ctx); return ctx.result; } -static bool meta_set(RzAnal *a, RzAnalMetaType type, int subtype, ut64 from, ut64 to, const char *str) { +static bool meta_set(RzAnalysis *a, RzAnalysisMetaType type, int subtype, ut64 from, ut64 to, const char *str) { if (to < from) { return false; } RzSpace *space = rz_spaces_current (&a->meta_spaces); RzIntervalNode *node = find_node_at (a, type, space, from); - RzAnalMetaItem *item = node ? node->data : RZ_NEW0 (RzAnalMetaItem); + RzAnalysisMetaItem *item = node ? node->data : RZ_NEW0 (RzAnalysisMetaItem); if (!item) { return false; } @@ -127,21 +127,21 @@ static bool meta_set(RzAnal *a, RzAnalMetaType type, int subtype, ut64 from, ut6 return true; } -RZ_API bool rz_meta_set_string(RzAnal *a, RzAnalMetaType type, ut64 addr, const char *s) { +RZ_API bool rz_meta_set_string(RzAnalysis *a, RzAnalysisMetaType type, ut64 addr, const char *s) { return meta_set (a, type, 0, addr, addr, s); } -RZ_API const char *rz_meta_get_string(RzAnal *a, RzAnalMetaType type, ut64 addr) { +RZ_API const char *rz_meta_get_string(RzAnalysis *a, RzAnalysisMetaType type, ut64 addr) { RzIntervalNode *node = find_node_at (a, type, rz_spaces_current (&a->meta_spaces), addr); if (!node) { return NULL; } - RzAnalMetaItem *item = node->data; + RzAnalysisMetaItem *item = node->data; return item->str; } -static void del(RzAnal *a, RzAnalMetaType type, const RzSpace *space, ut64 addr, ut64 size) { +static void del(RzAnalysis *a, RzAnalysisMetaType type, const RzSpace *space, ut64 addr, ut64 size) { RzPVector *victims = NULL; if (size == UT64_MAX) { // delete everything @@ -150,7 +150,7 @@ static void del(RzAnal *a, RzAnalMetaType type, const RzSpace *space, ut64 addr, return; } RzIntervalTreeIter it; - RzAnalMetaItem *item; + RzAnalysisMetaItem *item; rz_interval_tree_foreach (&a->meta, it, item) { if (item_matches_filter (item, type, space)) { rz_pvector_push (victims, rz_interval_tree_iter_get (&it)); @@ -173,15 +173,15 @@ static void del(RzAnal *a, RzAnalMetaType type, const RzSpace *space, ut64 addr, rz_pvector_free (victims); } -RZ_API void rz_meta_del(RzAnal *a, RzAnalMetaType type, ut64 addr, ut64 size) { +RZ_API void rz_meta_del(RzAnalysis *a, RzAnalysisMetaType type, ut64 addr, ut64 size) { del (a, type, rz_spaces_current (&a->meta_spaces), addr, size); } -RZ_API bool rz_meta_set(RzAnal *a, RzAnalMetaType type, ut64 addr, ut64 size, const char *str) { +RZ_API bool rz_meta_set(RzAnalysis *a, RzAnalysisMetaType type, ut64 addr, ut64 size, const char *str) { return rz_meta_set_with_subtype (a, type, 0, addr, size, str); } -RZ_API bool rz_meta_set_with_subtype(RzAnal *m, RzAnalMetaType type, int subtype, ut64 addr, ut64 size, const char *str) { +RZ_API bool rz_meta_set_with_subtype(RzAnalysis *m, RzAnalysisMetaType type, int subtype, ut64 addr, ut64 size, const char *str) { rz_return_val_if_fail (m && size, false); ut64 end = addr + size - 1; if (end < addr) { @@ -190,7 +190,7 @@ RZ_API bool rz_meta_set_with_subtype(RzAnal *m, RzAnalMetaType type, int subtype return meta_set (m, type, subtype, addr, end, str); } -RZ_API RzAnalMetaItem *rz_meta_get_at(RzAnal *a, ut64 addr, RzAnalMetaType type, RZ_OUT RZ_NULLABLE ut64 *size) { +RZ_API RzAnalysisMetaItem *rz_meta_get_at(RzAnalysis *a, ut64 addr, RzAnalysisMetaType type, RZ_OUT RZ_NULLABLE ut64 *size) { RzIntervalNode *node = find_node_at (a, type, rz_spaces_current (&a->meta_spaces), addr); if (node && size) { *size = rz_meta_item_size (node->start, node->end); @@ -198,19 +198,19 @@ RZ_API RzAnalMetaItem *rz_meta_get_at(RzAnal *a, ut64 addr, RzAnalMetaType type, return node ? node->data : NULL; } -RZ_API RzIntervalNode *rz_meta_get_in(RzAnal *a, ut64 addr, RzAnalMetaType type) { +RZ_API RzIntervalNode *rz_meta_get_in(RzAnalysis *a, ut64 addr, RzAnalysisMetaType type) { return find_node_in (a, type, rz_spaces_current (&a->meta_spaces), addr); } -RZ_API RzPVector/* *>*/ *rz_meta_get_all_at(RzAnal *a, ut64 at) { +RZ_API RzPVector/* *>*/ *rz_meta_get_all_at(RzAnalysis *a, ut64 at) { return collect_nodes_at (a, RZ_META_TYPE_ANY, rz_spaces_current (&a->meta_spaces), at); } -RZ_API RzPVector *rz_meta_get_all_in(RzAnal *a, ut64 at, RzAnalMetaType type) { +RZ_API RzPVector *rz_meta_get_all_in(RzAnalysis *a, ut64 at, RzAnalysisMetaType type) { return collect_nodes_in (a, type, rz_spaces_current (&a->meta_spaces), at); } -RZ_API RzPVector *rz_meta_get_all_intersect(RzAnal *a, ut64 start, ut64 size, RzAnalMetaType type) { +RZ_API RzPVector *rz_meta_get_all_intersect(RzAnalysis *a, ut64 start, ut64 size, RzAnalysisMetaType type) { rz_return_val_if_fail (size, NULL); ut64 end = start + size - 1; if (end < start) { @@ -236,7 +236,7 @@ RZ_API const char *rz_meta_type_to_string(int type) { return "# unknown meta # "; } -RZ_API void rz_meta_print(RzAnal *a, RzAnalMetaItem *d, ut64 start, ut64 size, int rad, PJ *pj, bool show_full) { +RZ_API void rz_meta_print(RzAnalysis *a, RzAnalysisMetaItem *d, ut64 start, ut64 size, int rad, PJ *pj, bool show_full) { rz_return_if_fail (!(rad == 'j' && !pj)); // rad == 'j' => pj != NULL char *pstr, *base64_str; RzCore *core = a->coreb.core; @@ -473,7 +473,7 @@ RZ_API void rz_meta_print(RzAnal *a, RzAnalMetaItem *d, ut64 start, ut64 size, i } } -RZ_API void rz_meta_print_list_at(RzAnal *a, ut64 addr, int rad) { +RZ_API void rz_meta_print_list_at(RzAnalysis *a, ut64 addr, int rad) { RzPVector *nodes = collect_nodes_at (a, RZ_META_TYPE_ANY, rz_spaces_current (&a->meta_spaces), addr); if (!nodes) { return; @@ -486,7 +486,7 @@ RZ_API void rz_meta_print_list_at(RzAnal *a, ut64 addr, int rad) { rz_pvector_free (nodes); } -static void print_meta_list(RzAnal *a, int type, int rad, ut64 addr) { +static void print_meta_list(RzAnalysis *a, int type, int rad, ut64 addr) { PJ *pj = NULL; if (rad == 'j') { pj = pj_new (); @@ -496,22 +496,22 @@ static void print_meta_list(RzAnal *a, int type, int rad, ut64 addr) { pj_a (pj); } - RzAnalFunction *fcn = NULL; + RzAnalysisFunction *fcn = NULL; if (addr != UT64_MAX) { - fcn = rz_anal_get_fcn_in (a, addr, 0); + fcn = rz_analysis_get_fcn_in (a, addr, 0); if (!fcn) { goto beach; } } RzIntervalTreeIter it; - RzAnalMetaItem *item; + RzAnalysisMetaItem *item; rz_interval_tree_foreach (&a->meta, it, item) { RzIntervalNode *node = rz_interval_tree_iter_get (&it); if (type != RZ_META_TYPE_ANY && item->type != type) { continue; } - if (fcn && !rz_anal_function_contains (fcn, node->start)) { + if (fcn && !rz_analysis_function_contains (fcn, node->start)) { continue; } rz_meta_print (a, item, node->start, rz_meta_node_size (node), rad, pj, true); @@ -525,22 +525,22 @@ beach: } } -RZ_API void rz_meta_print_list_all(RzAnal *a, int type, int rad) { +RZ_API void rz_meta_print_list_all(RzAnalysis *a, int type, int rad) { print_meta_list (a, type, rad, UT64_MAX); } -RZ_API void rz_meta_print_list_in_function(RzAnal *a, int type, int rad, ut64 addr) { +RZ_API void rz_meta_print_list_in_function(RzAnalysis *a, int type, int rad, ut64 addr) { print_meta_list (a, type, rad, addr); } -RZ_API void rz_meta_rebase(RzAnal *anal, ut64 diff) { +RZ_API void rz_meta_rebase(RzAnalysis *analysis, ut64 diff) { if (!diff) { return; } - RzIntervalTree old = anal->meta; - rz_interval_tree_init (&anal->meta, old.free); + RzIntervalTree old = analysis->meta; + rz_interval_tree_init (&analysis->meta, old.free); RzIntervalTreeIter it; - RzAnalMetaItem *item; + RzAnalysisMetaItem *item; rz_interval_tree_foreach (&old, it, item) { RzIntervalNode *node = rz_interval_tree_iter_get (&it); ut64 newstart = node->start + diff; @@ -550,20 +550,20 @@ RZ_API void rz_meta_rebase(RzAnal *anal, ut64 diff) { newstart = node->start; newend = node->end; } - rz_interval_tree_insert (&anal->meta, newstart, newend, item); + rz_interval_tree_insert (&analysis->meta, newstart, newend, item); } old.free = NULL; rz_interval_tree_fini (&old); } -RZ_API void rz_meta_space_unset_for(RzAnal *a, const RzSpace *space) { +RZ_API void rz_meta_space_unset_for(RzAnalysis *a, const RzSpace *space) { del (a, RZ_META_TYPE_ANY, space, 0, UT64_MAX); } -RZ_API ut64 rz_meta_get_size(RzAnal *a, RzAnalMetaType type) { +RZ_API ut64 rz_meta_get_size(RzAnalysis *a, RzAnalysisMetaType type) { ut64 sum = 0; RzIntervalTreeIter it; - RzAnalMetaItem *item; + RzAnalysisMetaItem *item; RzIntervalNode *prev = NULL; rz_interval_tree_foreach (&a->meta, it, item) { RzIntervalNode *node = rz_interval_tree_iter_get (&it); @@ -577,10 +577,10 @@ RZ_API ut64 rz_meta_get_size(RzAnal *a, RzAnalMetaType type) { return sum; } -RZ_API int rz_meta_space_count_for(RzAnal *a, const RzSpace *space) { +RZ_API int rz_meta_space_count_for(RzAnalysis *a, const RzSpace *space) { int r = 0; RzIntervalTreeIter it; - RzAnalMetaItem *item; + RzAnalysisMetaItem *item; rz_interval_tree_foreach (&a->meta, it, item) { if (item->space == space) { r++; @@ -589,7 +589,7 @@ RZ_API int rz_meta_space_count_for(RzAnal *a, const RzSpace *space) { return r; } -RZ_API void rz_meta_set_data_at(RzAnal *a, ut64 addr, ut64 wordsz) { +RZ_API void rz_meta_set_data_at(RzAnalysis *a, ut64 addr, ut64 wordsz) { rz_return_if_fail (wordsz); rz_meta_set (a, RZ_META_TYPE_DATA, addr, wordsz, NULL); } diff --git a/librz/anal/op.c b/librz/analysis/op.c similarity index 82% rename from librz/anal/op.c rename to librz/analysis/op.c index 0bee094706..3efceb7d8b 100644 --- a/librz/anal/op.c +++ b/librz/analysis/op.c @@ -1,24 +1,24 @@ // SPDX-License-Identifier: LGPL-3.0-only -#include +#include #include #include -RZ_API RzAnalOp *rz_anal_op_new(void) { - RzAnalOp *op = RZ_NEW (RzAnalOp); - rz_anal_op_init (op); +RZ_API RzAnalysisOp *rz_analysis_op_new(void) { + RzAnalysisOp *op = RZ_NEW (RzAnalysisOp); + rz_analysis_op_init (op); return op; } -RZ_API RzList *rz_anal_op_list_new(void) { +RZ_API RzList *rz_analysis_op_list_new(void) { RzList *list = rz_list_new (); if (list) { - list->free = &rz_anal_op_free; + list->free = &rz_analysis_op_free; } return list; } -RZ_API void rz_anal_op_init(RzAnalOp *op) { +RZ_API void rz_analysis_op_init(RzAnalysisOp *op) { if (op) { memset (op, 0, sizeof (*op)); op->addr = UT64_MAX; @@ -31,38 +31,38 @@ RZ_API void rz_anal_op_init(RzAnalOp *op) { } } -RZ_API bool rz_anal_op_fini(RzAnalOp *op) { +RZ_API bool rz_analysis_op_fini(RzAnalysisOp *op) { if (!op) { return false; } - rz_anal_value_free (op->src[0]); - rz_anal_value_free (op->src[1]); - rz_anal_value_free (op->src[2]); + rz_analysis_value_free (op->src[0]); + rz_analysis_value_free (op->src[1]); + rz_analysis_value_free (op->src[2]); op->src[0] = NULL; op->src[1] = NULL; op->src[2] = NULL; - rz_anal_value_free (op->dst); + rz_analysis_value_free (op->dst); op->dst = NULL; rz_list_free (op->access); op->access = NULL; rz_strbuf_fini (&op->opex); rz_strbuf_fini (&op->esil); - rz_anal_switch_op_free (op->switch_op); + rz_analysis_switch_op_free (op->switch_op); op->switch_op = NULL; RZ_FREE (op->mnemonic); return true; } -RZ_API void rz_anal_op_free(void *_op) { +RZ_API void rz_analysis_op_free(void *_op) { if (!_op) { return; } - rz_anal_op_fini (_op); - memset (_op, 0, sizeof (RzAnalOp)); + rz_analysis_op_fini (_op); + memset (_op, 0, sizeof (RzAnalysisOp)); free (_op); } -static int defaultCycles(RzAnalOp *op) { +static int defaultCycles(RzAnalysisOp *op) { switch (op->type) { case RZ_ANAL_OP_TYPE_PUSH: case RZ_ANAL_OP_TYPE_POP: @@ -88,25 +88,25 @@ static int defaultCycles(RzAnalOp *op) { } } -RZ_API int rz_anal_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int len, RzAnalOpMask mask) { - rz_anal_op_init (op); - rz_return_val_if_fail (anal && op && len > 0, -1); +RZ_API int rz_analysis_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *data, int len, RzAnalysisOpMask mask) { + rz_analysis_op_init (op); + rz_return_val_if_fail (analysis && op && len > 0, -1); int ret = RZ_MIN (2, len); - if (len > 0 && anal->cur && anal->cur->op) { + if (len > 0 && analysis->cur && analysis->cur->op) { //use core binding to set asm.bits correctly based on the addr //this is because of the hassle of arm/thumb - if (anal && anal->coreb.archbits) { - anal->coreb.archbits (anal->coreb.core, addr); + if (analysis && analysis->coreb.archbits) { + analysis->coreb.archbits (analysis->coreb.core, addr); } - if (anal->pcalign && addr % anal->pcalign) { + if (analysis->pcalign && addr % analysis->pcalign) { op->type = RZ_ANAL_OP_TYPE_ILL; op->addr = addr; - // eprintf ("Unaligned instruction for %d bits at 0x%"PFMT64x"\n", anal->bits, addr); + // eprintf ("Unaligned instruction for %d bits at 0x%"PFMT64x"\n", analysis->bits, addr); op->size = 1; return -1; } - ret = anal->cur->op (anal, op, addr, data, len, mask); + ret = analysis->cur->op (analysis, op, addr, data, len, mask); if (ret < 1) { op->type = RZ_ANAL_OP_TYPE_ILL; } @@ -124,22 +124,22 @@ RZ_API int rz_anal_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, in } } if (!op->mnemonic && (mask & RZ_ANAL_OP_MASK_DISASM)) { - if (anal->verbose) { - eprintf ("Warning: unhandled RZ_ANAL_OP_MASK_DISASM in rz_anal_op\n"); + if (analysis->verbose) { + eprintf ("Warning: unhandled RZ_ANAL_OP_MASK_DISASM in rz_analysis_op\n"); } } if (mask & RZ_ANAL_OP_MASK_HINT) { - RzAnalHint *hint = rz_anal_hint_get (anal, addr); + RzAnalysisHint *hint = rz_analysis_hint_get (analysis, addr); if (hint) { - rz_anal_op_hint (op, hint); - rz_anal_hint_free (hint); + rz_analysis_op_hint (op, hint); + rz_analysis_hint_free (hint); } } return ret; } -RZ_API RzAnalOp *rz_anal_op_copy(RzAnalOp *op) { - RzAnalOp *nop = RZ_NEW0 (RzAnalOp); +RZ_API RzAnalysisOp *rz_analysis_op_copy(RzAnalysisOp *op) { + RzAnalysisOp *nop = RZ_NEW0 (RzAnalysisOp); if (!nop) { return NULL; } @@ -153,16 +153,16 @@ RZ_API RzAnalOp *rz_anal_op_copy(RzAnalOp *op) { } else { nop->mnemonic = NULL; } - nop->src[0] = rz_anal_value_copy (op->src[0]); - nop->src[1] = rz_anal_value_copy (op->src[1]); - nop->src[2] = rz_anal_value_copy (op->src[2]); - nop->dst = rz_anal_value_copy (op->dst); + nop->src[0] = rz_analysis_value_copy (op->src[0]); + nop->src[1] = rz_analysis_value_copy (op->src[1]); + nop->src[2] = rz_analysis_value_copy (op->src[2]); + nop->dst = rz_analysis_value_copy (op->dst); if (op->access) { RzListIter *it; - RzAnalValue *val; - RzList *naccess = rz_list_newf ((RzListFree)rz_anal_value_free); + RzAnalysisValue *val; + RzList *naccess = rz_list_newf ((RzListFree)rz_analysis_value_free); rz_list_foreach (op->access, it, val) { - rz_list_append (naccess, rz_anal_value_copy (val)); + rz_list_append (naccess, rz_analysis_value_copy (val)); } nop->access = naccess; } @@ -171,7 +171,7 @@ RZ_API RzAnalOp *rz_anal_op_copy(RzAnalOp *op) { return nop; } -RZ_API bool rz_anal_op_nonlinear(int t) { +RZ_API bool rz_analysis_op_nonlinear(int t) { t &= RZ_ANAL_OP_TYPE_MASK; switch (t) { //call @@ -202,7 +202,7 @@ RZ_API bool rz_anal_op_nonlinear(int t) { } } -RZ_API bool rz_anal_op_ismemref(int t) { +RZ_API bool rz_analysis_op_ismemref(int t) { t &= RZ_ANAL_OP_TYPE_MASK; switch (t) { case RZ_ANAL_OP_TYPE_LOAD: @@ -284,7 +284,7 @@ static struct optype { {0,NULL} }; -RZ_API int rz_anal_optype_from_string(const char *type) { +RZ_API int rz_analysis_optype_from_string(const char *type) { int i; for (i = 0; optypes[i].name;i++) { if (!strcmp (optypes[i].name, type)) { @@ -294,7 +294,7 @@ RZ_API int rz_anal_optype_from_string(const char *type) { return -1; } -RZ_API const char *rz_anal_optype_to_string(int t) { +RZ_API const char *rz_analysis_optype_to_string(int t) { bool once = true; repeat: // TODO: delete @@ -369,18 +369,18 @@ repeat: return "undefined"; } -RZ_API const char *rz_anal_op_to_esil_string(RzAnal *anal, RzAnalOp *op) { +RZ_API const char *rz_analysis_op_to_esil_string(RzAnalysis *analysis, RzAnalysisOp *op) { return rz_strbuf_get (&op->esil); } // TODO: use esil here? -RZ_API char *rz_anal_op_to_string(RzAnal *anal, RzAnalOp *op) { - RzAnalBlock *bb; - RzAnalFunction *f; +RZ_API char *rz_analysis_op_to_string(RzAnalysis *analysis, RzAnalysisOp *op) { + RzAnalysisBlock *bb; + RzAnalysisFunction *f; char *cstr, ret[128]; - char *r0 = rz_anal_value_to_string (op->dst); - char *a0 = rz_anal_value_to_string (op->src[0]); - char *a1 = rz_anal_value_to_string (op->src[1]); + char *r0 = rz_analysis_value_to_string (op->dst); + char *a0 = rz_analysis_value_to_string (op->src[0]); + char *a1 = rz_analysis_value_to_string (op->src[1]); if (!r0) { r0 = strdup ("?"); } @@ -396,8 +396,8 @@ RZ_API char *rz_anal_op_to_string(RzAnal *anal, RzAnalOp *op) { snprintf (ret, sizeof (ret), "%s = %s", r0, a0); break; case RZ_ANAL_OP_TYPE_CJMP: - if ((bb = rz_anal_bb_from_offset (anal, op->addr))) { - cstr = rz_anal_cond_to_string (bb->cond); + if ((bb = rz_analysis_bb_from_offset (analysis, op->addr))) { + cstr = rz_analysis_cond_to_string (bb->cond); snprintf (ret, sizeof (ret), "if (%s) goto 0x%"PFMT64x, cstr, op->jump); free (cstr); } else { @@ -428,7 +428,7 @@ RZ_API char *rz_anal_op_to_string(RzAnal *anal, RzAnalOp *op) { snprintf (ret, sizeof (ret), "%s()", r0); break; case RZ_ANAL_OP_TYPE_CALL: - f = rz_anal_get_fcn_in (anal, op->jump, RZ_ANAL_FCN_TYPE_NULL); + f = rz_analysis_get_fcn_in (analysis, op->jump, RZ_ANAL_FCN_TYPE_NULL); if (f) { snprintf (ret, sizeof (ret), "%s()", f->name); } else { @@ -436,9 +436,9 @@ RZ_API char *rz_anal_op_to_string(RzAnal *anal, RzAnalOp *op) { } break; case RZ_ANAL_OP_TYPE_CCALL: - f = rz_anal_get_fcn_in (anal, op->jump, RZ_ANAL_FCN_TYPE_NULL); - if ((bb = rz_anal_bb_from_offset (anal, op->addr))) { - cstr = rz_anal_cond_to_string (bb->cond); + f = rz_analysis_get_fcn_in (analysis, op->jump, RZ_ANAL_FCN_TYPE_NULL); + if ((bb = rz_analysis_bb_from_offset (analysis, op->addr))) { + cstr = rz_analysis_cond_to_string (bb->cond); if (f) { snprintf (ret, sizeof (ret), "if (%s) %s()", cstr, f->name); } else { @@ -515,8 +515,8 @@ RZ_API char *rz_anal_op_to_string(RzAnal *anal, RzAnalOp *op) { memcpy (ret, "ret", 4); break; case RZ_ANAL_OP_TYPE_CRET: - if ((bb = rz_anal_bb_from_offset (anal, op->addr))) { - cstr = rz_anal_cond_to_string (bb->cond); + if ((bb = rz_analysis_bb_from_offset (analysis, op->addr))) { + cstr = rz_analysis_cond_to_string (bb->cond); snprintf (ret, sizeof (ret), "if (%s) ret", cstr); free (cstr); } else { @@ -561,7 +561,7 @@ RZ_API char *rz_anal_op_to_string(RzAnal *anal, RzAnalOp *op) { return strdup (ret); } -RZ_API const char *rz_anal_stackop_tostring(int s) { +RZ_API const char *rz_analysis_stackop_tostring(int s) { switch (s) { case RZ_ANAL_STACK_NULL: return "null"; @@ -579,7 +579,7 @@ RZ_API const char *rz_anal_stackop_tostring(int s) { return "unk"; } -RZ_API const char *rz_anal_op_family_to_string(int n) { +RZ_API const char *rz_analysis_op_family_to_string(int n) { switch (n) { case RZ_ANAL_OP_FAMILY_UNKNOWN: return "unk"; case RZ_ANAL_OP_FAMILY_CPU: return "cpu"; @@ -596,7 +596,7 @@ RZ_API const char *rz_anal_op_family_to_string(int n) { return NULL; } -RZ_API int rz_anal_op_family_from_string(const char *f) { +RZ_API int rz_analysis_op_family_from_string(const char *f) { struct op_family { const char *name; int id; @@ -624,7 +624,7 @@ RZ_API int rz_anal_op_family_from_string(const char *f) { } /* apply hint to op, return the number of hints applied */ -RZ_API int rz_anal_op_hint(RzAnalOp *op, RzAnalHint *hint) { +RZ_API int rz_analysis_op_hint(RzAnalysisOp *op, RzAnalysisHint *hint) { int changes = 0; if (hint) { if (hint->val != UT64_MAX) { @@ -664,11 +664,11 @@ RZ_API int rz_anal_op_hint(RzAnalOp *op, RzAnalHint *hint) { // returns the '33' in 'rax + 33' // returns value for the given register name in specific address / range // imho this should not iterate, should be just a helper to get that value -RZ_API int rz_anal_op_reg_delta(RzAnal *anal, ut64 addr, const char *name) { +RZ_API int rz_analysis_op_reg_delta(RzAnalysis *analysis, ut64 addr, const char *name) { ut8 buf[32]; - anal->iob.read_at (anal->iob.io, addr, buf, sizeof (buf)); - RzAnalOp op = { 0 }; - if (rz_anal_op (anal, &op, addr, buf, sizeof (buf), RZ_ANAL_OP_MASK_ALL) > 0) { + analysis->iob.read_at (analysis->iob.io, addr, buf, sizeof (buf)); + RzAnalysisOp op = { 0 }; + if (rz_analysis_op (analysis, &op, addr, buf, sizeof (buf), RZ_ANAL_OP_MASK_ALL) > 0) { if (op.dst && op.dst->reg && op.dst->reg->name && (!name || !strcmp (op.dst->reg->name, name))) { if (op.src[0]) { return op.src[0]->delta; diff --git a/librz/analysis/p/6502.mk b/librz/analysis/p/6502.mk new file mode 100644 index 0000000000..7603f22927 --- /dev/null +++ b/librz/analysis/p/6502.mk @@ -0,0 +1,9 @@ +OBJ_6502=analysis_6502.o + +STATIC_OBJ+=${OBJ_6502} +TARGET_6502=analysis_6502.${EXT_SO} + +ALL_TARGETS+=${TARGET_6502} + +${TARGET_6502}: ${OBJ_6502} + ${CC} $(call libname,analysis_6502) ${LDFLAGS} ${CFLAGS} -o analysis_6502.${EXT_SO} ${OBJ_6502} diff --git a/librz/analysis/p/6502_cs.mk b/librz/analysis/p/6502_cs.mk new file mode 100644 index 0000000000..7f8b52dc47 --- /dev/null +++ b/librz/analysis/p/6502_cs.mk @@ -0,0 +1,9 @@ +OBJ_6502_CS=analysis_6502_cs.o + +STATIC_OBJ+=${OBJ_6502_CS} +TARGET_6502_CS=analysis_6502_cs.${EXT_SO} + +ALL_TARGETS+=${TARGET_6502_CS} + +${TARGET_6502_CS}: ${OBJ_6502_CS} + ${CC} $(call libname,analysis_6502_cs) ${LDFLAGS} ${CFLAGS} -o analysis_6502_cs.${EXT_SO} ${OBJ_6502_CS} diff --git a/librz/anal/p/8051.mk b/librz/analysis/p/8051.mk similarity index 64% rename from librz/anal/p/8051.mk rename to librz/analysis/p/8051.mk index 26289a24e1..9216e23434 100644 --- a/librz/anal/p/8051.mk +++ b/librz/analysis/p/8051.mk @@ -1,13 +1,13 @@ -OBJ_8051=anal_8051.o +OBJ_8051=analysis_8051.o CFLAGS+=-I../asm/arch/8051 STATIC_OBJ+=${OBJ_8051} #OBJ_8051+=../../../../../../../../../../../../../../../../../../../../${LTOP}/asm/arch/8051/8051.o #OBJ_8051+=${LTOP}/asm/arch/8051/8051.o #OBJ_8051+=../../asm/arch/8051/8051.o -TARGET_8051=anal_8051.${EXT_SO} +TARGET_8051=analysis_8051.${EXT_SO} ALL_TARGETS+=${TARGET_8051} ${TARGET_8051}: ${OBJ_8051} - ${CC} $(call libname,anal_z80) ${LDFLAGS} ${CFLAGS} -o anal_8051.${EXT_SO} ${OBJ_8051} + ${CC} $(call libname,analysis_z80) ${LDFLAGS} ${CFLAGS} -o analysis_8051.${EXT_SO} ${OBJ_8051} diff --git a/librz/anal/p/Makefile b/librz/analysis/p/Makefile similarity index 86% rename from librz/anal/p/Makefile rename to librz/analysis/p/Makefile index 21454e20af..908648975c 100644 --- a/librz/anal/p/Makefile +++ b/librz/analysis/p/Makefile @@ -2,7 +2,7 @@ include ../../config.mk include ../../../mk/platform.mk CFLAGS+=-I../../include -I../arch -Wall -shared $(PIC_CFLAGS) ${LDFLAGS_LIB} ${LDFLAGS_LINKPATH}.. -CFLAGS+=-L../../util -lrz_util -L../../anal -lrz_anal -L../../reg -lrz_reg -L../../crypto -lrz_crypto +CFLAGS+=-L../../util -lrz_util -L../../analysis -lrz_analysis -L../../reg -lrz_reg -L../../crypto -lrz_crypto LDFLAGS+=${LINK} CURDIR= diff --git a/librz/analysis/p/amd29k.mk b/librz/analysis/p/amd29k.mk new file mode 100644 index 0000000000..fe0f228643 --- /dev/null +++ b/librz/analysis/p/amd29k.mk @@ -0,0 +1,10 @@ +OBJ_AMD29K=analysis_amd29k.o ../../asm/arch/amd29k/amd29k.o + +STATIC_OBJ+=${OBJ_AMD29K} +TARGET_AMD29K=analysis_amd29k.${EXT_SO} + +ALL_TARGETS+=${TARGET_AMD29K} + +${TARGET_AMD29K}: ${OBJ_AMD29K} + ${CC} ${CFLAGS} $(call libname,analysis_amd29k) $(CS_CFLAGS) \ + -o analysis_amd29k.${EXT_SO} ${OBJ_AMD29K} $(CS_LDFLAGS) diff --git a/librz/anal/p/anal_6502.c b/librz/analysis/p/analysis_6502.c similarity index 80% rename from librz/anal/p/anal_6502.c rename to librz/analysis/p/analysis_6502.c index b82c95aa70..a4faa0fbc4 100644 --- a/librz/anal/p/anal_6502.c +++ b/librz/analysis/p/analysis_6502.c @@ -12,7 +12,7 @@ #include #include #include -#include +#include #include "../../asm/arch/snes/snes_op_table.h" enum { @@ -26,7 +26,7 @@ enum { _6502_FLAGS_BNZ = (_6502_FLAGS_B | _6502_FLAGS_Z | _6502_FLAGS_N), }; -static void _6502_anal_update_flags(RzAnalOp *op, int flags) { +static void _6502_analysis_update_flags(RzAnalysisOp *op, int flags) { /* FIXME: 9,$b instead of 8,$b to prevent the bug triggered by: A = 0 - 0xff - 1 */ if (flags & _6502_FLAGS_B) { rz_strbuf_append (&op->esil, ",9,$b,C,:="); @@ -43,7 +43,7 @@ static void _6502_anal_update_flags(RzAnalOp *op, int flags) { } /* ORA, AND, EOR, ADC, STA, LDA, CMP and SBC share this pattern */ -static void _6502_anal_esil_get_addr_pattern1(RzAnalOp *op, const ut8* data, int len, char* addrbuf, int addrsize) { +static void _6502_analysis_esil_get_addr_pattern1(RzAnalysisOp *op, const ut8* data, int len, char* addrbuf, int addrsize) { if (len < 1) { return; } @@ -88,7 +88,7 @@ static void _6502_anal_esil_get_addr_pattern1(RzAnalOp *op, const ut8* data, int } /* ASL, ROL, LSR, ROR, STX, LDX, DEC and INC share this pattern */ -static void _6502_anal_esil_get_addr_pattern2(RzAnalOp *op, const ut8* data, int len, char* addrbuf, int addrsize, char reg) { +static void _6502_analysis_esil_get_addr_pattern2(RzAnalysisOp *op, const ut8* data, int len, char* addrbuf, int addrsize, char reg) { // turn off bits 5, 6 and 7 if (len < 1) { return; @@ -122,7 +122,7 @@ static void _6502_anal_esil_get_addr_pattern2(RzAnalOp *op, const ut8* data, int } /* BIT, JMP, JMP(), STY, LDY, CPY, and CPX share this pattern */ -static void _6502_anal_esil_get_addr_pattern3(RzAnalOp *op, const ut8* data, int len, char* addrbuf, int addrsize, char reg) { +static void _6502_analysis_esil_get_addr_pattern3(RzAnalysisOp *op, const ut8* data, int len, char* addrbuf, int addrsize, char reg) { // turn off bits 5, 6 and 7 if (len < 1) { return; @@ -155,7 +155,7 @@ static void _6502_anal_esil_get_addr_pattern3(RzAnalOp *op, const ut8* data, int } } -static void _6502_anal_esil_ccall(RzAnalOp *op, ut8 data0) { +static void _6502_analysis_esil_ccall(RzAnalysisOp *op, ut8 data0) { char *flag; switch (data0) { case 0x10: // bpl $ffff @@ -191,7 +191,7 @@ static void _6502_anal_esil_ccall(RzAnalOp *op, ut8 data0) { } // inc register -static void _6502_anal_esil_inc_reg(RzAnalOp *op, ut8 data0, char* sign) { +static void _6502_analysis_esil_inc_reg(RzAnalysisOp *op, ut8 data0, char* sign) { char* reg = NULL; switch(data0) { @@ -205,10 +205,10 @@ static void _6502_anal_esil_inc_reg(RzAnalOp *op, ut8 data0, char* sign) { break; } rz_strbuf_setf (&op->esil, "%s,%s%s=", reg, sign, sign); - _6502_anal_update_flags (op, _6502_FLAGS_NZ); + _6502_analysis_update_flags (op, _6502_FLAGS_NZ); } -static void _6502_anal_esil_mov(RzAnalOp *op, ut8 data0) { +static void _6502_analysis_esil_mov(RzAnalysisOp *op, ut8 data0) { const char* src="unk"; const char* dst="unk"; switch(data0) { @@ -244,11 +244,11 @@ static void _6502_anal_esil_mov(RzAnalOp *op, ut8 data0) { // don't update NZ on txs if (data0 != 0x9a) { - _6502_anal_update_flags (op, _6502_FLAGS_NZ); + _6502_analysis_update_flags (op, _6502_FLAGS_NZ); } } -static void _6502_anal_esil_push(RzAnalOp *op, ut8 data0) { +static void _6502_analysis_esil_push(RzAnalysisOp *op, ut8 data0) { // case 0x08: // php // case 0x48: // pha char *reg = (data0==0x08) ? "flags" : "a"; @@ -256,7 +256,7 @@ static void _6502_anal_esil_push(RzAnalOp *op, ut8 data0) { rz_strbuf_setf (&op->esil, "%s,sp,0x100,+,=[1],sp,--=", reg); } -static void _6502_anal_esil_pop(RzAnalOp *op, ut8 data0) { +static void _6502_analysis_esil_pop(RzAnalysisOp *op, ut8 data0) { // case 0x28: // plp // case 0x68: // pla char *reg = (data0==0x28) ? "flags" : "a"; @@ -264,11 +264,11 @@ static void _6502_anal_esil_pop(RzAnalOp *op, ut8 data0) { rz_strbuf_setf (&op->esil, "sp,++=,sp,0x100,+,[1],%s,=", reg); if (data0 == 0x68) { - _6502_anal_update_flags (op, _6502_FLAGS_NZ); + _6502_analysis_update_flags (op, _6502_FLAGS_NZ); } } -static void _6502_anal_esil_flags(RzAnalOp *op, ut8 data0) { +static void _6502_analysis_esil_flags(RzAnalysisOp *op, ut8 data0) { int enabled=0; char flag ='u'; switch(data0) { @@ -305,7 +305,7 @@ static void _6502_anal_esil_flags(RzAnalOp *op, ut8 data0) { rz_strbuf_setf (&op->esil, "%d,%c,=", enabled, flag); } -static int _6502_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int len, RzAnalOpMask mask) { +static int _6502_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *data, int len, RzAnalysisOpMask mask) { char addrbuf[64]; const int buffsize = sizeof (addrbuf) - 1; if (len < 1) { @@ -452,13 +452,13 @@ static int _6502_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int op->cycles = 2; // FIXME: what opcode for this? op->type = RZ_ANAL_OP_TYPE_NOP; - _6502_anal_esil_flags (op, data[0]); + _6502_analysis_esil_flags (op, data[0]); break; // BIT case 0x24: // bit $ff case 0x2c: // bit $ffff op->type = RZ_ANAL_OP_TYPE_MOV; - _6502_anal_esil_get_addr_pattern3 (op, data, len, addrbuf, buffsize, 0); + _6502_analysis_esil_get_addr_pattern3 (op, data, len, addrbuf, buffsize, 0); rz_strbuf_setf (&op->esil, "%s,[1],0x80,&,!,!,N,=,%s,[1],0x40,&,!,!,V,=,a,%s,[1],&,0xff,&,!,Z,=", addrbuf, addrbuf, addrbuf); break; // ADC @@ -473,13 +473,13 @@ static int _6502_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int // FIXME: update V // FIXME: support BCD mode op->type = RZ_ANAL_OP_TYPE_ADD; - _6502_anal_esil_get_addr_pattern1 (op, data, len, addrbuf, buffsize); + _6502_analysis_esil_get_addr_pattern1 (op, data, len, addrbuf, buffsize); if (data[0] == 0x69) { // immediate mode rz_strbuf_setf (&op->esil, "%s,a,+=,7,$c,C,a,+=,7,$c,|,C,:=", addrbuf); } else { rz_strbuf_setf (&op->esil, "%s,[1],a,+=,7,$c,C,a,+=,7,$c,|,C,:=", addrbuf); } - _6502_anal_update_flags (op, _6502_FLAGS_NZ); + _6502_analysis_update_flags (op, _6502_FLAGS_NZ); // fix Z rz_strbuf_append (&op->esil, ",a,a,=,$z,Z,:="); break; @@ -495,13 +495,13 @@ static int _6502_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int // FIXME: update V // FIXME: support BCD mode op->type = RZ_ANAL_OP_TYPE_SUB; - _6502_anal_esil_get_addr_pattern1 (op, data, len, addrbuf, buffsize); + _6502_analysis_esil_get_addr_pattern1 (op, data, len, addrbuf, buffsize); if (data[0] == 0xe9) { // immediate mode rz_strbuf_setf (&op->esil, "C,!,%s,+,a,-=", addrbuf); } else { rz_strbuf_setf (&op->esil, "C,!,%s,[1],+,a,-=", addrbuf); } - _6502_anal_update_flags (op, _6502_FLAGS_BNZ); + _6502_analysis_update_flags (op, _6502_FLAGS_BNZ); // fix Z and revert C rz_strbuf_append (&op->esil, ",a,a,=,$z,Z,:=,C,!="); break; @@ -515,13 +515,13 @@ static int _6502_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int case 0x01: // ora ($ff,x) case 0x11: // ora ($ff),y op->type = RZ_ANAL_OP_TYPE_OR; - _6502_anal_esil_get_addr_pattern1 (op, data, len, addrbuf, buffsize); + _6502_analysis_esil_get_addr_pattern1 (op, data, len, addrbuf, buffsize); if (data[0] == 0x09) { // immediate mode rz_strbuf_setf (&op->esil, "%s,a,|=", addrbuf); } else { rz_strbuf_setf (&op->esil, "%s,[1],a,|=", addrbuf); } - _6502_anal_update_flags (op, _6502_FLAGS_NZ); + _6502_analysis_update_flags (op, _6502_FLAGS_NZ); break; // AND case 0x29: // and #$ff @@ -533,13 +533,13 @@ static int _6502_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int case 0x21: // and ($ff,x) case 0x31: // and ($ff),y op->type = RZ_ANAL_OP_TYPE_AND; - _6502_anal_esil_get_addr_pattern1 (op, data, len, addrbuf, buffsize); + _6502_analysis_esil_get_addr_pattern1 (op, data, len, addrbuf, buffsize); if (data[0] == 0x29) { // immediate mode rz_strbuf_setf (&op->esil, "%s,a,&=", addrbuf); } else { rz_strbuf_setf (&op->esil, "%s,[1],a,&=", addrbuf); } - _6502_anal_update_flags (op, _6502_FLAGS_NZ); + _6502_analysis_update_flags (op, _6502_FLAGS_NZ); break; // EOR case 0x49: // eor #$ff @@ -551,13 +551,13 @@ static int _6502_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int case 0x41: // eor ($ff,x) case 0x51: // eor ($ff),y op->type = RZ_ANAL_OP_TYPE_XOR; - _6502_anal_esil_get_addr_pattern1 (op, data, len, addrbuf, buffsize); + _6502_analysis_esil_get_addr_pattern1 (op, data, len, addrbuf, buffsize); if (data[0] == 0x49) { // immediate mode rz_strbuf_setf (&op->esil, "%s,a,^=", addrbuf); } else { rz_strbuf_setf (&op->esil, "%s,[1],a,^=", addrbuf); } - _6502_anal_update_flags (op, _6502_FLAGS_NZ); + _6502_analysis_update_flags (op, _6502_FLAGS_NZ); break; // ASL case 0x0a: // asl a @@ -569,10 +569,10 @@ static int _6502_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int if (data[0] == 0x0a) { rz_strbuf_set (&op->esil, "1,a,<<=,7,$c,C,:=,a,a,="); } else { - _6502_anal_esil_get_addr_pattern2 (op, data, len, addrbuf, buffsize, 'x'); + _6502_analysis_esil_get_addr_pattern2 (op, data, len, addrbuf, buffsize, 'x'); rz_strbuf_setf (&op->esil, "1,%s,[1],<<,%s,=[1],7,$c,C,:=", addrbuf, addrbuf); } - _6502_anal_update_flags (op, _6502_FLAGS_NZ); + _6502_analysis_update_flags (op, _6502_FLAGS_NZ); break; // LSR case 0x4a: // lsr a @@ -584,10 +584,10 @@ static int _6502_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int if (data[0] == 0x4a) { rz_strbuf_set (&op->esil, "1,a,&,C,=,1,a,>>="); } else { - _6502_anal_esil_get_addr_pattern2 (op, data, len, addrbuf, buffsize, 'x'); + _6502_analysis_esil_get_addr_pattern2 (op, data, len, addrbuf, buffsize, 'x'); rz_strbuf_setf (&op->esil, "1,%s,[1],&,C,=,1,%s,[1],>>,%s,=[1]", addrbuf, addrbuf, addrbuf); } - _6502_anal_update_flags (op, _6502_FLAGS_NZ); + _6502_analysis_update_flags (op, _6502_FLAGS_NZ); break; // ROL case 0x2a: // rol a @@ -599,10 +599,10 @@ static int _6502_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int if (data[0] == 0x2a) { rz_strbuf_set (&op->esil, "1,a,<<,C,|,a,=,7,$c,C,:=,a,a,="); } else { - _6502_anal_esil_get_addr_pattern2 (op, data, len, addrbuf, buffsize, 'x'); + _6502_analysis_esil_get_addr_pattern2 (op, data, len, addrbuf, buffsize, 'x'); rz_strbuf_setf (&op->esil, "1,%s,[1],<<,C,|,%s,=[1],7,$c,C,:=", addrbuf, addrbuf); } - _6502_anal_update_flags (op, _6502_FLAGS_NZ); + _6502_analysis_update_flags (op, _6502_FLAGS_NZ); break; // ROR case 0x6a: // ror a @@ -616,10 +616,10 @@ static int _6502_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int if (data[0] == 0x6a) { rz_strbuf_set (&op->esil, "C,N,=,1,a,&,C,=,1,a,>>,7,N,<<,|,a,="); } else { - _6502_anal_esil_get_addr_pattern2 (op, data, len, addrbuf, buffsize, 'x'); + _6502_analysis_esil_get_addr_pattern2 (op, data, len, addrbuf, buffsize, 'x'); rz_strbuf_setf (&op->esil, "C,N,=,1,%s,[1],&,C,=,1,%s,[1],>>,7,N,<<,|,%s,=[1]", addrbuf, addrbuf, addrbuf); } - _6502_anal_update_flags (op, _6502_FLAGS_NZ); + _6502_analysis_update_flags (op, _6502_FLAGS_NZ); break; // INC case 0xe6: // inc $ff @@ -627,9 +627,9 @@ static int _6502_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int case 0xee: // inc $ffff case 0xfe: // inc $ffff,x op->type = RZ_ANAL_OP_TYPE_STORE; - _6502_anal_esil_get_addr_pattern2 (op, data, len, addrbuf, buffsize, 'x'); + _6502_analysis_esil_get_addr_pattern2 (op, data, len, addrbuf, buffsize, 'x'); rz_strbuf_setf (&op->esil, "%s,++=[1]", addrbuf); - _6502_anal_update_flags (op, _6502_FLAGS_NZ); + _6502_analysis_update_flags (op, _6502_FLAGS_NZ); break; // DEC case 0xc6: // dec $ff @@ -637,23 +637,23 @@ static int _6502_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int case 0xce: // dec $ffff case 0xde: // dec $ffff,x op->type = RZ_ANAL_OP_TYPE_STORE; - _6502_anal_esil_get_addr_pattern2 (op, data, len, addrbuf, buffsize, 'x'); + _6502_analysis_esil_get_addr_pattern2 (op, data, len, addrbuf, buffsize, 'x'); rz_strbuf_setf (&op->esil, "%s,--=[1]", addrbuf); - _6502_anal_update_flags (op, _6502_FLAGS_NZ); + _6502_analysis_update_flags (op, _6502_FLAGS_NZ); break; // INX, INY case 0xe8: // inx case 0xc8: // iny op->cycles = 2; op->type = RZ_ANAL_OP_TYPE_STORE; - _6502_anal_esil_inc_reg (op, data[0], "+"); + _6502_analysis_esil_inc_reg (op, data[0], "+"); break; // DEX, DEY case 0xca: // dex case 0x88: // dey op->cycles = 2; op->type = RZ_ANAL_OP_TYPE_STORE; - _6502_anal_esil_inc_reg (op, data[0], "-"); + _6502_analysis_esil_inc_reg (op, data[0], "-"); break; // CMP case 0xc9: // cmp #$ff @@ -665,13 +665,13 @@ static int _6502_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int case 0xc1: // cmp ($ff,x) case 0xd1: // cmp ($ff),y op->type = RZ_ANAL_OP_TYPE_CMP; - _6502_anal_esil_get_addr_pattern1 (op, data, len, addrbuf, buffsize); + _6502_analysis_esil_get_addr_pattern1 (op, data, len, addrbuf, buffsize); if (data[0] == 0xc9) { // immediate mode rz_strbuf_setf (&op->esil, "%s,a,==", addrbuf); } else { rz_strbuf_setf (&op->esil, "%s,[1],a,==", addrbuf); } - _6502_anal_update_flags (op, _6502_FLAGS_BNZ); + _6502_analysis_update_flags (op, _6502_FLAGS_BNZ); // invert C, since C=1 when A-M >= 0 rz_strbuf_append (&op->esil, ",C,!,C,="); break; @@ -680,13 +680,13 @@ static int _6502_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int case 0xe4: // cpx $ff case 0xec: // cpx $ffff op->type = RZ_ANAL_OP_TYPE_CMP; - _6502_anal_esil_get_addr_pattern3 (op, data, len, addrbuf, buffsize, 0); + _6502_analysis_esil_get_addr_pattern3 (op, data, len, addrbuf, buffsize, 0); if (data[0] == 0xe0) { // immediate mode rz_strbuf_setf (&op->esil, "%s,x,==", addrbuf); } else { rz_strbuf_setf (&op->esil, "%s,[1],x,==", addrbuf); } - _6502_anal_update_flags (op, _6502_FLAGS_BNZ); + _6502_analysis_update_flags (op, _6502_FLAGS_BNZ); // invert C, since C=1 when A-M >= 0 rz_strbuf_append (&op->esil, ",C,!,C,="); break; @@ -695,13 +695,13 @@ static int _6502_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int case 0xc4: // cpy $ff case 0xcc: // cpy $ffff op->type = RZ_ANAL_OP_TYPE_CMP; - _6502_anal_esil_get_addr_pattern3 (op, data, len, addrbuf, buffsize, 0); + _6502_analysis_esil_get_addr_pattern3 (op, data, len, addrbuf, buffsize, 0); if (data[0] == 0xc0) { // immediate mode rz_strbuf_setf (&op->esil, "%s,y,==", addrbuf); } else { rz_strbuf_setf (&op->esil, "%s,[1],y,==", addrbuf); } - _6502_anal_update_flags (op, _6502_FLAGS_BNZ); + _6502_analysis_update_flags (op, _6502_FLAGS_BNZ); // invert C, since C=1 when A-M >= 0 rz_strbuf_append (&op->esil, ",C,!,C,="); break; @@ -731,7 +731,7 @@ static int _6502_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int op->fail = addr + op->size; // FIXME: add a type of conditional // op->cond = RZ_ANAL_COND_LE; - _6502_anal_esil_ccall (op, data[0]); + _6502_analysis_esil_ccall (op, data[0]); break; // JSR case 0x20: // jsr $ffff @@ -796,13 +796,13 @@ static int _6502_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int case 0xa1: // lda ($ff,x) case 0xb1: // lda ($ff),y op->type = RZ_ANAL_OP_TYPE_LOAD; - _6502_anal_esil_get_addr_pattern1 (op, data, len, addrbuf, buffsize); + _6502_analysis_esil_get_addr_pattern1 (op, data, len, addrbuf, buffsize); if (data[0] == 0xa9) { // immediate mode rz_strbuf_setf (&op->esil, "%s,a,=", addrbuf); } else { rz_strbuf_setf (&op->esil, "%s,[1],a,=", addrbuf); } - _6502_anal_update_flags (op, _6502_FLAGS_NZ); + _6502_analysis_update_flags (op, _6502_FLAGS_NZ); break; // LDX case 0xa2: // ldx #$ff @@ -811,13 +811,13 @@ static int _6502_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int case 0xae: // ldx $ffff case 0xbe: // ldx $ffff,y op->type = RZ_ANAL_OP_TYPE_LOAD; - _6502_anal_esil_get_addr_pattern2 (op, data, len, addrbuf, buffsize, 'y'); + _6502_analysis_esil_get_addr_pattern2 (op, data, len, addrbuf, buffsize, 'y'); if (data[0] == 0xa2) { // immediate mode rz_strbuf_setf (&op->esil, "%s,x,=", addrbuf); } else { rz_strbuf_setf (&op->esil, "%s,[1],x,=", addrbuf); } - _6502_anal_update_flags (op, _6502_FLAGS_NZ); + _6502_analysis_update_flags (op, _6502_FLAGS_NZ); break; // LDY case 0xa0: // ldy #$ff @@ -826,13 +826,13 @@ static int _6502_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int case 0xac: // ldy $ffff case 0xbc: // ldy $ffff,x op->type = RZ_ANAL_OP_TYPE_LOAD; - _6502_anal_esil_get_addr_pattern3 (op, data, len, addrbuf, buffsize, 'x'); + _6502_analysis_esil_get_addr_pattern3 (op, data, len, addrbuf, buffsize, 'x'); if (data[0] == 0xa0) { // immediate mode rz_strbuf_setf (&op->esil, "%s,y,=", addrbuf); } else { rz_strbuf_setf (&op->esil, "%s,[1],y,=", addrbuf); } - _6502_anal_update_flags (op, _6502_FLAGS_NZ); + _6502_analysis_update_flags (op, _6502_FLAGS_NZ); break; // STA case 0x85: // sta $ff @@ -843,7 +843,7 @@ static int _6502_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int case 0x81: // sta ($ff,x) case 0x91: // sta ($ff),y op->type = RZ_ANAL_OP_TYPE_STORE; - _6502_anal_esil_get_addr_pattern1 (op, data, len, addrbuf, buffsize); + _6502_analysis_esil_get_addr_pattern1 (op, data, len, addrbuf, buffsize); rz_strbuf_setf (&op->esil, "a,%s,=[1]", addrbuf); break; // STX @@ -851,7 +851,7 @@ static int _6502_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int case 0x96: // stx $ff,y case 0x8e: // stx $ffff op->type = RZ_ANAL_OP_TYPE_STORE; - _6502_anal_esil_get_addr_pattern2 (op, data, len, addrbuf, buffsize, 'y'); + _6502_analysis_esil_get_addr_pattern2 (op, data, len, addrbuf, buffsize, 'y'); rz_strbuf_setf (&op->esil, "x,%s,=[1]", addrbuf); break; // STY @@ -859,7 +859,7 @@ static int _6502_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int case 0x94: // sty $ff,x case 0x8c: // sty $ffff op->type = RZ_ANAL_OP_TYPE_STORE; - _6502_anal_esil_get_addr_pattern3 (op, data, len, addrbuf, buffsize, 'x'); + _6502_analysis_esil_get_addr_pattern3 (op, data, len, addrbuf, buffsize, 'x'); rz_strbuf_setf (&op->esil, "y,%s,=[1]", addrbuf); break; // PHP/PHA @@ -869,7 +869,7 @@ static int _6502_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int op->cycles = 3; op->stackop = RZ_ANAL_STACK_INC; op->stackptr = 1; - _6502_anal_esil_push (op, data[0]); + _6502_analysis_esil_push (op, data[0]); break; // PLP,PLA case 0x28: // plp @@ -878,7 +878,7 @@ static int _6502_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int op->cycles = 4; op->stackop = RZ_ANAL_STACK_INC; op->stackptr = -1; - _6502_anal_esil_pop (op, data[0]); + _6502_analysis_esil_pop (op, data[0]); break; // TAX,TYA,... case 0xaa: // tax @@ -887,7 +887,7 @@ static int _6502_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int case 0x98: // tya op->type = RZ_ANAL_OP_TYPE_MOV; op->cycles = 2; - _6502_anal_esil_mov (op, data[0]); + _6502_analysis_esil_mov (op, data[0]); break; case 0x9a: // txs op->type = RZ_ANAL_OP_TYPE_MOV; @@ -895,19 +895,19 @@ static int _6502_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int op->stackop = RZ_ANAL_STACK_SET; // FIXME: should I get register X a place it here? // op->stackptr = get_register_x(); - _6502_anal_esil_mov (op, data[0]); + _6502_analysis_esil_mov (op, data[0]); break; case 0xba: // tsx op->type = RZ_ANAL_OP_TYPE_MOV; op->cycles = 2; op->stackop = RZ_ANAL_STACK_GET; - _6502_anal_esil_mov (op, data[0]); + _6502_analysis_esil_mov (op, data[0]); break; } return op->size; } -static bool set_reg_profile(RzAnal *anal) { +static bool set_reg_profile(RzAnalysis *analysis) { char *p = "=PC pc\n" "=SP sp\n" @@ -929,26 +929,26 @@ static bool set_reg_profile(RzAnal *anal) { "gpr N .1 .31 0\n" "gpr sp .8 4 0\n" "gpr pc .16 5 0\n"; - return rz_reg_set_profile_string (anal->reg, p); + return rz_reg_set_profile_string (analysis->reg, p); } -static int esil_6502_init (RzAnalEsil *esil) { - if (esil->anal && esil->anal->reg) { //initial values - rz_reg_set_value (esil->anal->reg, rz_reg_get (esil->anal->reg, "pc", -1), 0x0000); - rz_reg_set_value (esil->anal->reg, rz_reg_get (esil->anal->reg, "sp", -1), 0xff); - rz_reg_set_value (esil->anal->reg, rz_reg_get (esil->anal->reg, "a", -1), 0x00); - rz_reg_set_value (esil->anal->reg, rz_reg_get (esil->anal->reg, "x", -1), 0x00); - rz_reg_set_value (esil->anal->reg, rz_reg_get (esil->anal->reg, "y", -1), 0x00); - rz_reg_set_value (esil->anal->reg, rz_reg_get (esil->anal->reg, "flags", -1), 0x00); +static int esil_6502_init (RzAnalysisEsil *esil) { + if (esil->analysis && esil->analysis->reg) { //initial values + rz_reg_set_value (esil->analysis->reg, rz_reg_get (esil->analysis->reg, "pc", -1), 0x0000); + rz_reg_set_value (esil->analysis->reg, rz_reg_get (esil->analysis->reg, "sp", -1), 0xff); + rz_reg_set_value (esil->analysis->reg, rz_reg_get (esil->analysis->reg, "a", -1), 0x00); + rz_reg_set_value (esil->analysis->reg, rz_reg_get (esil->analysis->reg, "x", -1), 0x00); + rz_reg_set_value (esil->analysis->reg, rz_reg_get (esil->analysis->reg, "y", -1), 0x00); + rz_reg_set_value (esil->analysis->reg, rz_reg_get (esil->analysis->reg, "flags", -1), 0x00); } return true; } -static int esil_6502_fini (RzAnalEsil *esil) { +static int esil_6502_fini (RzAnalysisEsil *esil) { return true; } -RzAnalPlugin rz_anal_plugin_6502 = { +RzAnalysisPlugin rz_analysis_plugin_6502 = { .name = "6502", .desc = "6502/NES analysis plugin", .license = "LGPL3", @@ -964,7 +964,7 @@ RzAnalPlugin rz_anal_plugin_6502 = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_6502, + .data = &rz_analysis_plugin_6502, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_6502_cs.c b/librz/analysis/p/analysis_6502_cs.c similarity index 92% rename from librz/anal/p/anal_6502_cs.c rename to librz/analysis/p/analysis_6502_cs.c index dc271acae5..bb1ff1f44e 100644 --- a/librz/anal/p/anal_6502_cs.c +++ b/librz/analysis/p/analysis_6502_cs.c @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #if CS_API_MAJOR >= 4 && CS_API_MINOR >= 1 @@ -18,7 +18,7 @@ static csh handle = 0; -static int analop(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, RzAnalOpMask mask) { +static int analop(RzAnalysis *a, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, RzAnalysisOpMask mask) { static int omode = 0; #if USE_ITERZ_API static @@ -168,7 +168,7 @@ static int analop(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, R return op->size; } -static bool set_reg_profile(RzAnal *anal) { +static bool set_reg_profile(RzAnalysis *analysis) { char *p = "=PC pc\n" "=SP sp\n" @@ -190,10 +190,10 @@ static bool set_reg_profile(RzAnal *anal) { "gpr N .1 .31 0\n" "gpr sp .8 4 0\n" "gpr pc .16 5 0\n"; - return rz_reg_set_profile_string (anal->reg, p); + return rz_reg_set_profile_string (analysis->reg, p); } -RzAnalPlugin rz_anal_plugin_6502_cs = { +RzAnalysisPlugin rz_analysis_plugin_6502_cs = { .name = "6502.cs", .desc = "Capstone mos65xx analysis plugin", .license = "LGPL3", @@ -206,13 +206,13 @@ RzAnalPlugin rz_anal_plugin_6502_cs = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_6502_cs, + .data = &rz_analysis_plugin_6502_cs, .version = RZ_VERSION }; #endif #else // empty plugin -RzAnalPlugin rz_anal_plugin_6502_cs = { +RzAnalysisPlugin rz_analysis_plugin_6502_cs = { .name = "6502.cs", .desc = "Capstone mos65xx analysis plugin (not supported)", .license = "LGPL3", diff --git a/librz/anal/p/anal_8051.c b/librz/analysis/p/analysis_8051.c similarity index 82% rename from librz/anal/p/anal_8051.c rename to librz/analysis/p/analysis_8051.c index 86f37161ed..ab6ee475e8 100644 --- a/librz/anal/p/anal_8051.c +++ b/librz/analysis/p/analysis_8051.c @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include <8051_ops.h> #include "../asm/arch/8051/8051_disas.c" @@ -80,26 +80,26 @@ static i8051_map_entry mem_map[3] = { { NULL, UT32_MAX, "xdata" } }; -static void map_cpu_memory (RzAnal *anal, int entry, ut32 addr, ut32 size, bool force) { +static void map_cpu_memory (RzAnalysis *analysis, int entry, ut32 addr, ut32 size, bool force) { RzIODesc *desc = mem_map[entry].desc; - if (desc && anal->iob.fd_get_name (anal->iob.io, desc->fd)) { + if (desc && analysis->iob.fd_get_name (analysis->iob.io, desc->fd)) { if (force || addr != mem_map[entry].addr) { // reallocate mapped memory if address changed - anal->iob.fd_remap (anal->iob.io, desc->fd, addr); + analysis->iob.fd_remap (analysis->iob.io, desc->fd, addr); } } else { // allocate memory for address space char *mstr = rz_str_newf ("malloc://%d", size); - desc = anal->iob.open_at (anal->iob.io, mstr, RZ_PERM_RW, 0, addr); + desc = analysis->iob.open_at (analysis->iob.io, mstr, RZ_PERM_RW, 0, addr); free (mstr); // set 8051 address space as name of mapped memory - if (desc && anal->iob.fd_get_name (anal->iob.io, desc->fd)) { - RzList *maps = anal->iob.fd_get_map (anal->iob.io, desc->fd); + if (desc && analysis->iob.fd_get_name (analysis->iob.io, desc->fd)) { + RzList *maps = analysis->iob.fd_get_map (analysis->iob.io, desc->fd); RzIOMap *current_map; RzListIter *iter; rz_list_foreach (maps, iter, current_map) { char *cmdstr = rz_str_newf ("omni %d %s", current_map->id, mem_map[entry].name); - anal->coreb.cmd (anal->coreb.core, cmdstr); + analysis->coreb.cmd (analysis->coreb.core, cmdstr); free (cmdstr); } rz_list_free (maps); @@ -109,14 +109,14 @@ static void map_cpu_memory (RzAnal *anal, int entry, ut32 addr, ut32 size, bool mem_map[entry].addr = addr; } -static void set_cpu_model(RzAnal *anal, bool force) { +static void set_cpu_model(RzAnalysis *analysis, bool force) { ut32 addr_idata, addr_sfr, addr_xdata; - if (!anal->reg) { + if (!analysis->reg) { return; } - const char *cpu = anal->cpu; + const char *cpu = analysis->cpu; if (!cpu || !cpu[0]) { cpu = cpu_models[0].name; } @@ -139,23 +139,23 @@ static void set_cpu_model(RzAnal *anal, bool force) { addr_idata = cpu_models[i].map_idata; addr_sfr = cpu_models[i].map_sfr; addr_xdata = cpu_models[i].map_xdata; - i8051_reg_write (anal->reg, "_code", cpu_models[i].map_code); - i8051_reg_write (anal->reg, "_idata", addr_idata); - i8051_reg_write (anal->reg, "_sfr", addr_sfr - 0x80); - i8051_reg_write (anal->reg, "_xdata", addr_xdata); - i8051_reg_write (anal->reg, "_pdata", cpu_models[i].map_pdata); + i8051_reg_write (analysis->reg, "_code", cpu_models[i].map_code); + i8051_reg_write (analysis->reg, "_idata", addr_idata); + i8051_reg_write (analysis->reg, "_sfr", addr_sfr - 0x80); + i8051_reg_write (analysis->reg, "_xdata", addr_xdata); + i8051_reg_write (analysis->reg, "_pdata", cpu_models[i].map_pdata); } else { - addr_idata = i8051_reg_read (anal->reg, "_idata"); - addr_sfr = i8051_reg_read (anal->reg, "_sfr") + 0x80; - addr_xdata = i8051_reg_read (anal->reg, "_xdata"); + addr_idata = i8051_reg_read (analysis->reg, "_idata"); + addr_sfr = i8051_reg_read (analysis->reg, "_sfr") + 0x80; + addr_xdata = i8051_reg_read (analysis->reg, "_xdata"); } // (Re)allocate memory as needed. // We assume that code is allocated with firmware image - if (anal->iob.fd_get_name && anal->coreb.cmd) { - map_cpu_memory (anal, I8051_IDATA, addr_idata, 0x100, force); - map_cpu_memory (anal, I8051_SFR, addr_sfr, 0x80, force); - map_cpu_memory (anal, I8051_XDATA, addr_xdata, 0x10000, force); + if (analysis->iob.fd_get_name && analysis->coreb.cmd) { + map_cpu_memory (analysis, I8051_IDATA, addr_idata, 0x100, force); + map_cpu_memory (analysis, I8051_SFR, addr_sfr, 0x80, force); + map_cpu_memory (analysis, I8051_XDATA, addr_xdata, 0x10000, force); } } @@ -240,11 +240,11 @@ static RI8051Reg registers[] = { #define ev_sp2 0 #define ev_sp1 0 -static void exr_a(RzAnalOp *op, ut8 dummy) { +static void exr_a(RzAnalysisOp *op, ut8 dummy) { e ("a,"); } -static void exr_dir1(RzAnalOp *op, ut8 addr) { +static void exr_dir1(RzAnalysisOp *op, ut8 addr) { if (addr < 0x80) { ef ("_idata,%d,+,[1],", addr); } else { @@ -252,58 +252,58 @@ static void exr_dir1(RzAnalOp *op, ut8 addr) { } } -static void exr_bit(RzAnalOp *op, ut8 addr) { +static void exr_bit(RzAnalysisOp *op, ut8 addr) { exr_dir1 (op, addr); } -static void exr_dpx (RzAnalOp *op, ut8 dummy) { +static void exr_dpx (RzAnalysisOp *op, ut8 dummy) { e ("_xdata,dptr,+,[1],"); } -static void exr_imm1(RzAnalOp *op, ut8 val) { +static void exr_imm1(RzAnalysisOp *op, ut8 val) { ef ("%d,", val); } -static void exr_imm2(RzAnalOp *op, ut8 val) { +static void exr_imm2(RzAnalysisOp *op, ut8 val) { ef ("%d,", val); } -static void exr_imm16(RzAnalOp *op, ut16 val) { +static void exr_imm16(RzAnalysisOp *op, ut16 val) { ef ("%d,", val); } -static void exr_ri(RzAnalOp *op, ut8 reg) { +static void exr_ri(RzAnalysisOp *op, ut8 reg) { ef ("_idata,r%d,+,[1],", reg); } -static void exr_rix(RzAnalOp *op, ut8 reg) { +static void exr_rix(RzAnalysisOp *op, ut8 reg) { ef ("8,0xff,_pdata,&,<<,_xdata,+,r%d,+,[1],", reg); } -static void exr_rn(RzAnalOp *op, ut8 reg) { +static void exr_rn(RzAnalysisOp *op, ut8 reg) { ef ("r%d,", reg); } -static void exr_sp1(RzAnalOp *op, ut8 dummy) { +static void exr_sp1(RzAnalysisOp *op, ut8 dummy) { e ("_idata,sp,+,[1],"); e ("1,sp,-=,"); } -static void exr_sp2(RzAnalOp *op, ut8 dummy) { +static void exr_sp2(RzAnalysisOp *op, ut8 dummy) { e ("1,sp,-=,"); e ("_idata,sp,+,[2],"); e ("1,sp,-=,"); } -static void exw_a(RzAnalOp *op, ut8 dummy) { +static void exw_a(RzAnalysisOp *op, ut8 dummy) { e ("a,=,"); } -static void exw_c(RzAnalOp *op, ut8 dummy) { +static void exw_c(RzAnalysisOp *op, ut8 dummy) { e ("c,=,"); } -static void exw_dir1(RzAnalOp *op, ut8 addr) { +static void exw_dir1(RzAnalysisOp *op, ut8 addr) { if (addr < 0x80) { ef ("_idata,%d,+,=[1],", addr); } else { @@ -311,58 +311,58 @@ static void exw_dir1(RzAnalOp *op, ut8 addr) { } } -static void exw_dir2(RzAnalOp *op, ut8 addr) { +static void exw_dir2(RzAnalysisOp *op, ut8 addr) { exw_dir1 (op, addr); } -static void exw_bit(RzAnalOp *op, ut8 addr) { +static void exw_bit(RzAnalysisOp *op, ut8 addr) { exw_dir1 (op, addr); } -static void exw_dp (RzAnalOp *op, ut8 dummy) { +static void exw_dp (RzAnalysisOp *op, ut8 dummy) { e ("dptr,=,"); } -static void exw_dpx (RzAnalOp *op, ut8 dummy) { +static void exw_dpx (RzAnalysisOp *op, ut8 dummy) { e ("_xdata,dptr,+,=[1],"); } -static void exw_ri(RzAnalOp *op, ut8 reg) { +static void exw_ri(RzAnalysisOp *op, ut8 reg) { ef ("_idata,r%d,+,=[1],", reg); } -static void exw_rix(RzAnalOp *op, ut8 reg) { +static void exw_rix(RzAnalysisOp *op, ut8 reg) { ef ("8,0xff,_pdata,&,<<,_xdata,+,r%d,+,=[1],", reg); } -static void exw_rn(RzAnalOp *op, ut8 reg) { +static void exw_rn(RzAnalysisOp *op, ut8 reg) { ef ("r%d,=,", reg); } -static void exw_sp1(RzAnalOp *op, ut8 dummy) { +static void exw_sp1(RzAnalysisOp *op, ut8 dummy) { e ("1,sp,+=,"); e ("_idata,sp,+,=[1],"); } -static void exw_sp2(RzAnalOp *op, ut8 dummy) { +static void exw_sp2(RzAnalysisOp *op, ut8 dummy) { e ("1,sp,+=,"); e ("_idata,sp,+,=[2],"); e ("1,sp,+=,"); } -static void exi_a(RzAnalOp *op, ut8 dummy, const char* operation) { +static void exi_a(RzAnalysisOp *op, ut8 dummy, const char* operation) { ef ("a,%s=,", operation); } -static void exi_c(RzAnalOp *op, ut8 dummy, const char* operation) { +static void exi_c(RzAnalysisOp *op, ut8 dummy, const char* operation) { ef ("c,%s=,", operation); } -static void exi_dp (RzAnalOp *op, ut8 dummy, const char *operation) { +static void exi_dp (RzAnalysisOp *op, ut8 dummy, const char *operation) { ef ("dptr,%s=,", operation); } -static void exi_dir1 (RzAnalOp *op, ut8 addr, const char *operation) { +static void exi_dir1 (RzAnalysisOp *op, ut8 addr, const char *operation) { if (addr < 0x80) { ef ("_idata,%d,+,%s=[1],", addr, operation); } else { @@ -370,15 +370,15 @@ static void exi_dir1 (RzAnalOp *op, ut8 addr, const char *operation) { } } -static void exi_bit (RzAnalOp *op, ut8 addr, const char *operation) { +static void exi_bit (RzAnalysisOp *op, ut8 addr, const char *operation) { exi_dir1 (op, addr, operation); } -static void exi_ri(RzAnalOp *op, ut8 reg, const char *operation) { +static void exi_ri(RzAnalysisOp *op, ut8 reg, const char *operation) { ef ("_idata,r%d,+,%s=[1],", reg, operation); } -static void exi_rn(RzAnalOp *op, ut8 reg, const char *operation) { +static void exi_rn(RzAnalysisOp *op, ut8 reg, const char *operation) { ef ("r%d,%s=,", reg, operation); } @@ -433,7 +433,7 @@ static void exi_rn(RzAnalOp *op, ut8 reg, const char *operation) { case base + 0xE: case base + 0xF: \ alu_op (rn, aluop, flags); break; -static void analop_esil(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void analop_esil(RzAnalysis *a, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { rz_strbuf_init (&op->esil); rz_strbuf_set (&op->esil, ""); @@ -715,11 +715,11 @@ static void analop_esil(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf) { } } -static RzAnalEsilCallbacks ocbs = {0}; +static RzAnalysisEsilCallbacks ocbs = {0}; #if 0 // custom reg read/write temporarily disabled - see r2 issue #9242 -static int i8051_hook_reg_read(RzAnalEsil *, const char *, ut64 *, int *); +static int i8051_hook_reg_read(RzAnalysisEsil *, const char *, ut64 *, int *); static int i8051_reg_compare(const void *name, const void *reg) { return strcmp ((const char*)name, ((RI8051Reg*)reg)->name); @@ -733,7 +733,7 @@ static RI8051Reg *i8051_reg_find(const char *name) { i8051_reg_compare); } -static int i8051_reg_get_offset(RzAnalEsil *esil, RI8051Reg *ri) { +static int i8051_reg_get_offset(RzAnalysisEsil *esil, RI8051Reg *ri) { ut8 offset = ri->offset; if (ri->banked) { ut64 psw = 0LL; @@ -748,15 +748,15 @@ static int i8051_reg_get_offset(RzAnalEsil *esil, RI8051Reg *ri) { // as rz_reg_get already does this. Also, the anal esil callbacks // approach interferes with rz_reg_arena_swap. -static int i8051_hook_reg_read(RzAnalEsil *esil, const char *name, ut64 *res, int *size) { +static int i8051_hook_reg_read(RzAnalysisEsil *esil, const char *name, ut64 *res, int *size) { int ret = 0; ut64 val = 0LL; RI8051Reg *ri; - RzAnalEsilCallbacks cbs = esil->cb; + RzAnalysisEsilCallbacks cbs = esil->cb; if ((ri = i8051_reg_find (name))) { ut8 offset = i8051_reg_get_offset(esil, ri); - ret = rz_anal_esil_mem_read (esil, IRAM_BASE + offset, (ut8*)res, ri->num_bytes); + ret = rz_analysis_esil_mem_read (esil, IRAM_BASE + offset, (ut8*)res, ri->num_bytes); } esil->cb = ocbs; if (!ret && ocbs.hook_reg_read) { @@ -770,13 +770,13 @@ static int i8051_hook_reg_read(RzAnalEsil *esil, const char *name, ut64 *res, in return ret; } -static int i8051_hook_reg_write(RzAnalEsil *esil, const char *name, ut64 *val) { +static int i8051_hook_reg_write(RzAnalysisEsil *esil, const char *name, ut64 *val) { int ret = 0; RI8051Reg *ri; - RzAnalEsilCallbacks cbs = esil->cb; + RzAnalysisEsilCallbacks cbs = esil->cb; if ((ri = i8051_reg_find (name))) { ut8 offset = i8051_reg_get_offset(esil, ri); - ret = rz_anal_esil_mem_write (esil, IRAM_BASE + offset, (ut8*)val, ri->num_bytes); + ret = rz_analysis_esil_mem_write (esil, IRAM_BASE + offset, (ut8*)val, ri->num_bytes); } esil->cb = ocbs; if (!ret && ocbs.hook_reg_write) { @@ -787,7 +787,7 @@ static int i8051_hook_reg_write(RzAnalEsil *esil, const char *name, ut64 *val) { } #endif -static int esil_i8051_init (RzAnalEsil *esil) { +static int esil_i8051_init (RzAnalysisEsil *esil) { if (esil->cb.user) { return true; } @@ -802,7 +802,7 @@ static int esil_i8051_init (RzAnalEsil *esil) { return true; } -static int esil_i8051_fini (RzAnalEsil *esil) { +static int esil_i8051_fini (RzAnalysisEsil *esil) { if (!i8051_is_init) { return false; } @@ -811,7 +811,7 @@ static int esil_i8051_fini (RzAnalEsil *esil) { return true; } -static bool set_reg_profile(RzAnal *anal) { +static bool set_reg_profile(RzAnalysis *analysis) { const char *p = "=PC pc\n" "=SP sp\n" @@ -863,25 +863,25 @@ static bool set_reg_profile(RzAnal *anal) { "gpr _xdata .32 32 0\n" "gpr _pdata .32 36 0\n"; - int retval = rz_reg_set_profile_string (anal->reg, p); + int retval = rz_reg_set_profile_string (analysis->reg, p); if (retval) { // reset emulation control registers based on cpu - set_cpu_model (anal, true); + set_cpu_model (analysis, true); } return retval; } -static ut32 map_direct_addr(RzAnal *anal, ut8 addr) { +static ut32 map_direct_addr(RzAnalysis *analysis, ut8 addr) { if (addr < 0x80) { - return addr + i8051_reg_read (anal->reg, "_idata"); + return addr + i8051_reg_read (analysis->reg, "_idata"); } else { - return addr + i8051_reg_read (anal->reg, "_sfr"); + return addr + i8051_reg_read (analysis->reg, "_sfr"); } } -static int i8051_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, RzAnalOpMask mask) { - set_cpu_model (anal, false); +static int i8051_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, RzAnalysisOpMask mask) { + set_cpu_model (analysis, false); int i = 0; while (_8051_ops[i].string && _8051_ops[i].op != (buf[0] & ~_8051_ops[i].mask)) { @@ -941,27 +941,27 @@ static int i8051_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int l switch (arg1) { default: break; case A_DIRECT: - op->ptr = map_direct_addr (anal, buf[1]); + op->ptr = map_direct_addr (analysis, buf[1]); break; case A_BIT: - op->ptr = map_direct_addr (anal, arg_bit (buf[1])); + op->ptr = map_direct_addr (analysis, arg_bit (buf[1])); break; case A_IMMEDIATE: op->val = buf[1]; break; case A_IMM16: op->val = buf[1] * 256 + buf[2]; - op->ptr = op->val + i8051_reg_read (anal->reg, "_xdata"); // best guess, it's a XRAM pointer + op->ptr = op->val + i8051_reg_read (analysis->reg, "_xdata"); // best guess, it's a XRAM pointer } switch (arg2) { default: break; case A_DIRECT: if (arg1 == A_RI || arg1 == A_RN) { - op->ptr = map_direct_addr (anal, buf[1]); + op->ptr = map_direct_addr (analysis, buf[1]); } else if (arg1 != A_DIRECT) { - op->ptr = map_direct_addr (anal, buf[2]); + op->ptr = map_direct_addr (analysis, buf[2]); } break; case A_BIT: op->ptr = arg_bit ((arg1 == A_RI || arg1 == A_RN) ? buf[1] : buf[2]); - op->ptr = map_direct_addr (anal, op->ptr); + op->ptr = map_direct_addr (analysis, op->ptr); break; case A_IMMEDIATE: op->val = (arg1 == A_RI || arg1 == A_RN) ? buf[1] : buf[2]; } @@ -1019,7 +1019,7 @@ static int i8051_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int l if (mask & RZ_ANAL_OP_MASK_ESIL) { ut8 copy[3] = {0, 0, 0}; memcpy (copy, buf, len >= 3 ? 3 : len); - analop_esil (anal, op, addr, copy); + analop_esil (analysis, op, addr, copy); } int olen = 0; @@ -1033,7 +1033,7 @@ static int i8051_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int l return op->size; } -RzAnalPlugin rz_anal_plugin_8051 = { +RzAnalysisPlugin rz_analysis_plugin_8051 = { .name = "8051", .arch = "8051", .esil = true, @@ -1049,7 +1049,7 @@ RzAnalPlugin rz_anal_plugin_8051 = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_8051, + .data = &rz_analysis_plugin_8051, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_amd29k.c b/librz/analysis/p/analysis_amd29k.c similarity index 96% rename from librz/anal/p/anal_amd29k.c rename to librz/analysis/p/analysis_amd29k.c index a1cd4bca0b..c6e228491c 100644 --- a/librz/anal/p/anal_amd29k.c +++ b/librz/analysis/p/analysis_amd29k.c @@ -1,11 +1,11 @@ /* rizin - LGPL - Copyright 2013-2020 - pancake */ -#include +#include #include #include "../../asm/arch/amd29k/amd29k.h" -static bool set_reg_profile(RzAnal *anal) { +static bool set_reg_profile(RzAnalysis *analysis) { const char *p = "=PC pc\n" "=SP gp1\n" @@ -275,14 +275,14 @@ static bool set_reg_profile(RzAnal *anal) { "gpr lr126 .32 2024 0\n" "gpr lr127 .32 2032 0\n" "gpr lr128 .32 2040 0\n"; - return rz_reg_set_profile_string (anal->reg, p); + return rz_reg_set_profile_string (analysis->reg, p); } -static int archinfo(RzAnal *a, int q) { +static int archinfo(RzAnalysis *a, int q) { return 4; } -static int analop(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, RzAnalOpMask mask) { +static int analop(RzAnalysis *a, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, RzAnalysisOpMask mask) { op->size = 4; op->eob = false; @@ -321,7 +321,7 @@ static int analop(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, R return op->size; } -RzAnalPlugin rz_anal_plugin_amd29k = { +RzAnalysisPlugin rz_analysis_plugin_amd29k = { .name = "amd29k", .desc = "AMD 29k analysis", .license = "BSD", @@ -336,7 +336,7 @@ RzAnalPlugin rz_anal_plugin_amd29k = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_amd29k, + .data = &rz_analysis_plugin_amd29k, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_arc.c b/librz/analysis/p/analysis_arc.c similarity index 96% rename from librz/anal/p/anal_arc.c rename to librz/analysis/p/analysis_arc.c index fda8d13d3d..cb8ff064dd 100644 --- a/librz/anal/p/anal_arc.c +++ b/librz/analysis/p/analysis_arc.c @@ -4,7 +4,7 @@ #include #include #include -#include +#include #define ARC_REG_ILINK1 0x1d #define ARC_REG_ILINK2 0x1e @@ -95,22 +95,22 @@ static int map_cond2rizin(ut8 cond) { return -1; } -static void arcompact_jump(RzAnalOp *op, ut64 addr, ut64 jump, ut8 delay) { +static void arcompact_jump(RzAnalysisOp *op, ut64 addr, ut64 jump, ut8 delay) { op->jump = jump; op->fail = addr + op->size; op->delay = delay; } -static void arcompact_jump_cond(RzAnalOp *op, ut64 addr, ut64 jump, ut8 delay, ut8 cond) { +static void arcompact_jump_cond(RzAnalysisOp *op, ut64 addr, ut64 jump, ut8 delay, ut8 cond) { arcompact_jump (op, addr, jump, delay); op->cond = map_cond2rizin (cond); } -static void arcompact_branch(RzAnalOp *op, ut64 addr, st64 offset, ut8 delay) { +static void arcompact_branch(RzAnalysisOp *op, ut64 addr, st64 offset, ut8 delay) { arcompact_jump (op, addr, (addr & ~3) + offset, delay); } -static void map_zz2refptr(RzAnalOp *op, ut8 mode_zz) { +static void map_zz2refptr(RzAnalysisOp *op, ut8 mode_zz) { switch (mode_zz) { case 0: op->refptr = 4; break; case 1: op->refptr = 1; break; @@ -121,7 +121,7 @@ static void map_zz2refptr(RzAnalOp *op, ut8 mode_zz) { } } -static int arcompact_genops_jmp(RzAnalOp *op, ut64 addr, arc_fields *f, ut64 basic_type) { +static int arcompact_genops_jmp(RzAnalysisOp *op, ut64 addr, arc_fields *f, ut64 basic_type) { ut64 type_ujmp; ut64 type_cjmp; ut64 type_ucjmp; @@ -200,7 +200,7 @@ static int arcompact_genops_jmp(RzAnalOp *op, ut64 addr, arc_fields *f, ut64 bas return 0; } -static int arcompact_genops(RzAnalOp *op, ut64 addr, ut32 words[2]) { +static int arcompact_genops(RzAnalysisOp *op, ut64 addr, ut32 words[2]) { arc_fields fields = {0}; fields.format = (words[0] & 0x00c00000) >> 22; @@ -445,7 +445,7 @@ static int arcompact_genops(RzAnalOp *op, ut64 addr, ut32 words[2]) { return op->size; } -static int arcompact_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int len) { +static int arcompact_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *data, int len) { ut32 words[2]; /* storage for the de-swizled opcode data */ arc_fields fields; @@ -471,7 +471,7 @@ static int arcompact_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, op->refptr = 0; op->delay = 0; - if (anal->big_endian) { + if (analysis->big_endian) { words[0] = rz_read_be32 (&data[0]); words[1] = rz_read_be32 (&data[4]); } else { @@ -1013,11 +1013,11 @@ static int arcompact_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, return op->size; } -static int arc_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int len, RzAnalOpMask mask) { +static int arc_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *data, int len, RzAnalysisOpMask mask) { const ut8 *b = (ut8 *)data; - if (anal->bits == 16) { - return arcompact_op (anal, op, addr, data, len); + if (analysis->bits == 16) { + return arcompact_op (analysis, op, addr, data, len); } /* ARCtangent A4 */ @@ -1065,8 +1065,8 @@ static int arc_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int le return op->size; } -static int archinfo(RzAnal *anal, int query) { - if (anal->bits != 16) { +static int archinfo(RzAnalysis *analysis, int query) { + if (analysis->bits != 16) { return -1; } switch (query) { @@ -1082,8 +1082,8 @@ static int archinfo(RzAnal *anal, int query) { } } -static bool set_reg_profile(RzAnal *anal) { - if (anal->bits != 16) { +static bool set_reg_profile(RzAnalysis *analysis) { + if (analysis->bits != 16) { return false; } const char *p16 = @@ -1134,10 +1134,10 @@ static bool set_reg_profile(RzAnal *anal) { /* TODO: */ /* Should I add the Auxiliary Register Set? */ /* it contains the flag bits, amongst other things */ - return rz_reg_set_profile_string (anal->reg, p16); + return rz_reg_set_profile_string (analysis->reg, p16); } -RzAnalPlugin rz_anal_plugin_arc = { +RzAnalysisPlugin rz_analysis_plugin_arc = { .name = "arc", .arch = "arc", .license = "LGPL3", @@ -1151,7 +1151,7 @@ RzAnalPlugin rz_anal_plugin_arc = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_arc, + .data = &rz_analysis_plugin_arc, .version = RZ_VERSION, }; #endif diff --git a/librz/anal/p/anal_arm_cs.c b/librz/analysis/p/analysis_arm_cs.c similarity index 97% rename from librz/anal/p/anal_arm_cs.c rename to librz/analysis/p/analysis_arm_cs.c index b81dbfb37c..e874aea7df 100644 --- a/librz/anal/p/anal_arm_cs.c +++ b/librz/analysis/p/analysis_arm_cs.c @@ -1,13 +1,13 @@ /* rizin - LGPL - Copyright 2013-2020 - pancake */ -#include +#include #include #include #include #include #include #include -#include "./anal_arm_hacks.inc" +#include "./analysis_arm_hacks.inc" #define esilprintf(op, fmt, ...) rz_strbuf_setf (&op->esil, fmt, ##__VA_ARGS__) @@ -753,7 +753,7 @@ static int regsize64(cs_insn *insn, int n) { #define REGSIZE32(x) regsize32 (insn, x) // return postfix -const char* arm_prefix_cond(RzAnalOp *op, int cond_type) { +const char* arm_prefix_cond(RzAnalysisOp *op, int cond_type) { const char *close_cond[2]; close_cond[0] = "\0"; close_cond[1] = ",}\0"; @@ -828,7 +828,7 @@ const char* arm_prefix_cond(RzAnalOp *op, int cond_type) { /* arm64 */ -static const char *arg(RzAnal *a, csh *handle, cs_insn *insn, char *buf, int n) { +static const char *arg(RzAnalysis *a, csh *handle, cs_insn *insn, char *buf, int n) { buf[0] = 0; switch (insn->detail->arm.operands[n].type) { case ARM_OP_REG: @@ -920,7 +920,7 @@ static void shifted_reg64_append(RzStrBuf *sb, csh *handle, cs_insn *insn, int n // got rid of the opchar= pattern here because it caused missing operators to fail silently // and makes things more complicated with very little benefit -static void arm64math(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, csh *handle, cs_insn *insn, const char *opchar, int negate) { +static void arm64math(RzAnalysis *a, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, csh *handle, cs_insn *insn, const char *opchar, int negate) { const char *r0 = REG64(0); const char *r1 = REG64(1); @@ -950,7 +950,7 @@ static void arm64math(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int le } } -static int analop64_esil(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, csh *handle, cs_insn *insn) { +static int analop64_esil(RzAnalysis *a, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, csh *handle, cs_insn *insn) { const char *postfix = NULL; @@ -1847,7 +1847,7 @@ static int analop64_esil(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int #define MATH32_NEG(opchar) arm32math(a, op, addr, buf, len, handle, insn, pcdelta, str, opchar, 1) #define MATH32AS(opchar) arm32mathaddsub(a, op, addr, buf, len, handle, insn, pcdelta, str, opchar) -static void arm32math(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, csh *handle, cs_insn *insn, int pcdelta, char (*str)[32], const char *opchar, int negate) { +static void arm32math(RzAnalysis *a, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, csh *handle, cs_insn *insn, int pcdelta, char (*str)[32], const char *opchar, int negate) { const char *dest = ARG(0); const char *op1; const char *op2; @@ -1885,7 +1885,7 @@ static void arm32math(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int le } } -static void arm32mathaddsub(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, csh *handle, cs_insn *insn, int pcdelta, char(*str)[32], const char *opchar) { +static void arm32mathaddsub(RzAnalysis *a, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, csh *handle, cs_insn *insn, int pcdelta, char(*str)[32], const char *opchar) { const char *dst = ARG (0); const char *src; bool noflags = false; @@ -1908,7 +1908,7 @@ static void arm32mathaddsub(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, (!strcmp (opchar, "+")? "30,$c,31,$c,^,31,$c": "30,$c,31,$c,^,32,$b")); } -static int analop_esil(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, csh *handle, cs_insn *insn, bool thumb) { +static int analop_esil(RzAnalysis *a, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, csh *handle, cs_insn *insn, bool thumb) { int i; const char *postfix = NULL; char str[32][32]; @@ -2638,7 +2638,7 @@ static int cond_cs2r2(int cc) { return cc; } -static void anop64(csh handle, RzAnalOp *op, cs_insn *insn) { +static void anop64(csh handle, RzAnalysisOp *op, cs_insn *insn) { ut64 addr = op->addr; /* grab family */ @@ -3075,7 +3075,7 @@ static void anop64(csh handle, RzAnalOp *op, cs_insn *insn) { } } -static void anal_itblock(cs_insn *insn) { +static void analysis_itblock(cs_insn *insn) { size_t i, size = rz_str_nlen (insn->mnemonic, 5); ht_uu_update (ht_itblock, insn->address, size); for (i = 1; i < size; i++) { @@ -3105,7 +3105,7 @@ static void check_itblock(cs_insn *insn) { } } -static void anop32(RzAnal *a, csh handle, RzAnalOp *op, cs_insn *insn, bool thumb, const ut8 *buf, int len) { +static void anop32(RzAnalysis *a, csh handle, RzAnalysisOp *op, cs_insn *insn, bool thumb, const ut8 *buf, int len) { const ut64 addr = op->addr; const int pcdelta = thumb? 4: 8; int i; @@ -3178,7 +3178,7 @@ jmp $$ + 4 + ( [delta] * 2 ) } break; case ARM_INS_IT: - anal_itblock (insn); + analysis_itblock (insn); op->cycles = 2; break; case ARM_INS_BKPT: @@ -3476,7 +3476,7 @@ jmp $$ + 4 + ( [delta] * 2 ) op->fail = addr + op->size; op->hint.new_bits = (a->bits == 32)? 16 : 32; //switch instruction set always with blx label - // rz_anal_hint_set_bits (a, op->jump, a->bits == 32? 16 : 32); + // rz_analysis_hint_set_bits (a, op->jump, a->bits == 32? 16 : 32); } break; case ARM_INS_BL: @@ -3576,7 +3576,7 @@ jmp $$ + 4 + ( [delta] * 2 ) insn->detail->arm.cc = itcond; insn->detail->arm.update_flags = 0; op->mnemonic = rz_str_newf ("%s%s%s%s", - rz_anal_optype_to_string (op->type), + rz_analysis_optype_to_string (op->type), cc_name (itcond), insn->op_str[0]?" ":"", insn->op_str); @@ -3649,7 +3649,7 @@ static int parse_reg64_name(RzReg *reg, RzRegItem **reg_base, RzRegItem **reg_de return 0; } -static void set_opdir(RzAnalOp *op) { +static void set_opdir(RzAnalysisOp *op) { switch (op->type & RZ_ANAL_OP_TYPE_MASK) { case RZ_ANAL_OP_TYPE_LOAD: op->direction = RZ_ANAL_OP_DIR_READ; @@ -3671,7 +3671,7 @@ static void set_opdir(RzAnalOp *op) { } } -static void set_src_dst(RzAnalValue *val, RzReg *reg, csh *handle, cs_insn *insn, int x, int bits) { +static void set_src_dst(RzAnalysisValue *val, RzReg *reg, csh *handle, cs_insn *insn, int x, int bits) { cs_arm_op armop = INSOP (x); cs_arm64_op arm64op = INSOP64 (x); if (bits == 64) { @@ -3709,15 +3709,15 @@ static void set_src_dst(RzAnalValue *val, RzReg *reg, csh *handle, cs_insn *insn } } -static void create_src_dst(RzAnalOp *op) { - op->src[0] = rz_anal_value_new (); - op->src[1] = rz_anal_value_new (); - op->src[2] = rz_anal_value_new (); - op->dst = rz_anal_value_new (); +static void create_src_dst(RzAnalysisOp *op) { + op->src[0] = rz_analysis_value_new (); + op->src[1] = rz_analysis_value_new (); + op->src[2] = rz_analysis_value_new (); + op->dst = rz_analysis_value_new (); } -static void op_fillval(RzAnal *anal, RzAnalOp *op, csh handle, cs_insn *insn, int bits) { +static void op_fillval(RzAnalysis *analysis, RzAnalysisOp *op, csh handle, cs_insn *insn, int bits) { create_src_dst (op); int i, j; int count = bits == 64 ? insn->detail->arm64.op_count : insn->detail->arm.op_count; @@ -3760,9 +3760,9 @@ static void op_fillval(RzAnal *anal, RzAnalOp *op, csh handle, cs_insn *insn, in } #endif for (j = 0; j < 3; j++, i++) { - set_src_dst (op->src[j], anal->reg, &handle, insn, i, bits); + set_src_dst (op->src[j], analysis->reg, &handle, insn, i, bits); } - set_src_dst (op->dst, anal->reg, &handle, insn, 0, bits); + set_src_dst (op->dst, analysis->reg, &handle, insn, 0, bits); break; case RZ_ANAL_OP_TYPE_STORE: if (count > 2) { @@ -3778,9 +3778,9 @@ static void op_fillval(RzAnal *anal, RzAnalOp *op, csh handle, cs_insn *insn, in } } } - set_src_dst (op->dst, anal->reg, &handle, insn, --count, bits); + set_src_dst (op->dst, analysis->reg, &handle, insn, --count, bits); for (j = 0; j < 3 && j < count; j++) { - set_src_dst (op->src[j], anal->reg, &handle, insn, j, bits); + set_src_dst (op->src[j], analysis->reg, &handle, insn, j, bits); } break; default: @@ -3794,7 +3794,7 @@ static void op_fillval(RzAnal *anal, RzAnalOp *op, csh handle, cs_insn *insn, in } } -static int analop(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, RzAnalOpMask mask) { +static int analop(RzAnalysis *a, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, RzAnalysisOpMask mask) { static csh handle = 0; static int omode = -1; static int obits = 32; @@ -3873,9 +3873,9 @@ static int analop(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, R return op->size; } -static char *get_reg_profile(RzAnal *anal) { +static char *get_reg_profile(RzAnalysis *analysis) { const char *p; - if (anal->bits == 64) { + if (analysis->bits == 64) { p = \ "=PC pc\n" "=SP sp\n" @@ -4260,12 +4260,12 @@ static char *get_reg_profile(RzAnal *anal) { return strdup (p); } -static int archinfo(RzAnal *anal, int q) { +static int archinfo(RzAnalysis *analysis, int q) { if (q == RZ_ANAL_ARCHINFO_DATA_ALIGN) { return 4; } if (q == RZ_ANAL_ARCHINFO_ALIGN) { - if (anal && anal->bits == 16) { + if (analysis && analysis->bits == 16) { return 2; } return 4; @@ -4274,7 +4274,7 @@ static int archinfo(RzAnal *anal, int q) { return 4; } if (q == RZ_ANAL_ARCHINFO_MIN_OP_SIZE) { - if (anal && anal->bits == 16) { + if (analysis && analysis->bits == 16) { return 2; } return 4; @@ -4282,43 +4282,43 @@ static int archinfo(RzAnal *anal, int q) { return 4; // XXX } -static ut8 *anal_mask(RzAnal *anal, int size, const ut8 *data, ut64 at) { - RzAnalOp *op = NULL; +static ut8 *analysis_mask(RzAnalysis *analysis, int size, const ut8 *data, ut64 at) { + RzAnalysisOp *op = NULL; ut8 *ret = NULL; - int oplen, idx = 0, obits = anal->bits; - RzAnalHint *hint = NULL; + int oplen, idx = 0, obits = analysis->bits; + RzAnalysisHint *hint = NULL; if (!data) { return NULL; } - op = rz_anal_op_new (); + op = rz_analysis_op_new (); ret = malloc (size); memset (ret, 0xff, size); while (idx < size) { - hint = rz_anal_hint_get (anal, at + idx); + hint = rz_analysis_hint_get (analysis, at + idx); if (hint) { if (hint->bits != 0) { - anal->bits = hint->bits; + analysis->bits = hint->bits; } free (hint); } - if ((oplen = analop (anal, op, at + idx, data + idx, size - idx, RZ_ANAL_OP_MASK_BASIC)) < 1) { + if ((oplen = analop (analysis, op, at + idx, data + idx, size - idx, RZ_ANAL_OP_MASK_BASIC)) < 1) { break; } if (op->ptr != UT64_MAX || op->jump != UT64_MAX) { if ((oplen * 8) > size - idx) { break; } - ut32 opcode = rz_read_ble (data + idx, anal->big_endian, oplen * 8); + ut32 opcode = rz_read_ble (data + idx, analysis->big_endian, oplen * 8); switch (oplen) { case 2: memcpy (ret + idx, "\xf0\x00", 2); break; case 4: - if (anal->bits == 64) { + if (analysis->bits == 64) { switch (op->id) { case ARM64_INS_LDP: case ARM64_INS_LDXP: @@ -4344,7 +4344,7 @@ static ut8 *anal_mask(RzAnal *anal, int size, const ut8 *data, ut64 at) { case ARM64_INS_STXR: case ARM64_INS_STXRB: case ARM64_INS_STXRH: - rz_write_ble (ret + idx, 0xffffffff, anal->big_endian, 32); + rz_write_ble (ret + idx, 0xffffffff, analysis->big_endian, 32); break; case ARM64_INS_STRB: case ARM64_INS_STURB: @@ -4363,9 +4363,9 @@ static ut8 *anal_mask(RzAnal *anal, int size, const ut8 *data, ut64 at) { case ARM64_INS_LDRSH: { bool is_literal = (opcode & 0x38000000) == 0x18000000; if (is_literal) { - rz_write_ble (ret + idx, 0xff000000, anal->big_endian, 32); + rz_write_ble (ret + idx, 0xff000000, analysis->big_endian, 32); } else { - rz_write_ble (ret + idx, 0xffffffff, anal->big_endian, 32); + rz_write_ble (ret + idx, 0xffffffff, analysis->big_endian, 32); } break; } @@ -4374,24 +4374,24 @@ static ut8 *anal_mask(RzAnal *anal, int size, const ut8 *data, ut64 at) { case ARM64_INS_CBZ: case ARM64_INS_CBNZ: if (op->type == RZ_ANAL_OP_TYPE_CJMP) { - rz_write_ble (ret + idx, 0xff00001f, anal->big_endian, 32); + rz_write_ble (ret + idx, 0xff00001f, analysis->big_endian, 32); } else { - rz_write_ble (ret + idx, 0xfc000000, anal->big_endian, 32); + rz_write_ble (ret + idx, 0xfc000000, analysis->big_endian, 32); } break; case ARM64_INS_TBZ: case ARM64_INS_TBNZ: - rz_write_ble (ret + idx, 0xfff8001f, anal->big_endian, 32); + rz_write_ble (ret + idx, 0xfff8001f, analysis->big_endian, 32); break; case ARM64_INS_ADR: case ARM64_INS_ADRP: - rz_write_ble (ret + idx, 0xff00001f, anal->big_endian, 32); + rz_write_ble (ret + idx, 0xff00001f, analysis->big_endian, 32); break; default: - rz_write_ble (ret + idx, 0xfff00000, anal->big_endian, 32); + rz_write_ble (ret + idx, 0xfff00000, analysis->big_endian, 32); } } else { - rz_write_ble (ret + idx, 0xfff00000, anal->big_endian, 32); + rz_write_ble (ret + idx, 0xfff00000, analysis->big_endian, 32); } break; } @@ -4399,16 +4399,16 @@ static ut8 *anal_mask(RzAnal *anal, int size, const ut8 *data, ut64 at) { idx += oplen; } - anal->bits = obits; - rz_anal_op_free (op); + analysis->bits = obits; + rz_analysis_op_free (op); return ret; } -static RzList *anal_preludes(RzAnal *anal) { +static RzList *analysis_preludes(RzAnalysis *analysis) { #define KW(d,ds,m,ms) rz_list_append (l, rz_search_keyword_new((const ut8*)d,ds,(const ut8*)m, ms, NULL)) RzList *l = rz_list_newf ((RzListFree)rz_search_keyword_free); - switch (anal->bits) { + switch (analysis->bits) { case 16: KW ("\x00\xb5", 2, "\x0f\xff", 2); KW ("\x08\xb5", 2, "\x0f\xff", 2); @@ -4447,7 +4447,7 @@ static int fini(void* user) { return 0; } -RzAnalPlugin rz_anal_plugin_arm_cs = { +RzAnalysisPlugin rz_analysis_plugin_arm_cs = { .name = "arm", .desc = "Capstone ARM analyzer", .license = "BSD", @@ -4455,8 +4455,8 @@ RzAnalPlugin rz_anal_plugin_arm_cs = { .arch = "arm", .archinfo = archinfo, .get_reg_profile = get_reg_profile, - .anal_mask = anal_mask, - .preludes = anal_preludes, + .analysis_mask = analysis_mask, + .preludes = analysis_preludes, .bits = 16 | 32 | 64, .op = &analop, .init = &init, @@ -4466,7 +4466,7 @@ RzAnalPlugin rz_anal_plugin_arm_cs = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_arm_cs, + .data = &rz_analysis_plugin_arm_cs, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_arm_gnu.c b/librz/analysis/p/analysis_arm_gnu.c similarity index 91% rename from librz/anal/p/anal_arm_gnu.c rename to librz/analysis/p/analysis_arm_gnu.c index f378a4cdd4..e50b8fbbe5 100644 --- a/librz/anal/p/anal_arm_gnu.c +++ b/librz/analysis/p/analysis_arm_gnu.c @@ -4,13 +4,13 @@ #include #include #include -#include +#include /* DEPRECATE ?? */ #include "wine-arm.h" #include "../asm/arch/arm/asm-arm.h" #include "../asm/arch/arm/winedbg/be_arm.h" -#include "./anal_arm_hacks.inc" +#include "./analysis_arm_hacks.inc" static unsigned int disarm_branch_offset(unsigned int pc, unsigned int insoff) { unsigned int add = insoff << 2; @@ -32,7 +32,7 @@ static unsigned int disarm_branch_offset(unsigned int pc, unsigned int insoff) { #define API static -static int op_thumb(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int len) { +static int op_thumb(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *data, int len) { int op_code; ut16 *_ins = (ut16 *) data; ut16 ins = *_ins; @@ -165,7 +165,7 @@ static int op_cond(const ut8 *data) { return iconds[b]; } -static int arm_op32(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int len) { +static int arm_op32(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *data, int len) { const ut8 *b = (ut8 *) data; ut8 ndata[4]; ut32 branch_dst_addr, i = 0; @@ -182,16 +182,16 @@ static int arm_op32(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int op->addr = addr; op->type = RZ_ANAL_OP_TYPE_UNK; - if (anal->big_endian) { + if (analysis->big_endian) { b = data = ndata; ndata[0] = data[3]; ndata[1] = data[2]; ndata[2] = data[1]; ndata[3] = data[0]; } - if (anal->bits == 16) { + if (analysis->bits == 16) { arm_free (arminsn); - return op_thumb (anal, op, addr, data, len); + return op_thumb (analysis, op, addr, data, len); } op->size = 4; op->cond = op_cond (data); @@ -284,7 +284,7 @@ static int arm_op32(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int } else { // ut32 oaddr = addr+8+b[0]; // XXX TODO ret = rizin_read_at(oaddr, (ut8*)&ptr, 4); - if (anal->bits == 32) { + if (analysis->bits == 32) { b = (ut8 *) &ptr; op->ptr = b[0] + (b[1] << 8) + (b[2] << 16) + (b[3] << 24); // XXX data_xrefs_add(oaddr, op->ptr, 1); @@ -352,11 +352,11 @@ static ut64 getaddr(ut64 addr, const ut8 *d) { return addr + (4 * (d[0] + (d[1] << 8) + (d[2] << 16))); } -static int arm_op64(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *d, int len) { +static int arm_op64(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *d, int len) { if (d[3] == 0) { return -1; // invalid } - int haa = hackyArmAnal (anal, op, d, len); + int haa = hackyArmAnal (analysis, op, d, len); if (haa > 0) { return haa; } @@ -401,14 +401,14 @@ static int arm_op64(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *d, int len return op->size; } -static int arm_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int len, RzAnalOpMask mask) { - if (anal->bits == 64) { - return arm_op64 (anal, op, addr, data, len); +static int arm_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *data, int len, RzAnalysisOpMask mask) { + if (analysis->bits == 64) { + return arm_op64 (analysis, op, addr, data, len); } - return arm_op32 (anal, op, addr, data, len); + return arm_op32 (analysis, op, addr, data, len); } -static bool set_reg_profile(RzAnal *anal) { +static bool set_reg_profile(RzAnalysis *analysis) { // TODO: support 64bit profile const char *p32 = "=PC r15\n" @@ -440,12 +440,12 @@ static bool set_reg_profile(RzAnal *anal) { "gpr r16 .32 64 0\n" "gpr r17 .32 68 0\n" "gpr cpsr .32 72 0\n"; - return rz_reg_set_profile_string (anal->reg, p32); + return rz_reg_set_profile_string (analysis->reg, p32); } -static int archinfo(RzAnal *anal, int q) { +static int archinfo(RzAnalysis *analysis, int q) { if (q == RZ_ANAL_ARCHINFO_ALIGN) { - if (anal && anal->bits == 16) { + if (analysis && analysis->bits == 16) { return 2; } return 4; @@ -454,7 +454,7 @@ static int archinfo(RzAnal *anal, int q) { return 4; } if (q == RZ_ANAL_ARCHINFO_MIN_OP_SIZE) { - if (anal && anal->bits == 16) { + if (analysis && analysis->bits == 16) { return 2; } return 4; @@ -462,7 +462,7 @@ static int archinfo(RzAnal *anal, int q) { return 4; // XXX } -RzAnalPlugin rz_anal_plugin_arm_gnu = { +RzAnalysisPlugin rz_analysis_plugin_arm_gnu = { .name = "arm.gnu", .arch = "arm", .license = "LGPL3", @@ -476,7 +476,7 @@ RzAnalPlugin rz_anal_plugin_arm_gnu = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_arm_gnu, + .data = &rz_analysis_plugin_arm_gnu, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_arm_hacks.inc b/librz/analysis/p/analysis_arm_hacks.inc similarity index 92% rename from librz/anal/p/anal_arm_hacks.inc rename to librz/analysis/p/analysis_arm_hacks.inc index 896b497fdf..0a10e1e577 100644 --- a/librz/anal/p/anal_arm_hacks.inc +++ b/librz/analysis/p/analysis_arm_hacks.inc @@ -1,5 +1,5 @@ -#include "rz_anal.h" -static int hack_handle_dp_reg(ut32 insn, RzAnalOp *op) { +#include "rz_analysis.h" +static int hack_handle_dp_reg(ut32 insn, RzAnalysisOp *op) { const bool op0 = (insn >> 30) & 0x1; const bool op1 = (insn >> 28) & 0x1; const ut8 op2 = (insn >> 21) & 0xf; @@ -34,7 +34,7 @@ static int hack_handle_dp_reg(ut32 insn, RzAnalOp *op) { return -1; } -static int hack_handle_ldst(ut32 insn, RzAnalOp *op) { +static int hack_handle_ldst(ut32 insn, RzAnalysisOp *op) { const ut8 op0 = (insn >> 28) & 0xf; const bool op1 = (insn >> 26) & 0x1; ut8 op2 = (insn >> 23) & 0x3; @@ -97,7 +97,7 @@ static int hack_handle_ldst(ut32 insn, RzAnalOp *op) { return -1; } -static int hack_handle_dp_imm(ut32 insn, RzAnalOp *op) { +static int hack_handle_dp_imm(ut32 insn, RzAnalysisOp *op) { const ut8 op0 = (insn >> 23) & 0x7; // Add/subtract (immediate, with tags) @@ -120,7 +120,7 @@ static int hack_handle_dp_imm(ut32 insn, RzAnalOp *op) { return -1; } -static int hack_handle_br_exc_sys(ut32 insn, RzAnalOp *op) { +static int hack_handle_br_exc_sys(ut32 insn, RzAnalysisOp *op) { const ut8 op0 = (insn >> 29) & 0x7; const ut16 op1 = (insn >> 12) & 0x3fff; ut8 op2 = insn & 0x1f; @@ -143,7 +143,7 @@ static int hack_handle_br_exc_sys(ut32 insn, RzAnalOp *op) { return -1; } -static inline int hackyArmAnal(RzAnal *a, RzAnalOp *op, const ut8 *buf, int len) { +static inline int hackyArmAnal(RzAnalysis *a, RzAnalysisOp *op, const ut8 *buf, int len) { int ret = -1; // Hacky support for ARMv8.3 and ARMv8.5 if (a->bits == 64 && len >= 4) { diff --git a/librz/anal/p/anal_avr.c b/librz/analysis/p/analysis_avr.c similarity index 92% rename from librz/anal/p/anal_avr.c rename to librz/analysis/p/analysis_avr.c index c8a878cfe1..22deec4525 100644 --- a/librz/anal/p/anal_avr.c +++ b/librz/analysis/p/analysis_avr.c @@ -11,7 +11,7 @@ https://en.wikipedia.org/wiki/Atmel_AVR_instruction_set #include #include #include -#include +#include static RDESContext desctx; @@ -34,7 +34,7 @@ typedef struct _cpu_model_tag { CPU_CONST *consts[10]; } CPU_MODEL; -typedef void (*inst_handler_t) (RzAnal *anal, RzAnalOp *op, const ut8 *buf, int len, int *fail, CPU_MODEL *cpu); +typedef void (*inst_handler_t) (RzAnalysis *analysis, RzAnalysisOp *op, const ut8 *buf, int len, int *fail, CPU_MODEL *cpu); typedef struct _opcodes_tag_ { const char *const name; @@ -46,7 +46,7 @@ typedef struct _opcodes_tag_ { ut64 type; } OPCODE_DESC; -static OPCODE_DESC* avr_op_analyze(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, CPU_MODEL *cpu); +static OPCODE_DESC* avr_op_analyze(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, CPU_MODEL *cpu); #define CPU_MODEL_DECL(model, pc, consts) \ { \ @@ -58,11 +58,11 @@ static OPCODE_DESC* avr_op_analyze(RzAnal *anal, RzAnalOp *op, ut64 addr, const #define CPU_PC_MASK(cpu) MASK((cpu)->pc) #define CPU_PC_SIZE(cpu) ((((cpu)->pc) >> 3) + ((((cpu)->pc) & 0x07) ? 1 : 0)) -#define INST_HANDLER(OPCODE_NAME) static void _inst__ ## OPCODE_NAME (RzAnal *anal, RzAnalOp *op, const ut8 *buf, int len, int *fail, CPU_MODEL *cpu) +#define INST_HANDLER(OPCODE_NAME) static void _inst__ ## OPCODE_NAME (RzAnalysis *analysis, RzAnalysisOp *op, const ut8 *buf, int len, int *fail, CPU_MODEL *cpu) #define INST_DECL(OP, M, SL, C, SZ, T) { #OP, (M), (SL), _inst__ ## OP, (C), (SZ), RZ_ANAL_OP_TYPE_ ## T } #define INST_LAST { "unknown", 0, 0, (void *) 0, 2, 1, RZ_ANAL_OP_TYPE_UNK } -#define INST_CALL(OPCODE_NAME) _inst__ ## OPCODE_NAME (anal, op, buf, len, fail, cpu) +#define INST_CALL(OPCODE_NAME) _inst__ ## OPCODE_NAME (analysis, op, buf, len, fail, cpu) #define INST_INVALID { *fail = 1; return; } #define INST_ASSERT(x) { if (!(x)) { INST_INVALID; } } @@ -207,9 +207,9 @@ static CPU_CONST *const_by_name(CPU_MODEL *cpu, int type, char *c) { return NULL; } -static int __esil_pop_argument(RzAnalEsil *esil, ut64 *v) { - char *t = rz_anal_esil_pop (esil); - if (!t || !rz_anal_esil_get_parm (esil, t, v)) { +static int __esil_pop_argument(RzAnalysisEsil *esil, ut64 *v) { + char *t = rz_analysis_esil_pop (esil); + if (!t || !rz_analysis_esil_get_parm (esil, t, v)) { free (t); return false; } @@ -249,7 +249,7 @@ static RzStrBuf *__generic_io_dest(ut8 port, int write, CPU_MODEL *cpu) { return r; } -static void __generic_ld_st(RzAnalOp *op, char *mem, char ireg, int use_ramp, int prepostdec, int offset, int st) { +static void __generic_ld_st(RzAnalysisOp *op, char *mem, char ireg, int use_ramp, int prepostdec, int offset, int st) { if (ireg) { // preincrement index register if (prepostdec < 0) { @@ -277,7 +277,7 @@ static void __generic_ld_st(RzAnalOp *op, char *mem, char ireg, int use_ramp, in } } -static void __generic_pop(RzAnalOp *op, int sz) { +static void __generic_pop(RzAnalysisOp *op, int sz) { if (sz > 1) { ESIL_A ("1,sp,+,_ram,+,"); // calc SRAM(sp+1) ESIL_A ("[%d],", sz); // read value @@ -288,7 +288,7 @@ static void __generic_pop(RzAnalOp *op, int sz) { } } -static void __generic_push(RzAnalOp *op, int sz) { +static void __generic_push(RzAnalysisOp *op, int sz) { ESIL_A ("sp,_ram,+,"); // calc pointer SRAM(sp) if (sz > 1) { ESIL_A ("-%d,+,", sz - 1); // dec SP by 'sz' @@ -571,11 +571,11 @@ INST_HANDLER (cpse) { // CPSE Rd, Rr } int r = (buf[0] & 0xf) | ((buf[1] & 0x2) << 3); int d = ((buf[0] >> 4) & 0xf) | ((buf[1] & 0x1) << 4); - RzAnalOp next_op = {0}; + RzAnalysisOp next_op = {0}; // calculate next instruction size (call recursively avr_op_analyze) // and free next_op's esil string (we dont need it now) - avr_op_analyze (anal, + avr_op_analyze (analysis, &next_op, op->addr + op->size, buf + op->size, len - op->size, cpu); @@ -617,8 +617,8 @@ INST_HANDLER (des) { // DES k INST_HANDLER (eijmp) { // EIJMP ut64 z, eind; // read z and eind for calculating jump address on runtime - rz_anal_esil_reg_read (anal->esil, "z", &z, NULL); - rz_anal_esil_reg_read (anal->esil, "eind", &eind, NULL); + rz_analysis_esil_reg_read (analysis->esil, "z", &z, NULL); + rz_analysis_esil_reg_read (analysis->esil, "eind", &eind, NULL); // real target address may change during execution, so this value will // be changing all the time op->jump = ((eind << 16) + z) << 1; @@ -713,7 +713,7 @@ INST_HANDLER (fmulsu) { // FMULSU Rd, Rr INST_HANDLER (ijmp) { // IJMP k ut64 z; // read z for calculating jump address on runtime - rz_anal_esil_reg_read (anal->esil, "z", &z, NULL); + rz_analysis_esil_reg_read (analysis->esil, "z", &z, NULL); // real target address may change during execution, so this value will // be changing all the time op->jump = z << 1; @@ -1174,7 +1174,7 @@ INST_HANDLER (reti) { // RETI INST_HANDLER (rjmp) { // RJMP k op->jump = (op->addr #ifdef _MSC_VER -#pragma message ("anal_avr.c: WARNING: Probably broken on windows") +#pragma message ("analysis_avr.c: WARNING: Probably broken on windows") + ((((( buf[1] & 0xf) << 9) | (buf[0] << 1))) | (buf[1] & 0x8 ? ~(0x1fff) : 0)) #else @@ -1291,7 +1291,7 @@ INST_HANDLER (sbix) { // SBIC A, b } int a = (buf[0] >> 3) & 0x1f; int b = buf[0] & 0x07; - RzAnalOp next_op = { 0 }; + RzAnalysisOp next_op = { 0 }; RzStrBuf *io_port; op->type2 = 0; @@ -1300,7 +1300,7 @@ INST_HANDLER (sbix) { // SBIC A, b // calculate next instruction size (call recursively avr_op_analyze) // and free next_op's esil string (we dont need it now) - avr_op_analyze (anal, + avr_op_analyze (analysis, &next_op, op->addr + op->size, buf + op->size, len - op->size, @@ -1348,11 +1348,11 @@ INST_HANDLER (sbrx) { // SBRC Rr, b } int b = buf[0] & 0x7; int r = ((buf[0] >> 4) & 0xf) | ((buf[1] & 0x01) << 4); - RzAnalOp next_op = {0}; + RzAnalysisOp next_op = {0}; // calculate next instruction size (call recursively avr_op_analyze) // and free next_op's esil string (we dont need it now) - avr_op_analyze (anal, + avr_op_analyze (analysis, &next_op, op->addr + op->size, buf + op->size, len - op->size, cpu); @@ -1381,7 +1381,7 @@ INST_HANDLER (spm) { // SPM Z+ ut64 spmcsr; // read SPM Control Register (SPMCR) - rz_anal_esil_reg_read (anal->esil, "spmcsr", &spmcsr, NULL); + rz_analysis_esil_reg_read (analysis->esil, "spmcsr", &spmcsr, NULL); // clear SPMCSR ESIL_A ("0x7c,spmcsr,&=,"); @@ -1595,7 +1595,7 @@ OPCODE_DESC opcodes[] = { INST_LAST }; -static OPCODE_DESC* avr_op_analyze(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, CPU_MODEL *cpu) { +static OPCODE_DESC* avr_op_analyze(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, CPU_MODEL *cpu) { OPCODE_DESC *opcode_desc; if (len < 2) { return NULL; @@ -1622,7 +1622,7 @@ static OPCODE_DESC* avr_op_analyze(RzAnal *anal, RzAnalOp *op, ut64 addr, const rz_strbuf_setf (&op->esil, "%s", ""); // handle opcode - opcode_desc->handler (anal, op, buf, len, &fail, cpu); + opcode_desc->handler (analysis, op, buf, len, &fail, cpu); if (fail) { goto INVALID_OP; } @@ -1666,7 +1666,7 @@ INVALID_OP: return NULL; } -static int avr_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, RzAnalOpMask mask) { +static int avr_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, RzAnalysisOpMask mask) { CPU_MODEL *cpu; ut64 offset; @@ -1676,43 +1676,43 @@ static int avr_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int len } // select cpu info - cpu = get_cpu_model (anal->cpu); + cpu = get_cpu_model (analysis->cpu); // set memory layout registers - if (anal->esil) { + if (analysis->esil) { offset = 0; - rz_anal_esil_reg_write (anal->esil, "_prog", offset); + rz_analysis_esil_reg_write (analysis->esil, "_prog", offset); offset += (1 << cpu->pc); - rz_anal_esil_reg_write (anal->esil, "_io", offset); + rz_analysis_esil_reg_write (analysis->esil, "_io", offset); offset += const_get_value (const_by_name (cpu, CPU_CONST_PARAM, "sram_start")); - rz_anal_esil_reg_write (anal->esil, "_sram", offset); + rz_analysis_esil_reg_write (analysis->esil, "_sram", offset); offset += const_get_value (const_by_name (cpu, CPU_CONST_PARAM, "sram_size")); - rz_anal_esil_reg_write (anal->esil, "_eeprom", offset); + rz_analysis_esil_reg_write (analysis->esil, "_eeprom", offset); offset += const_get_value (const_by_name (cpu, CPU_CONST_PARAM, "eeprom_size")); - rz_anal_esil_reg_write (anal->esil, "_page", offset); + rz_analysis_esil_reg_write (analysis->esil, "_page", offset); } // process opcode - avr_op_analyze (anal, op, addr, buf, len, cpu); + avr_op_analyze (analysis, op, addr, buf, len, cpu); return op->size; } -static bool avr_custom_des (RzAnalEsil *esil) { +static bool avr_custom_des (RzAnalysisEsil *esil) { ut64 key, encrypt, text,des_round; ut32 key_lo, key_hi, buf_lo, buf_hi; - if (!esil || !esil->anal || !esil->anal->reg) { + if (!esil || !esil->analysis || !esil->analysis->reg) { return false; } if (!__esil_pop_argument (esil, &des_round)) { return false; } - rz_anal_esil_reg_read (esil, "hf", &encrypt, NULL); - rz_anal_esil_reg_read (esil, "deskey", &key, NULL); - rz_anal_esil_reg_read (esil, "text", &text, NULL); + rz_analysis_esil_reg_read (esil, "hf", &encrypt, NULL); + rz_analysis_esil_reg_read (esil, "deskey", &key, NULL); + rz_analysis_esil_reg_read (esil, "text", &text, NULL); key_lo = key & UT32_MAX; key_hi = key >> 32; @@ -1746,18 +1746,18 @@ static bool avr_custom_des (RzAnalEsil *esil) { desctx.round++; } - rz_anal_esil_reg_write (esil, "text", text); + rz_analysis_esil_reg_write (esil, "text", text); return true; } // ESIL operation SPM_PAGE_ERASE -static bool avr_custom_spm_page_erase(RzAnalEsil *esil) { +static bool avr_custom_spm_page_erase(RzAnalysisEsil *esil) { CPU_MODEL *cpu; ut8 c; ut64 addr, page_size_bits, i; // sanity check - if (!esil || !esil->anal || !esil->anal->reg) { + if (!esil || !esil->analysis || !esil->analysis->reg) { return false; } @@ -1767,7 +1767,7 @@ static bool avr_custom_spm_page_erase(RzAnalEsil *esil) { } // get details about current MCU and fix input address - cpu = get_cpu_model (esil->anal->cpu); + cpu = get_cpu_model (esil->analysis->cpu); page_size_bits = const_get_value (const_by_name (cpu, CPU_CONST_PARAM, "page_size")); // align base address to page_size_bits @@ -1777,7 +1777,7 @@ static bool avr_custom_spm_page_erase(RzAnalEsil *esil) { //eprintf ("SPM_PAGE_ERASE %ld bytes @ 0x%08" PFMT64x ".\n", page_size, addr); c = 0xff; for (i = 0; i < (1ULL << page_size_bits); i++) { - rz_anal_esil_mem_write ( + rz_analysis_esil_mem_write ( esil, (addr + i) & CPU_PC_MASK (cpu), &c, 1); } @@ -1785,13 +1785,13 @@ static bool avr_custom_spm_page_erase(RzAnalEsil *esil) { } // ESIL operation SPM_PAGE_FILL -static bool avr_custom_spm_page_fill(RzAnalEsil *esil) { +static bool avr_custom_spm_page_fill(RzAnalysisEsil *esil) { CPU_MODEL *cpu; ut64 addr, page_size_bits, i; ut8 r0, r1; // sanity check - if (!esil || !esil->anal || !esil->anal->reg) { + if (!esil || !esil->analysis || !esil->analysis->reg) { return false; } @@ -1811,7 +1811,7 @@ static bool avr_custom_spm_page_fill(RzAnalEsil *esil) { r1 = i; // get details about current MCU and fix input address - cpu = get_cpu_model (esil->anal->cpu); + cpu = get_cpu_model (esil->analysis->cpu); page_size_bits = const_get_value (const_by_name (cpu, CPU_CONST_PARAM, "page_size")); // align and crop base address @@ -1819,20 +1819,20 @@ static bool avr_custom_spm_page_fill(RzAnalEsil *esil) { // perform write to temporary page //eprintf ("SPM_PAGE_FILL bytes (%02x, %02x) @ 0x%08" PFMT64x ".\n", r1, r0, addr); - rz_anal_esil_mem_write (esil, addr++, &r0, 1); - rz_anal_esil_mem_write (esil, addr++, &r1, 1); + rz_analysis_esil_mem_write (esil, addr++, &r0, 1); + rz_analysis_esil_mem_write (esil, addr++, &r1, 1); return true; } // ESIL operation SPM_PAGE_WRITE -static bool avr_custom_spm_page_write(RzAnalEsil *esil) { +static bool avr_custom_spm_page_write(RzAnalysisEsil *esil) { CPU_MODEL *cpu; char *t = NULL; ut64 addr, page_size_bits, tmp_page; // sanity check - if (!esil || !esil->anal || !esil->anal->reg) { + if (!esil || !esil->analysis || !esil->analysis->reg) { return false; } @@ -1843,9 +1843,9 @@ static bool avr_custom_spm_page_write(RzAnalEsil *esil) { // get details about current MCU and fix input address and base address // of the internal temporary page - cpu = get_cpu_model (esil->anal->cpu); + cpu = get_cpu_model (esil->analysis->cpu); page_size_bits = const_get_value (const_by_name (cpu, CPU_CONST_PARAM, "page_size")); - rz_anal_esil_reg_read (esil, "_page", &tmp_page, NULL); + rz_analysis_esil_reg_read (esil, "_page", &tmp_page, NULL); // align base address to page_size_bits addr &= (~(MASK (page_size_bits)) & CPU_PC_MASK (cpu)); @@ -1856,21 +1856,21 @@ static bool avr_custom_spm_page_write(RzAnalEsil *esil) { eprintf ("Cannot alloc a buffer for copying the temporary page.\n"); return false; } - rz_anal_esil_mem_read (esil, tmp_page, (ut8 *) t, 1 << page_size_bits); - rz_anal_esil_mem_write (esil, addr, (ut8 *) t, 1 << page_size_bits); + rz_analysis_esil_mem_read (esil, tmp_page, (ut8 *) t, 1 << page_size_bits); + rz_analysis_esil_mem_write (esil, addr, (ut8 *) t, 1 << page_size_bits); return true; } -static int esil_avr_hook_reg_write(RzAnalEsil *esil, const char *name, ut64 *val) { +static int esil_avr_hook_reg_write(RzAnalysisEsil *esil, const char *name, ut64 *val) { CPU_MODEL *cpu; - if (!esil || !esil->anal) { + if (!esil || !esil->analysis) { return 0; } // select cpu info - cpu = get_cpu_model (esil->anal->cpu); + cpu = get_cpu_model (esil->analysis->cpu); // crop registers and force certain values if (!strcmp (name, "pc")) { @@ -1888,25 +1888,25 @@ static int esil_avr_hook_reg_write(RzAnalEsil *esil, const char *name, ut64 *val return 0; } -static int esil_avr_init(RzAnalEsil *esil) { +static int esil_avr_init(RzAnalysisEsil *esil) { if (!esil) { return false; } desctx.round = 0; - rz_anal_esil_set_op (esil, "des", avr_custom_des, 0, 0, RZ_ANAL_ESIL_OP_TYPE_CUSTOM); //better meta info plz - rz_anal_esil_set_op (esil, "SPM_PAGE_ERASE", avr_custom_spm_page_erase, 0, 0, RZ_ANAL_ESIL_OP_TYPE_CUSTOM); - rz_anal_esil_set_op (esil, "SPM_PAGE_FILL", avr_custom_spm_page_fill, 0, 0, RZ_ANAL_ESIL_OP_TYPE_CUSTOM); - rz_anal_esil_set_op (esil, "SPM_PAGE_WRITE", avr_custom_spm_page_write, 0, 0, RZ_ANAL_ESIL_OP_TYPE_CUSTOM); + rz_analysis_esil_set_op (esil, "des", avr_custom_des, 0, 0, RZ_ANAL_ESIL_OP_TYPE_CUSTOM); //better meta info plz + rz_analysis_esil_set_op (esil, "SPM_PAGE_ERASE", avr_custom_spm_page_erase, 0, 0, RZ_ANAL_ESIL_OP_TYPE_CUSTOM); + rz_analysis_esil_set_op (esil, "SPM_PAGE_FILL", avr_custom_spm_page_fill, 0, 0, RZ_ANAL_ESIL_OP_TYPE_CUSTOM); + rz_analysis_esil_set_op (esil, "SPM_PAGE_WRITE", avr_custom_spm_page_write, 0, 0, RZ_ANAL_ESIL_OP_TYPE_CUSTOM); esil->cb.hook_reg_write = esil_avr_hook_reg_write; return true; } -static int esil_avr_fini(RzAnalEsil *esil) { +static int esil_avr_fini(RzAnalysisEsil *esil) { return true; } -static bool set_reg_profile(RzAnal *anal) { +static bool set_reg_profile(RzAnalysis *analysis) { const char *p = "=PC pcl\n" "=SP sp\n" @@ -2029,10 +2029,10 @@ RAMPX, RAMPY, RAMPZ, RAMPD and EIND: "gpr spmcsr .8 64 0\n" ; - return rz_reg_set_profile_string (anal->reg, p); + return rz_reg_set_profile_string (analysis->reg, p); } -static int archinfo(RzAnal *anal, int q) { +static int archinfo(RzAnalysis *analysis, int q) { if (q == RZ_ANAL_ARCHINFO_ALIGN) { return 2; } @@ -2045,26 +2045,26 @@ static int archinfo(RzAnal *anal, int q) { return 2; // XXX } -static ut8 *anal_mask_avr(RzAnal *anal, int size, const ut8 *data, ut64 at) { - RzAnalOp *op = NULL; +static ut8 *analysis_mask_avr(RzAnalysis *analysis, int size, const ut8 *data, ut64 at) { + RzAnalysisOp *op = NULL; ut8 *ret = NULL; int idx; - if (!(op = rz_anal_op_new ())) { + if (!(op = rz_analysis_op_new ())) { return NULL; } if (!(ret = malloc (size))) { - rz_anal_op_free (op); + rz_analysis_op_free (op); return NULL; } memset (ret, 0xff, size); - CPU_MODEL *cpu = get_cpu_model (anal->cpu); + CPU_MODEL *cpu = get_cpu_model (analysis->cpu); for (idx = 0; idx + 1 < size; idx += op->size) { - OPCODE_DESC* opcode_desc = avr_op_analyze (anal, op, at + idx, data + idx, size - idx, cpu); + OPCODE_DESC* opcode_desc = avr_op_analyze (analysis, op, at + idx, data + idx, size - idx, cpu); if (op->size < 1) { break; @@ -2087,12 +2087,12 @@ static ut8 *anal_mask_avr(RzAnal *anal, int size, const ut8 *data, ut64 at) { } } - rz_anal_op_free (op); + rz_analysis_op_free (op); return ret; } -RzAnalPlugin rz_anal_plugin_avr = { +RzAnalysisPlugin rz_analysis_plugin_avr = { .name = "avr", .desc = "AVR code analysis plugin", .license = "LGPL3", @@ -2104,13 +2104,13 @@ RzAnalPlugin rz_anal_plugin_avr = { .set_reg_profile = &set_reg_profile, .esil_init = esil_avr_init, .esil_fini = esil_avr_fini, - .anal_mask = anal_mask_avr, + .analysis_mask = analysis_mask_avr, }; #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_avr, + .data = &rz_analysis_plugin_avr, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_bf.c b/librz/analysis/p/analysis_bf.c similarity index 83% rename from librz/anal/p/anal_bf.c rename to librz/analysis/p/analysis_bf.c index 3c13a92291..d3fc9f733c 100644 --- a/librz/anal/p/anal_bf.c +++ b/librz/analysis/p/analysis_bf.c @@ -4,7 +4,7 @@ #include #include #include -#include +#include static size_t countChar(const ut8 *buf, int len, char ch) { int i; @@ -23,13 +23,13 @@ static int getid (char ch) { } #define BUFSIZE_INC 32 -static int bf_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, RzAnalOpMask mask) { +static int bf_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, RzAnalysisOpMask mask) { ut64 dst = 0LL; if (!op) { return 1; } - /* Ayeeee! What's inside op? Do we have an initialized RzAnalOp? Are we going to have a leak here? :-( */ - memset (op, 0, sizeof (RzAnalOp)); /* We need to refactorize this. Something like rz_anal_op_init would be more appropriate */ + /* Ayeeee! What's inside op? Do we have an initialized RzAnalysisOp? Are we going to have a leak here? :-( */ + memset (op, 0, sizeof (RzAnalysisOp)); /* We need to refactorize this. Something like rz_analysis_op_init would be more appropriate */ rz_strbuf_init (&op->esil); op->size = 1; op->id = getid (buf[0]); @@ -65,12 +65,12 @@ static int bf_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, op->type = RZ_ANAL_OP_TYPE_ILL; goto beach; } - if (i == len - 1 && anal->read_at) { + if (i == len - 1 && analysis->read_at) { int new_buf_len = len + 1 + BUFSIZE_INC; ut8 *new_buf = calloc (new_buf_len, 1); if (new_buf) { free ((ut8 *)buf); - (void)anal->read_at (anal, addr, new_buf, new_buf_len); + (void)analysis->read_at (analysis, addr, new_buf, new_buf_len); buf = new_buf; p = buf + i; len += BUFSIZE_INC; @@ -128,7 +128,7 @@ beach: return op->size; } -static char *get_reg_profile(RzAnal *anal) { +static char *get_reg_profile(RzAnalysis *analysis) { return strdup ( "=PC pc\n" "=BP brk\n" @@ -145,7 +145,7 @@ static char *get_reg_profile(RzAnal *anal) { ); } -RzAnalPlugin rz_anal_plugin_bf = { +RzAnalysisPlugin rz_analysis_plugin_bf = { .name = "bf", .desc = "brainfuck code analysis plugin", .license = "LGPL3", @@ -159,7 +159,7 @@ RzAnalPlugin rz_anal_plugin_bf = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_bf, + .data = &rz_analysis_plugin_bf, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_chip8.c b/librz/analysis/p/analysis_chip8.c similarity index 89% rename from librz/anal/p/anal_chip8.c rename to librz/analysis/p/analysis_chip8.c index 19f19a318d..ca13a9211e 100644 --- a/librz/anal/p/anal_chip8.c +++ b/librz/analysis/p/analysis_chip8.c @@ -4,9 +4,9 @@ #include #include #include -#include +#include -static int chip8_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int len, RzAnalOpMask mask) { +static int chip8_anop(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *data, int len, RzAnalysisOpMask mask) { ut16 opcode = rz_read_be16 (data); // uint8_t x = (opcode >> 8) & 0x0F; // uint8_t y = (opcode >> 4) & 0x0F; @@ -99,7 +99,7 @@ static int chip8_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, in break; case 0xE000: if (kk == 0x9E || kk == 0xA1) { - rz_meta_set_string (anal, RZ_META_TYPE_COMMENT, addr, "KEYPAD"); + rz_meta_set_string (analysis, RZ_META_TYPE_COMMENT, addr, "KEYPAD"); op->type = RZ_ANAL_OP_TYPE_CJMP; op->jump = addr + op->size * 2; op->fail = addr + op->size; @@ -111,7 +111,7 @@ static int chip8_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, in op->type = RZ_ANAL_OP_TYPE_MOV; break; case 0x0A: - rz_meta_set_string (anal, RZ_META_TYPE_COMMENT, addr, "KEYPAD"); + rz_meta_set_string (analysis, RZ_META_TYPE_COMMENT, addr, "KEYPAD"); op->type = RZ_ANAL_OP_TYPE_MOV; break; case 0x15: @@ -150,7 +150,7 @@ static int chip8_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, in return op->size; } -RzAnalPlugin rz_anal_plugin_chip8 = { +RzAnalysisPlugin rz_analysis_plugin_chip8 = { .name = "chip8", .desc = "CHIP8 analysis plugin", .license = "LGPL3", @@ -162,7 +162,7 @@ RzAnalPlugin rz_anal_plugin_chip8 = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_chip8, + .data = &rz_analysis_plugin_chip8, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_cr16.c b/librz/analysis/p/analysis_cr16.c similarity index 91% rename from librz/anal/p/anal_cr16.c rename to librz/analysis/p/analysis_cr16.c index 23d3ecb0bf..f4060082bf 100644 --- a/librz/anal/p/anal_cr16.c +++ b/librz/analysis/p/analysis_cr16.c @@ -4,13 +4,13 @@ #include #include #include -#include +#include #include #include -static int cr16_op(RzAnal *anal, RzAnalOp *op, ut64 addr, - const ut8 *buf, int len, RzAnalOpMask mask) +static int cr16_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, + const ut8 *buf, int len, RzAnalysisOpMask mask) { int ret; struct cr16_cmd cmd; @@ -118,7 +118,7 @@ static int cr16_op(RzAnal *anal, RzAnalOp *op, ut64 addr, return ret; } -RzAnalPlugin rz_anal_plugin_cr16 = { +RzAnalysisPlugin rz_analysis_plugin_cr16 = { .name = "cr16", .desc = "CR16 code analysis plugin", .license = "LGPL3", @@ -130,7 +130,7 @@ RzAnalPlugin rz_anal_plugin_cr16 = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_cr16, + .data = &rz_analysis_plugin_cr16, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_cris.c b/librz/analysis/p/analysis_cris.c similarity index 94% rename from librz/anal/p/anal_cris.c rename to librz/analysis/p/analysis_cris.c index 4777dae5e8..751e92aa5b 100644 --- a/librz/anal/p/anal_cris.c +++ b/librz/analysis/p/analysis_cris.c @@ -3,7 +3,7 @@ #include #include -static int analop(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, RzAnalOpMask mask) { +static int analop(RzAnalysis *a, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, RzAnalysisOpMask mask) { int opsize = -1; op->type = -1; opsize = 2; @@ -237,7 +237,7 @@ static int analop(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, R return opsize; } -static bool set_reg_profile(RzAnal *anal) { +static bool set_reg_profile(RzAnalysis *analysis) { const char *p = "=PC pc\n" "=SP r14\n" // XXX @@ -271,10 +271,10 @@ static bool set_reg_profile(RzAnal *anal) { "gpr r15 .32 60 0\n" // ADD P REGISTERS ; - return rz_reg_set_profile_string (anal->reg, p); + return rz_reg_set_profile_string (analysis->reg, p); } -RzAnalPlugin rz_anal_plugin_cris = { +RzAnalysisPlugin rz_analysis_plugin_cris = { .name = "cris", .desc = "Axis Communications 32-bit embedded processor", .license = "LGPL3", @@ -288,7 +288,7 @@ RzAnalPlugin rz_anal_plugin_cris = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_cris, + .data = &rz_analysis_plugin_cris, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_dalvik.c b/librz/analysis/p/analysis_dalvik.c similarity index 96% rename from librz/anal/p/anal_dalvik.c rename to librz/analysis/p/analysis_dalvik.c index 55f5a68e48..6ec7c16830 100644 --- a/librz/anal/p/anal_dalvik.c +++ b/librz/analysis/p/analysis_dalvik.c @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include "../../asm/arch/dalvik/opcode.h" #include "../../bin/format/dex/dex.h" @@ -44,7 +44,7 @@ static const char *getCondz(ut8 cond) { return ""; } -static int dalvik_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int len, RzAnalOpMask mask) { +static int dalvik_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *data, int len, RzAnalysisOpMask mask) { int sz = dalvik_opcodes[data[0]].len; if (!op || sz >= len) { if (op && (mask & RZ_ANAL_OP_MASK_DISASM)) { @@ -151,7 +151,7 @@ static int dalvik_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int if (len > 2) { ut32 vA = data[1]; ut32 vB = (data[3]<<8) | data[2]; - ut64 offset = RZ_ANAL_GET_OFFSET (anal, 's', vB); + ut64 offset = RZ_ANAL_GET_OFFSET (analysis, 's', vB); op->ptr = offset; if (mask & RZ_ANAL_OP_MASK_ESIL) { // op->refptr = 0; @@ -269,7 +269,7 @@ static int dalvik_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int op->datatype = RZ_ANAL_DATATYPE_OBJECT; op->type = RZ_ANAL_OP_TYPE_LOAD; ut32 vC = len > 3?(data[3] << 8) | data[2] : 0; - op->ptr = anal->binb.get_offset (anal->binb.bin, 'f', vC); + op->ptr = analysis->binb.get_offset (analysis->binb.bin, 'f', vC); if (mask & RZ_ANAL_OP_MASK_ESIL) { ut32 vA = (data[1] & 0x0f); esilprintf (op, "%" PFMT64d ",v%d,=", op->ptr, vA); @@ -307,7 +307,7 @@ static int dalvik_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int { op->type = RZ_ANAL_OP_TYPE_STORE; ut32 vC = len > 3?(data[3] << 8) | data[2] : 0; - op->ptr = anal->binb.get_offset (anal->binb.bin, 'f', vC); + op->ptr = analysis->binb.get_offset (analysis->binb.bin, 'f', vC); } if (mask & RZ_ANAL_OP_MASK_ESIL) { ut32 vA = (data[1] & 0x0f); @@ -539,7 +539,7 @@ static int dalvik_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int //XXX fix this better since the check avoid an oob //but the jump will be incorrect ut32 vB = len > 3?(data[3] << 8) | data[2] : 0; - ut64 dst = anal->binb.get_offset (anal->binb.bin, 'm', vB); + ut64 dst = analysis->binb.get_offset (analysis->binb.bin, 'm', vB); if (dst == 0) { op->type = RZ_ANAL_OP_TYPE_UCALL; } else { @@ -565,7 +565,7 @@ static int dalvik_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int //XXX fix this better since the check avoid an oob //but the jump will be incorrect // ut32 vB = len > 3?(data[3] << 8) | data[2] : 3; - //op->jump = anal->binb.get_offset (anal->binb.bin, 'm', vB); + //op->jump = analysis->binb.get_offset (analysis->binb.bin, 'm', vB); op->fail = addr + sz; // op->type = RZ_ANAL_OP_TYPE_CALL; op->type = RZ_ANAL_OP_TYPE_UCALL; @@ -598,7 +598,7 @@ static int dalvik_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int if (len > 2) { // resolve class name for vB int vB = (data[3] << 8) | data[2]; - ut64 off = RZ_ANAL_GET_OFFSET (anal, 't', vB); + ut64 off = RZ_ANAL_GET_OFFSET (analysis, 't', vB); op->ptr = off; if (mask & RZ_ANAL_OP_MASK_ESIL) { int vA = (int) data[1]; @@ -625,7 +625,7 @@ static int dalvik_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int //int vA = (int) data[1]; int vB = (data[3] << 8) | data[2]; // resolve class name for vB - ut64 off = RZ_ANAL_GET_OFFSET (anal, 't', vB); + ut64 off = RZ_ANAL_GET_OFFSET (analysis, 't', vB); op->ptr = off; } break; @@ -703,7 +703,7 @@ static int dalvik_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int return sz; } -static bool set_reg_profile(RzAnal *anal) { +static bool set_reg_profile(RzAnalysis *analysis) { const char *p = "=PC ip\n" "=SP sp\n" @@ -752,10 +752,10 @@ static bool set_reg_profile(RzAnal *anal) { "gpr sp .32 120 0\n" "gpr bp .32 124 0\n" ; - return rz_reg_set_profile_string (anal->reg, p); + return rz_reg_set_profile_string (analysis->reg, p); } -RzAnalPlugin rz_anal_plugin_dalvik = { +RzAnalysisPlugin rz_analysis_plugin_dalvik = { .name = "dalvik", .arch = "dalvik", .set_reg_profile = &set_reg_profile, @@ -768,7 +768,7 @@ RzAnalPlugin rz_anal_plugin_dalvik = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_dalvik, + .data = &rz_analysis_plugin_dalvik, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_ebc.c b/librz/analysis/p/analysis_ebc.c similarity index 84% rename from librz/anal/p/anal_ebc.c rename to librz/analysis/p/analysis_ebc.c index d70c45096e..45a3228ed9 100644 --- a/librz/anal/p/anal_ebc.c +++ b/librz/analysis/p/analysis_ebc.c @@ -4,11 +4,11 @@ #include #include #include -#include +#include #include -static void ebc_anal_jmp8(RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void ebc_analysis_jmp8(RzAnalysisOp *op, ut64 addr, const ut8 *buf) { int jmpadr = (int8_t)buf[1]; op->jump = addr + 2 + (jmpadr * 2); op->addr = addr; @@ -21,7 +21,7 @@ static void ebc_anal_jmp8(RzAnalOp *op, ut64 addr, const ut8 *buf) { } } -static void ebc_anal_jmp(RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void ebc_analysis_jmp(RzAnalysisOp *op, ut64 addr, const ut8 *buf) { op->fail = addr + 6; op->jump = (ut64)*(int32_t*)(buf + 2); if (TEST_BIT (buf[1], 4)) { @@ -38,7 +38,7 @@ static void ebc_anal_jmp(RzAnalOp *op, ut64 addr, const ut8 *buf) { } } -static void ebc_anal_call(RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void ebc_analysis_call(RzAnalysisOp *op, ut64 addr, const ut8 *buf) { int32_t addr_call; op->fail = addr + 6; @@ -57,7 +57,7 @@ static void ebc_anal_call(RzAnalOp *op, ut64 addr, const ut8 *buf) { } } -static int ebc_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, RzAnalOpMask mask) { +static int ebc_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, RzAnalysisOpMask mask) { int ret; ebc_command_t cmd; ut8 opcode = buf[0] & EBC_OPCODE_MASK; @@ -76,10 +76,10 @@ static int ebc_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int len switch (opcode) { case EBC_JMP8: - ebc_anal_jmp8(op, addr, buf); + ebc_analysis_jmp8(op, addr, buf); break; case EBC_JMP: - ebc_anal_jmp(op, addr, buf); + ebc_analysis_jmp(op, addr, buf); break; case EBC_MOVBW: case EBC_MOVWW: @@ -148,7 +148,7 @@ static int ebc_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int len op->type = RZ_ANAL_OP_TYPE_SUB; break; case EBC_CALL: - ebc_anal_call(op, addr, buf); + ebc_analysis_call(op, addr, buf); break; case EBC_BREAK: op->type = RZ_ANAL_OP_TYPE_SWI; @@ -161,7 +161,7 @@ static int ebc_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int len return ret; } -RzAnalPlugin rz_anal_plugin_ebc = { +RzAnalysisPlugin rz_analysis_plugin_ebc = { .name = "ebc", .desc = "EBC code analysis plugin", .license = "LGPL3", @@ -173,7 +173,7 @@ RzAnalPlugin rz_anal_plugin_ebc = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_ebc, + .data = &rz_analysis_plugin_ebc, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_gb.c b/librz/analysis/p/analysis_gb.c similarity index 72% rename from librz/anal/p/anal_gb.c rename to librz/analysis/p/analysis_gb.c index 2904c8da20..8f10c4a722 100644 --- a/librz/anal/p/anal_gb.c +++ b/librz/analysis/p/analysis_gb.c @@ -1,12 +1,12 @@ // SPDX-License-Identifier: LGPL-3.0-only -// this file was based on anal_i8080.c +// this file was based on analysis_i8080.c #include #include #include #include -#include +#include #include #define GB_DIS_LEN_ONLY #include "../../asm/arch/gb/gbdis.c" @@ -21,7 +21,7 @@ static const char *regs_x[] = { "b", "c", "d", "e", "h", "l", "hl", "a"}; static const char *regs_16[] = { "bc", "de", "hl", "sp"}; static const char *regs_16_alt[] = { "bc", "de", "hl", "af" }; -static ut8 gb_op_calljump(RzAnal *a, RzAnalOp *op, const ut8 *data, ut64 addr) +static ut8 gb_op_calljump(RzAnalysis *a, RzAnalysisOp *op, const ut8 *data, ut64 addr) { if (GB_IS_RAM_DST (data[1],data[2])) { op->jump = GB_SOFTCAST (data[1], data[2]); @@ -37,7 +37,7 @@ static ut8 gb_op_calljump(RzAnal *a, RzAnalOp *op, const ut8 *data, ut64 addr) } #if 0 -static inline int gb_anal_esil_banksw (RzAnalOp *op) //remove that +static inline int gb_analysis_esil_banksw (RzAnalysisOp *op) //remove that { ut64 base = op->dst->base; if (op->addr < 0x4000 && 0x1fff < base && base < 0x4000) { @@ -52,12 +52,12 @@ static inline int gb_anal_esil_banksw (RzAnalOp *op) //remove that } #endif -static void gb_anal_esil_call (RzAnalOp *op) +static void gb_analysis_esil_call (RzAnalysisOp *op) { rz_strbuf_setf (&op->esil, "2,sp,-=,pc,sp,=[2],%"PFMT64d",pc,:=", (op->jump & 0xffff)); } -static inline void gb_anal_esil_ccall (RzAnalOp *op, const ut8 data) +static inline void gb_analysis_esil_ccall (RzAnalysisOp *op, const ut8 data) { char cond; switch (data) { @@ -75,12 +75,12 @@ static inline void gb_anal_esil_ccall (RzAnalOp *op, const ut8 data) } } -static inline void gb_anal_esil_ret (RzAnalOp *op) +static inline void gb_analysis_esil_ret (RzAnalysisOp *op) { rz_strbuf_append (&op->esil, "sp,[2],pc,:=,2,sp,+="); } -static inline void gb_anal_esil_cret (RzAnalOp *op, const ut8 data) +static inline void gb_analysis_esil_cret (RzAnalysisOp *op, const ut8 data) { char cond; if ((data & 0xd0) == 0xd0) { @@ -95,7 +95,7 @@ static inline void gb_anal_esil_cret (RzAnalOp *op, const ut8 data) } } -static inline void gb_anal_esil_cjmp (RzAnalOp *op, const ut8 data) +static inline void gb_analysis_esil_cjmp (RzAnalysisOp *op, const ut8 data) { char cond; switch (data) { @@ -115,27 +115,27 @@ static inline void gb_anal_esil_cjmp (RzAnalOp *op, const ut8 data) } } -static inline void gb_anal_esil_jmp (RzAnalOp *op) +static inline void gb_analysis_esil_jmp (RzAnalysisOp *op) { rz_strbuf_setf (&op->esil, "0x%"PFMT64x",pc,:=", (op->jump & 0xffff)); } -static inline void gb_anal_jmp_hl (RzReg *reg, RzAnalOp *op) { - op->dst = rz_anal_value_new (); - op->src[0] = rz_anal_value_new (); +static inline void gb_analysis_jmp_hl (RzReg *reg, RzAnalysisOp *op) { + op->dst = rz_analysis_value_new (); + op->src[0] = rz_analysis_value_new (); op->dst->reg = rz_reg_get (reg, "pc", RZ_REG_TYPE_GPR); op->src[0]->reg = rz_reg_get (reg, "hl", RZ_REG_TYPE_GPR); rz_strbuf_set (&op->esil, "hl,pc,:="); } -static inline void gb_anal_id (RzAnal *anal, RzAnalOp *op, const ut8 data) { - op->dst = rz_anal_value_new (); - op->src[0] = rz_anal_value_new (); +static inline void gb_analysis_id (RzAnalysis *analysis, RzAnalysisOp *op, const ut8 data) { + op->dst = rz_analysis_value_new (); + op->src[0] = rz_analysis_value_new (); op->src[0]->imm = 1; op->src[0]->absolute = true; if (data == 0x34 || data == 0x35) { op->dst->memref = 1; - op->dst->reg = rz_reg_get (anal->reg, "hl", RZ_REG_TYPE_GPR); + op->dst->reg = rz_reg_get (analysis->reg, "hl", RZ_REG_TYPE_GPR); if (op->type == RZ_ANAL_OP_TYPE_ADD) { rz_strbuf_set (&op->esil, "1,hl,[1],+,hl,=[1],3,$c,H,:=,$z,Z,:=,0,N,:="); } else { @@ -143,14 +143,14 @@ static inline void gb_anal_id (RzAnal *anal, RzAnalOp *op, const ut8 data) { } } else { if (!(data & (1<<2))) { - op->dst->reg = rz_reg_get (anal->reg, regs_16[data>>4], RZ_REG_TYPE_GPR); + op->dst->reg = rz_reg_get (analysis->reg, regs_16[data>>4], RZ_REG_TYPE_GPR); if (op->type == RZ_ANAL_OP_TYPE_ADD) { rz_strbuf_setf (&op->esil, "1,%s,+=", regs_16[data>>4]); } else { rz_strbuf_setf (&op->esil, "1,%s,-=", regs_16[data >> 4]); } } else { - op->dst->reg = rz_reg_get (anal->reg, regs_8[data>>3], RZ_REG_TYPE_GPR); + op->dst->reg = rz_reg_get (analysis->reg, regs_8[data>>3], RZ_REG_TYPE_GPR); if (op->type == RZ_ANAL_OP_TYPE_ADD) { rz_strbuf_setf (&op->esil, "1,%s,+=,3,$c,H,:=,$z,Z,:=,0,N,:=", regs_8[data>>3]); } else { @@ -160,17 +160,17 @@ static inline void gb_anal_id (RzAnal *anal, RzAnalOp *op, const ut8 data) { } } -static inline void gb_anal_add_hl (RzReg *reg, RzAnalOp *op, const ut8 data) { - op->dst = rz_anal_value_new (); - op->src[0] = rz_anal_value_new (); +static inline void gb_analysis_add_hl (RzReg *reg, RzAnalysisOp *op, const ut8 data) { + op->dst = rz_analysis_value_new (); + op->src[0] = rz_analysis_value_new (); op->dst->reg = rz_reg_get (reg, "hl", RZ_REG_TYPE_GPR); op->src[0]->reg = rz_reg_get (reg, regs_16[((data & 0xf0)>>4)], RZ_REG_TYPE_GPR); rz_strbuf_setf (&op->esil, "%s,hl,+=,0,N,:=", regs_16[((data & 0xf0)>>4)]); //hl+=,N=0 } -static inline void gb_anal_add_sp (RzReg *reg, RzAnalOp *op, const ut8 data) { - op->dst = rz_anal_value_new (); - op->src[0] = rz_anal_value_new (); +static inline void gb_analysis_add_sp (RzReg *reg, RzAnalysisOp *op, const ut8 data) { + op->dst = rz_analysis_value_new (); + op->src[0] = rz_analysis_value_new (); op->dst->reg = rz_reg_get (reg, "sp", RZ_REG_TYPE_GPR); op->src[0]->imm = (st8)data; if (data < 128) { @@ -181,9 +181,9 @@ static inline void gb_anal_add_sp (RzReg *reg, RzAnalOp *op, const ut8 data) { rz_strbuf_append (&op->esil, ",0,Z,=,0,N,:="); } -static void gb_anal_mov_imm (RzReg *reg, RzAnalOp *op, const ut8 *data) { - op->dst = rz_anal_value_new (); - op->src[0] = rz_anal_value_new (); +static void gb_analysis_mov_imm (RzReg *reg, RzAnalysisOp *op, const ut8 *data) { + op->dst = rz_analysis_value_new (); + op->src[0] = rz_analysis_value_new (); if (data[0] & 1) { op->dst->reg = rz_reg_get (reg, regs_16[data[0]>>4], RZ_REG_TYPE_GPR); op->src[0]->imm = GB_SOFTCAST (data[1], data[2]); @@ -197,18 +197,18 @@ static void gb_anal_mov_imm (RzReg *reg, RzAnalOp *op, const ut8 *data) { op->val = op->src[0]->imm; } -static inline void gb_anal_mov_sp_hl (RzReg *reg, RzAnalOp *op) { - op->dst = rz_anal_value_new (); - op->src[0] = rz_anal_value_new (); +static inline void gb_analysis_mov_sp_hl (RzReg *reg, RzAnalysisOp *op) { + op->dst = rz_analysis_value_new (); + op->src[0] = rz_analysis_value_new (); op->dst->reg = rz_reg_get (reg, "sp", RZ_REG_TYPE_GPR); op->src[0]->reg = rz_reg_get (reg, "hl", RZ_REG_TYPE_GPR); rz_strbuf_set (&op->esil, "hl,sp,="); } -static inline void gb_anal_mov_hl_sp (RzReg *reg, RzAnalOp *op, const ut8 data) { - op->dst = rz_anal_value_new (); - op->src[0] = rz_anal_value_new (); - op->src[1] = rz_anal_value_new (); +static inline void gb_analysis_mov_hl_sp (RzReg *reg, RzAnalysisOp *op, const ut8 data) { + op->dst = rz_analysis_value_new (); + op->src[0] = rz_analysis_value_new (); + op->src[1] = rz_analysis_value_new (); op->dst->reg = rz_reg_get (reg, regs_16[2], RZ_REG_TYPE_GPR); op->src[0]->reg = rz_reg_get (reg, regs_16[3], RZ_REG_TYPE_GPR); op->src[1]->imm = (st8)data; @@ -220,17 +220,17 @@ static inline void gb_anal_mov_hl_sp (RzReg *reg, RzAnalOp *op, const ut8 data) rz_strbuf_append (&op->esil, ",0,Z,=,0,N,:="); } -static void gb_anal_mov_reg (RzReg *reg, RzAnalOp *op, const ut8 data) { - op->dst = rz_anal_value_new (); - op->src[0] = rz_anal_value_new (); +static void gb_analysis_mov_reg (RzReg *reg, RzAnalysisOp *op, const ut8 data) { + op->dst = rz_analysis_value_new (); + op->src[0] = rz_analysis_value_new (); op->dst->reg = rz_reg_get (reg, regs_8[(data/8) - 8], RZ_REG_TYPE_GPR); op->src[0]->reg = rz_reg_get (reg, regs_8[data & 7], RZ_REG_TYPE_GPR); rz_strbuf_setf (&op->esil, "%s,%s,=", regs_8[data & 7], regs_8[(data/8) - 8]); } -static inline void gb_anal_mov_ime (RzReg *reg, RzAnalOp *op, const ut8 data) { - op->dst = rz_anal_value_new (); - op->src[0] = rz_anal_value_new (); +static inline void gb_analysis_mov_ime (RzReg *reg, RzAnalysisOp *op, const ut8 data) { + op->dst = rz_analysis_value_new (); + op->src[0] = rz_analysis_value_new (); op->dst->reg = rz_reg_get (reg, "ime", RZ_REG_TYPE_GPR); op->src[0]->absolute = true; op->src[0]->imm = (data != 0xf3); @@ -240,33 +240,33 @@ static inline void gb_anal_mov_ime (RzReg *reg, RzAnalOp *op, const ut8 data) { } } -static inline void gb_anal_mov_scf (RzReg *reg, RzAnalOp *op) { - op->dst = rz_anal_value_new (); - op->src[0] = rz_anal_value_new (); +static inline void gb_analysis_mov_scf (RzReg *reg, RzAnalysisOp *op) { + op->dst = rz_analysis_value_new (); + op->src[0] = rz_analysis_value_new (); op->dst->reg = rz_reg_get (reg, regs_1[3], RZ_REG_TYPE_GPR); op->src[0]->imm = 1; rz_strbuf_set (&op->esil, "1,C,:="); } -static inline void gb_anal_xor_cpl (RzReg *reg, RzAnalOp *op) { - op->dst = rz_anal_value_new (); - op->src[0] = rz_anal_value_new (); +static inline void gb_analysis_xor_cpl (RzReg *reg, RzAnalysisOp *op) { + op->dst = rz_analysis_value_new (); + op->src[0] = rz_analysis_value_new (); op->dst->reg = rz_reg_get (reg, regs_8[7], RZ_REG_TYPE_GPR); op->src[0]->imm = 0xff; rz_strbuf_set (&op->esil, "0xff,a,^=,1,N,:=,1,H,:="); } -static inline void gb_anal_xor_ccf (RzReg *reg, RzAnalOp *op) { - op->dst = rz_anal_value_new (); - op->src[0] = rz_anal_value_new (); +static inline void gb_analysis_xor_ccf (RzReg *reg, RzAnalysisOp *op) { + op->dst = rz_analysis_value_new (); + op->src[0] = rz_analysis_value_new (); op->dst->reg = rz_reg_get (reg, regs_1[3], RZ_REG_TYPE_GPR); op->src[0]->imm = 1; rz_strbuf_set (&op->esil, "C,!="); } -static inline void gb_anal_cond (RzReg *reg, RzAnalOp *op, const ut8 data) { - op->dst = rz_anal_value_new (); - op->src[0] = rz_anal_value_new (); +static inline void gb_analysis_cond (RzReg *reg, RzAnalysisOp *op, const ut8 data) { + op->dst = rz_analysis_value_new (); + op->src[0] = rz_analysis_value_new (); op->src[0]->imm = 1; if (data & 0x8) { op->cond = RZ_ANAL_COND_EQ; @@ -289,9 +289,9 @@ static inline void gb_anal_cond (RzReg *reg, RzAnalOp *op, const ut8 data) { } } -static inline void gb_anal_pp (RzReg *reg, RzAnalOp *op, const ut8 data) //push , pop +static inline void gb_analysis_pp (RzReg *reg, RzAnalysisOp *op, const ut8 data) //push , pop { - RzAnalValue *val = rz_anal_value_new (); + RzAnalysisValue *val = rz_analysis_value_new (); val->reg = rz_reg_get (reg, regs_16_alt[(data>>4) - 12], RZ_REG_TYPE_GPR); if ((data & 0xf) == 1) { op->dst = val; @@ -302,12 +302,12 @@ static inline void gb_anal_pp (RzReg *reg, RzAnalOp *op, const ut8 data) //push } } -static inline void gb_anal_and_res (RzAnal *anal, RzAnalOp *op, const ut8 data) { - op->dst = rz_anal_value_new (); - op->src[0] = rz_anal_value_new (); +static inline void gb_analysis_and_res (RzAnalysis *analysis, RzAnalysisOp *op, const ut8 data) { + op->dst = rz_analysis_value_new (); + op->src[0] = rz_analysis_value_new (); op->src[0]->imm = ((~(0x1 << ((data >> 3) & 7))) & 0xff); op->dst->memref = ((data & 7) == 6); - op->dst->reg = rz_reg_get (anal->reg, regs_x[data & 7], RZ_REG_TYPE_GPR); + op->dst->reg = rz_reg_get (analysis->reg, regs_x[data & 7], RZ_REG_TYPE_GPR); if (op->dst->memref) { rz_strbuf_setf (&op->esil, "0x%02" PFMT64x ",%s,[1],&,%s,=[1]", op->src[0]->imm, regs_x[data & 7], regs_x[data & 7]); } else { @@ -315,9 +315,9 @@ static inline void gb_anal_and_res (RzAnal *anal, RzAnalOp *op, const ut8 data) } } -static inline void gb_anal_and_bit (RzReg *reg, RzAnalOp *op, const ut8 data) { - op->dst = rz_anal_value_new (); - op->src[0] = rz_anal_value_new (); +static inline void gb_analysis_and_bit (RzReg *reg, RzAnalysisOp *op, const ut8 data) { + op->dst = rz_analysis_value_new (); + op->src[0] = rz_analysis_value_new (); op->src[0]->imm = 1<<((data>>3) & 7); op->dst->memref = ((data & 7) == 6); op->dst->reg = rz_reg_get (reg, regs_x[data & 7], RZ_REG_TYPE_GPR); @@ -328,12 +328,12 @@ static inline void gb_anal_and_bit (RzReg *reg, RzAnalOp *op, const ut8 data) { } } -static inline void gb_anal_or_set (RzAnal *anal, RzAnalOp *op, const ut8 data) { - op->dst = rz_anal_value_new (); - op->src[0] = rz_anal_value_new (); +static inline void gb_analysis_or_set (RzAnalysis *analysis, RzAnalysisOp *op, const ut8 data) { + op->dst = rz_analysis_value_new (); + op->src[0] = rz_analysis_value_new (); op->src[0]->imm = (data>>3) & 7; op->dst->memref = ((data & 7) == 6); - op->dst->reg = rz_reg_get (anal->reg, regs_x[data & 7], RZ_REG_TYPE_GPR); + op->dst->reg = rz_reg_get (analysis->reg, regs_x[data & 7], RZ_REG_TYPE_GPR); if (op->dst->memref) { rz_strbuf_setf (&op->esil, "0x%02" PFMT64x ",%s,[1],|,%s,=[1]", op->src[0]->imm, regs_x[data & 7], regs_x[data & 7]); } else { @@ -341,9 +341,9 @@ static inline void gb_anal_or_set (RzAnal *anal, RzAnalOp *op, const ut8 data) { } } -static void gb_anal_xoaasc (RzReg *reg, RzAnalOp *op, const ut8 *data) { - op->dst = rz_anal_value_new (); - op->src[0] = rz_anal_value_new (); +static void gb_analysis_xoaasc (RzReg *reg, RzAnalysisOp *op, const ut8 *data) { + op->dst = rz_analysis_value_new (); + op->src[0] = rz_analysis_value_new (); op->dst->reg = rz_reg_get (reg, "a", RZ_REG_TYPE_GPR); op->src[0]->reg = rz_reg_get (reg, regs_x[data[0] & 7], RZ_REG_TYPE_GPR); op->src[0]->memref = ((data[0] & 7) == 6); @@ -372,7 +372,7 @@ static void gb_anal_xoaasc (RzReg *reg, RzAnalOp *op, const ut8 *data) { case RZ_ANAL_OP_TYPE_ADD: if (op->src[0]->memref) { if (data[0] > 0x87) { - op->src[1] = rz_anal_value_new (); + op->src[1] = rz_analysis_value_new (); op->src[1]->reg = rz_reg_get (reg, "C", RZ_REG_TYPE_GPR); rz_strbuf_setf ( &op->esil, "C,%s,[1],+,a,+=,$z,Z,:=,3,$c,H,:=,7,$c,C,:=,0,N,:=", regs_x[data[0] & 7]); } else { @@ -380,7 +380,7 @@ static void gb_anal_xoaasc (RzReg *reg, RzAnalOp *op, const ut8 *data) { } } else { if (data[0] > 0x87) { - op->src[1] = rz_anal_value_new (); + op->src[1] = rz_analysis_value_new (); op->src[1]->reg = rz_reg_get (reg, "C", RZ_REG_TYPE_GPR); rz_strbuf_setf (&op->esil, "C,%s,+,a,+=,$z,Z,:=,3,$c,H,:=,7,$c,C,:=,0,N,:=", regs_x[data[0] & 7]); } else { @@ -391,7 +391,7 @@ static void gb_anal_xoaasc (RzReg *reg, RzAnalOp *op, const ut8 *data) { case RZ_ANAL_OP_TYPE_SUB: if (op->src[0]->memref) { if (data[0] > 0x97) { - op->src[1] = rz_anal_value_new (); + op->src[1] = rz_analysis_value_new (); op->src[1]->reg = rz_reg_get (reg, "C", RZ_REG_TYPE_GPR); rz_strbuf_setf (&op->esil, "C,%s,[1],+,a,-=,$z,Z,:=,4,$b,H,:=,8,$b,C,:=,1,N,:=", regs_x[data[0] & 7]); } else { @@ -399,7 +399,7 @@ static void gb_anal_xoaasc (RzReg *reg, RzAnalOp *op, const ut8 *data) { } } else { if (data[0] > 0x97) { - op->src[1] = rz_anal_value_new (); + op->src[1] = rz_analysis_value_new (); op->src[1]->reg = rz_reg_get (reg, "C", RZ_REG_TYPE_GPR); rz_strbuf_setf (&op->esil, "C,%s,+,a,-=,$z,Z,:=,4,$b,H,:=,8,$b,C,:=,1,N,:=", regs_x[data[0] & 7]); } else { @@ -420,10 +420,10 @@ static void gb_anal_xoaasc (RzReg *reg, RzAnalOp *op, const ut8 *data) { } } -static void gb_anal_xoaasc_imm (RzReg *reg, RzAnalOp *op, const ut8 *data) //xor , or, and, add, adc, sub, sbc, cp +static void gb_analysis_xoaasc_imm (RzReg *reg, RzAnalysisOp *op, const ut8 *data) //xor , or, and, add, adc, sub, sbc, cp { - op->dst = rz_anal_value_new (); - op->src[0] = rz_anal_value_new (); + op->dst = rz_analysis_value_new (); + op->src[0] = rz_analysis_value_new (); op->dst->reg = rz_reg_get (reg, "a", RZ_REG_TYPE_GPR); op->src[0]->absolute = true; op->src[0]->imm = data[1]; @@ -440,7 +440,7 @@ static void gb_anal_xoaasc_imm (RzReg *reg, RzAnalOp *op, const ut8 *data) //xor case RZ_ANAL_OP_TYPE_ADD: rz_strbuf_setf (&op->esil, "0x%02x,", data[1]); if (data[0] == 0xce) { //adc - op->src[1] = rz_anal_value_new (); + op->src[1] = rz_analysis_value_new (); op->src[1]->reg = rz_reg_get (reg, "C", RZ_REG_TYPE_GPR); rz_strbuf_append (&op->esil, "a,+=,C,NUM,7,$c,C,:=,3,$c,H,:=,a,+=,7,$c,C,|,C,:=,3,$c,H,|=,a,a,=,$z,Z,:=,0,N,:="); } else { @@ -450,7 +450,7 @@ static void gb_anal_xoaasc_imm (RzReg *reg, RzAnalOp *op, const ut8 *data) //xor case RZ_ANAL_OP_TYPE_SUB: rz_strbuf_setf (&op->esil, "0x%02x,", data[1]); if (data[0] == 0xde) { //sbc - op->src[1] = rz_anal_value_new (); + op->src[1] = rz_analysis_value_new (); op->src[1]->reg = rz_reg_get (reg, "C", RZ_REG_TYPE_GPR); rz_strbuf_append (&op->esil, "a,-=,C,NUM,8,$b,C,:=,4,$b,H,:=,a,-=,8,$b,C,|,C,=,4,$b,H,|,H,=,a,a,=,$z,Z,:=,1,N,:="); } else { @@ -463,10 +463,10 @@ static void gb_anal_xoaasc_imm (RzReg *reg, RzAnalOp *op, const ut8 *data) //xor } } -static inline void gb_anal_load_hl (RzReg *reg, RzAnalOp *op, const ut8 data) //load with [hl] as memref +static inline void gb_analysis_load_hl (RzReg *reg, RzAnalysisOp *op, const ut8 data) //load with [hl] as memref { - op->dst = rz_anal_value_new (); - op->src[0] = rz_anal_value_new (); + op->dst = rz_analysis_value_new (); + op->src[0] = rz_analysis_value_new (); op->src[0]->reg = rz_reg_get (reg, "hl", RZ_REG_TYPE_GPR); op->src[0]->memref = 1; op->src[0]->absolute = true; @@ -480,9 +480,9 @@ static inline void gb_anal_load_hl (RzReg *reg, RzAnalOp *op, const ut8 data) // } } -static inline void gb_anal_load (RzReg *reg, RzAnalOp *op, const ut8 *data) { - op->dst = rz_anal_value_new (); - op->src[0] = rz_anal_value_new (); +static inline void gb_analysis_load (RzReg *reg, RzAnalysisOp *op, const ut8 *data) { + op->dst = rz_analysis_value_new (); + op->src[0] = rz_analysis_value_new (); op->dst->reg = rz_reg_get (reg, "a", RZ_REG_TYPE_GPR); op->src[0]->memref = 1; switch (data[0]) { @@ -513,9 +513,9 @@ static inline void gb_anal_load (RzReg *reg, RzAnalOp *op, const ut8 *data) { } } -static inline void gb_anal_store_hl (RzReg *reg, RzAnalOp *op, const ut8 *data) { - op->dst = rz_anal_value_new (); - op->src[0] = rz_anal_value_new (); +static inline void gb_analysis_store_hl (RzReg *reg, RzAnalysisOp *op, const ut8 *data) { + op->dst = rz_analysis_value_new (); + op->src[0] = rz_analysis_value_new (); op->dst->reg = rz_reg_get (reg, "hl", RZ_REG_TYPE_GPR); op->dst->memref = 1; op->src[0]->absolute = true; @@ -534,10 +534,10 @@ static inline void gb_anal_store_hl (RzReg *reg, RzAnalOp *op, const ut8 *data) } } -static void gb_anal_store (RzReg *reg, RzAnalOp *op, const ut8 *data) +static void gb_analysis_store (RzReg *reg, RzAnalysisOp *op, const ut8 *data) { - op->dst = rz_anal_value_new (); - op->src[0] = rz_anal_value_new (); + op->dst = rz_analysis_value_new (); + op->src[0] = rz_analysis_value_new (); op->dst->memref = 1; op->src[0]->reg = rz_reg_get (reg, "a", RZ_REG_TYPE_GPR); switch (data[0]) { @@ -566,10 +566,10 @@ static void gb_anal_store (RzReg *reg, RzAnalOp *op, const ut8 *data) } } -static inline void gb_anal_cb_swap (RzReg *reg, RzAnalOp* op, const ut8 data) +static inline void gb_analysis_cb_swap (RzReg *reg, RzAnalysisOp* op, const ut8 data) { - op->dst = rz_anal_value_new (); - op->src[0] = rz_anal_value_new (); + op->dst = rz_analysis_value_new (); + op->src[0] = rz_analysis_value_new (); op->src[0]->imm = 4; op->dst->reg = rz_reg_get (reg, regs_x[data & 7], RZ_REG_TYPE_GPR); if ((data & 7) == 6) { @@ -580,10 +580,10 @@ static inline void gb_anal_cb_swap (RzReg *reg, RzAnalOp* op, const ut8 data) } } -static inline void gb_anal_cb_rlc (RzReg *reg, RzAnalOp *op, const ut8 data) +static inline void gb_analysis_cb_rlc (RzReg *reg, RzAnalysisOp *op, const ut8 data) { - op->dst = rz_anal_value_new (); - op->src[0] = rz_anal_value_new (); + op->dst = rz_analysis_value_new (); + op->src[0] = rz_analysis_value_new (); op->src[0]->imm = 1; op->dst->reg = rz_reg_get (reg, regs_x[data & 7], RZ_REG_TYPE_GPR); if ((data & 7) == 6) { @@ -594,10 +594,10 @@ static inline void gb_anal_cb_rlc (RzReg *reg, RzAnalOp *op, const ut8 data) } } -static inline void gb_anal_cb_rl (RzReg *reg, RzAnalOp *op, const ut8 data) +static inline void gb_analysis_cb_rl (RzReg *reg, RzAnalysisOp *op, const ut8 data) { - op->dst = rz_anal_value_new (); - op->src[0] = rz_anal_value_new (); + op->dst = rz_analysis_value_new (); + op->src[0] = rz_analysis_value_new (); op->src[0]->imm = 1; op->dst->reg = rz_reg_get (reg, regs_x[data & 7], RZ_REG_TYPE_GPR); if ((data & 7) == 6) { @@ -608,10 +608,10 @@ static inline void gb_anal_cb_rl (RzReg *reg, RzAnalOp *op, const ut8 data) } } -static inline void gb_anal_cb_rrc (RzReg *reg, RzAnalOp *op, const ut8 data) +static inline void gb_analysis_cb_rrc (RzReg *reg, RzAnalysisOp *op, const ut8 data) { - op->dst = rz_anal_value_new (); - op->src[0] = rz_anal_value_new (); + op->dst = rz_analysis_value_new (); + op->src[0] = rz_analysis_value_new (); op->src[0]->imm = 1; op->dst->reg = rz_reg_get(reg, regs_x[data & 7], RZ_REG_TYPE_GPR); if ((data &7) == 6) { @@ -622,10 +622,10 @@ static inline void gb_anal_cb_rrc (RzReg *reg, RzAnalOp *op, const ut8 data) } } -static inline void gb_anal_cb_rr (RzReg *reg, RzAnalOp *op, const ut8 data) +static inline void gb_analysis_cb_rr (RzReg *reg, RzAnalysisOp *op, const ut8 data) { - op->dst = rz_anal_value_new (); - op->src[0] = rz_anal_value_new (); + op->dst = rz_analysis_value_new (); + op->src[0] = rz_analysis_value_new (); op->src[0]->imm = 1; op->dst->reg = rz_reg_get (reg, regs_x[data & 7], RZ_REG_TYPE_GPR); if ((data & 7) == 6) { @@ -636,10 +636,10 @@ static inline void gb_anal_cb_rr (RzReg *reg, RzAnalOp *op, const ut8 data) } } -static inline void gb_anal_cb_sla (RzReg *reg, RzAnalOp *op, const ut8 data) //sra+sla+srl in one function, like xoaasc +static inline void gb_analysis_cb_sla (RzReg *reg, RzAnalysisOp *op, const ut8 data) //sra+sla+srl in one function, like xoaasc { - op->dst = rz_anal_value_new (); - op->src[0] = rz_anal_value_new (); + op->dst = rz_analysis_value_new (); + op->src[0] = rz_analysis_value_new (); op->src[0]->imm = 1; op->dst->reg = rz_reg_get (reg, regs_x[data & 7], RZ_REG_TYPE_GPR); op->dst->memref = ((data & 7) == 6); @@ -650,9 +650,9 @@ static inline void gb_anal_cb_sla (RzReg *reg, RzAnalOp *op, const ut8 data) } } -static inline void gb_anal_cb_sra (RzReg *reg, RzAnalOp *op, const ut8 data) { - op->dst = rz_anal_value_new (); - op->src[0] = rz_anal_value_new (); +static inline void gb_analysis_cb_sra (RzReg *reg, RzAnalysisOp *op, const ut8 data) { + op->dst = rz_analysis_value_new (); + op->src[0] = rz_analysis_value_new (); op->src[0]->imm = 1; op->dst->reg = rz_reg_get (reg, regs_x[data & 7], RZ_REG_TYPE_GPR); op->dst->memref = ((data & 7) == 6); @@ -663,9 +663,9 @@ static inline void gb_anal_cb_sra (RzReg *reg, RzAnalOp *op, const ut8 data) { } } -static inline void gb_anal_cb_srl (RzReg *reg, RzAnalOp *op, const ut8 data) { - op->dst = rz_anal_value_new (); - op->src[0] = rz_anal_value_new (); +static inline void gb_analysis_cb_srl (RzReg *reg, RzAnalysisOp *op, const ut8 data) { + op->dst = rz_analysis_value_new (); + op->src[0] = rz_analysis_value_new (); op->src[0]->imm = 1; op->dst->reg = rz_reg_get (reg, regs_x[data & 7], RZ_REG_TYPE_GPR); op->dst->memref = ((data & 7) == 6); @@ -676,22 +676,22 @@ static inline void gb_anal_cb_srl (RzReg *reg, RzAnalOp *op, const ut8 data) { } } -static bool gb_custom_daa (RzAnalEsil *esil) { - if (!esil || !esil->anal || !esil->anal->reg) { +static bool gb_custom_daa (RzAnalysisEsil *esil) { + if (!esil || !esil->analysis || !esil->analysis->reg) { return false; } - char *v = rz_anal_esil_pop(esil); + char *v = rz_analysis_esil_pop(esil); ut64 n; - if (!v || !rz_anal_esil_get_parm(esil, v, &n)) { + if (!v || !rz_analysis_esil_get_parm(esil, v, &n)) { return false; } RZ_FREE (v); ut8 val = (ut8)n; - rz_anal_esil_reg_read (esil, "H", &n, NULL); + rz_analysis_esil_reg_read (esil, "H", &n, NULL); const ut8 H = (ut8)n; - rz_anal_esil_reg_read (esil, "C", &n, NULL); + rz_analysis_esil_reg_read (esil, "C", &n, NULL); const ut8 C = (ut8)n; - rz_anal_esil_reg_read (esil, "N", &n, NULL); + rz_analysis_esil_reg_read (esil, "N", &n, NULL); if (n) { if (C) { val = (val - 0x60) & 0xff; @@ -707,10 +707,10 @@ static bool gb_custom_daa (RzAnalEsil *esil) { val += 0x06; }; } - return rz_anal_esil_pushnum(esil, val); + return rz_analysis_esil_pushnum(esil, val); } -static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int len, RzAnalOpMask mask) { +static int gb_anop(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *data, int len, RzAnalysisOpMask mask) { int ilen = gbOpLength (gb_op[data[0]].type); if (ilen > len) { op->type = RZ_ANAL_OP_TYPE_ILL; @@ -763,12 +763,12 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l case 0x11: case 0x21: case 0x31: - gb_anal_mov_imm (anal->reg, op, data); + gb_analysis_mov_imm (analysis->reg, op, data); op->cycles = 12; op->type = RZ_ANAL_OP_TYPE_MOV; break; case 0xf8: - gb_anal_mov_hl_sp (anal->reg, op, data[1]); + gb_analysis_mov_hl_sp (analysis->reg, op, data[1]); op->cycles = 12; op->type = RZ_ANAL_OP_TYPE_MOV; op->type2 = RZ_ANAL_OP_TYPE_ADD; @@ -780,12 +780,12 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l case 0x26: case 0x2e: case 0x3e: - gb_anal_mov_imm (anal->reg, op, data); + gb_analysis_mov_imm (analysis->reg, op, data); op->cycles = 8; op->type = RZ_ANAL_OP_TYPE_MOV; break; case 0xf9: - gb_anal_mov_sp_hl (anal->reg, op); + gb_analysis_mov_sp_hl (analysis->reg, op); op->cycles = 8; op->type = RZ_ANAL_OP_TYPE_MOV; // LD break; @@ -795,7 +795,7 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l case 0x33: op->cycles = 8; op->type = RZ_ANAL_OP_TYPE_ADD; - gb_anal_id (anal, op, data[0]); + gb_analysis_id (analysis, op, data[0]); break; case 0x04: case 0x0c: @@ -806,29 +806,29 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l case 0x3c: op->cycles = 4; op->type = RZ_ANAL_OP_TYPE_ADD; // INC - gb_anal_id (anal, op, data[0]); + gb_analysis_id (analysis, op, data[0]); break; case 0x34: op->cycles = 12; op->type = RZ_ANAL_OP_TYPE_ADD; - gb_anal_id (anal, op, data[0]); + gb_analysis_id (analysis, op, data[0]); break; case 0xea: - meta_gb_bankswitch_cmt (anal, addr, GB_SOFTCAST (data[1], data[2])); - gb_anal_store (anal->reg, op, data); + meta_gb_bankswitch_cmt (analysis, addr, GB_SOFTCAST (data[1], data[2])); + gb_analysis_store (analysis->reg, op, data); op->cycles = 16; op->type = RZ_ANAL_OP_TYPE_STORE; break; case 0x08: - meta_gb_bankswitch_cmt (anal, addr, GB_SOFTCAST (data[1], data[2])); - gb_anal_store (anal->reg, op, data); + meta_gb_bankswitch_cmt (analysis, addr, GB_SOFTCAST (data[1], data[2])); + gb_analysis_store (analysis->reg, op, data); op->cycles = 20; op->type = RZ_ANAL_OP_TYPE_STORE; break; case 0x02: case 0x12: case 0xe2: - gb_anal_store (anal->reg, op, data); + gb_analysis_store (analysis->reg, op, data); op->cycles = 8; op->type = RZ_ANAL_OP_TYPE_STORE; break; @@ -842,12 +842,12 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l case 0x74: case 0x75: case 0x77: - gb_anal_store_hl (anal->reg, op, data); + gb_analysis_store_hl (analysis->reg, op, data); op->cycles = 8; op->type = RZ_ANAL_OP_TYPE_STORE; //LD break; case 0xe0: - gb_anal_store (anal->reg, op, data); + gb_analysis_store (analysis->reg, op, data); op->cycles = 12; op->type = RZ_ANAL_OP_TYPE_STORE; break; @@ -893,14 +893,14 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l case 0x7b: case 0x7c: case 0x7d: - gb_anal_mov_reg (anal->reg, op, data[0]); + gb_analysis_mov_reg (analysis->reg, op, data[0]); op->cycles = 4; op->type = RZ_ANAL_OP_TYPE_MOV; // LD break; case 0x0a: case 0x1a: case 0xf2: - gb_anal_load (anal->reg, op, data); + gb_analysis_load (analysis->reg, op, data); op->cycles = 8; op->type = RZ_ANAL_OP_TYPE_LOAD; break; @@ -913,17 +913,17 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l case 0x66: case 0x6e: case 0x7e: - gb_anal_load_hl (anal->reg, op, data[0]); + gb_analysis_load_hl (analysis->reg, op, data[0]); op->cycles = 8; op->type = RZ_ANAL_OP_TYPE_LOAD; break; case 0xf0: - gb_anal_load (anal->reg, op, data); + gb_analysis_load (analysis->reg, op, data); op->cycles = 12; op->type = RZ_ANAL_OP_TYPE_LOAD; break; case 0xfa: - gb_anal_load (anal->reg, op, data); + gb_analysis_load (analysis->reg, op, data); op->cycles = 16; op->type = RZ_ANAL_OP_TYPE_LOAD; break; @@ -943,30 +943,30 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l case 0x8f: op->cycles = 4; op->type = RZ_ANAL_OP_TYPE_ADD; - gb_anal_xoaasc (anal->reg, op, data); + gb_analysis_xoaasc (analysis->reg, op, data); break; case 0x09: case 0x19: case 0x29: case 0x39: - gb_anal_add_hl (anal->reg, op, data[0]); + gb_analysis_add_hl (analysis->reg, op, data[0]); op->cycles = 8; op->type = RZ_ANAL_OP_TYPE_ADD; break; case 0x86: case 0x8e: op->type = RZ_ANAL_OP_TYPE_ADD; - gb_anal_xoaasc (anal->reg, op, data); + gb_analysis_xoaasc (analysis->reg, op, data); op->cycles = 8; break; case 0xc6: case 0xce: op->cycles = 8; op->type = RZ_ANAL_OP_TYPE_ADD; - gb_anal_xoaasc_imm (anal->reg, op, data); + gb_analysis_xoaasc_imm (analysis->reg, op, data); break; case 0xe8: - gb_anal_add_sp (anal->reg, op, data[1]); + gb_analysis_add_sp (analysis->reg, op, data[1]); op->cycles = 16; op->type = RZ_ANAL_OP_TYPE_ADD; break; @@ -986,19 +986,19 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l case 0x9f: op->cycles = 4; op->type = RZ_ANAL_OP_TYPE_SUB; - gb_anal_xoaasc (anal->reg, op, data); + gb_analysis_xoaasc (analysis->reg, op, data); break; case 0x96: case 0x9e: op->type = RZ_ANAL_OP_TYPE_SUB; - gb_anal_xoaasc (anal->reg, op, data); + gb_analysis_xoaasc (analysis->reg, op, data); op->cycles = 8; break; case 0xd6: case 0xde: op->cycles = 8; op->type = RZ_ANAL_OP_TYPE_SUB; - gb_anal_xoaasc_imm (anal->reg, op, data); + gb_analysis_xoaasc_imm (analysis->reg, op, data); break; case 0xa0: case 0xa1: @@ -1009,45 +1009,45 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l case 0xa7: op->cycles = 4; op->type = RZ_ANAL_OP_TYPE_AND; - gb_anal_xoaasc (anal->reg, op, data); + gb_analysis_xoaasc (analysis->reg, op, data); break; case 0xe6: op->cycles = 8; op->type = RZ_ANAL_OP_TYPE_AND; - gb_anal_xoaasc_imm (anal->reg, op, data); + gb_analysis_xoaasc_imm (analysis->reg, op, data); break; case 0xa6: op->type = RZ_ANAL_OP_TYPE_AND; - gb_anal_xoaasc (anal->reg, op, data); + gb_analysis_xoaasc (analysis->reg, op, data); op->cycles = 8; break; case 0x07: //rlca op->cycles = 4; op->type = RZ_ANAL_OP_TYPE_ROL; - gb_anal_cb_rlc (anal->reg, op, 7); + gb_analysis_cb_rlc (analysis->reg, op, 7); break; case 0x17: //rla op->cycles = 4; op->type = RZ_ANAL_OP_TYPE_ROL; - gb_anal_cb_rl (anal->reg, op, 7); + gb_analysis_cb_rl (analysis->reg, op, 7); break; case 0x0f: //rrca op->cycles = 4; op->type = RZ_ANAL_OP_TYPE_ROR; - gb_anal_cb_rrc (anal->reg, op, 7); + gb_analysis_cb_rrc (analysis->reg, op, 7); break; case 0x1f: //rra op->cycles = 4; op->type = RZ_ANAL_OP_TYPE_ROR; - gb_anal_cb_rr (anal->reg, op, 7); + gb_analysis_cb_rr (analysis->reg, op, 7); break; case 0x2f: - gb_anal_xor_cpl (anal->reg, op); //cpl + gb_analysis_xor_cpl (analysis->reg, op); //cpl op->cycles = 4; op->type = RZ_ANAL_OP_TYPE_XOR; break; case 0x3f: //ccf - gb_anal_xor_ccf (anal->reg, op); + gb_analysis_xor_ccf (analysis->reg, op); op->cycles = 4; op->type = RZ_ANAL_OP_TYPE_XOR; break; @@ -1060,16 +1060,16 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l case 0xaf: op->cycles = 4; op->type = RZ_ANAL_OP_TYPE_XOR; - gb_anal_xoaasc (anal->reg, op, data); + gb_analysis_xoaasc (analysis->reg, op, data); break; case 0xee: op->cycles = 8; op->type = RZ_ANAL_OP_TYPE_XOR; - gb_anal_xoaasc_imm (anal->reg, op, data); + gb_analysis_xoaasc_imm (analysis->reg, op, data); break; case 0xae: op->type = RZ_ANAL_OP_TYPE_XOR; - gb_anal_xoaasc (anal->reg, op, data); + gb_analysis_xoaasc (analysis->reg, op, data); op->cycles = 8; break; case 0xb0: @@ -1081,16 +1081,16 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l case 0xb7: op->cycles = 4; op->type = RZ_ANAL_OP_TYPE_OR; - gb_anal_xoaasc (anal->reg, op, data); + gb_analysis_xoaasc (analysis->reg, op, data); break; case 0xf6: op->cycles = 8; op->type = RZ_ANAL_OP_TYPE_OR; - gb_anal_xoaasc_imm (anal->reg, op, data); + gb_analysis_xoaasc_imm (analysis->reg, op, data); break; case 0xb6: op->type = RZ_ANAL_OP_TYPE_OR; - gb_anal_xoaasc (anal->reg, op, data); + gb_analysis_xoaasc (analysis->reg, op, data); op->cycles = 8; break; case 0xb8: @@ -1102,36 +1102,36 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l case 0xbf: op->cycles = 4; op->type = RZ_ANAL_OP_TYPE_CMP; - gb_anal_xoaasc (anal->reg, op, data); + gb_analysis_xoaasc (analysis->reg, op, data); break; case 0xfe: op->cycles = 8; op->type = RZ_ANAL_OP_TYPE_CMP; - gb_anal_xoaasc_imm (anal->reg, op, data); + gb_analysis_xoaasc_imm (analysis->reg, op, data); break; case 0xbe: op->type = RZ_ANAL_OP_TYPE_CMP; - gb_anal_xoaasc (anal->reg, op, data); + gb_analysis_xoaasc (analysis->reg, op, data); op->cycles = 8; break; case 0xc0: case 0xc8: case 0xd0: case 0xd8: - gb_anal_cond (anal->reg, op, data[0]); - gb_anal_esil_cret (op, data[0]); + gb_analysis_cond (analysis->reg, op, data[0]); + gb_analysis_esil_cret (op, data[0]); op->eob = true; op->cycles = 20; op->failcycles = 8; op->type = RZ_ANAL_OP_TYPE_CRET; break; case 0xd9: - gb_anal_mov_ime (anal->reg, op, data[0]); + gb_analysis_mov_ime (analysis->reg, op, data[0]); op->type2 = RZ_ANAL_OP_TYPE_MOV; case 0xc9: op->eob = true; op->cycles = 16; - gb_anal_esil_ret (op); + gb_analysis_esil_ret (op); op->stackop = RZ_ANAL_STACK_INC; op->stackptr = -2; op->type = RZ_ANAL_OP_TYPE_RET; @@ -1142,7 +1142,7 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l case 0x3b: op->cycles = 8; op->type = RZ_ANAL_OP_TYPE_SUB; - gb_anal_id (anal, op, data[0]); + gb_analysis_id (analysis, op, data[0]); break; case 0x05: case 0x0d: @@ -1153,18 +1153,18 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l case 0x3d: op->cycles = 4; op->type = RZ_ANAL_OP_TYPE_SUB; // DEC - gb_anal_id (anal, op, data[0]); + gb_analysis_id (analysis, op, data[0]); break; case 0x35: op->cycles = 12; op->type = RZ_ANAL_OP_TYPE_SUB; - gb_anal_id (anal, op, data[0]); + gb_analysis_id (analysis, op, data[0]); break; case 0xc5: case 0xd5: case 0xe5: case 0xf5: - gb_anal_pp (anal->reg, op, data[0]); + gb_analysis_pp (analysis->reg, op, data[0]); op->cycles = 16; op->stackop = RZ_ANAL_STACK_INC; op->stackptr = 2; @@ -1174,16 +1174,16 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l case 0xd1: case 0xe1: case 0xf1: - gb_anal_pp (anal->reg, op, data[0]); + gb_analysis_pp (analysis->reg, op, data[0]); op->cycles = 12; op->stackop = RZ_ANAL_STACK_INC; op->stackptr = -2; op->type = RZ_ANAL_OP_TYPE_POP; break; case 0xc3: - if( gb_op_calljump (anal, op, data, addr)) { + if( gb_op_calljump (analysis, op, data, addr)) { op->type = RZ_ANAL_OP_TYPE_JMP; - gb_anal_esil_jmp (op); + gb_analysis_esil_jmp (op); } else { op->type = RZ_ANAL_OP_TYPE_UJMP; } @@ -1194,7 +1194,7 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l case 0x18: // JR op->jump = addr + ilen + (st8)data[1]; op->fail = addr + ilen; - gb_anal_esil_jmp (op); + gb_analysis_esil_jmp (op); op->cycles = 12; op->eob = true; op->type = RZ_ANAL_OP_TYPE_JMP; @@ -1203,10 +1203,10 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l case 0x28: case 0x30: case 0x38: //JR cond - gb_anal_cond (anal->reg, op, data[0]); + gb_analysis_cond (analysis->reg, op, data[0]); op->jump = addr + ilen + (st8)data[1]; op->fail = addr + ilen; - gb_anal_esil_cjmp (op, data[0]); + gb_analysis_esil_cjmp (op, data[0]); op->cycles = 12; op->failcycles = 8; op->eob = true; @@ -1216,14 +1216,14 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l case 0xca: case 0xd2: case 0xda: - if( gb_op_calljump (anal, op, data, addr)) { + if( gb_op_calljump (analysis, op, data, addr)) { op->type = RZ_ANAL_OP_TYPE_CJMP; } else { op->type = RZ_ANAL_OP_TYPE_UCJMP; } op->eob = true; - gb_anal_cond (anal->reg, op, data[0]); - gb_anal_esil_cjmp (op, data[0]); + gb_analysis_cond (analysis->reg, op, data[0]); + gb_analysis_esil_cjmp (op, data[0]); op->cycles = 16; op->failcycles = 12; op->fail = addr+ilen; @@ -1232,7 +1232,7 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l op->cycles = 4; op->eob = true; op->type = RZ_ANAL_OP_TYPE_UJMP; - gb_anal_jmp_hl (anal->reg, op); + gb_analysis_jmp_hl (analysis->reg, op); break; case 0x76: op->type = RZ_ANAL_OP_TYPE_CJMP; @@ -1243,29 +1243,29 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l } break; case 0xcd: - if (gb_op_calljump (anal, op, data, addr)) { + if (gb_op_calljump (analysis, op, data, addr)) { op->type = RZ_ANAL_OP_TYPE_CALL; } else { op->type = RZ_ANAL_OP_TYPE_UCALL; } op->fail = addr + ilen; op->eob = true; - gb_anal_esil_call (op); + gb_analysis_esil_call (op); op->cycles = 24; break; case 0xc4: case 0xcc: case 0xd4: case 0xdc: - gb_anal_cond (anal->reg, op, data[0]); - if (gb_op_calljump (anal, op, data, addr)) { + gb_analysis_cond (analysis->reg, op, data[0]); + if (gb_op_calljump (analysis, op, data, addr)) { op->type = RZ_ANAL_OP_TYPE_CCALL; } else { op->type = RZ_ANAL_OP_TYPE_UCCALL; } op->fail = addr + ilen; op->eob = true; - gb_anal_esil_ccall (op, data[0]); + gb_analysis_esil_ccall (op, data[0]); op->cycles = 24; op->failcycles = 12; break; @@ -1273,7 +1273,7 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l op->jump = 0x00; op->fail = addr + ilen; op->eob = true; - gb_anal_esil_call (op); + gb_analysis_esil_call (op); op->cycles = 16; op->type = RZ_ANAL_OP_TYPE_CALL; break; @@ -1281,7 +1281,7 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l op->jump = 0x08; op->fail = addr + ilen; op->eob = true; - gb_anal_esil_call (op); + gb_analysis_esil_call (op); op->cycles = 16; op->type = RZ_ANAL_OP_TYPE_CALL; break; @@ -1289,7 +1289,7 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l op->jump = 0x10; op->fail = addr + ilen; op->eob = true; - gb_anal_esil_call (op); + gb_analysis_esil_call (op); op->cycles = 16; op->type = RZ_ANAL_OP_TYPE_CALL; break; @@ -1297,7 +1297,7 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l op->jump = 0x18; op->fail = addr + ilen; op->eob = true; - gb_anal_esil_call (op); + gb_analysis_esil_call (op); op->cycles = 16; op->type = RZ_ANAL_OP_TYPE_CALL; break; @@ -1305,7 +1305,7 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l op->jump = 0x20; op->fail = addr + ilen; op->eob = true; - gb_anal_esil_call (op); + gb_analysis_esil_call (op); op->cycles = 16; op->type = RZ_ANAL_OP_TYPE_CALL; break; @@ -1313,7 +1313,7 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l op->jump = 0x28; op->fail = addr + ilen; op->eob = true; - gb_anal_esil_call (op); + gb_analysis_esil_call (op); op->cycles = 16; op->type = RZ_ANAL_OP_TYPE_CALL; break; @@ -1321,7 +1321,7 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l op->jump = 0x30; op->fail = addr + ilen; op->eob = true; - gb_anal_esil_call (op); + gb_analysis_esil_call (op); op->cycles = 16; op->type = RZ_ANAL_OP_TYPE_CALL; break; @@ -1329,18 +1329,18 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l op->jump = 0x38; op->fail = addr + ilen; op->eob = true; - gb_anal_esil_call (op); + gb_analysis_esil_call (op); op->cycles = 16; op->type = RZ_ANAL_OP_TYPE_CALL; break; case 0xf3: //di case 0xfb: //ei - gb_anal_mov_ime (anal->reg, op, data[0]); + gb_analysis_mov_ime (analysis->reg, op, data[0]); op->cycles = 4; op->type = RZ_ANAL_OP_TYPE_MOV; break; case 0x37: - gb_anal_mov_scf (anal->reg, op); + gb_analysis_mov_scf (analysis->reg, op); op->cycles = 4; op->type = RZ_ANAL_OP_TYPE_MOV; break; @@ -1364,7 +1364,7 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l op->cycles = 8; } op->type = RZ_ANAL_OP_TYPE_ROL; - gb_anal_cb_rlc (anal->reg, op, data[1]); + gb_analysis_cb_rlc (analysis->reg, op, data[1]); break; case 1: if ((data[1] & 7) == 6) { @@ -1373,7 +1373,7 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l op->cycles = 8; } op->type = RZ_ANAL_OP_TYPE_ROR; - gb_anal_cb_rrc (anal->reg, op, data[1]); + gb_analysis_cb_rrc (analysis->reg, op, data[1]); break; case 2: if ((data[1] & 7) == 6) { @@ -1382,7 +1382,7 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l op->cycles = 8; } op->type = RZ_ANAL_OP_TYPE_ROL; - gb_anal_cb_rl (anal->reg, op, data[1]); + gb_analysis_cb_rl (analysis->reg, op, data[1]); break; case 3: if ((data[1] & 7) == 6) { @@ -1391,7 +1391,7 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l op->cycles = 8; } op->type = RZ_ANAL_OP_TYPE_ROR; - gb_anal_cb_rr (anal->reg, op, data[1]); + gb_analysis_cb_rr (analysis->reg, op, data[1]); break; case 4: if ((data[1] & 7) == 6) { @@ -1400,7 +1400,7 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l op->cycles = 8; } op->type = RZ_ANAL_OP_TYPE_SAL; - gb_anal_cb_sla (anal->reg, op, data[1]); + gb_analysis_cb_sla (analysis->reg, op, data[1]); break; case 6: if ((data[1] & 7) == 6) { @@ -1409,7 +1409,7 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l op->cycles = 8; } op->type = RZ_ANAL_OP_TYPE_ROL; - gb_anal_cb_swap (anal->reg, op, data[1]); + gb_analysis_cb_swap (analysis->reg, op, data[1]); break; case 5: if ((data[1] & 7) == 6) { @@ -1418,7 +1418,7 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l op->cycles = 8; } op->type = RZ_ANAL_OP_TYPE_SAR; - gb_anal_cb_sra (anal->reg, op, data[1]); + gb_analysis_cb_sra (analysis->reg, op, data[1]); break; case 7: if ((data[1] & 7) == 6) { @@ -1427,7 +1427,7 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l op->cycles = 8; } op->type = RZ_ANAL_OP_TYPE_SHR; - gb_anal_cb_srl (anal->reg, op, data[1]); + gb_analysis_cb_srl (analysis->reg, op, data[1]); break; case 8: case 9: @@ -1443,7 +1443,7 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l op->cycles = 8; } op->type = RZ_ANAL_OP_TYPE_ACMP; - gb_anal_and_bit (anal->reg, op, data[1]); + gb_analysis_and_bit (analysis->reg, op, data[1]); break; //bit case 16: case 17: @@ -1458,7 +1458,7 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l } else { op->cycles = 8; } - gb_anal_and_res (anal, op, data[1]); + gb_analysis_and_res (analysis, op, data[1]); op->type = RZ_ANAL_OP_TYPE_AND; break; //res case 24: @@ -1474,7 +1474,7 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l } else { op->cycles = 8; } - gb_anal_or_set (anal, op, data[1]); + gb_analysis_or_set (analysis, op, data[1]); op->type = RZ_ANAL_OP_TYPE_OR; break; //set } @@ -1494,7 +1494,7 @@ static int gb_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l the mbc can be seen as a register but it isn't. For the Gameboy the mbc is invisble. */ -static bool set_reg_profile(RzAnal *anal) { +static bool set_reg_profile(RzAnalysis *analysis) { const char *p = "=PC mpc\n" "=SP sp\n" @@ -1533,25 +1533,25 @@ static bool set_reg_profile(RzAnal *anal) { "gpr mbcram .16 16 0\n" "gpr ime .1 18 0\n"; - return rz_reg_set_profile_string (anal->reg, p); + return rz_reg_set_profile_string (analysis->reg, p); } -static int esil_gb_init (RzAnalEsil *esil) { +static int esil_gb_init (RzAnalysisEsil *esil) { GBUser *user = RZ_NEW0 (GBUser); - rz_anal_esil_set_op (esil, "daa", gb_custom_daa, 1, 1, RZ_ANAL_ESIL_OP_TYPE_MATH | RZ_ANAL_ESIL_OP_TYPE_CUSTOM); + rz_analysis_esil_set_op (esil, "daa", gb_custom_daa, 1, 1, RZ_ANAL_ESIL_OP_TYPE_MATH | RZ_ANAL_ESIL_OP_TYPE_CUSTOM); if (user) { - if (esil->anal) { - esil->anal->iob.read_at (esil->anal->iob.io, 0x147, &user->mbc_id, 1); - esil->anal->iob.read_at (esil->anal->iob.io, 0x148, &user->romsz_id, 1); - esil->anal->iob.read_at (esil->anal->iob.io, 0x149, &user->ramsz_id, 1); - if (esil->anal->reg) { //initial values - rz_reg_set_value (esil->anal->reg, rz_reg_get (esil->anal->reg, "mpc", -1), 0x100); - rz_reg_set_value (esil->anal->reg, rz_reg_get (esil->anal->reg, "sp", -1), 0xfffe); - rz_reg_set_value (esil->anal->reg, rz_reg_get (esil->anal->reg, "af", -1), 0x01b0); - rz_reg_set_value (esil->anal->reg, rz_reg_get (esil->anal->reg, "bc", -1), 0x0013); - rz_reg_set_value (esil->anal->reg, rz_reg_get (esil->anal->reg, "de", -1), 0x00d8); - rz_reg_set_value (esil->anal->reg, rz_reg_get (esil->anal->reg, "hl", -1), 0x014d); - rz_reg_set_value (esil->anal->reg, rz_reg_get (esil->anal->reg, "ime", -1), true); + if (esil->analysis) { + esil->analysis->iob.read_at (esil->analysis->iob.io, 0x147, &user->mbc_id, 1); + esil->analysis->iob.read_at (esil->analysis->iob.io, 0x148, &user->romsz_id, 1); + esil->analysis->iob.read_at (esil->analysis->iob.io, 0x149, &user->ramsz_id, 1); + if (esil->analysis->reg) { //initial values + rz_reg_set_value (esil->analysis->reg, rz_reg_get (esil->analysis->reg, "mpc", -1), 0x100); + rz_reg_set_value (esil->analysis->reg, rz_reg_get (esil->analysis->reg, "sp", -1), 0xfffe); + rz_reg_set_value (esil->analysis->reg, rz_reg_get (esil->analysis->reg, "af", -1), 0x01b0); + rz_reg_set_value (esil->analysis->reg, rz_reg_get (esil->analysis->reg, "bc", -1), 0x0013); + rz_reg_set_value (esil->analysis->reg, rz_reg_get (esil->analysis->reg, "de", -1), 0x00d8); + rz_reg_set_value (esil->analysis->reg, rz_reg_get (esil->analysis->reg, "hl", -1), 0x014d); + rz_reg_set_value (esil->analysis->reg, rz_reg_get (esil->analysis->reg, "ime", -1), true); } } esil->cb.user = user; @@ -1559,12 +1559,12 @@ static int esil_gb_init (RzAnalEsil *esil) { return true; } -static int esil_gb_fini (RzAnalEsil *esil) { +static int esil_gb_fini (RzAnalysisEsil *esil) { RZ_FREE (esil->cb.user); return true; } -RzAnalPlugin rz_anal_plugin_gb = { +RzAnalysisPlugin rz_analysis_plugin_gb = { .name = "gb", .desc = "Gameboy CPU code analysis plugin", .license = "LGPL3", @@ -1580,7 +1580,7 @@ RzAnalPlugin rz_anal_plugin_gb = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_gb, + .data = &rz_analysis_plugin_gb, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_h8300.c b/librz/analysis/p/analysis_h8300.c similarity index 95% rename from librz/anal/p/anal_h8300.c rename to librz/analysis/p/analysis_h8300.c index e5efc0cd99..b05b55262f 100644 --- a/librz/anal/p/anal_h8300.c +++ b/librz/analysis/p/analysis_h8300.c @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include @@ -44,7 +44,7 @@ https://www.classes.cs.uchicago.edu/archive/2006/winter/23000-1/docs/h8300.pdf */ -static void h8300_anal_jmp(RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void h8300_analysis_jmp(RzAnalysisOp *op, ut64 addr, const ut8 *buf) { ut16 ad; switch (buf[0]) { @@ -63,7 +63,7 @@ static void h8300_anal_jmp(RzAnalOp *op, ut64 addr, const ut8 *buf) { } } -static void h8300_anal_jsr(RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void h8300_analysis_jsr(RzAnalysisOp *op, ut64 addr, const ut8 *buf) { ut16 ad; switch (buf[0]) { @@ -83,7 +83,7 @@ static void h8300_anal_jsr(RzAnalOp *op, ut64 addr, const ut8 *buf) { } } -static int analop_esil(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static int analop_esil(RzAnalysis *a, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { int ret = -1; ut8 opcode = buf[0]; if (!op) { @@ -536,8 +536,8 @@ static int analop_esil(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf) { return ret; } -static int h8300_op(RzAnal *anal, RzAnalOp *op, ut64 addr, - const ut8 *buf, int len, RzAnalOpMask mask) +static int h8300_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, + const ut8 *buf, int len, RzAnalysisOpMask mask) { int ret; ut8 opcode = buf[0]; @@ -581,7 +581,7 @@ static int h8300_op(RzAnal *anal, RzAnalOp *op, ut64 addr, }; if (op->type != RZ_ANAL_OP_TYPE_UNK) { - analop_esil(anal, op, addr, buf); + analop_esil(analysis, op, addr, buf); return ret; } switch (opcode) { @@ -642,12 +642,12 @@ static int h8300_op(RzAnal *anal, RzAnalOp *op, ut64 addr, case H8300_JSR_1: case H8300_JSR_2: case H8300_JSR_3: - h8300_anal_jsr(op, addr, buf); + h8300_analysis_jsr(op, addr, buf); break; case H8300_JMP_1: case H8300_JMP_2: case H8300_JMP_3: - h8300_anal_jmp(op, addr, buf); + h8300_analysis_jmp(op, addr, buf); break; case H8300_BRA: case H8300_BRN: @@ -674,12 +674,12 @@ static int h8300_op(RzAnal *anal, RzAnalOp *op, ut64 addr, break; }; if (mask & RZ_ANAL_OP_MASK_ESIL) { - analop_esil(anal, op, addr, buf); + analop_esil(analysis, op, addr, buf); } return ret; } -static bool set_reg_profile(RzAnal *anal) { +static bool set_reg_profile(RzAnalysis *analysis) { char *p = "=PC pc\n" "=SP r7\n" @@ -718,10 +718,10 @@ static bool set_reg_profile(RzAnal *anal) { "gpr Z .1 .146 0\n" "gpr V .1 .145 0\n" "gpr C .1 .144 0\n"; - return rz_reg_set_profile_string (anal->reg, p); + return rz_reg_set_profile_string (analysis->reg, p); } -RzAnalPlugin rz_anal_plugin_h8300 = { +RzAnalysisPlugin rz_analysis_plugin_h8300 = { .name = "h8300", .desc = "H8300 code analysis plugin", .license = "LGPL3", @@ -735,7 +735,7 @@ RzAnalPlugin rz_anal_plugin_h8300 = { #ifndef RZ_PLUGIN_INCORE struct rz_lib_struct_t rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_h8300, + .data = &rz_analysis_plugin_h8300, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_hexagon.c b/librz/analysis/p/analysis_hexagon.c similarity index 83% rename from librz/anal/p/anal_hexagon.c rename to librz/analysis/p/analysis_hexagon.c index d7e80fbf69..0ec3c5fc2e 100644 --- a/librz/anal/p/anal_hexagon.c +++ b/librz/analysis/p/analysis_hexagon.c @@ -3,13 +3,13 @@ #include #include #include -#include +#include #include #include "hexagon.h" #include "hexagon_insn.h" #include "hexagon_anal.h" -static int hexagon_v6_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, RzAnalOpMask mask) { +static int hexagon_v6_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, RzAnalysisOpMask mask) { HexInsn hi = {0};; ut32 data = 0; data = rz_read_le32 (buf); @@ -20,10 +20,10 @@ static int hexagon_v6_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, } op->addr = addr; - return hexagon_anal_instruction (&hi, op); + return hexagon_analysis_instruction (&hi, op); } -static bool set_reg_profile(RzAnal *anal) { +static bool set_reg_profile(RzAnalysis *analysis) { // TODO: Add missing registers const char *p = "=PC pc\n" @@ -86,10 +86,10 @@ static bool set_reg_profile(RzAnal *anal) { "flg s .1 132.30 0\n" "flg z .1 132.31 0\n"; - return rz_reg_set_profile_string (anal->reg, p); + return rz_reg_set_profile_string (analysis->reg, p); } -RzAnalPlugin rz_anal_plugin_hexagon = { +RzAnalysisPlugin rz_analysis_plugin_hexagon = { .name = "hexagon", .desc = "Qualcomm Hexagon (QDSP6) V6", .license = "LGPL3", @@ -103,7 +103,7 @@ RzAnalPlugin rz_anal_plugin_hexagon = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_hexagon_v6, + .data = &rz_analysis_plugin_hexagon_v6, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_i4004.c b/librz/analysis/p/analysis_i4004.c similarity index 92% rename from librz/anal/p/anal_i4004.c rename to librz/analysis/p/analysis_i4004.c index 25bd096f00..538dd33404 100644 --- a/librz/anal/p/anal_i4004.c +++ b/librz/analysis/p/analysis_i4004.c @@ -5,11 +5,11 @@ #include #include #include -#include +#include #define AVR_SOFTCAST(x,y) ((x)+((y)*0x100)) -static bool set_reg_profile(RzAnal *anal) { +static bool set_reg_profile(RzAnalysis *analysis) { const char *p = "=PC PC\n" /* syntax not yet supported */ @@ -42,7 +42,7 @@ static bool set_reg_profile(RzAnal *anal) { "gpr PC3 .64 34 0\n" ; - return rz_reg_set_profile_string (anal->reg, p); + return rz_reg_set_profile_string (analysis->reg, p); } /* That 3 is a hack */ @@ -97,7 +97,7 @@ static int i4004_get_ins_len (ut8 hex) { return ret; } -static int i4004_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, RzAnalOpMask mask) { +static int i4004_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, RzAnalysisOpMask mask) { char basm[128]; const size_t basz = sizeof (basm)-1; int rlen = i4004_get_ins_len (*buf); @@ -201,7 +201,7 @@ static int i4004_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int l return op->size = rlen; } -RzAnalPlugin rz_anal_plugin_i4004 = { +RzAnalysisPlugin rz_analysis_plugin_i4004 = { .name = "i4004", .desc = "i4004 code analysis plugin", .license = "LGPL3", @@ -215,7 +215,7 @@ RzAnalPlugin rz_anal_plugin_i4004 = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_i4004, + .data = &rz_analysis_plugin_i4004, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_i8080.c b/librz/analysis/p/analysis_i8080.c similarity index 93% rename from librz/anal/p/anal_i8080.c rename to librz/analysis/p/analysis_i8080.c index 054332c76d..5687352d32 100644 --- a/librz/anal/p/anal_i8080.c +++ b/librz/analysis/p/analysis_i8080.c @@ -7,11 +7,11 @@ #include #include #include -#include +#include // hack #include "../../asm/arch/i8080/i8080dis.c" -static int i8080_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int len, RzAnalOpMask mask) { +static int i8080_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *data, int len, RzAnalysisOpMask mask) { char out[32]; int ilen = i8080_disasm (data, out, len); op->addr = addr; @@ -187,7 +187,7 @@ static int i8080_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int return op->size = ilen; } -RzAnalPlugin rz_anal_plugin_i8080 = { +RzAnalysisPlugin rz_analysis_plugin_i8080 = { .name = "i8080", .desc = "I8080 CPU code analysis plugin", .license = "LGPL3", @@ -199,7 +199,7 @@ RzAnalPlugin rz_anal_plugin_i8080 = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_i8080, + .data = &rz_analysis_plugin_i8080, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_java.c b/librz/analysis/p/analysis_java.c similarity index 83% rename from librz/anal/p/anal_java.c rename to librz/analysis/p/analysis_java.c index 49c0e0f3a5..52219fb457 100644 --- a/librz/anal/p/anal_java.c +++ b/librz/analysis/p/analysis_java.c @@ -4,7 +4,7 @@ #include #include -#include +#include #include "../../../shlr/java/ops.h" #include "../../../shlr/java/code.h" @@ -20,16 +20,16 @@ ut64 METHOD_START = 0; -static void java_update_anal_types (RzAnal *anal, RzBinJavaObj *bin_obj); +static void java_update_analysis_types (RzAnalysis *analysis, RzBinJavaObj *bin_obj); -static int java_cmd_ext(RzAnal *anal, const char* input); +static int java_cmd_ext(RzAnalysis *analysis, const char* input); -static int java_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int len, RzAnalOpMask mask); +static int java_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *data, int len, RzAnalysisOpMask mask); -static RzBinJavaObj * get_java_bin_obj(RzAnal *anal); +static RzBinJavaObj * get_java_bin_obj(RzAnalysis *analysis); -static RzBinJavaObj * get_java_bin_obj(RzAnal *anal) { - RzBin *b = anal->binb.bin; +static RzBinJavaObj * get_java_bin_obj(RzAnalysis *analysis) { + RzBin *b = analysis->binb.bin; RzBinPlugin *plugin = b->cur && b->cur->o ? b->cur->o->plugin : NULL; ut8 is_java = (plugin && strcmp (plugin->name, "java") == 0) ? 1 : 0; return is_java ? b->cur->o->bin_obj : NULL; @@ -39,7 +39,7 @@ static ut64 java_get_method_start(void) { return METHOD_START; } -static int java_switch_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int len) { +static int java_switch_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *data, int len) { ut8 op_byte = data[0]; ut64 offset = addr - java_get_method_start (); ut8 pos = (offset + 1)%4 ? 1 + 4 - (offset+1)%4 : 1; @@ -53,10 +53,10 @@ static int java_switch_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data const int max_val = (ut32)(UINT (data, pos + 8)); ut32 default_loc = (ut32) (UINT (data, pos)), cur_case = 0; - op->switch_op = rz_anal_switch_op_new (addr, min_val, max_val, default_loc); + op->switch_op = rz_analysis_switch_op_new (addr, min_val, max_val, default_loc); pos += 12; if (max_val > min_val && ((max_val - min_val)<(UT16_MAX/4))) { - //caseop = rz_anal_switch_op_add_case(op->switch_op, addr+default_loc, -1, addr+offset); + //caseop = rz_analysis_switch_op_add_case(op->switch_op, addr+default_loc, -1, addr+offset); for (cur_case = 0; cur_case <= max_val - min_val; pos += 4, cur_case++) { //ut32 value = (ut32)(UINT (data, pos)); if (pos + 4 >= len) { @@ -64,7 +64,7 @@ static int java_switch_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data break; } int offset = (int)(ut32)(RZ_BIN_JAVA_UINT (data, pos)); - rz_anal_switch_op_add_case (op->switch_op, addr + pos, cur_case + min_val, addr + offset); + rz_analysis_switch_op_add_case (op->switch_op, addr + pos, cur_case + min_val, addr + offset); } } else { eprintf ("Invalid switch boundaries at 0x%"PFMT64x"\n", addr); @@ -147,7 +147,7 @@ ut64 extract_load_store_op(ut64 ranal2_op_type) { return RZ_ANAL_OP_TYPE_UNK; } -static ut64 map_java_op_to_anal_op_type (ut64 t) { +static ut64 map_java_op_to_analysis_op_type (ut64 t) { ut64 t2 = extract_bin_op(t); if (t2 != RZ_ANAL_OP_TYPE_UNK) { return t2; @@ -171,7 +171,7 @@ static ut64 map_java_op_to_anal_op_type (ut64 t) { return extract_code_op (t); } if (t & RZ_ANAL_JAVA_REP_OP) { - ut64 ret = map_java_op_to_anal_op_type (t & ~RZ_ANAL_JAVA_REP_OP); + ut64 ret = map_java_op_to_analysis_op_type (t & ~RZ_ANAL_JAVA_REP_OP); return RZ_ANAL_OP_TYPE_REP | ret; } if (t & (RZ_ANAL_JAVA_LOAD_OP | RZ_ANAL_JAVA_STORE_OP)) { @@ -188,7 +188,7 @@ static ut64 map_java_op_to_anal_op_type (ut64 t) { return RZ_ANAL_OP_TYPE_UNK; } -static int rz_anal_java_is_op_type_eop(ut64 x) { +static int rz_analysis_java_is_op_type_eop(ut64 x) { ut8 result = (x & RZ_ANAL_JAVA_CODE_OP) ? 1 : 0; return result && ( (x & RZ_ANAL_JAVA_CODEOP_LEAVE) == RZ_ANAL_JAVA_CODEOP_LEAVE || @@ -198,7 +198,7 @@ static int rz_anal_java_is_op_type_eop(ut64 x) { } -static int java_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int len, RzAnalOpMask mask) { +static int java_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *data, int len, RzAnalysisOpMask mask) { /* get opcode size */ if (len < 1) { op->type = RZ_ANAL_OP_TYPE_ILL; @@ -219,10 +219,10 @@ static int java_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l op->size = sz; op->id = data[0]; op->type2 = JAVA_OPS[op_byte].op_type; - op->type = map_java_op_to_anal_op_type (op->type2); + op->type = map_java_op_to_analysis_op_type (op->type2); // handle lookup and table switch offsets if (op_byte == 0xaa || op_byte == 0xab) { - java_switch_op (anal, op, addr, data, len); + java_switch_op (analysis, op, addr, data, len); // IN_SWITCH_OP = 1; } /* TODO: @@ -243,9 +243,9 @@ static int java_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l } */ - op->eob = rz_anal_java_is_op_type_eop (op->type2); + op->eob = rz_analysis_java_is_op_type_eop (op->type2); IFDBG { - const char *ot_str = rz_anal_optype_to_string (op->type); + const char *ot_str = rz_analysis_optype_to_string (op->type); eprintf ("op_type2: %s @ 0x%04"PFMT64x" 0x%08"PFMT64x" op_type: (0x%02"PFMT64x") %s.\n", JAVA_OPS[op_byte].name, addr, (ut64)op->type2, (ut64)op->type, ot_str); //eprintf ("op_eob: 0x%02x.\n", op->eob); @@ -285,8 +285,8 @@ static int java_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l } -static void java_update_anal_types (RzAnal *anal, RzBinJavaObj *bin_obj) { - Sdb *D = anal->sdb_types; +static void java_update_analysis_types (RzAnalysis *analysis, RzBinJavaObj *bin_obj) { + Sdb *D = analysis->sdb_types; if (D && bin_obj) { RzListIter *iter; char *str; @@ -303,8 +303,8 @@ static void java_update_anal_types (RzAnal *anal, RzBinJavaObj *bin_obj) { } } -static int java_cmd_ext(RzAnal *anal, const char* input) { - RzBinJavaObj *obj = (RzBinJavaObj *) get_java_bin_obj (anal); +static int java_cmd_ext(RzAnalysis *analysis, const char* input) { + RzBinJavaObj *obj = (RzBinJavaObj *) get_java_bin_obj (analysis); if (!obj) { eprintf ("Execute \"af\" to set the current bin, and this will bind the current bin\n"); @@ -317,13 +317,13 @@ static int java_cmd_ext(RzAnal *anal, const char* input) { break; case 'u': switch (*(input+1)) { - case 't': {java_update_anal_types (anal, obj); return true;} + case 't': {java_update_analysis_types (analysis, obj); return true;} default: break; } break; case 's': switch (*(input+1)) { - //case 'e': return java_resolve_cp_idx_b64 (anal, input+2); + //case 'e': return java_resolve_cp_idx_b64 (analysis, input+2); default: break; } break; @@ -333,7 +333,7 @@ static int java_cmd_ext(RzAnal *anal, const char* input) { return 0; } -RzAnalPlugin rz_anal_plugin_java = { +RzAnalysisPlugin rz_analysis_plugin_java = { .name = "java", .desc = "Java bytecode analysis plugin", .license = "Apache", @@ -347,7 +347,7 @@ RzAnalPlugin rz_anal_plugin_java = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_java, + .data = &rz_analysis_plugin_java, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_m680x_cs.c b/librz/analysis/p/analysis_m680x_cs.c similarity index 97% rename from librz/anal/p/anal_m680x_cs.c rename to librz/analysis/p/analysis_m680x_cs.c index 39c2abaff8..52f532a17e 100644 --- a/librz/anal/p/anal_m680x_cs.c +++ b/librz/analysis/p/analysis_m680x_cs.c @@ -59,7 +59,7 @@ static int m680xmode(const char *str) { #define IMM(x) insn->detail->m680x.operands[x].imm #define REL(x) insn->detail->m680x.operands[x].rel -static int analop(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, RzAnalOpMask mask) { +static int analop(RzAnalysis *a, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, RzAnalysisOpMask mask) { int n, ret, opsize = -1; static csh handle = 0; static int omode = -1; @@ -515,7 +515,7 @@ fin: } // XXX -static bool set_reg_profile(RzAnal *anal) { +static bool set_reg_profile(RzAnalysis *analysis) { const char *p = \ "=PC pc\n" "=SP sp\n" @@ -525,10 +525,10 @@ static bool set_reg_profile(RzAnal *anal) { "gpr sp .16 48 0\n" "gpr a0 .16 48 0\n" "gpr a1 .16 48 0\n"; - return rz_reg_set_profile_string (anal->reg, p); + return rz_reg_set_profile_string (analysis->reg, p); } -RzAnalPlugin rz_anal_plugin_m680x_cs = { +RzAnalysisPlugin rz_analysis_plugin_m680x_cs = { .name = "m680x", .desc = "Capstone M680X analysis plugin", .license = "BSD", @@ -539,7 +539,7 @@ RzAnalPlugin rz_anal_plugin_m680x_cs = { .op = &analop, }; #else -RzAnalPlugin rz_anal_plugin_m680x_cs = { +RzAnalysisPlugin rz_analysis_plugin_m680x_cs = { .name = "m680x (unsupported)", .desc = "Capstone M680X analyzer (unsupported)", .license = "BSD", @@ -551,7 +551,7 @@ RzAnalPlugin rz_anal_plugin_m680x_cs = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_m680x_cs, + .data = &rz_analysis_plugin_m680x_cs, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_m68k_cs.c b/librz/analysis/p/analysis_m68k_cs.c similarity index 96% rename from librz/anal/p/anal_m68k_cs.c rename to librz/analysis/p/analysis_m68k_cs.c index 63f41d490d..042f914e80 100644 --- a/librz/anal/p/anal_m68k_cs.c +++ b/librz/analysis/p/analysis_m68k_cs.c @@ -30,7 +30,7 @@ static inline ut64 make_64bits_address(ut64 address) { return UT32_MAX & address; } -static inline void handle_branch_instruction(RzAnalOp *op, ut64 addr, cs_m68k *m68k, ut32 type, int index) { +static inline void handle_branch_instruction(RzAnalysisOp *op, ut64 addr, cs_m68k *m68k, ut32 type, int index) { #if CS_API_MAJOR >= 4 if (m68k->operands[index].type == M68K_OP_BR_DISP) { op->type = type; @@ -46,7 +46,7 @@ static inline void handle_branch_instruction(RzAnalOp *op, ut64 addr, cs_m68k *m #endif } -static inline void handle_jump_instruction(RzAnalOp *op, ut64 addr, cs_m68k *m68k, ut32 type) { +static inline void handle_jump_instruction(RzAnalysisOp *op, ut64 addr, cs_m68k *m68k, ut32 type) { op->type = type; // Handle PC relative mode jump @@ -128,18 +128,18 @@ static int parse_reg_name(RzRegItem *reg, csh handle, cs_insn *insn, int reg_num return 0; } -static void op_fillval(RzAnalOp *op, csh handle, cs_insn *insn) { +static void op_fillval(RzAnalysisOp *op, csh handle, cs_insn *insn) { static RzRegItem reg; switch (op->type & RZ_ANAL_OP_TYPE_MASK) { case RZ_ANAL_OP_TYPE_MOV: ZERO_FILL (reg); if (OPERAND(1).type == M68K_OP_MEM) { - op->src[0] = rz_anal_value_new (); + op->src[0] = rz_analysis_value_new (); op->src[0]->reg = ® parse_reg_name (op->src[0]->reg, handle, insn, 1); op->src[0]->delta = OPERAND(0).mem.disp; } else if (OPERAND(0).type == M68K_OP_MEM) { - op->dst = rz_anal_value_new (); + op->dst = rz_analysis_value_new (); op->dst->reg = ® parse_reg_name (op->dst->reg, handle, insn, 0); op->dst->delta = OPERAND(1).mem.disp; @@ -148,7 +148,7 @@ static void op_fillval(RzAnalOp *op, csh handle, cs_insn *insn) { case RZ_ANAL_OP_TYPE_LEA: ZERO_FILL (reg); if (OPERAND(1).type == M68K_OP_MEM) { - op->dst = rz_anal_value_new (); + op->dst = rz_analysis_value_new (); op->dst->reg = ® parse_reg_name (op->dst->reg, handle, insn, 1); op->dst->delta = OPERAND(1).mem.disp; @@ -157,7 +157,7 @@ static void op_fillval(RzAnalOp *op, csh handle, cs_insn *insn) { } } -static int analop(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, RzAnalOpMask mask) { +static int analop(RzAnalysis *a, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, RzAnalysisOpMask mask) { int n, ret, opsize = -1; static csh handle = 0; static int omode = -1; @@ -702,7 +702,7 @@ fin: return opsize; } -static bool set_reg_profile(RzAnal *anal) { +static bool set_reg_profile(RzAnalysis *analysis) { const char *p = \ "=PC pc\n" "=SP a7\n" @@ -757,10 +757,10 @@ static bool set_reg_profile(RzAnal *anal) { "gpr fpcr .32 176 0\n" "gpr fpsr .32 180 0\n" "gpr fpiar .32 184 0\n"; - return rz_reg_set_profile_string (anal->reg, p); + return rz_reg_set_profile_string (analysis->reg, p); } -RzAnalPlugin rz_anal_plugin_m68k_cs = { +RzAnalysisPlugin rz_analysis_plugin_m68k_cs = { .name = "m68k", .desc = "Capstone M68K analyzer", .license = "BSD", @@ -771,7 +771,7 @@ RzAnalPlugin rz_anal_plugin_m68k_cs = { .op = &analop, }; #else -RzAnalPlugin rz_anal_plugin_m68k_cs = { +RzAnalysisPlugin rz_analysis_plugin_m68k_cs = { .name = "m68k (unsupported)", .desc = "Capstone M68K analyzer (unsupported)", .license = "BSD", @@ -783,7 +783,7 @@ RzAnalPlugin rz_anal_plugin_m68k_cs = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_m68k_cs, + .data = &rz_analysis_plugin_m68k_cs, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_malbolge.c b/librz/analysis/p/analysis_malbolge.c similarity index 77% rename from librz/anal/p/anal_malbolge.c rename to librz/analysis/p/analysis_malbolge.c index c1a7cd634b..51876b4131 100644 --- a/librz/anal/p/anal_malbolge.c +++ b/librz/analysis/p/analysis_malbolge.c @@ -1,10 +1,10 @@ // SPDX-License-Identifier: LGPL-3.0-only -#include +#include #include #include -static int mal_anal(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int len, RzAnalOpMask mask) { +static int mal_analysis(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *data, int len, RzAnalysisOpMask mask) { if (len) { switch ((data[0] + addr) % 94) { case 4: @@ -36,19 +36,19 @@ static int mal_anal(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int return false; } -RzAnalPlugin rz_anal_plugin_malbolge = { +RzAnalysisPlugin rz_analysis_plugin_malbolge = { .name = "malbolge", .desc = "Malbolge analysis plugin", .arch = "malbolge", .license = "LGPL3", .bits = 32, - .op = &mal_anal, + .op = &mal_analysis, }; #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_malbolge, + .data = &rz_analysis_plugin_malbolge, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_mcore.c b/librz/analysis/p/analysis_mcore.c similarity index 86% rename from librz/anal/p/anal_mcore.c rename to librz/analysis/p/analysis_mcore.c index 14e312b4d7..771c39c5e7 100644 --- a/librz/anal/p/anal_mcore.c +++ b/librz/analysis/p/analysis_mcore.c @@ -1,11 +1,11 @@ // SPDX-License-Identifier: LGPL-3.0-only -#include +#include #include #include #include "../../asm/arch/mcore/mcore.h" -static int mcore_anal(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, RzAnalOpMask mask) { +static int mcore_analysis(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, RzAnalysisOpMask mask) { mcore_handle handle = {0}; mcore_t* instr = NULL; @@ -43,7 +43,7 @@ static int mcore_anal(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int return op->size; } -static bool set_reg_profile(RzAnal *anal) { +static bool set_reg_profile(RzAnalysis *analysis) { const char *p = \ "=PC pc\n" "=SP r1\n" @@ -106,20 +106,20 @@ static bool set_reg_profile(RzAnal *anal) { "gpr cr30 .32 184 0\n" "gpr cr31 .32 188 0\n" "gpr pc .32 192 0\n"; - return rz_reg_set_profile_string (anal->reg, p); + return rz_reg_set_profile_string (analysis->reg, p); } -static int archinfo(RzAnal *anal, int q) { +static int archinfo(RzAnalysis *analysis, int q) { return 2; } -RzAnalPlugin rz_anal_plugin_mcore = { +RzAnalysisPlugin rz_analysis_plugin_mcore = { .name = "mcore", .desc = "MCore analysis plugin", .arch = "mcore", .license = "LGPL3", .bits = 32, - .op = &mcore_anal, + .op = &mcore_analysis, .archinfo = archinfo, .set_reg_profile = &set_reg_profile, }; @@ -127,7 +127,7 @@ RzAnalPlugin rz_anal_plugin_mcore = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_mcore, + .data = &rz_analysis_plugin_mcore, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_mips_cs.c b/librz/analysis/p/analysis_mips_cs.c similarity index 92% rename from librz/anal/p/anal_mips_cs.c rename to librz/analysis/p/analysis_mips_cs.c index 45ed5480e9..6d688978d1 100644 --- a/librz/anal/p/anal_mips_cs.c +++ b/librz/analysis/p/analysis_mips_cs.c @@ -24,30 +24,30 @@ static ut64 t9_pre = UT64_MAX; } #define CREATE_SRC_DST_3(op) \ - (op)->src[0] = rz_anal_value_new ();\ - (op)->src[1] = rz_anal_value_new ();\ - (op)->dst = rz_anal_value_new (); + (op)->src[0] = rz_analysis_value_new ();\ + (op)->src[1] = rz_analysis_value_new ();\ + (op)->dst = rz_analysis_value_new (); #define CREATE_SRC_DST_2(op) \ - (op)->src[0] = rz_anal_value_new ();\ - (op)->dst = rz_anal_value_new (); + (op)->src[0] = rz_analysis_value_new ();\ + (op)->dst = rz_analysis_value_new (); #define SET_SRC_DST_3_REGS(op) \ CREATE_SRC_DST_3 (op);\ - (op)->dst->reg = rz_reg_get (anal->reg, REG (0), RZ_REG_TYPE_GPR);\ - (op)->src[0]->reg = rz_reg_get (anal->reg, REG (1), RZ_REG_TYPE_GPR);\ - (op)->src[1]->reg = rz_reg_get (anal->reg, REG (2), RZ_REG_TYPE_GPR); + (op)->dst->reg = rz_reg_get (analysis->reg, REG (0), RZ_REG_TYPE_GPR);\ + (op)->src[0]->reg = rz_reg_get (analysis->reg, REG (1), RZ_REG_TYPE_GPR);\ + (op)->src[1]->reg = rz_reg_get (analysis->reg, REG (2), RZ_REG_TYPE_GPR); #define SET_SRC_DST_3_IMM(op) \ CREATE_SRC_DST_3 (op);\ - (op)->dst->reg = rz_reg_get (anal->reg, REG (0), RZ_REG_TYPE_GPR);\ - (op)->src[0]->reg = rz_reg_get (anal->reg, REG (1), RZ_REG_TYPE_GPR);\ + (op)->dst->reg = rz_reg_get (analysis->reg, REG (0), RZ_REG_TYPE_GPR);\ + (op)->src[0]->reg = rz_reg_get (analysis->reg, REG (1), RZ_REG_TYPE_GPR);\ (op)->src[1]->imm = IMM (2); #define SET_SRC_DST_2_REGS(op) \ CREATE_SRC_DST_2 (op);\ - (op)->dst->reg = rz_reg_get (anal->reg, REG (0), RZ_REG_TYPE_GPR);\ - (op)->src[0]->reg = rz_reg_get (anal->reg, REG (1), RZ_REG_TYPE_GPR); + (op)->dst->reg = rz_reg_get (analysis->reg, REG (0), RZ_REG_TYPE_GPR);\ + (op)->src[0]->reg = rz_reg_get (analysis->reg, REG (1), RZ_REG_TYPE_GPR); #define SET_SRC_DST_3_REG_OR_IMM(op) \ if (OPERAND(2).type == MIPS_OP_IMM) {\ @@ -93,7 +93,7 @@ static ut64 t9_pre = UT64_MAX; #define ES_ADD_CK32_OVERF(x, y, z) es_add_ck (op, x, y, z, 32) #define ES_ADD_CK64_OVERF(x, y, z) es_add_ck (op, x, y, z, 64) -static inline void es_sign_n_64(RzAnal *a, RzAnalOp *op, const char *arg, int bit) +static inline void es_sign_n_64(RzAnalysis *a, RzAnalysisOp *op, const char *arg, int bit) { if (a->bits == 64) { rz_strbuf_appendf (&op->esil, ",%d,%s,~,%s,=,", bit, arg, arg); @@ -102,7 +102,7 @@ static inline void es_sign_n_64(RzAnal *a, RzAnalOp *op, const char *arg, int bi } } -static inline void es_add_ck(RzAnalOp *op, const char *a1, const char *a2, const char *re, int bit) +static inline void es_add_ck(RzAnalysisOp *op, const char *a1, const char *a2, const char *re, int bit) { ut64 mask = 1ULL << (bit-1); rz_strbuf_appendf (&op->esil, @@ -197,7 +197,7 @@ static const char *arg(csh *handle, cs_insn *insn, char *buf, int n) { #define ARG(x) (*str[x]!=0)?str[x]:arg(handle, insn, str[x], x) -static int analop_esil(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, csh *handle, cs_insn *insn) { +static int analop_esil(RzAnalysis *a, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, csh *handle, cs_insn *insn) { char str[8][32] = {{0}}; int i; @@ -623,13 +623,13 @@ static int parse_reg_name(RzRegItem *reg, csh handle, cs_insn *insn, int reg_num return 0; } -static void op_fillval(RzAnal *anal, RzAnalOp *op, csh *handle, cs_insn *insn) { +static void op_fillval(RzAnalysis *analysis, RzAnalysisOp *op, csh *handle, cs_insn *insn) { static RzRegItem reg; switch (op->type & RZ_ANAL_OP_TYPE_MASK) { case RZ_ANAL_OP_TYPE_LOAD: if (OPERAND(1).type == MIPS_OP_MEM) { ZERO_FILL (reg); - op->src[0] = rz_anal_value_new (); + op->src[0] = rz_analysis_value_new (); op->src[0]->reg = ® parse_reg_name (op->src[0]->reg, *handle, insn, 1); op->src[0]->delta = OPERAND(1).mem.disp; @@ -638,7 +638,7 @@ static void op_fillval(RzAnal *anal, RzAnalOp *op, csh *handle, cs_insn *insn) { case RZ_ANAL_OP_TYPE_STORE: if (OPERAND(1).type == MIPS_OP_MEM) { ZERO_FILL (reg); - op->dst = rz_anal_value_new (); + op->dst = rz_analysis_value_new (); op->dst->reg = ® parse_reg_name (op->dst->reg, *handle, insn, 1); op->dst->delta = OPERAND(1).mem.disp; @@ -699,7 +699,7 @@ capstone bug } } -static void set_opdir(RzAnalOp *op) { +static void set_opdir(RzAnalysisOp *op) { switch (op->type & RZ_ANAL_OP_TYPE_MASK) { case RZ_ANAL_OP_TYPE_LOAD: op->direction = RZ_ANAL_OP_DIR_READ; @@ -721,33 +721,33 @@ static void set_opdir(RzAnalOp *op) { } } -static int analop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, RzAnalOpMask mask) { +static int analop(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, RzAnalysisOpMask mask) { int n, ret, opsize = -1; static csh hndl = 0; static int omode = -1; static int obits = 32; cs_insn* insn; - int mode = anal->big_endian? CS_MODE_BIG_ENDIAN: CS_MODE_LITTLE_ENDIAN; + int mode = analysis->big_endian? CS_MODE_BIG_ENDIAN: CS_MODE_LITTLE_ENDIAN; - if (anal->cpu && *anal->cpu) { - if (!strcmp (anal->cpu, "micro")) { + if (analysis->cpu && *analysis->cpu) { + if (!strcmp (analysis->cpu, "micro")) { mode |= CS_MODE_MICRO; - } else if (!strcmp (anal->cpu, "r6")) { + } else if (!strcmp (analysis->cpu, "r6")) { mode |= CS_MODE_MIPS32R6; - } else if (!strcmp (anal->cpu, "v3")) { + } else if (!strcmp (analysis->cpu, "v3")) { mode |= CS_MODE_MIPS3; - } else if (!strcmp (anal->cpu, "v2")) { + } else if (!strcmp (analysis->cpu, "v2")) { #if CS_API_MAJOR > 3 mode |= CS_MODE_MIPS2; #endif } } - mode |= (anal->bits==64)? CS_MODE_MIPS64: CS_MODE_MIPS32; - if (mode != omode || anal->bits != obits) { + mode |= (analysis->bits==64)? CS_MODE_MIPS64: CS_MODE_MIPS32; + if (mode != omode || analysis->bits != obits) { cs_close (&hndl); hndl = 0; omode = mode; - obits = anal->bits; + obits = analysis->bits; } // XXX no arch->cpu ?!?! CS_MODE_MICRO, N64 op->addr = addr; @@ -810,7 +810,7 @@ static int analop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int len switch (OPERAND(1).type) { case MIPS_OP_MEM: if (OPERAND(1).mem.base == MIPS_REG_GP) { - op->ptr = anal->gp + OPERAND(1).mem.disp; + op->ptr = analysis->gp + OPERAND(1).mem.disp; if (REGID(0) == MIPS_REG_T9) { t9_pre = op->ptr; } @@ -1085,12 +1085,12 @@ beach: opex (&op->opex, hndl, insn); } if (mask & RZ_ANAL_OP_MASK_ESIL) { - if (analop_esil (anal, op, addr, buf, len, &hndl, insn) != 0) { + if (analop_esil (analysis, op, addr, buf, len, &hndl, insn) != 0) { rz_strbuf_fini (&op->esil); } } if (mask & RZ_ANAL_OP_MASK_VAL) { - op_fillval (anal, op, &hndl, insn); + op_fillval (analysis, op, &hndl, insn); } cs_free (insn, n); //cs_close (&handle); @@ -1098,9 +1098,9 @@ fin: return opsize; } -static char *get_reg_profile(RzAnal *anal) { +static char *get_reg_profile(RzAnalysis *analysis) { const char *p = NULL; - switch (anal->bits) { + switch (analysis->bits) { default: case 32: p = "=PC pc\n" @@ -1202,18 +1202,18 @@ static char *get_reg_profile(RzAnal *anal) { return p? strdup (p): NULL; } -static int archinfo(RzAnal *anal, int q) { +static int archinfo(RzAnalysis *analysis, int q) { return 4; } -static RzList *anal_preludes(RzAnal *anal) { +static RzList *analysis_preludes(RzAnalysis *analysis) { #define KW(d,ds,m,ms) rz_list_append (l, rz_search_keyword_new((const ut8*)d,ds,(const ut8*)m, ms, NULL)) RzList *l = rz_list_newf ((RzListFree)rz_search_keyword_free); KW ("\x27\xbd\x00", 3, NULL, 0); return l; } -RzAnalPlugin rz_anal_plugin_mips_cs = { +RzAnalysisPlugin rz_analysis_plugin_mips_cs = { .name = "mips", .desc = "Capstone MIPS analyzer", .license = "BSD", @@ -1221,7 +1221,7 @@ RzAnalPlugin rz_anal_plugin_mips_cs = { .arch = "mips", .get_reg_profile = get_reg_profile, .archinfo = archinfo, - .preludes = anal_preludes, + .preludes = analysis_preludes, .bits = 16|32|64, .op = &analop, }; @@ -1229,7 +1229,7 @@ RzAnalPlugin rz_anal_plugin_mips_cs = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_mips_cs, + .data = &rz_analysis_plugin_mips_cs, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_mips_gnu.c b/librz/analysis/p/analysis_mips_gnu.c similarity index 96% rename from librz/anal/p/anal_mips_gnu.c rename to librz/analysis/p/analysis_mips_gnu.c index ae305afdc6..e7d078ac92 100644 --- a/librz/anal/p/anal_mips_gnu.c +++ b/librz/analysis/p/analysis_mips_gnu.c @@ -4,7 +4,7 @@ #include #include #include -#include +#include static ut64 t9_pre = UT64_MAX; @@ -42,7 +42,7 @@ static ut64 t9_pre = UT64_MAX; #define ES_ADD_CK32_OVERF(x, y, z) es_add_ck (op, x, y, z, 32) #define ES_ADD_CK64_OVERF(x, y, z) es_add_ck (op, x, y, z, 64) -static inline void es_sign_n_64(RzAnal *a, RzAnalOp *op, const char *arg, int bit) +static inline void es_sign_n_64(RzAnalysis *a, RzAnalysisOp *op, const char *arg, int bit) { if (a->bits == 64) { rz_strbuf_appendf (&op->esil, ",%d,%s,~,%s,=,", bit, arg, arg); @@ -51,7 +51,7 @@ static inline void es_sign_n_64(RzAnal *a, RzAnalOp *op, const char *arg, int bi } } -static inline void es_add_ck(RzAnalOp *op, const char *a1, const char *a2, const char *re, int bit) +static inline void es_add_ck(RzAnalysisOp *op, const char *a1, const char *a2, const char *re, int bit) { ut64 mask = 1ULL << (bit-1); rz_strbuf_appendf (&op->esil, @@ -747,7 +747,7 @@ static const char* mips_reg_decode(ut32 reg_num) { return NULL; } -static int analop_esil(RzAnal *a, RzAnalOp *op, ut64 addr, gnu_insn*insn) { +static int analop_esil(RzAnalysis *a, RzAnalysisOp *op, ut64 addr, gnu_insn*insn) { switch (insn->id) { case MIPS_INS_NOP: @@ -1051,10 +1051,10 @@ static int analop_esil(RzAnal *a, RzAnalOp *op, ut64 addr, gnu_insn*insn) { } -static int mips_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *b, int len, RzAnalOpMask mask) { +static int mips_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *b, int len, RzAnalysisOpMask mask) { ut32 opcode; // WIP char buf[10]; int reg; int family; - int optype, oplen = (anal->bits==16)?2:4; + int optype, oplen = (analysis->bits==16)?2:4; const ut8 * buf; gnu_insn insn; @@ -1066,9 +1066,9 @@ static int mips_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *b, int len, op->size = oplen; op->addr = addr; // Be endian aware - opcode = rz_read_ble32 (b, anal->big_endian); + opcode = rz_read_ble32 (b, analysis->big_endian); - // eprintf ("MIPS: %02x %02x %02x %02x (after endian: big=%d)\n", buf[0], buf[1], buf[2], buf[3], anal->big_endian); + // eprintf ("MIPS: %02x %02x %02x %02x (after endian: big=%d)\n", buf[0], buf[1], buf[2], buf[3], analysis->big_endian); if (opcode == 0) { op->type = RZ_ANAL_OP_TYPE_NOP; return oplen; @@ -1446,19 +1446,19 @@ static int mips_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *b, int len, case 15: // lui insn.id = MIPS_INS_LUI; snprintf ((char *)insn.i_reg.imm, REG_BUF_MAX, "0x%"PFMT32x, imm); - op->dst = rz_anal_value_new (); - op->dst->reg = rz_reg_get (anal->reg, mips_reg_decode (rt), RZ_REG_TYPE_GPR); + op->dst = rz_analysis_value_new (); + op->dst->reg = rz_reg_get (analysis->reg, mips_reg_decode (rt), RZ_REG_TYPE_GPR); // TODO: currently there is no way for the macro to get access to this register op->val = imm; break; case 9: // addiu insn.id = MIPS_INS_ADDIU; op->type = RZ_ANAL_OP_TYPE_ADD; - op->dst = rz_anal_value_new (); - op->dst->reg = rz_reg_get (anal->reg, mips_reg_decode(rt), RZ_REG_TYPE_GPR); + op->dst = rz_analysis_value_new (); + op->dst->reg = rz_reg_get (analysis->reg, mips_reg_decode(rt), RZ_REG_TYPE_GPR); // TODO: currently there is no way for the macro to get access to this register - op->src[0] = rz_anal_value_new (); - op->src[0]->reg = rz_reg_get (anal->reg, mips_reg_decode(rs), RZ_REG_TYPE_GPR); + op->src[0] = rz_analysis_value_new (); + op->src[0]->reg = rz_reg_get (analysis->reg, mips_reg_decode(rs), RZ_REG_TYPE_GPR); op->val = imm; // Beware: this one is signed... use `?vi $v` if (rs == 0) { insn.id = MIPS_INS_LI; @@ -1522,7 +1522,7 @@ static int mips_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *b, int len, } if (rs == 28) { - op->ptr = anal->gp + imm; + op->ptr = analysis->gp + imm; } else { op->ptr = imm; } @@ -1572,12 +1572,12 @@ static int mips_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *b, int len, } if (mask & RZ_ANAL_OP_MASK_ESIL) { - if (analop_esil (anal, op, addr, &insn)) { + if (analop_esil (analysis, op, addr, &insn)) { rz_strbuf_fini (&op->esil); } } if (mask & RZ_ANAL_OP_MASK_VAL) { - //TODO: add op_fillval (anal, op, &insn); + //TODO: add op_fillval (analysis, op, &insn); } return oplen; } @@ -1674,7 +1674,7 @@ static int mips_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *b, int len, */ /* Set the profile register */ -static bool mips_set_reg_profile(RzAnal* anal){ +static bool mips_set_reg_profile(RzAnalysis* analysis){ const char *p = #if 0 "=PC pc\n" @@ -1766,14 +1766,14 @@ static bool mips_set_reg_profile(RzAnal* anal){ "gpr pc .64 272 0\n" ; #endif - return rz_reg_set_profile_string (anal->reg, p); + return rz_reg_set_profile_string (analysis->reg, p); } -static int archinfo(RzAnal *anal, int q) { +static int archinfo(RzAnalysis *analysis, int q) { return 4; } -RzAnalPlugin rz_anal_plugin_mips_gnu = { +RzAnalysisPlugin rz_analysis_plugin_mips_gnu = { .name = "mips.gnu", .desc = "MIPS code analysis plugin", .license = "LGPL3", @@ -1788,6 +1788,6 @@ RzAnalPlugin rz_anal_plugin_mips_gnu = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_mips_gnu + .data = &rz_analysis_plugin_mips_gnu }; #endif diff --git a/librz/anal/p/anal_msp430.c b/librz/analysis/p/analysis_msp430.c similarity index 91% rename from librz/anal/p/anal_msp430.c rename to librz/analysis/p/analysis_msp430.c index dee6062469..53b39772d6 100644 --- a/librz/anal/p/anal_msp430.c +++ b/librz/analysis/p/analysis_msp430.c @@ -2,12 +2,12 @@ #include #include #include -#include +#include #include #include -static int msp430_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, RzAnalOpMask mask) { +static int msp430_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, RzAnalysisOpMask mask) { int ret; struct msp430_cmd cmd; @@ -84,7 +84,7 @@ static int msp430_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int return ret; } -RzAnalPlugin rz_anal_plugin_msp430 = { +RzAnalysisPlugin rz_analysis_plugin_msp430 = { .name = "msp430", .desc = "TI MSP430 code analysis plugin", .license = "LGPL3", diff --git a/librz/anal/p/anal_nios2.c b/librz/analysis/p/analysis_nios2.c similarity index 88% rename from librz/anal/p/anal_nios2.c rename to librz/analysis/p/analysis_nios2.c index 3df201aa45..8d7879b36d 100644 --- a/librz/anal/p/anal_nios2.c +++ b/librz/analysis/p/analysis_nios2.c @@ -4,9 +4,9 @@ #include #include #include -#include +#include -static int nios2_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *b, int len, RzAnalOpMask mask) { +static int nios2_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *b, int len, RzAnalysisOpMask mask) { if (!op) { return 1; } @@ -86,7 +86,7 @@ static int nios2_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *b, int len return op->size; } -RzAnalPlugin rz_anal_plugin_nios2 = { +RzAnalysisPlugin rz_analysis_plugin_nios2 = { .name = "nios2", .desc = "NIOS II code analysis plugin", .license = "LGPL3", @@ -99,7 +99,7 @@ RzAnalPlugin rz_anal_plugin_nios2 = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_nios2, + .data = &rz_analysis_plugin_nios2, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_null.c b/librz/analysis/p/analysis_null.c similarity index 56% rename from librz/anal/p/anal_null.c rename to librz/analysis/p/analysis_null.c index f2d88d700a..1c304f21d0 100644 --- a/librz/anal/p/anal_null.c +++ b/librz/analysis/p/analysis_null.c @@ -1,32 +1,32 @@ // SPDX-License-Identifier: LGPL-3.0-only -#include +#include #include #include -static int null_anal(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int len, RzAnalOpMask mask) { +static int null_analysis(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *data, int len, RzAnalysisOpMask mask) { /* This should better follow the disassembler */ return op->size = 1; } -static bool null_set_reg_profile(RzAnal* anal){ - return rz_reg_set_profile_string(anal->reg, ""); +static bool null_set_reg_profile(RzAnalysis* analysis){ + return rz_reg_set_profile_string(analysis->reg, ""); } -RzAnalPlugin rz_anal_plugin_null = { +RzAnalysisPlugin rz_analysis_plugin_null = { .name = "null", .desc = "Fallback/Null analysis plugin", .arch = "none", .license = "LGPL3", .bits = 8|16|32|64, /* is this used? */ - .op = &null_anal, + .op = &null_analysis, .set_reg_profile = &null_set_reg_profile, }; #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_null, + .data = &rz_analysis_plugin_null, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_or1k.c b/librz/analysis/p/analysis_or1k.c similarity index 94% rename from librz/anal/p/anal_or1k.c rename to librz/analysis/p/analysis_or1k.c index 4855c3e58a..c2aa1454e4 100644 --- a/librz/anal/p/anal_or1k.c +++ b/librz/analysis/p/analysis_or1k.c @@ -1,7 +1,7 @@ /* rizin - LGPL - Copyright 2019 - v3l0c1r4pt0r */ #include -#include +#include #include #include @@ -37,7 +37,7 @@ static ut64 n_oper_to_addr(ut32 n, ut32 mask, ut64 addr) { return (ut64) ((st64) ((st32) (sign_extend(n, mask) << 2)) + addr); } -static int insn_to_op(RzAnal *a, RzAnalOp *op, ut64 addr, insn_t *descr, insn_extra_t *extra, ut32 insn) { +static int insn_to_op(RzAnalysis *a, RzAnalysisOp *op, ut64 addr, insn_t *descr, insn_extra_t *extra, ut32 insn) { struct operands o = {0}; insn_type_t type = type_of_opcode(descr, extra); insn_type_descr_t *type_descr = &types[INSN_X]; @@ -147,7 +147,7 @@ static int insn_to_op(RzAnal *a, RzAnalOp *op, ut64 addr, insn_t *descr, insn_ex return 4; } -static int or1k_op(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *data, int len, RzAnalOpMask mask) { +static int or1k_op(RzAnalysis *a, RzAnalysisOp *op, ut64 addr, const ut8 *data, int len, RzAnalysisOpMask mask) { ut32 insn, opcode; ut8 opcode_idx; insn_t *insn_descr; @@ -186,7 +186,7 @@ static int or1k_op(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *data, int len, return op->size; } -RzAnalPlugin rz_anal_plugin_or1k = { +RzAnalysisPlugin rz_analysis_plugin_or1k = { .name = "or1k", .desc = "OpenRISC 1000", .license = "LGPL3", @@ -199,7 +199,7 @@ RzAnalPlugin rz_anal_plugin_or1k = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_or1k, + .data = &rz_analysis_plugin_or1k, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_pic.c b/librz/analysis/p/analysis_pic.c similarity index 91% rename from librz/anal/p/anal_pic.c rename to librz/analysis/p/analysis_pic.c index 4fc3c69ba3..be9585dee9 100644 --- a/librz/anal/p/anal_pic.c +++ b/librz/analysis/p/analysis_pic.c @@ -1,7 +1,7 @@ /* rizin - LGPL - Copyright 2015-2018 - oddcoder, thestr4ng3r, courk */ #include -#include +#include #include #include "../../asm/arch/pic/pic_midrange.h" @@ -15,18 +15,18 @@ typedef struct _pic_midrange_op_args_val { ut8 b; } PicMidrangeOpArgsVal; -typedef void (*pic_midrange_inst_handler_t) (RzAnal *anal, RzAnalOp *op, +typedef void (*pic_midrange_inst_handler_t) (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, PicMidrangeOpArgsVal *args); -typedef struct _pic_midrange_op_anal_info { +typedef struct _pic_midrange_op_analysis_info { PicMidrangeOpcode opcode; PicMidrangeOpArgs args; pic_midrange_inst_handler_t handler; } PicMidrangeOpAnalInfo; #define INST_HANDLER(OPCODE_NAME) \ - static void _inst__##OPCODE_NAME (RzAnal *anal, RzAnalOp *op, \ + static void _inst__##OPCODE_NAME (RzAnalysis *analysis, RzAnalysisOp *op, \ ut64 addr, \ PicMidrangeOpArgsVal *args) #define INST_DECL(NAME, ARGS) \ @@ -96,7 +96,7 @@ INST_HANDLER (RETURN) { INST_HANDLER (CALL) { ut64 pclath; op->type = RZ_ANAL_OP_TYPE_CALL; - rz_anal_esil_reg_read (anal->esil, "pclath", &pclath, NULL); + rz_analysis_esil_reg_read (analysis->esil, "pclath", &pclath, NULL); op->jump = 2 * (((pclath & 0x78) << 8) + args->k); ef ("8,pclath,0x78,&,<<,0x%x,+,2,*,pc,=,", args->k); e ("0x1f,stkptr,==,$z,?{,0xff,stkptr,=,},"); @@ -108,7 +108,7 @@ INST_HANDLER (CALL) { INST_HANDLER (GOTO) { ut64 pclath; op->type = RZ_ANAL_OP_TYPE_JMP; - rz_anal_esil_reg_read (anal->esil, "pclath", &pclath, NULL); + rz_analysis_esil_reg_read (analysis->esil, "pclath", &pclath, NULL); op->jump = 2 * (((pclath & 0x78) << 8) + args->k); ef ("8,pclath,0x78,&,<<,0x%x,+,2,*,pc,=,", args->k); } @@ -157,7 +157,7 @@ INST_HANDLER (BRA) { INST_HANDLER (BRW) { ut64 wreg; op->type = RZ_ANAL_OP_TYPE_UJMP; - rz_anal_esil_reg_read (anal->esil, "wreg", &wreg, NULL); + rz_analysis_esil_reg_read (analysis->esil, "wreg", &wreg, NULL); op->jump = addr + 2 * (wreg + 1); e ("wreg,1,+,2,*,pc,+=,"); } @@ -552,7 +552,7 @@ INST_HANDLER (MOVWI_2) { } #define PIC_MIDRANGE_OPINFO_LEN 52 -static const PicMidrangeOpAnalInfo pic_midrange_op_anal_info[PIC_MIDRANGE_OPINFO_LEN] = { +static const PicMidrangeOpAnalInfo pic_midrange_op_analysis_info[PIC_MIDRANGE_OPINFO_LEN] = { INST_DECL (NOP, NONE), INST_DECL (RETURN, NONE), INST_DECL (RETFIE, NONE), INST_DECL (OPTION, NONE), INST_DECL (SLEEP, NONE), INST_DECL (CLRWDT, NONE), @@ -581,7 +581,7 @@ static const PicMidrangeOpAnalInfo pic_midrange_op_anal_info[PIC_MIDRANGE_OPINFO INST_DECL (MOVIW_2, 1N_6K), INST_DECL (MOVWI_2, 1N_6K) }; -static void anal_pic_midrange_extract_args (ut16 instr, +static void analysis_pic_midrange_extract_args (ut16 instr, PicMidrangeOpArgs args, PicMidrangeOpArgsVal *args_val) { @@ -656,7 +656,7 @@ static bool pic_midrange_reg_write (RzReg *reg, const char *regname, ut32 num) { return false; } -static void anal_pic_midrange_malloc (RzAnal *anal, bool force) { +static void analysis_pic_midrange_malloc (RzAnalysis *analysis, bool force) { static bool init_done = false; if (!init_done || force) { @@ -664,29 +664,29 @@ static void anal_pic_midrange_malloc (RzAnal *anal, bool force) { // We assume that code is already allocated with firmware // image mem_sram = - cpu_memory_map (&anal->iob, mem_sram, + cpu_memory_map (&analysis->iob, mem_sram, PIC_MIDRANGE_ESIL_SRAM_START, 0x1000); mem_stack = - cpu_memory_map (&anal->iob, mem_stack, + cpu_memory_map (&analysis->iob, mem_stack, PIC_MIDRANGE_ESIL_CSTACK_TOP, 0x20); - pic_midrange_reg_write (anal->reg, "_sram", + pic_midrange_reg_write (analysis->reg, "_sram", PIC_MIDRANGE_ESIL_SRAM_START); - pic_midrange_reg_write (anal->reg, "_stack", + pic_midrange_reg_write (analysis->reg, "_stack", PIC_MIDRANGE_ESIL_CSTACK_TOP); - pic_midrange_reg_write (anal->reg, "stkptr", 0x1f); + pic_midrange_reg_write (analysis->reg, "stkptr", 0x1f); init_done = true; } } -static int anal_pic_midrange_op (RzAnal *anal, RzAnalOp *op, ut64 addr, +static int analysis_pic_midrange_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len) { ut16 instr; int i; - anal_pic_midrange_malloc (anal, false); + analysis_pic_midrange_malloc (analysis, false); if (!buf || len < 2) { op->type = RZ_ANAL_OP_TYPE_ILL; @@ -704,11 +704,11 @@ static int anal_pic_midrange_op (RzAnal *anal, RzAnalOp *op, ut64 addr, PicMidrangeOpArgsVal args_val; for (i = 0; i < PIC_MIDRANGE_OPINFO_LEN; i++) { - if (pic_midrange_op_anal_info[i].opcode == opcode) { - anal_pic_midrange_extract_args ( - instr, pic_midrange_op_anal_info[i].args, + if (pic_midrange_op_analysis_info[i].opcode == opcode) { + analysis_pic_midrange_extract_args ( + instr, pic_midrange_op_analysis_info[i].args, &args_val); - pic_midrange_op_anal_info[i].handler (anal, op, addr, + pic_midrange_op_analysis_info[i].handler (analysis, op, addr, &args_val); break; } @@ -717,7 +717,7 @@ static int anal_pic_midrange_op (RzAnal *anal, RzAnalOp *op, ut64 addr, return op->size; } -static void pic18_cond_branch (RzAnalOp *op, ut64 addr, const ut8 *buf, char *flag) { +static void pic18_cond_branch (RzAnalysisOp *op, ut64 addr, const ut8 *buf, char *flag) { op->type = RZ_ANAL_OP_TYPE_CJMP; op->jump = addr + 2 + 2 * (*(ut16 *)buf & 0xff); op->fail = addr + op->size; @@ -725,7 +725,7 @@ static void pic18_cond_branch (RzAnalOp *op, ut64 addr, const ut8 *buf, char *fl rz_strbuf_setf (&op->esil, "%s,?,{,0x%" PFMT64x ",pc,=,}", flag, op->jump); } -static int anal_pic_pic18_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int len) { +static int analysis_pic_pic18_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len) { //TODO code should be refactored and broken into smaller chunks!! //TODO complete the esil emitter if (len < 2) { @@ -1004,7 +1004,7 @@ beach: return op->size; } -static bool anal_pic_midrange_set_reg_profile (RzAnal *esil) { +static bool analysis_pic_midrange_set_reg_profile (RzAnalysis *esil) { const char *p = \ "=PC pc\n" "=SP stkptr\n" @@ -1034,7 +1034,7 @@ static bool anal_pic_midrange_set_reg_profile (RzAnal *esil) { return rz_reg_set_profile_string (esil->reg, p); } -static bool anal_pic_pic18_set_reg_profile(RzAnal *esil) { +static bool analysis_pic_pic18_set_reg_profile(RzAnalysis *esil) { const char *p = "#pc lives in nowhere actually" "=PC pc\n" @@ -1154,49 +1154,49 @@ static bool anal_pic_pic18_set_reg_profile(RzAnal *esil) { } -static int anal_pic_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, RzAnalOpMask mask) { - if (anal->cpu && strcasecmp (anal->cpu, "baseline") == 0) { +static int analysis_pic_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, RzAnalysisOpMask mask) { + if (analysis->cpu && strcasecmp (analysis->cpu, "baseline") == 0) { // TODO: implement return -1; } - if (anal->cpu && strcasecmp (anal->cpu, "midrange") == 0) { - return anal_pic_midrange_op (anal, op, addr, buf, len); + if (analysis->cpu && strcasecmp (analysis->cpu, "midrange") == 0) { + return analysis_pic_midrange_op (analysis, op, addr, buf, len); } - if (anal->cpu && strcasecmp (anal->cpu, "pic18") == 0) { - return anal_pic_pic18_op (anal, op, addr, buf, len); + if (analysis->cpu && strcasecmp (analysis->cpu, "pic18") == 0) { + return analysis_pic_pic18_op (analysis, op, addr, buf, len); } return -1; } -static bool anal_pic_set_reg_profile(RzAnal *anal) { - if (anal->cpu && strcasecmp (anal->cpu, "baseline") == 0) { +static bool analysis_pic_set_reg_profile(RzAnalysis *analysis) { + if (analysis->cpu && strcasecmp (analysis->cpu, "baseline") == 0) { // TODO: We are using the midrange profile as the baseline - return anal_pic_midrange_set_reg_profile (anal); + return analysis_pic_midrange_set_reg_profile (analysis); } - if (anal->cpu && strcasecmp (anal->cpu, "midrange") == 0) { - return anal_pic_midrange_set_reg_profile (anal); + if (analysis->cpu && strcasecmp (analysis->cpu, "midrange") == 0) { + return analysis_pic_midrange_set_reg_profile (analysis); } - if (anal->cpu && strcasecmp (anal->cpu, "pic18") == 0) { - return anal_pic_pic18_set_reg_profile (anal); + if (analysis->cpu && strcasecmp (analysis->cpu, "pic18") == 0) { + return analysis_pic_pic18_set_reg_profile (analysis); } return false; } -RzAnalPlugin rz_anal_plugin_pic = { +RzAnalysisPlugin rz_analysis_plugin_pic = { .name = "pic", .desc = "PIC analysis plugin", .license = "LGPL3", .arch = "pic", .bits = 8, - .op = &anal_pic_op, - .set_reg_profile = &anal_pic_set_reg_profile, + .op = &analysis_pic_op, + .set_reg_profile = &analysis_pic_set_reg_profile, .esil = true }; #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_pic, + .data = &rz_analysis_plugin_pic, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_ppc_cs.c b/librz/analysis/p/analysis_ppc_cs.c similarity index 97% rename from librz/anal/p/anal_ppc_cs.c rename to librz/analysis/p/analysis_ppc_cs.c index 51da8b115d..6152b886bf 100644 --- a/librz/anal/p/anal_ppc_cs.c +++ b/librz/analysis/p/analysis_ppc_cs.c @@ -1,6 +1,6 @@ /* rizin - LGPL - Copyright 2013-2019 - pancake */ -#include +#include #include #include #include @@ -203,9 +203,9 @@ static void opex(RzStrBuf *buf, csh handle, cs_insn *insn) { #define ARG(n) getarg2(&gop, n, "") #define ARG2(n,m) getarg2(&gop, n, m) -static bool set_reg_profile(RzAnal *anal) { +static bool set_reg_profile(RzAnalysis *analysis) { const char *p = NULL; - if (anal->bits == 32) { + if (analysis->bits == 32) { p = "=PC pc\n" "=SP r1\n" @@ -406,10 +406,10 @@ static bool set_reg_profile(RzAnal *anal) { "gpr dbat3u .32 484 0\n" "gpr mask .64 488 0\n"; //not a real register used on complex functions } - return rz_reg_set_profile_string (anal->reg, p); + return rz_reg_set_profile_string (analysis->reg, p); } -static int analop_vle(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int len) { +static int analop_vle(RzAnalysis *a, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len) { vle_t* instr = NULL; vle_handle handle = {0}; op->size = 2; @@ -514,18 +514,18 @@ static int parse_reg_name(RzRegItem *reg, csh handle, cs_insn *insn, int reg_num static RzRegItem base_regs[4]; -static void create_src_dst(RzAnalOp *op) { - op->src[0] = rz_anal_value_new (); - op->src[1] = rz_anal_value_new (); - op->src[2] = rz_anal_value_new (); - op->dst = rz_anal_value_new (); +static void create_src_dst(RzAnalysisOp *op) { + op->src[0] = rz_analysis_value_new (); + op->src[1] = rz_analysis_value_new (); + op->src[2] = rz_analysis_value_new (); + op->dst = rz_analysis_value_new (); ZERO_FILL (base_regs[0]); ZERO_FILL (base_regs[1]); ZERO_FILL (base_regs[2]); ZERO_FILL (base_regs[3]); } -static void set_src_dst(RzAnalValue *val, csh *handle, cs_insn *insn, int x) { +static void set_src_dst(RzAnalysisValue *val, csh *handle, cs_insn *insn, int x) { cs_ppc_op ppcop = INSOP (x); parse_reg_name (&base_regs[x], *handle, insn, x); switch (ppcop.type) { @@ -543,7 +543,7 @@ static void set_src_dst(RzAnalValue *val, csh *handle, cs_insn *insn, int x) { val->reg = &base_regs[x]; } -static void op_fillval(RzAnalOp *op, csh handle, cs_insn *insn) { +static void op_fillval(RzAnalysisOp *op, csh handle, cs_insn *insn) { create_src_dst (op); switch (op->type & RZ_ANAL_OP_TYPE_MASK) { case RZ_ANAL_OP_TYPE_MOV: @@ -578,7 +578,7 @@ static void op_fillval(RzAnalOp *op, csh handle, cs_insn *insn) { } } -static int analop(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, RzAnalOpMask mask) { +static int analop(RzAnalysis *a, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, RzAnalysisOpMask mask) { static csh handle = 0; static int omode = -1, obits = -1; int n, ret; @@ -1254,21 +1254,21 @@ static int analop(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, R return op->size; } -static int archinfo(RzAnal *a, int q) { +static int archinfo(RzAnalysis *a, int q) { if (a->cpu && !strncmp (a->cpu, "vle", 3)) { return 2; } return 4; } -static RzList *anal_preludes(RzAnal *anal) { +static RzList *analysis_preludes(RzAnalysis *analysis) { #define KW(d,ds,m,ms) rz_list_append (l, rz_search_keyword_new((const ut8*)d,ds,(const ut8*)m, ms, NULL)) RzList *l = rz_list_newf ((RzListFree)rz_search_keyword_free); KW ("\x7c\x08\x02\xa6", 4, NULL, 0); return l; } -RzAnalPlugin rz_anal_plugin_ppc_cs = { +RzAnalysisPlugin rz_analysis_plugin_ppc_cs = { .name = "ppc", .desc = "Capstone PowerPC analysis", .license = "BSD", @@ -1276,7 +1276,7 @@ RzAnalPlugin rz_anal_plugin_ppc_cs = { .arch = "ppc", .bits = 32 | 64, .archinfo = archinfo, - .preludes = anal_preludes, + .preludes = analysis_preludes, .op = &analop, .set_reg_profile = &set_reg_profile, }; @@ -1284,7 +1284,7 @@ RzAnalPlugin rz_anal_plugin_ppc_cs = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_ppc_cs, + .data = &rz_analysis_plugin_ppc_cs, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_ppc_gnu.c b/librz/analysis/p/analysis_ppc_gnu.c similarity index 90% rename from librz/anal/p/anal_ppc_gnu.c rename to librz/analysis/p/analysis_ppc_gnu.c index e72b67a9da..a9f5df51a9 100644 --- a/librz/anal/p/anal_ppc_gnu.c +++ b/librz/analysis/p/analysis_ppc_gnu.c @@ -3,11 +3,11 @@ #include #include #include -#include +#include // NOTE: buf should be at least 16 bytes! // XXX addr should be off_t for 64 love -static int ppc_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *bytes, int len, RzAnalOpMask mask) { +static int ppc_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *bytes, int len, RzAnalysisOpMask mask) { //int arch_ppc_op(ut64 addr, const u8 *bytes, struct op_t *op) // XXX hack int opcode = (bytes[0] & 0xf8) >> 3; // bytes 0-5 @@ -78,7 +78,7 @@ static int ppc_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *bytes, int l return op->size; } -static bool set_reg_profile(RzAnal *anal) { +static bool set_reg_profile(RzAnalysis *analysis) { const char *p = "=PC srr0\n" "=SR srr1\n" // status register @@ -133,14 +133,14 @@ static bool set_reg_profile(RzAnal *anal) { "gpr ctr .32 148 0\n" "gpr mq .32 152 0\n" "gpr vrsave .32 156 0\n"; - return rz_reg_set_profile_string (anal->reg, p); + return rz_reg_set_profile_string (analysis->reg, p); } -static int archinfo(RzAnal *anal, int q) { +static int archinfo(RzAnalysis *analysis, int q) { return 4; /* :D */ } -RzAnalPlugin rz_anal_plugin_ppc_gnu = { +RzAnalysisPlugin rz_analysis_plugin_ppc_gnu = { .name = "ppc.gnu", .desc = "PowerPC analysis plugin", .license = "LGPL3", @@ -154,7 +154,7 @@ RzAnalPlugin rz_anal_plugin_ppc_gnu = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_ppc_gnu, + .data = &rz_analysis_plugin_ppc_gnu, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_propeller.c b/librz/analysis/p/analysis_propeller.c similarity index 90% rename from librz/anal/p/anal_propeller.c rename to librz/analysis/p/analysis_propeller.c index 6d60b1d89e..9c6147235a 100644 --- a/librz/anal/p/anal_propeller.c +++ b/librz/analysis/p/analysis_propeller.c @@ -4,12 +4,12 @@ #include #include #include -#include +#include #include #include -static int propeller_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, RzAnalOpMask mask) { +static int propeller_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, RzAnalysisOpMask mask) { int ret; struct propeller_cmd cmd; @@ -98,7 +98,7 @@ static int propeller_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, i return ret; } -RzAnalPlugin rz_anal_plugin_propeller = { +RzAnalysisPlugin rz_analysis_plugin_propeller = { .name = "propeller", .desc = "Parallax propeller code analysis plugin", .license = "LGPL3", diff --git a/librz/anal/p/anal_pyc.c b/librz/analysis/p/analysis_pyc.c similarity index 82% rename from librz/anal/p/anal_pyc.c rename to librz/analysis/p/analysis_pyc.c index fa741bcfce..6dbbb8f9c6 100644 --- a/librz/anal/p/anal_pyc.c +++ b/librz/analysis/p/analysis_pyc.c @@ -9,22 +9,22 @@ static pyc_opcodes *ops = NULL; -static int archinfo(RzAnal *anal, int query) { - if (!strcmp (anal->cpu, "x86")) { +static int archinfo(RzAnalysis *analysis, int query) { + if (!strcmp (analysis->cpu, "x86")) { return -1; } switch (query) { case RZ_ANAL_ARCHINFO_MIN_OP_SIZE: - return (anal->bits == 16)? 1: 2; + return (analysis->bits == 16)? 1: 2; case RZ_ANAL_ARCHINFO_MAX_OP_SIZE: - return (anal->bits == 16)? 3: 2; + return (analysis->bits == 16)? 3: 2; default: return -1; } } -static char *get_reg_profile(RzAnal *anal) { +static char *get_reg_profile(RzAnalysis *analysis) { return strdup ( "=PC pc\n" "=BP bp\n" @@ -36,14 +36,14 @@ static char *get_reg_profile(RzAnal *anal) { ); } -static RzList *get_pyc_code_obj(RzAnal *anal) { - RzBin *b = anal->binb.bin; +static RzList *get_pyc_code_obj(RzAnalysis *analysis) { + RzBin *b = analysis->binb.bin; RzBinPlugin *plugin = b->cur && b->cur->o? b->cur->o->plugin: NULL; bool is_pyc = (plugin && strcmp (plugin->name, "pyc") == 0); return is_pyc? b->cur->o->bin_obj: NULL; } -static int pyc_op(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *data, int len, RzAnalOpMask mask) { +static int pyc_op(RzAnalysis *a, RzAnalysisOp *op, ut64 addr, const ut8 *data, int len, RzAnalysisOpMask mask) { RzList *cobjs = rz_list_get_n (get_pyc_code_obj (a), 0); RzListIter *iter = NULL; pyc_code_object *func = NULL, *t = NULL; @@ -75,7 +75,7 @@ static int pyc_op(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *data, int len, if (!op_obj->op_name) { op->type = RZ_ANAL_OP_TYPE_ILL; op->size = 1; - goto anal_end; + goto analysis_end; } op->size = is_python36? 2: ((op_code >= ops->have_argument)? 3: 1); @@ -100,7 +100,7 @@ static int pyc_op(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *data, int len, op->type = RZ_ANAL_OP_TYPE_CJMP; op->fail = addr + ((is_python36)? 2: 3); } - goto anal_end; + goto analysis_end; } if (op_obj->type & HASJREL) { op->type = RZ_ANAL_OP_TYPE_JMP; @@ -111,17 +111,17 @@ static int pyc_op(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *data, int len, op->type = RZ_ANAL_OP_TYPE_CJMP; //op->fail = addr + ((is_python36)? 2: 3); } - //goto anal_end; + //goto analysis_end; } if (op_obj->type & HASCOMPARE) { op->type = RZ_ANAL_OP_TYPE_CMP; - goto anal_end; + goto analysis_end; } - anal_pyc_op (op, op_obj, oparg); + analysis_pyc_op (op, op_obj, oparg); -anal_end: +analysis_end: //free_opcode (ops); return op->size; } @@ -134,7 +134,7 @@ static int finish(void *user) { return 0; } -RzAnalPlugin rz_anal_plugin_pyc = { +RzAnalysisPlugin rz_analysis_plugin_pyc = { .name = "pyc", .desc = "Python bytecode analysis plugin", .license = "LGPL3", @@ -150,7 +150,7 @@ RzAnalPlugin rz_anal_plugin_pyc = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_pyc, + .data = &rz_analysis_plugin_pyc, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_riscv.c b/librz/analysis/p/analysis_riscv.c similarity index 97% rename from librz/anal/p/anal_riscv.c rename to librz/analysis/p/analysis_riscv.c index 1402d0527a..bc4fa9c545 100644 --- a/librz/anal/p/anal_riscv.c +++ b/librz/analysis/p/analysis_riscv.c @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include "../../asm/arch/riscv/riscv-opc.c" #include "../../asm/arch/riscv/riscv.h" #define ARRAY_SIZE(a) (sizeof(a) / sizeof(*a)) @@ -292,19 +292,19 @@ static const char* arg_n(riscv_args_t* args, int n) { return args->arg[n]; } -static int riscv_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int len, RzAnalOpMask mask) { +static int riscv_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *data, int len, RzAnalysisOpMask mask) { const int no_alias = 1; riscv_args_t args = {0}; ut64 word = 0; - int xlen = anal->bits; + int xlen = analysis->bits; op->size = 4; op->addr = addr; op->type = RZ_ANAL_OP_TYPE_UNK; if (len >= sizeof (ut64)) { - word = rz_read_ble64 (data, anal->big_endian); + word = rz_read_ble64 (data, analysis->big_endian); } else if (len >= sizeof (ut32)) { - word = rz_read_ble16 (data, anal->big_endian); + word = rz_read_ble16 (data, analysis->big_endian); } else { op->type = RZ_ANAL_OP_TYPE_ILL; return -1; @@ -613,27 +613,27 @@ static int riscv_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int } if (mask & RZ_ANAL_OP_MASK_VAL && args.num) { int i, j = 1; - op->dst = RZ_NEW0 (RzAnalValue); + op->dst = RZ_NEW0 (RzAnalysisValue); char *argf = strdup (o->args); char *comma = strtok (argf, ","); if (comma && strchr (comma, '(')) { op->dst->delta = (st64)rz_num_get (NULL, args.arg[0]); - op->dst->reg = rz_reg_get (anal->reg, args.arg[1], -1); + op->dst->reg = rz_reg_get (analysis->reg, args.arg[1], -1); j = 2; } else if (isdigit (args.arg[j][0])) { op->dst->imm = rz_num_get (NULL, args.arg[0]); } else { - op->dst->reg = rz_reg_get (anal->reg, args.arg[0], -1); + op->dst->reg = rz_reg_get (analysis->reg, args.arg[0], -1); } for (i = 0; j < args.num; i++, j++) { - op->src[i] = RZ_NEW0 (RzAnalValue); + op->src[i] = RZ_NEW0 (RzAnalysisValue); comma = strtok (NULL, ","); if (comma && strchr (comma, '(')) { op->src[i]->delta = (st64)rz_num_get (NULL, args.arg[j]); - op->src[i]->reg = rz_reg_get (anal->reg, args.arg[j + 1], -1); + op->src[i]->reg = rz_reg_get (analysis->reg, args.arg[j + 1], -1); j++; } else if (isalpha (args.arg[j][0])) { - op->src[i]->reg = rz_reg_get (anal->reg, args.arg[j], -1); + op->src[i]->reg = rz_reg_get (analysis->reg, args.arg[j], -1); } else { op->src[i]->imm = rz_num_get (NULL, args.arg[j]); } @@ -643,9 +643,9 @@ static int riscv_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int return op->size; } -static char *get_reg_profile(RzAnal *anal) { +static char *get_reg_profile(RzAnalysis *analysis) { const char *p = NULL; - switch (anal->bits) { + switch (analysis->bits) { case 32: p = "=PC pc\n" "=A0 a0\n" @@ -823,7 +823,7 @@ static char *get_reg_profile(RzAnal *anal) { return (p && *p)? strdup (p): NULL; } -RzAnalPlugin rz_anal_plugin_riscv = { +RzAnalysisPlugin rz_analysis_plugin_riscv = { .name = "riscv", .desc = "RISC-V analysis plugin", .license = "GPL", @@ -836,7 +836,7 @@ RzAnalPlugin rz_anal_plugin_riscv = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_riscv, + .data = &rz_analysis_plugin_riscv, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_riscv_cs.c b/librz/analysis/p/analysis_riscv_cs.c similarity index 89% rename from librz/anal/p/anal_riscv_cs.c rename to librz/analysis/p/analysis_riscv_cs.c index 42d039ff49..374f9a74a7 100644 --- a/librz/anal/p/anal_riscv_cs.c +++ b/librz/analysis/p/analysis_riscv_cs.c @@ -26,30 +26,30 @@ } #define CREATE_SRC_DST_3(op) \ - (op)->src[0] = rz_anal_value_new ();\ - (op)->src[1] = rz_anal_value_new ();\ - (op)->dst = rz_anal_value_new (); + (op)->src[0] = rz_analysis_value_new ();\ + (op)->src[1] = rz_analysis_value_new ();\ + (op)->dst = rz_analysis_value_new (); #define CREATE_SRC_DST_2(op) \ - (op)->src[0] = rz_anal_value_new ();\ - (op)->dst = rz_anal_value_new (); + (op)->src[0] = rz_analysis_value_new ();\ + (op)->dst = rz_analysis_value_new (); #define SET_SRC_DST_3_REGS(op) \ CREATE_SRC_DST_3 (op);\ - (op)->dst->reg = rz_reg_get (anal->reg, REG (0), RZ_REG_TYPE_GPR);\ - (op)->src[0]->reg = rz_reg_get (anal->reg, REG (1), RZ_REG_TYPE_GPR);\ - (op)->src[1]->reg = rz_reg_get (anal->reg, REG (2), RZ_REG_TYPE_GPR); + (op)->dst->reg = rz_reg_get (analysis->reg, REG (0), RZ_REG_TYPE_GPR);\ + (op)->src[0]->reg = rz_reg_get (analysis->reg, REG (1), RZ_REG_TYPE_GPR);\ + (op)->src[1]->reg = rz_reg_get (analysis->reg, REG (2), RZ_REG_TYPE_GPR); #define SET_SRC_DST_3_IMM(op) \ CREATE_SRC_DST_3 (op);\ - (op)->dst->reg = rz_reg_get (anal->reg, REG (0), RZ_REG_TYPE_GPR);\ - (op)->src[0]->reg = rz_reg_get (anal->reg, REG (1), RZ_REG_TYPE_GPR);\ + (op)->dst->reg = rz_reg_get (analysis->reg, REG (0), RZ_REG_TYPE_GPR);\ + (op)->src[0]->reg = rz_reg_get (analysis->reg, REG (1), RZ_REG_TYPE_GPR);\ (op)->src[1]->imm = IMM (2); #define SET_SRC_DST_2_REGS(op) \ CREATE_SRC_DST_2 (op);\ - (op)->dst->reg = rz_reg_get (anal->reg, REG (0), RZ_REG_TYPE_GPR);\ - (op)->src[0]->reg = rz_reg_get (anal->reg, REG (1), RZ_REG_TYPE_GPR); + (op)->dst->reg = rz_reg_get (analysis->reg, REG (0), RZ_REG_TYPE_GPR);\ + (op)->src[0]->reg = rz_reg_get (analysis->reg, REG (1), RZ_REG_TYPE_GPR); #define SET_SRC_DST_3_REG_OR_IMM(op) \ if (OPERAND(2).type == RISCV_OP_IMM) {\ @@ -177,7 +177,7 @@ static const char *arg(csh *handle, cs_insn *insn, char *buf, int n) { #define ARG(x) (*str[x]!=0)?str[x]:arg(handle, insn, str[x], x) -static int analop_esil(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, csh *handle, cs_insn *insn) { +static int analop_esil(RzAnalysis *a, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, csh *handle, cs_insn *insn) { char str[8][32] = {{0}}; int i; @@ -218,13 +218,13 @@ static int parse_reg_name(RzRegItem *reg, csh handle, cs_insn *insn, int reg_num return 0; } -static void op_fillval(RzAnal *anal, RzAnalOp *op, csh *handle, cs_insn *insn) { +static void op_fillval(RzAnalysis *analysis, RzAnalysisOp *op, csh *handle, cs_insn *insn) { static RzRegItem reg; switch (op->type & RZ_ANAL_OP_TYPE_MASK) { case RZ_ANAL_OP_TYPE_LOAD: if (OPERAND(1).type == RISCV_OP_MEM) { ZERO_FILL (reg); - op->src[0] = rz_anal_value_new (); + op->src[0] = rz_analysis_value_new (); op->src[0]->reg = ® parse_reg_name (op->src[0]->reg, *handle, insn, 1); op->src[0]->delta = OPERAND(1).mem.disp; @@ -233,7 +233,7 @@ static void op_fillval(RzAnal *anal, RzAnalOp *op, csh *handle, cs_insn *insn) { case RZ_ANAL_OP_TYPE_STORE: if (OPERAND(1).type == RISCV_OP_MEM) { ZERO_FILL (reg); - op->dst = rz_anal_value_new (); + op->dst = rz_analysis_value_new (); op->dst->reg = ® parse_reg_name (op->dst->reg, *handle, insn, 1); op->dst->delta = OPERAND(1).mem.disp; @@ -294,7 +294,7 @@ capstone bug } } -static void set_opdir(RzAnalOp *op) { +static void set_opdir(RzAnalysisOp *op) { switch (op->type & RZ_ANAL_OP_TYPE_MASK) { case RZ_ANAL_OP_TYPE_LOAD: op->direction = RZ_ANAL_OP_DIR_READ; @@ -316,18 +316,18 @@ static void set_opdir(RzAnalOp *op) { } } -static int analop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, RzAnalOpMask mask) { +static int analop(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, RzAnalysisOpMask mask) { int n, ret, opsize = -1; static csh hndl = 0; static int omode = -1; static int obits = 32; cs_insn* insn; - int mode = (anal->bits==64)? CS_MODE_RISCV64: CS_MODE_RISCV32; - if (mode != omode || anal->bits != obits) { + int mode = (analysis->bits==64)? CS_MODE_RISCV64: CS_MODE_RISCV32; + if (mode != omode || analysis->bits != obits) { cs_close (&hndl); hndl = 0; omode = mode; - obits = anal->bits; + obits = analysis->bits; } // XXX no arch->cpu ?!?! CS_MODE_MICRO, N64 op->addr = addr; @@ -381,12 +381,12 @@ beach: opex (&op->opex, hndl, insn); } if (mask & RZ_ANAL_OP_MASK_ESIL) { - if (analop_esil (anal, op, addr, buf, len, &hndl, insn) != 0) { + if (analop_esil (analysis, op, addr, buf, len, &hndl, insn) != 0) { rz_strbuf_fini (&op->esil); } } if (mask & RZ_ANAL_OP_MASK_VAL) { - op_fillval (anal, op, &hndl, insn); + op_fillval (analysis, op, &hndl, insn); } cs_free (insn, n); //cs_close (&handle); @@ -394,9 +394,9 @@ fin: return opsize; } -static char *get_reg_profile(RzAnal *anal) { +static char *get_reg_profile(RzAnalysis *analysis) { const char *p = NULL; - switch (anal->bits) { + switch (analysis->bits) { case 32: p = "=PC pc\n" "=SP sp\n" // ABI: stack pointer @@ -574,14 +574,14 @@ static char *get_reg_profile(RzAnal *anal) { return (p && *p)? strdup (p): NULL; } -static int archinfo(RzAnal *anal, int q) { +static int archinfo(RzAnalysis *analysis, int q) { switch (q) { case RZ_ANAL_ARCHINFO_ALIGN: return 4; case RZ_ANAL_ARCHINFO_MAX_OP_SIZE: return 4; case RZ_ANAL_ARCHINFO_MIN_OP_SIZE: - if (anal->bits == 64) { + if (analysis->bits == 64) { return 4; } return 2; @@ -589,7 +589,7 @@ static int archinfo(RzAnal *anal, int q) { return 0; } -RzAnalPlugin rz_anal_plugin_riscv_cs = { +RzAnalysisPlugin rz_analysis_plugin_riscv_cs = { .name = "riscv.cs", .desc = "Capstone RISCV analyzer", .license = "BSD", @@ -604,13 +604,13 @@ RzAnalPlugin rz_anal_plugin_riscv_cs = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_riscv_cs, + .data = &rz_analysis_plugin_riscv_cs, .version = RZ_VERSION }; #endif #else -RzAnalPlugin rz_anal_plugin_riscv_cs = {0}; +RzAnalysisPlugin rz_analysis_plugin_riscv_cs = {0}; #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, diff --git a/librz/anal/p/anal_rsp.c b/librz/analysis/p/analysis_rsp.c similarity index 90% rename from librz/anal/p/anal_rsp.c rename to librz/analysis/p/analysis_rsp.c index 1d29c2c5a9..3f6e4ed603 100644 --- a/librz/anal/p/anal_rsp.c +++ b/librz/analysis/p/analysis_rsp.c @@ -10,13 +10,13 @@ #include #include #include -#include +#include #include "../../asm/arch/rsp/rsp_idec.h" -static int rsp_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *b, int len, RzAnalOpMask mask) { +static int rsp_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *b, int len, RzAnalysisOpMask mask) { int i; typedef struct { - RzAnalValue* value; + RzAnalysisValue* value; char esil[32]; } ParsedOperands; @@ -34,18 +34,18 @@ static int rsp_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *b, int len, op->addr = addr; rz_strbuf_set (&op->esil, "TODO"); - iw = rz_read_ble32 (b, anal->big_endian); + iw = rz_read_ble32 (b, analysis->big_endian); rz_instr = rsp_instruction_decode (addr, iw); /* parse operands */ for (i = 0; i < rz_instr.noperands; i++) { - parsed_operands[i].value = rz_anal_value_new (); + parsed_operands[i].value = rz_analysis_value_new (); parsed_operands[i].esil[0] = '\0'; switch (rz_instr.operands[i].type) { case RSP_OPND_GP_REG: snprintf (parsed_operands[i].esil, sizeof (parsed_operands[i].esil), "%s", rsp_gp_reg_soft_names[rz_instr.operands[i].u]); - parsed_operands[i].value->reg = rz_reg_get (anal->reg, rsp_gp_reg_soft_names[rz_instr.operands[i].u], RZ_REG_TYPE_GPR); + parsed_operands[i].value->reg = rz_reg_get (analysis->reg, rsp_gp_reg_soft_names[rz_instr.operands[i].u], RZ_REG_TYPE_GPR); break; case RSP_OPND_ZIMM: case RSP_OPND_SHIFT_AMOUNT: @@ -59,7 +59,7 @@ static int rsp_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *b, int len, case RSP_OPND_BASE_OFFSET: snprintf (parsed_operands[i].esil, sizeof (parsed_operands[i].esil), "%"PFMT64d",%s,+", rz_instr.operands[i].s, rsp_gp_reg_soft_names[rz_instr.operands[i].u]); - parsed_operands[i].value->reg = rz_reg_get (anal->reg, rsp_gp_reg_soft_names[rz_instr.operands[i].u], RZ_REG_TYPE_GPR); + parsed_operands[i].value->reg = rz_reg_get (analysis->reg, rsp_gp_reg_soft_names[rz_instr.operands[i].u], RZ_REG_TYPE_GPR); parsed_operands[i].value->imm = rz_instr.operands[i].s; break; case RSP_OPND_OFFSET: @@ -74,7 +74,7 @@ static int rsp_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *b, int len, break; case RSP_OPND_C0_REG: snprintf (parsed_operands[i].esil, sizeof (parsed_operands[i].esil), "%s", rsp_c0_reg_names[rz_instr.operands[i].u]); - parsed_operands[i].value->reg = rz_reg_get (anal->reg, rsp_c0_reg_names[rz_instr.operands[i].u], RZ_REG_TYPE_GPR); + parsed_operands[i].value->reg = rz_reg_get (analysis->reg, rsp_c0_reg_names[rz_instr.operands[i].u], RZ_REG_TYPE_GPR); break; case RSP_OPND_C2_CREG: case RSP_OPND_C2_ACCU: @@ -191,15 +191,15 @@ static int rsp_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *b, int len, break; case RSP_OP_J: op->type = RZ_ANAL_OP_TYPE_JMP; - op->dst = rz_anal_value_new (); - op->dst->reg = rz_reg_get (anal->reg, "PC", RZ_REG_TYPE_GPR); + op->dst = rz_analysis_value_new (); + op->dst->reg = rz_reg_get (analysis->reg, "PC", RZ_REG_TYPE_GPR); op->src[0] = parsed_operands[0].value; rz_strbuf_setf (&op->esil, "%s,PC,=", parsed_operands[0].esil); break; case RSP_OP_JAL: op->type = RZ_ANAL_OP_TYPE_CALL; - op->dst = rz_anal_value_new (); - op->dst->reg = rz_reg_get (anal->reg, "PC", RZ_REG_TYPE_GPR); + op->dst = rz_analysis_value_new (); + op->dst->reg = rz_reg_get (analysis->reg, "PC", RZ_REG_TYPE_GPR); op->src[0] = parsed_operands[0].value; rz_strbuf_setf (&op->esil, "%s,PC,=,0x%08" PFMT64x ",RA,=", parsed_operands[0].esil, op->fail); break; @@ -211,16 +211,16 @@ static int rsp_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *b, int len, op->delay = 1; op->eob = 1; op->fail = rsp_mem_addr (addr + 8, RSP_IMEM_OFFSET); - op->dst = rz_anal_value_new (); - op->dst->reg = rz_reg_get (anal->reg, "PC", RZ_REG_TYPE_GPR); + op->dst = rz_analysis_value_new (); + op->dst->reg = rz_reg_get (analysis->reg, "PC", RZ_REG_TYPE_GPR); op->src[0] = parsed_operands[0].value; rz_strbuf_setf (&op->esil, "%s,PC,=", parsed_operands[0].esil); break; case RSP_OP_BEQ: op->type = RZ_ANAL_OP_TYPE_CJMP; op->cond = RZ_ANAL_COND_EQ; - op->dst = rz_anal_value_new (); - op->dst->reg = rz_reg_get (anal->reg, "PC", RZ_REG_TYPE_GPR); + op->dst = rz_analysis_value_new (); + op->dst->reg = rz_reg_get (analysis->reg, "PC", RZ_REG_TYPE_GPR); op->src[0] = parsed_operands[0].value; op->src[1] = parsed_operands[1].value; rz_strbuf_setf (&op->esil, "%s,%s,==,$z,?{,%s,PC,=,}", parsed_operands[0].esil, parsed_operands[1].esil, parsed_operands[2].esil); @@ -228,8 +228,8 @@ static int rsp_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *b, int len, case RSP_OP_BNE: op->type = RZ_ANAL_OP_TYPE_CJMP; op->cond = RZ_ANAL_COND_NE; - op->dst = rz_anal_value_new (); - op->dst->reg = rz_reg_get (anal->reg, "PC", RZ_REG_TYPE_GPR); + op->dst = rz_analysis_value_new (); + op->dst->reg = rz_reg_get (analysis->reg, "PC", RZ_REG_TYPE_GPR); op->src[0] = parsed_operands[0].value; op->src[1] = parsed_operands[1].value; rz_strbuf_setf (&op->esil, "%s,%s,==,$z,!,?{,%s,PC,=,}", parsed_operands[0].esil, parsed_operands[1].esil, parsed_operands[2].esil); @@ -237,8 +237,8 @@ static int rsp_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *b, int len, case RSP_OP_BLEZ: op->type = RZ_ANAL_OP_TYPE_CJMP; op->cond = RZ_ANAL_COND_LE; - op->dst = rz_anal_value_new (); - op->dst->reg = rz_reg_get (anal->reg, "PC", RZ_REG_TYPE_GPR); + op->dst = rz_analysis_value_new (); + op->dst->reg = rz_reg_get (analysis->reg, "PC", RZ_REG_TYPE_GPR); op->src[0] = parsed_operands[0].value; op->src[1] = parsed_operands[1].value; rz_strbuf_setf (&op->esil, "%s,!,%s,0x80000000,&,!,!,|,?{,%s,PC,=,}", parsed_operands[0].esil, parsed_operands[0].esil, parsed_operands[1].esil); @@ -247,8 +247,8 @@ static int rsp_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *b, int len, case RSP_OP_BGTZ: op->type = RZ_ANAL_OP_TYPE_CJMP; op->cond = RZ_ANAL_COND_GT; - op->dst = rz_anal_value_new (); - op->dst->reg = rz_reg_get (anal->reg, "PC", RZ_REG_TYPE_GPR); + op->dst = rz_analysis_value_new (); + op->dst->reg = rz_reg_get (analysis->reg, "PC", RZ_REG_TYPE_GPR); op->src[0] = parsed_operands[0].value; op->src[1] = parsed_operands[1].value; rz_strbuf_setf (&op->esil, "%s,0x80000000,&,!,%s,!,!,&,?{,%s,PC,=,}", parsed_operands[0].esil, parsed_operands[0].esil, parsed_operands[1].esil); @@ -257,8 +257,8 @@ static int rsp_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *b, int len, case RSP_OP_BLTZ: op->type = RZ_ANAL_OP_TYPE_CJMP; op->cond = RZ_ANAL_COND_LT; - op->dst = rz_anal_value_new (); - op->dst->reg = rz_reg_get (anal->reg, "PC", RZ_REG_TYPE_GPR); + op->dst = rz_analysis_value_new (); + op->dst->reg = rz_reg_get (analysis->reg, "PC", RZ_REG_TYPE_GPR); op->src[0] = parsed_operands[0].value; op->src[1] = parsed_operands[1].value; rz_strbuf_setf (&op->esil, "%s,0x80000000,&,!,!,?{,%s,PC,=,}", parsed_operands[0].esil, parsed_operands[1].esil); @@ -267,8 +267,8 @@ static int rsp_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *b, int len, case RSP_OP_BGEZ: op->type = RZ_ANAL_OP_TYPE_CJMP; op->cond = RZ_ANAL_COND_GE; - op->dst = rz_anal_value_new (); - op->dst->reg = rz_reg_get (anal->reg, "PC", RZ_REG_TYPE_GPR); + op->dst = rz_analysis_value_new (); + op->dst->reg = rz_reg_get (analysis->reg, "PC", RZ_REG_TYPE_GPR); op->src[0] = parsed_operands[0].value; op->src[1] = parsed_operands[1].value; rz_strbuf_setf (&op->esil, "%s,0x80000000,&,!,?{,%s,PC,=,}", parsed_operands[0].esil, parsed_operands[1].esil); @@ -277,8 +277,8 @@ static int rsp_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *b, int len, case RSP_OP_BLTZAL: op->type = RZ_ANAL_OP_TYPE_CCALL; op->cond = RZ_ANAL_COND_LT; - op->dst = rz_anal_value_new (); - op->dst->reg = rz_reg_get (anal->reg, "PC", RZ_REG_TYPE_GPR); + op->dst = rz_analysis_value_new (); + op->dst->reg = rz_reg_get (analysis->reg, "PC", RZ_REG_TYPE_GPR); op->src[0] = parsed_operands[0].value; op->src[1] = parsed_operands[1].value; // TODO @@ -286,8 +286,8 @@ static int rsp_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *b, int len, case RSP_OP_BGEZAL: op->type = RZ_ANAL_OP_TYPE_CCALL; op->cond = RZ_ANAL_COND_GE; - op->dst = rz_anal_value_new (); - op->dst->reg = rz_reg_get (anal->reg, "PC", RZ_REG_TYPE_GPR); + op->dst = rz_analysis_value_new (); + op->dst->reg = rz_reg_get (analysis->reg, "PC", RZ_REG_TYPE_GPR); op->src[0] = parsed_operands[0].value; op->src[1] = parsed_operands[1].value; // TODO @@ -578,7 +578,7 @@ static int rsp_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *b, int len, } -static char *get_reg_profile(RzAnal *anal) { +static char *get_reg_profile(RzAnalysis *analysis) { static const char *p = "=PC pc\n" "=SP sp\n" @@ -682,11 +682,11 @@ static char *get_reg_profile(RzAnal *anal) { return strdup (p); } -static int archinfo(RzAnal *anal, int q) { +static int archinfo(RzAnalysis *analysis, int q) { return 4; } -RzAnalPlugin rz_anal_plugin_rsp = { +RzAnalysisPlugin rz_analysis_plugin_rsp = { .name = "rsp", .desc = "RSP code analysis plugin", .license = "LGPL3", @@ -701,7 +701,7 @@ RzAnalPlugin rz_anal_plugin_rsp = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_rsp, + .data = &rz_analysis_plugin_rsp, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_sh.c b/librz/analysis/p/analysis_sh.c similarity index 77% rename from librz/anal/p/anal_sh.c rename to librz/analysis/p/analysis_sh.c index 2c4b09b4eb..14aafedb2a 100644 --- a/librz/anal/p/anal_sh.c +++ b/librz/analysis/p/analysis_sh.c @@ -4,7 +4,7 @@ #include #include #include -#include +#include #define API static @@ -180,7 +180,7 @@ #define PC_IDX 16 /* for {bra,bsr} only: (sign-extend 12bit offset)<<1 + PC +4 */ -static ut64 disarm_12bit_offset (RzAnalOp *op, unsigned int insoff) { +static ut64 disarm_12bit_offset (RzAnalysisOp *op, unsigned int insoff) { ut64 off = insoff; /* sign extend if higher bit is 1 (0x0800) */ if ((off & 0x0800) == 0x0800) @@ -205,44 +205,44 @@ static ut64 disarm_8bit_offset (ut64 pc, ut32 offs) { static char *regs[]={"r0","r1","r2","r3","r4","r5","r6","r7","r8","r9","r10","r11","r12","r13","r14","r15","pc"}; -static RzAnalValue *anal_fill_ai_rg(RzAnal *anal, int idx) { - RzAnalValue *ret = rz_anal_value_new (); - ret->reg = rz_reg_get (anal->reg, regs[idx], RZ_REG_TYPE_GPR); +static RzAnalysisValue *analysis_fill_ai_rg(RzAnalysis *analysis, int idx) { + RzAnalysisValue *ret = rz_analysis_value_new (); + ret->reg = rz_reg_get (analysis->reg, regs[idx], RZ_REG_TYPE_GPR); return ret; } -static RzAnalValue *anal_fill_im(RzAnal *anal, st32 v) { - RzAnalValue *ret = rz_anal_value_new (); +static RzAnalysisValue *analysis_fill_im(RzAnalysis *analysis, st32 v) { + RzAnalysisValue *ret = rz_analysis_value_new (); ret->imm = v; return ret; } /* Implements @(disp,Rn) , size=1 for .b, 2 for .w, 4 for .l */ -static RzAnalValue *anal_fill_reg_disp_mem(RzAnal *anal, int reg, st64 delta, st64 size) { - RzAnalValue *ret = anal_fill_ai_rg (anal, reg); +static RzAnalysisValue *analysis_fill_reg_disp_mem(RzAnalysis *analysis, int reg, st64 delta, st64 size) { + RzAnalysisValue *ret = analysis_fill_ai_rg (analysis, reg); ret->memref = size; ret->delta = delta*size; return ret; } /* Rn */ -static RzAnalValue *anal_fill_reg_ref(RzAnal *anal, int reg, st64 size) { - RzAnalValue *ret = anal_fill_ai_rg (anal, reg); +static RzAnalysisValue *analysis_fill_reg_ref(RzAnalysis *analysis, int reg, st64 size) { + RzAnalysisValue *ret = analysis_fill_ai_rg (analysis, reg); ret->memref = size; return ret; } /* @(R0,Rx) references for all sizes */ -static RzAnalValue *anal_fill_r0_reg_ref(RzAnal *anal, int reg, st64 size) { - RzAnalValue *ret = anal_fill_ai_rg (anal, 0); - ret->regdelta = rz_reg_get (anal->reg, regs[reg], RZ_REG_TYPE_GPR); +static RzAnalysisValue *analysis_fill_r0_reg_ref(RzAnalysis *analysis, int reg, st64 size) { + RzAnalysisValue *ret = analysis_fill_ai_rg (analysis, 0); + ret->regdelta = rz_reg_get (analysis->reg, regs[reg], RZ_REG_TYPE_GPR); ret->memref = size; return ret; } // @(disp,PC) for size=2(.w), size=4(.l). disp is 0-extended -static RzAnalValue *anal_pcrel_disp_mov(RzAnal* anal, RzAnalOp* op, ut8 disp, int size) { - RzAnalValue *ret = rz_anal_value_new (); +static RzAnalysisValue *analysis_pcrel_disp_mov(RzAnalysis* analysis, RzAnalysisOp* op, ut8 disp, int size) { + RzAnalysisValue *ret = rz_analysis_value_new (); if (size==2) { ret->base = op->addr + 4; ret->delta = disp << 1; @@ -255,24 +255,24 @@ static RzAnalValue *anal_pcrel_disp_mov(RzAnal* anal, RzAnalOp* op, ut8 disp, in } //= PC+4+R -static RzAnalValue *anal_regrel_jump(RzAnal* anal, RzAnalOp* op, ut8 reg) { - RzAnalValue *ret = rz_anal_value_new (); - ret->reg = rz_reg_get (anal->reg, regs[reg], RZ_REG_TYPE_GPR); +static RzAnalysisValue *analysis_regrel_jump(RzAnalysis* analysis, RzAnalysisOp* op, ut8 reg) { + RzAnalysisValue *ret = rz_analysis_value_new (); + ret->reg = rz_reg_get (analysis->reg, regs[reg], RZ_REG_TYPE_GPR); ret->base = op->addr + 4; return ret; } /* 16 decoder routines, based on 1st nibble value */ -static int first_nibble_is_0(RzAnal* anal, RzAnalOp* op, ut16 code) { //STOP +static int first_nibble_is_0(RzAnalysis* analysis, RzAnalysisOp* op, ut16 code) { //STOP if (IS_BSRF (code)) { /* Call 'far' subroutine Rn+PC+4 */ op->type = RZ_ANAL_OP_TYPE_UCALL; op->delay = 1; - op->dst = anal_regrel_jump (anal, op, GET_TARGET_REG (code)); + op->dst = analysis_regrel_jump (analysis, op, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, "1,SETD,pc,2,+,pr,=,r%d,2,+,pc,+=", GET_TARGET_REG (code)); } else if (IS_BRAF (code)) { op->type = RZ_ANAL_OP_TYPE_UJMP; - op->dst = anal_regrel_jump (anal, op, GET_TARGET_REG (code)); + op->dst = analysis_regrel_jump (analysis, op, GET_TARGET_REG (code)); op->eob = true; op->delay = 1; rz_strbuf_setf (&op->esil, "1,SETD,r%d,2,+,pc,+=", GET_TARGET_REG (code)); @@ -290,33 +290,33 @@ static int first_nibble_is_0(RzAnal* anal, RzAnalOp* op, ut16 code) { //STOP rz_strbuf_setf (&op->esil, "1,SETD,r15,[4],pc,=,r15,4,+,[4],0xFFF0FFF,&,sr,=,8,r15,+="); } else if (IS_MOVB_REG_TO_R0REL (code)) { //0000nnnnmmmm0100 mov.b ,@(R0,) op->type = RZ_ANAL_OP_TYPE_STORE; - op->src[0] = anal_fill_ai_rg (anal, GET_SOURCE_REG (code)); - op->dst = anal_fill_r0_reg_ref (anal, GET_TARGET_REG (code), BYTE_SIZE); + op->src[0] = analysis_fill_ai_rg (analysis, GET_SOURCE_REG (code)); + op->dst = analysis_fill_r0_reg_ref (analysis, GET_TARGET_REG (code), BYTE_SIZE); rz_strbuf_setf (&op->esil, "r%d,0xFF,&,r0,r%d,+,=[1]", GET_SOURCE_REG (code), GET_TARGET_REG (code)); } else if (IS_MOVW_REG_TO_R0REL (code)) { op->type = RZ_ANAL_OP_TYPE_STORE; - op->src[0] = anal_fill_ai_rg (anal, GET_SOURCE_REG (code)); - op->dst = anal_fill_r0_reg_ref (anal, GET_TARGET_REG (code), WORD_SIZE); + op->src[0] = analysis_fill_ai_rg (analysis, GET_SOURCE_REG (code)); + op->dst = analysis_fill_r0_reg_ref (analysis, GET_TARGET_REG (code), WORD_SIZE); rz_strbuf_setf (&op->esil, "r%d,0xFFFF,&,r0,r%d,+,=[2]", GET_SOURCE_REG (code), GET_TARGET_REG (code)); } else if (IS_MOVL_REG_TO_R0REL (code)) { op->type = RZ_ANAL_OP_TYPE_STORE; - op->src[0] = anal_fill_ai_rg (anal, GET_SOURCE_REG (code)); - op->dst = anal_fill_r0_reg_ref(anal, GET_TARGET_REG (code), LONG_SIZE); + op->src[0] = analysis_fill_ai_rg (analysis, GET_SOURCE_REG (code)); + op->dst = analysis_fill_r0_reg_ref(analysis, GET_TARGET_REG (code), LONG_SIZE); rz_strbuf_setf (&op->esil, "r%d,r0,r%d,+,=[4]", GET_SOURCE_REG (code), GET_TARGET_REG (code)); } else if (IS_MOVB_R0REL_TO_REG (code)) { op->type = RZ_ANAL_OP_TYPE_LOAD; - op->src[0] = anal_fill_r0_reg_ref (anal, GET_SOURCE_REG (code), BYTE_SIZE); - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->src[0] = analysis_fill_r0_reg_ref (analysis, GET_SOURCE_REG (code), BYTE_SIZE); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, "r0,r%d,+,[1],r%d,=,0x000000FF,r%d,&=,r%d,0x80,&,?{,0xFFFFFF00,r%d,|=,}", GET_SOURCE_REG (code), GET_TARGET_REG (code), GET_TARGET_REG (code), GET_TARGET_REG (code), GET_TARGET_REG (code)); } else if (IS_MOVW_R0REL_TO_REG (code)) { op->type = RZ_ANAL_OP_TYPE_LOAD; - op->src[0] = anal_fill_r0_reg_ref (anal, GET_SOURCE_REG (code), WORD_SIZE); - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->src[0] = analysis_fill_r0_reg_ref (analysis, GET_SOURCE_REG (code), WORD_SIZE); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, "r0,r%d,+,[2],r%d,=,0x0000FFFF,r%d,&=,r%d,0x8000,&,?{,0xFFFF0000,r%d,|=,}", GET_SOURCE_REG (code), GET_TARGET_REG (code), GET_TARGET_REG (code), GET_TARGET_REG (code), GET_TARGET_REG (code)); } else if (IS_MOVL_R0REL_TO_REG (code)) { op->type = RZ_ANAL_OP_TYPE_LOAD; - op->src[0] = anal_fill_r0_reg_ref (anal, GET_SOURCE_REG (code), LONG_SIZE); - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->src[0] = analysis_fill_r0_reg_ref (analysis, GET_SOURCE_REG (code), LONG_SIZE); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, "r0,r%d,+,[4],r%d,=", GET_SOURCE_REG (code), GET_TARGET_REG (code)); } else if (IS_NOP (code)) { op->type = RZ_ANAL_OP_TYPE_NOP; @@ -335,31 +335,31 @@ static int first_nibble_is_0(RzAnal* anal, RzAnalOp* op, ut16 code) { //STOP rz_strbuf_setf (&op->esil, "0xFFFFFCFE,sr,&="); } else if (IS_MOVT (code)) { op->type = RZ_ANAL_OP_TYPE_MOV; - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, "0x1,sr,&,r%d,=", GET_TARGET_REG (code)); } else if (IS_MULL (code)) { //multiply long op->type = RZ_ANAL_OP_TYPE_MUL; - op->src[0] = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); - op->src[1] = anal_fill_ai_rg (anal, GET_SOURCE_REG (code)); + op->src[0] = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); + op->src[1] = analysis_fill_ai_rg (analysis, GET_SOURCE_REG (code)); rz_strbuf_setf (&op->esil, "r%d,r%d,*,macl,=", GET_TARGET_REG (code), GET_SOURCE_REG (code)); } else if (IS_SLEEP (code)) { op->type = RZ_ANAL_OP_TYPE_UNK; rz_strbuf_setf (&op->esil, "sleep_called,TRAP"); } else if (IS_STSMACH (code)) { //0000nnnn0000101_ sts MAC*, op->type = RZ_ANAL_OP_TYPE_MOV; - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, "mach,r%d,=", GET_TARGET_REG (code)); } else if (IS_STSMACL (code)) { //0000nnnn0000101_ sts MAC*, op->type = RZ_ANAL_OP_TYPE_MOV; - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, "macl,r%d,=", GET_TARGET_REG (code)); } else if (IS_STSLMACL (code)) { op->type = RZ_ANAL_OP_TYPE_MOV; - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, "macl,r%d,=", GET_TARGET_REG (code)); } else if (IS_STCSR1 (code)) { //0000nnnn00010010 stc {sr,gbr,vbr,ssr}, op->type = RZ_ANAL_OP_TYPE_MOV; - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); //todo: plug in src switch(GET_SOURCE_REG (code)) { case 0: @@ -378,7 +378,7 @@ static int first_nibble_is_0(RzAnal* anal, RzAnalOp* op, ut16 code) { //STOP } } else if (IS_STSPR (code)) { //0000nnnn00101010 sts PR, op->type = RZ_ANAL_OP_TYPE_MOV; - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, "pr,r%d,=", GET_TARGET_REG (code)); } else if (IS_MACL (code)) { rz_strbuf_setf (&op->esil, @@ -412,44 +412,44 @@ static int first_nibble_is_0(RzAnal* anal, RzAnalOp* op, ut16 code) { //STOP } //nibble=1; 0001nnnnmmmmi4*4 mov.l ,@(,) -static int movl_reg_rdisp(RzAnal* anal, RzAnalOp* op, ut16 code) { +static int movl_reg_rdisp(RzAnalysis* analysis, RzAnalysisOp* op, ut16 code) { op->type = RZ_ANAL_OP_TYPE_STORE; - op->src[0] = anal_fill_ai_rg (anal, GET_SOURCE_REG (code)); - op->dst = anal_fill_reg_disp_mem (anal, GET_TARGET_REG (code), code & 0x0F, LONG_SIZE); + op->src[0] = analysis_fill_ai_rg (analysis, GET_SOURCE_REG (code)); + op->dst = analysis_fill_reg_disp_mem (analysis, GET_TARGET_REG (code), code & 0x0F, LONG_SIZE); rz_strbuf_setf (&op->esil, "r%d,r%d,0x%x,+,=[4]", GET_SOURCE_REG (code), GET_TARGET_REG (code), (code & 0xF) << 2); return op->size; } -static int first_nibble_is_2(RzAnal* anal, RzAnalOp* op, ut16 code) { +static int first_nibble_is_2(RzAnalysis* analysis, RzAnalysisOp* op, ut16 code) { if (IS_MOVB_REG_TO_REGREF (code)) { // 0010nnnnmmmm0000 mov.b ,@ op->type = RZ_ANAL_OP_TYPE_STORE; - op->src[0] = anal_fill_ai_rg (anal, GET_SOURCE_REG (code)); - op->dst = anal_fill_reg_ref (anal, GET_TARGET_REG (code), BYTE_SIZE); + op->src[0] = analysis_fill_ai_rg (analysis, GET_SOURCE_REG (code)); + op->dst = analysis_fill_reg_ref (analysis, GET_TARGET_REG (code), BYTE_SIZE); rz_strbuf_setf (&op->esil, "r%d,r%d,=[1]", GET_SOURCE_REG (code), GET_TARGET_REG (code)); } else if (IS_MOVW_REG_TO_REGREF (code)) { op->type = RZ_ANAL_OP_TYPE_STORE; - op->src[0] = anal_fill_ai_rg (anal, GET_SOURCE_REG (code)); - op->dst = anal_fill_reg_ref (anal, GET_TARGET_REG (code), WORD_SIZE); + op->src[0] = analysis_fill_ai_rg (analysis, GET_SOURCE_REG (code)); + op->dst = analysis_fill_reg_ref (analysis, GET_TARGET_REG (code), WORD_SIZE); rz_strbuf_setf (&op->esil, "r%d,r%d,=[2]", GET_SOURCE_REG (code) & 0xFF, GET_TARGET_REG (code)); } else if (IS_MOVL_REG_TO_REGREF (code)) { op->type = RZ_ANAL_OP_TYPE_STORE; - op->src[0] = anal_fill_ai_rg (anal, GET_SOURCE_REG (code)); - op->dst = anal_fill_reg_ref (anal, GET_TARGET_REG (code), LONG_SIZE); + op->src[0] = analysis_fill_ai_rg (analysis, GET_SOURCE_REG (code)); + op->dst = analysis_fill_reg_ref (analysis, GET_TARGET_REG (code), LONG_SIZE); rz_strbuf_setf (&op->esil, "r%d,r%d,=[4]", GET_SOURCE_REG (code) & 0xFF, GET_TARGET_REG (code)); } else if (IS_AND_REGS (code)) { op->type = RZ_ANAL_OP_TYPE_AND; - op->src[0] = anal_fill_ai_rg (anal, GET_SOURCE_REG (code)); - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->src[0] = analysis_fill_ai_rg (analysis, GET_SOURCE_REG (code)); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, "r%d,r%d,&=", GET_SOURCE_REG (code), GET_TARGET_REG (code)); } else if (IS_XOR_REGS (code)) { op->type = RZ_ANAL_OP_TYPE_XOR; - op->src[0] = anal_fill_ai_rg (anal, GET_SOURCE_REG (code)); - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->src[0] = analysis_fill_ai_rg (analysis, GET_SOURCE_REG (code)); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, "r%d,r%d,^=", GET_SOURCE_REG (code), GET_TARGET_REG (code)); } else if (IS_OR_REGS (code)) { op->type = RZ_ANAL_OP_TYPE_OR; - op->src[0] = anal_fill_ai_rg (anal, GET_SOURCE_REG (code)); - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->src[0] = analysis_fill_ai_rg (analysis, GET_SOURCE_REG (code)); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, "r%d,r%d,|=", GET_SOURCE_REG (code), GET_TARGET_REG (code)); } else if (IS_PUSHB (code)) { op->type = RZ_ANAL_OP_TYPE_PUSH; @@ -465,27 +465,27 @@ static int first_nibble_is_2(RzAnal* anal, RzAnalOp* op, ut16 code) { rz_strbuf_setf (&op->esil, "1,sr,|=,r%d,r%d,&,?{,0xFFFFFFFE,sr,&=,}", GET_SOURCE_REG (code), GET_TARGET_REG (code)); } else if (IS_CMPSTR (code)) { //0010nnnnmmmm1100 cmp/str , op->type = RZ_ANAL_OP_TYPE_ACMP; //maybe not? - op->src[0] = anal_fill_ai_rg (anal, GET_SOURCE_REG (code)); - op->src[1] = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->src[0] = analysis_fill_ai_rg (analysis, GET_SOURCE_REG (code)); + op->src[1] = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, "0xFFFFFFFE,sr,&=,24,r%d,r%d,^,>>,0xFF,&,!,?{,1,sr,|=,},16,r%d,r%d,^,>>,0xFF,&,!,?{,1,sr,|=,},8,r%d,r%d,^,>>,0xFF,&,!,?{,1,sr,|=,},r%d,r%d,^,0xFF,&,!,?{,1,sr,|=,}", GET_SOURCE_REG (code), GET_TARGET_REG (code), GET_SOURCE_REG (code), GET_TARGET_REG (code), GET_SOURCE_REG (code), GET_TARGET_REG (code), GET_SOURCE_REG (code), GET_TARGET_REG (code)); } else if (IS_XTRCT (code)) { //0010nnnnmmmm1101 xtrct , op->type = RZ_ANAL_OP_TYPE_MOV; - op->src[0] = anal_fill_ai_rg (anal, GET_SOURCE_REG (code)); - op->src[1] = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->src[0] = analysis_fill_ai_rg (analysis, GET_SOURCE_REG (code)); + op->src[1] = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, "16,r%d,0xFFFF,&,<<,16,r%d,0xFFFF0000,&,>>,|,r%d,=", GET_SOURCE_REG (code), GET_TARGET_REG (code), GET_TARGET_REG (code)); } else if (IS_DIV0S (code)) { op->type = RZ_ANAL_OP_TYPE_DIV; rz_strbuf_setf (&op->esil, "0xFFFFFCFE,sr,&=,r%d,0x80000000,&,?{,0x200,sr,|=,},r%d,0x80000000,&,?{,0x100,sr,|=,},sr,1,sr,<<,^,0x200,&,?{,1,sr,|=,}", GET_SOURCE_REG (code), GET_TARGET_REG (code)); } else if (IS_MULUW (code)) { op->type = RZ_ANAL_OP_TYPE_MUL; - op->src[0] = anal_fill_ai_rg(anal, GET_SOURCE_REG (code)); - op->src[1] = anal_fill_ai_rg(anal, GET_TARGET_REG (code)); + op->src[0] = analysis_fill_ai_rg(analysis, GET_SOURCE_REG (code)); + op->src[1] = analysis_fill_ai_rg(analysis, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, "r%d,0xFFFF,&,r%d,0xFFFF,&,*,macl,=", GET_SOURCE_REG (code), GET_TARGET_REG (code)); } else if (IS_MULSW (code)) { //0010nnnnmmmm111_ mul{s,u}.w , op->type = RZ_ANAL_OP_TYPE_MUL; - op->src[0] = anal_fill_ai_rg(anal, GET_SOURCE_REG (code)); - op->src[1] = anal_fill_ai_rg(anal, GET_TARGET_REG (code)); + op->src[0] = analysis_fill_ai_rg(analysis, GET_SOURCE_REG (code)); + op->src[1] = analysis_fill_ai_rg(analysis, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, S16_EXT("r%d") "," S16_EXT("r%d") ",*,macl,=", GET_SOURCE_REG (code), GET_TARGET_REG (code)); } @@ -493,67 +493,67 @@ static int first_nibble_is_2(RzAnal* anal, RzAnalOp* op, ut16 code) { } -static int first_nibble_is_3(RzAnal* anal, RzAnalOp* op, ut16 code) { +static int first_nibble_is_3(RzAnalysis* analysis, RzAnalysisOp* op, ut16 code) { //TODO Handle carry/overflow , CMP/xx? if (IS_ADD (code)) { op->type = RZ_ANAL_OP_TYPE_ADD; - op->src[0] = anal_fill_ai_rg (anal, GET_SOURCE_REG (code)); - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->src[0] = analysis_fill_ai_rg (analysis, GET_SOURCE_REG (code)); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, "r%d,r%d,+=", GET_SOURCE_REG (code), GET_TARGET_REG (code)); } else if (IS_ADDC (code)) { op->type = RZ_ANAL_OP_TYPE_ADD; - op->src[0] = anal_fill_ai_rg (anal, GET_SOURCE_REG (code)); - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->src[0] = analysis_fill_ai_rg (analysis, GET_SOURCE_REG (code)); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, "sr,0x1,&,0xFFFFFFFE,sr,&=,r%d,+=,31,$c,sr,|,sr,:=,r%d,r%d,+=,31,$c,sr,|,sr,:=", GET_TARGET_REG (code), GET_SOURCE_REG (code), GET_TARGET_REG (code)); } else if (IS_ADDV (code)) { op->type = RZ_ANAL_OP_TYPE_ADD; - op->src[0] = anal_fill_ai_rg (anal, GET_SOURCE_REG (code)); - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->src[0] = analysis_fill_ai_rg (analysis, GET_SOURCE_REG (code)); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, "0xFFFFFFFE,sr,&=,r%d,r%d,+=,31,$o,sr,|=", GET_SOURCE_REG (code), GET_TARGET_REG (code)); } else if (IS_SUB (code)) { op->type = RZ_ANAL_OP_TYPE_SUB; - op->src[0] = anal_fill_ai_rg (anal, GET_SOURCE_REG (code)); - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->src[0] = analysis_fill_ai_rg (analysis, GET_SOURCE_REG (code)); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, "r%d,r%d,-=", GET_SOURCE_REG (code), GET_TARGET_REG (code)); } else if (IS_SUBC (code)) { op->type = RZ_ANAL_OP_TYPE_SUB; - op->src[0] = anal_fill_ai_rg (anal, GET_SOURCE_REG (code)); - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->src[0] = analysis_fill_ai_rg (analysis, GET_SOURCE_REG (code)); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, "sr,1,&," CLR_T ",r%d,-=,31,$b,sr,|,sr,:=,r%d,r%d,-=,31,$b,sr,|,sr,:=", GET_TARGET_REG (code), GET_SOURCE_REG (code), GET_TARGET_REG (code)); } else if (IS_SUBV (code)) { op->type = RZ_ANAL_OP_TYPE_SUB; - op->src[0] = anal_fill_ai_rg (anal, GET_SOURCE_REG (code)); - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->src[0] = analysis_fill_ai_rg (analysis, GET_SOURCE_REG (code)); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, CLR_T ",r%d,r%d,-=,31,$o,sr,|,sr,:=", GET_SOURCE_REG(code), GET_TARGET_REG (code)); } else if (IS_CMPEQ (code)) { op->type = RZ_ANAL_OP_TYPE_CMP; - op->src[0] = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); - op->src[1] = anal_fill_ai_rg (anal, GET_SOURCE_REG (code)); + op->src[0] = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); + op->src[1] = analysis_fill_ai_rg (analysis, GET_SOURCE_REG (code)); rz_strbuf_setf (&op->esil, "0xFFFFFFFE,sr,&,r%d,r%d,^,!,|,sr,=", GET_SOURCE_REG (code), GET_TARGET_REG (code)); } else if (IS_CMPGE (code)) { op->type = RZ_ANAL_OP_TYPE_CMP; - op->src[0] = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); - op->src[1] = anal_fill_ai_rg (anal, GET_SOURCE_REG (code)); + op->src[0] = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); + op->src[1] = analysis_fill_ai_rg (analysis, GET_SOURCE_REG (code)); rz_strbuf_setf (&op->esil, "0xFFFFFFFE,sr,&=,r%d,r%d,>=,?{,0x1,sr,|=,}", GET_SOURCE_REG (code), GET_TARGET_REG (code)); } else if (IS_CMPGT (code)) { op->type = RZ_ANAL_OP_TYPE_CMP; - op->src[0] = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); - op->src[1] = anal_fill_ai_rg (anal, GET_SOURCE_REG (code)); + op->src[0] = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); + op->src[1] = analysis_fill_ai_rg (analysis, GET_SOURCE_REG (code)); rz_strbuf_setf (&op->esil, "0xFFFFFFFE,sr,&=,r%d,r%d,>,?{,0x1,sr,|=,}", GET_SOURCE_REG (code), GET_TARGET_REG (code)); } else if (IS_CMPHI (code)) { op->type = RZ_ANAL_OP_TYPE_CMP; - op->src[0] = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); - op->src[1] = anal_fill_ai_rg (anal, GET_SOURCE_REG (code)); + op->src[0] = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); + op->src[1] = analysis_fill_ai_rg (analysis, GET_SOURCE_REG (code)); rz_strbuf_setf (&op->esil, "0xFFFFFFFE,sr,&=,r%d,0x100000000,+,r%d,0x100000000,+,>,?{,0x1,sr,|=,}", GET_SOURCE_REG (code), GET_TARGET_REG (code)); } else if (IS_CMPHS (code)) { op->type = RZ_ANAL_OP_TYPE_CMP; - op->src[0] = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); - op->src[1] = anal_fill_ai_rg (anal, GET_SOURCE_REG (code)); + op->src[0] = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); + op->src[1] = analysis_fill_ai_rg (analysis, GET_SOURCE_REG (code)); rz_strbuf_setf (&op->esil, "0xFFFFFFFE,sr,&=,r%d,0x100000000,+,r%d,0x100000000,+,>=,?{,0x1,sr,|=,}", GET_SOURCE_REG (code), GET_TARGET_REG (code)); } else if (IS_DIV1 (code)) { op->type = RZ_ANAL_OP_TYPE_DIV; - op->src[0] = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); - op->src[1] = anal_fill_ai_rg (anal, GET_SOURCE_REG (code)); + op->src[0] = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); + op->src[1] = analysis_fill_ai_rg (analysis, GET_SOURCE_REG (code)); rz_strbuf_setf (&op->esil, "1,sr,>>,sr,^,0x80,&," //old_Q^M "0xFFFFFF7F,sr,&=," @@ -580,13 +580,13 @@ static int first_nibble_is_3(RzAnal* anal, RzAnalOp* op, ut16 code) { GET_TARGET_REG (code)); } else if (IS_DMULU (code)) { op->type = RZ_ANAL_OP_TYPE_MUL; - op->src[0] = anal_fill_ai_rg (anal, GET_SOURCE_REG (code)); - op->src[1] = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->src[0] = analysis_fill_ai_rg (analysis, GET_SOURCE_REG (code)); + op->src[1] = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, "32,r%d,r%d,*,DUP,0xFFFFFFFF,&,macl,=,>>,mach,=", GET_SOURCE_REG (code), GET_TARGET_REG (code)); } else if (IS_DMULS (code)) { op->type = RZ_ANAL_OP_TYPE_MUL; - op->src[0] = anal_fill_ai_rg (anal, GET_SOURCE_REG (code)); - op->src[1] = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->src[0] = analysis_fill_ai_rg (analysis, GET_SOURCE_REG (code)); + op->src[1] = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, "32,r%d,r%d,0x80000000,&,?{,0xFFFFFFFF00000000,+,},r%d,r%d,0x80000000,&,?{,0xFFFFFFFF00000000,+,},*,DUP,0xFFFFFFFF,&,macl,=,>>,mach,=", GET_SOURCE_REG (code), GET_SOURCE_REG (code), GET_TARGET_REG (code), GET_TARGET_REG (code)); } return op->size; @@ -594,7 +594,7 @@ static int first_nibble_is_3(RzAnal* anal, RzAnalOp* op, ut16 code) { -static int first_nibble_is_4(RzAnal* anal, RzAnalOp* op, ut16 code) { +static int first_nibble_is_4(RzAnalysis* analysis, RzAnalysisOp* op, ut16 code) { switch(code & 0xF0FF) { //TODO: change to common } else if construction case 0x4020: //shal op->type = RZ_ANAL_OP_TYPE_SAL; @@ -644,11 +644,11 @@ static int first_nibble_is_4(RzAnal* anal, RzAnalOp* op, ut16 code) { // op->type = RZ_ANAL_OP_TYPE_UCALL; //call to reg op->type = RZ_ANAL_OP_TYPE_RCALL; //call to reg op->delay = 1; - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, "1,SETD,pc,2,+,pr,=,r%d,pc,=", GET_TARGET_REG (code)); } else if (IS_JMP (code)) { op->type = RZ_ANAL_OP_TYPE_UJMP; //jmp to reg - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); op->delay = 1; op->eob = true; rz_strbuf_setf (&op->esil, "1,SETD,r%d,pc,=", GET_TARGET_REG (code)); @@ -770,41 +770,41 @@ static int first_nibble_is_4(RzAnal* anal, RzAnalOp* op, ut16 code) { } //nibble=5; 0101nnnnmmmmi4*4 mov.l @(,), -static int movl_rdisp_reg(RzAnal* anal, RzAnalOp* op, ut16 code) { +static int movl_rdisp_reg(RzAnalysis* analysis, RzAnalysisOp* op, ut16 code) { op->type = RZ_ANAL_OP_TYPE_LOAD; - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); - op->src[0] = anal_fill_reg_disp_mem (anal, GET_SOURCE_REG (code), code & 0x0F, LONG_SIZE); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); + op->src[0] = analysis_fill_reg_disp_mem (analysis, GET_SOURCE_REG (code), code & 0x0F, LONG_SIZE); rz_strbuf_setf (&op->esil, "r%d,0x%x,+,[4],r%d,=", GET_SOURCE_REG (code), (code&0xF) * 4, GET_TARGET_REG (code)); return op->size; } -static int first_nibble_is_6(RzAnal* anal, RzAnalOp* op, ut16 code) { +static int first_nibble_is_6(RzAnalysis* analysis, RzAnalysisOp* op, ut16 code) { if (IS_MOV_REGS (code)) { op->type = RZ_ANAL_OP_TYPE_MOV; - op->src[0] = anal_fill_ai_rg (anal, GET_SOURCE_REG (code)); - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->src[0] = analysis_fill_ai_rg (analysis, GET_SOURCE_REG (code)); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, "r%d,r%d,=", GET_SOURCE_REG (code), GET_TARGET_REG (code)); } else if (IS_MOVB_REGREF_TO_REG (code)) { op->type = RZ_ANAL_OP_TYPE_LOAD; - op->src[0] = anal_fill_reg_ref (anal, GET_SOURCE_REG (code), BYTE_SIZE); - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->src[0] = analysis_fill_reg_ref (analysis, GET_SOURCE_REG (code), BYTE_SIZE); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, "0x000000FF,r%d,&=,r%d,[1],DUP,0x80,&,?{,0xFFFFFF00,|=,},r%d,=", GET_TARGET_REG (code), GET_SOURCE_REG (code), GET_TARGET_REG (code)); } else if (IS_MOVW_REGREF_TO_REG (code)) { op->type = RZ_ANAL_OP_TYPE_LOAD; - op->src[0] = anal_fill_reg_ref (anal, GET_SOURCE_REG (code), WORD_SIZE); - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->src[0] = analysis_fill_reg_ref (analysis, GET_SOURCE_REG (code), WORD_SIZE); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, "0x0000FFFF,r%d,&=,r%d,[2],DUP,0x8000,&,?{,0xFFFF0000,|=,},r%d,=", GET_TARGET_REG (code), GET_SOURCE_REG (code), GET_TARGET_REG (code)); } else if (IS_MOVL_REGREF_TO_REG (code)) { op->type = RZ_ANAL_OP_TYPE_LOAD; - op->src[0] = anal_fill_reg_ref (anal, GET_SOURCE_REG (code), LONG_SIZE); - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->src[0] = analysis_fill_reg_ref (analysis, GET_SOURCE_REG (code), LONG_SIZE); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, "r%d,[4],r%d,=", GET_SOURCE_REG (code), GET_TARGET_REG (code)); } else if (IS_EXT (code)) { //ext{s,u}.{b,w} instructs. todo : more detail ? op->type = RZ_ANAL_OP_TYPE_MOV; - op->src[0] = anal_fill_ai_rg (anal, GET_SOURCE_REG (code)); - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->src[0] = analysis_fill_ai_rg (analysis, GET_SOURCE_REG (code)); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); switch(code & 0xF) { case 0xC: //EXTU.B rz_strbuf_setf (&op->esil, "r%d,0xFF,&,r%d,=", GET_SOURCE_REG (code), GET_TARGET_REG (code)); @@ -824,33 +824,33 @@ static int first_nibble_is_6(RzAnal* anal, RzAnalOp* op, ut16 code) { } } else if (IS_MOVB_POP (code)) { op->type = RZ_ANAL_OP_TYPE_POP; - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, "r%d,[1],DUP,0x80,&,?{,0xFFFFFF00,|,},r%d,=,1,r%d,+=", GET_SOURCE_REG (code), GET_TARGET_REG (code), GET_SOURCE_REG (code)); } else if (IS_MOVW_POP (code)) { op->type = RZ_ANAL_OP_TYPE_POP; - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, "r%d,[2],DUP,0x8000,&,?{,0xFFFF0000,|,},r%d,=,2,r%d,+=", GET_SOURCE_REG (code), GET_TARGET_REG (code), GET_SOURCE_REG (code)); } else if (IS_MOVL_POP (code)) { op->type = RZ_ANAL_OP_TYPE_POP; - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, "r%d,[4],r%d,=,4,r%d,+=", GET_SOURCE_REG (code), GET_TARGET_REG (code), GET_SOURCE_REG (code)); } else if (IS_NEG (code)) { //todo: neg and negc details op->type = RZ_ANAL_OP_TYPE_UNK; rz_strbuf_setf (&op->esil, "r%d,0,-,r%d,=", GET_SOURCE_REG (code), GET_TARGET_REG (code)); - op->src[0] = anal_fill_ai_rg (anal, GET_SOURCE_REG (code)); - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->src[0] = analysis_fill_ai_rg (analysis, GET_SOURCE_REG (code)); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); } else if (IS_NEGC (code)) { op->type = RZ_ANAL_OP_TYPE_UNK; rz_strbuf_setf (&op->esil, "1,sr,&,0xFFFFFFFE,sr,&=,r%d,+,0,-,31,$b,sr,|,sr,=,r%d,=", GET_SOURCE_REG (code), GET_TARGET_REG (code)); - op->src[0] = anal_fill_ai_rg (anal, GET_SOURCE_REG (code)); - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->src[0] = analysis_fill_ai_rg (analysis, GET_SOURCE_REG (code)); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); } else if (IS_NOT (code)) { //todo : details? rz_strbuf_setf (&op->esil, "0xFFFFFFFF,r%d,^,r%d,=", GET_SOURCE_REG (code), GET_TARGET_REG (code)); op->type = RZ_ANAL_OP_TYPE_NOT; - op->src[0] = anal_fill_ai_rg (anal, GET_SOURCE_REG (code)); - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->src[0] = analysis_fill_ai_rg (analysis, GET_SOURCE_REG (code)); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); } else if (IS_SWAPB (code)) { rz_strbuf_setf (&op->esil, "r%d,0xFFFF0000,&,8,r%d,0xFF,&,<<,|,8,r%d,0xFF00,&,>>,|,r%d,=", GET_SOURCE_REG (code), GET_SOURCE_REG (code), GET_SOURCE_REG (code), GET_TARGET_REG (code)); op->type = RZ_ANAL_OP_TYPE_MOV; @@ -864,15 +864,15 @@ static int first_nibble_is_6(RzAnal* anal, RzAnalOp* op, ut16 code) { //nibble=7; 0111nnnni8*1.... add #, -static int add_imm(RzAnal* anal, RzAnalOp* op, ut16 code) { +static int add_imm(RzAnalysis* analysis, RzAnalysisOp* op, ut16 code) { op->type = RZ_ANAL_OP_TYPE_ADD; - op->src[0] = anal_fill_im (anal, (st8)(code & 0xFF)); //Casting to (st8) forces sign-extension. - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->src[0] = analysis_fill_im (analysis, (st8)(code & 0xFF)); //Casting to (st8) forces sign-extension. + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, "0x%x,DUP,0x80,&,?{,0xFFFFFF00,|,},r%d,+=", code & 0xFF, GET_TARGET_REG (code)); return op->size; } -static int first_nibble_is_8(RzAnal* anal, RzAnalOp* op, ut16 code) { +static int first_nibble_is_8(RzAnalysis* analysis, RzAnalysisOp* op, ut16 code) { if (IS_BT_OR_BF (code)) { op->type = RZ_ANAL_OP_TYPE_CJMP; //Jump if true or jump if false insns op->jump = disarm_8bit_offset (op->addr, GET_BTF_OFFSET (code)); @@ -892,14 +892,14 @@ static int first_nibble_is_8(RzAnal* anal, RzAnalOp* op, ut16 code) { } else if (IS_MOVB_REGDISP_R0 (code)) { // 10000100mmmmi4*1 mov.b @(,),R0 op->type = RZ_ANAL_OP_TYPE_LOAD; - op->dst = anal_fill_ai_rg (anal, 0); - op->src[0] = anal_fill_reg_disp_mem (anal, GET_SOURCE_REG (code), code & 0x0F, BYTE_SIZE); + op->dst = analysis_fill_ai_rg (analysis, 0); + op->src[0] = analysis_fill_reg_disp_mem (analysis, GET_SOURCE_REG (code), code & 0x0F, BYTE_SIZE); rz_strbuf_setf (&op->esil, "r%d,0x%x,+,[1],DUP,0x80,&,?{,0xFFFFFF00,|,},r0,=", GET_SOURCE_REG (code), code & 0xF); } else if (IS_MOVW_REGDISP_R0 (code)) { // 10000101mmmmi4*2 mov.w @(,),R0 op->type = RZ_ANAL_OP_TYPE_LOAD; - op->dst = anal_fill_ai_rg (anal, 0); - op->src[0] = anal_fill_reg_disp_mem (anal, GET_SOURCE_REG (code), code & 0x0F, WORD_SIZE); + op->dst = analysis_fill_ai_rg (analysis, 0); + op->src[0] = analysis_fill_reg_disp_mem (analysis, GET_SOURCE_REG (code), code & 0x0F, WORD_SIZE); rz_strbuf_setf (&op->esil, "r%d,0x%x,+,[2],DUP,0x8000,&,?{,0xFFFF0000,|,},r0,=", GET_SOURCE_REG (code), (code & 0xF) * 2); } else if (IS_CMPIMM (code)) { op->type = RZ_ANAL_OP_TYPE_CMP; @@ -907,24 +907,24 @@ static int first_nibble_is_8(RzAnal* anal, RzAnalOp* op, ut16 code) { } else if (IS_MOVB_R0_REGDISP (code)) { /* 10000000mmmmi4*1 mov.b R0,@(,)*/ op->type = RZ_ANAL_OP_TYPE_STORE; - op->src[0] = anal_fill_ai_rg (anal, 0); - op->dst = anal_fill_reg_disp_mem (anal, GET_SOURCE_REG (code), code & 0x0F, BYTE_SIZE); + op->src[0] = analysis_fill_ai_rg (analysis, 0); + op->dst = analysis_fill_reg_disp_mem (analysis, GET_SOURCE_REG (code), code & 0x0F, BYTE_SIZE); rz_strbuf_setf (&op->esil, "r0,0xFF,&,0x%x,r%d,+,=[1]", code & 0xF, GET_SOURCE_REG (code)); } else if (IS_MOVW_R0_REGDISP (code)) { // 10000001mmmmi4*2 mov.w R0,@(,)) op->type = RZ_ANAL_OP_TYPE_STORE; - op->src[0] = anal_fill_ai_rg (anal, 0); - op->dst = anal_fill_reg_disp_mem (anal, GET_SOURCE_REG (code), code & 0x0F, WORD_SIZE); + op->src[0] = analysis_fill_ai_rg (analysis, 0); + op->dst = analysis_fill_reg_disp_mem (analysis, GET_SOURCE_REG (code), code & 0x0F, WORD_SIZE); rz_strbuf_setf (&op->esil, "r0,0xFFFF,&,0x%x,r%d,+,=[2]", (code & 0xF) * 2, GET_SOURCE_REG (code)); } return op->size; } //nibble=9; 1001nnnni8p2.... mov.w @(,PC), -static int movw_pcdisp_reg(RzAnal* anal, RzAnalOp* op, ut16 code) { +static int movw_pcdisp_reg(RzAnalysis* analysis, RzAnalysisOp* op, ut16 code) { op->type = RZ_ANAL_OP_TYPE_LOAD; - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); - op->src[0] = rz_anal_value_new (); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); + op->src[0] = rz_analysis_value_new (); op->src[0]->base = (code & 0xFF) * 2+op->addr + 4; op->src[0]->memref=1; rz_strbuf_setf (&op->esil, "0x%" PFMT64x ",[2],r%d,=,r%d,0x8000,&,?{,0xFFFF0000,r%d,|=,}", op->src[0]->base, GET_TARGET_REG (code), GET_TARGET_REG (code), GET_TARGET_REG (code)); @@ -932,7 +932,7 @@ static int movw_pcdisp_reg(RzAnal* anal, RzAnalOp* op, ut16 code) { } //nibble=A; 1010i12......... bra -static int bra(RzAnal* anal, RzAnalOp* op, ut16 code) { +static int bra(RzAnalysis* analysis, RzAnalysisOp* op, ut16 code) { /* Unconditional branch, relative to PC */ op->type = RZ_ANAL_OP_TYPE_JMP; op->delay = 1; @@ -943,7 +943,7 @@ static int bra(RzAnal* anal, RzAnalOp* op, ut16 code) { } //nibble=B; 1011i12......... bsr -static int bsr(RzAnal* anal, RzAnalOp* op, ut16 code) { +static int bsr(RzAnalysis* analysis, RzAnalysisOp* op, ut16 code) { /* Subroutine call, relative to PC */ op->type = RZ_ANAL_OP_TYPE_CALL; op->jump = disarm_12bit_offset (op, GET_BRA_OFFSET (code)); @@ -952,7 +952,7 @@ static int bsr(RzAnal* anal, RzAnalOp* op, ut16 code) { return op->size; } -static int first_nibble_is_c(RzAnal* anal, RzAnalOp* op, ut16 code) { +static int first_nibble_is_c(RzAnalysis* analysis, RzAnalysisOp* op, ut16 code) { if (IS_TRAP (code)) { op->type = RZ_ANAL_OP_TYPE_SWI; op->val = (ut8)(code & 0xFF); @@ -960,13 +960,13 @@ static int first_nibble_is_c(RzAnal* anal, RzAnalOp* op, ut16 code) { } else if (IS_MOVA_PCREL_R0 (code)) { // 11000111i8p4.... mova @(,PC),R0 op->type = RZ_ANAL_OP_TYPE_LEA; - op->src[0] = anal_pcrel_disp_mov (anal, op, code & 0xFF, LONG_SIZE); //this is wrong ! - op->dst = anal_fill_ai_rg (anal, 0); //Always R0 + op->src[0] = analysis_pcrel_disp_mov (analysis, op, code & 0xFF, LONG_SIZE); //this is wrong ! + op->dst = analysis_fill_ai_rg (analysis, 0); //Always R0 rz_strbuf_setf (&op->esil, "0x%x,pc,+,r0,=", (code & 0xFF) * 4); } else if (IS_BINLOGIC_IMM_R0 (code)) { // 110010__i8 (binop) #imm, R0 - op->src[0] = anal_fill_im (anal, code & 0xFF); - op->src[1] = anal_fill_ai_rg (anal, 0); //Always R0 - op->dst = anal_fill_ai_rg (anal, 0); //Always R0 except tst #imm, R0 + op->src[0] = analysis_fill_im (analysis, code & 0xFF); + op->src[1] = analysis_fill_ai_rg (analysis, 0); //Always R0 + op->dst = analysis_fill_ai_rg (analysis, 0); //Always R0 except tst #imm, R0 switch(code & 0xFF00) { case 0xC800: //tst //TODO : get correct op->dst ! (T flag) @@ -987,7 +987,7 @@ static int first_nibble_is_c(RzAnal* anal, RzAnalOp* op, ut16 code) { break; } } else if (IS_BINLOGIC_IMM_GBR (code)) { //110011__i8 (binop).b #imm, @(R0,gbr) - op->src[0] = anal_fill_im (anal, code & 0xFF); + op->src[0] = analysis_fill_im (analysis, code & 0xFF); switch(code & 0xFF00) { case 0xCC00: //tst //TODO : get correct op->dst ! (T flag) @@ -1010,27 +1010,27 @@ static int first_nibble_is_c(RzAnal* anal, RzAnalOp* op, ut16 code) { //TODO : implement @(R0,gbr) dest and src[1] } else if (IS_MOVB_R0_GBRREF (code)) { op->type = RZ_ANAL_OP_TYPE_STORE; - op->src[0] = anal_fill_ai_rg (anal, 0); + op->src[0] = analysis_fill_ai_rg (analysis, 0); rz_strbuf_setf (&op->esil, "r0,gbr,0x%x,+,=[1]", code & 0xFF); } else if (IS_MOVW_R0_GBRREF (code)) { op->type = RZ_ANAL_OP_TYPE_STORE; - op->src[0] = anal_fill_ai_rg (anal, 0); + op->src[0] = analysis_fill_ai_rg (analysis, 0); rz_strbuf_setf (&op->esil, "r0,gbr,0x%x,+,=[2]", (code & 0xFF) * 2); } else if (IS_MOVL_R0_GBRREF (code)) { op->type = RZ_ANAL_OP_TYPE_STORE; - op->src[0] = anal_fill_ai_rg (anal, 0); + op->src[0] = analysis_fill_ai_rg (analysis, 0); rz_strbuf_setf (&op->esil, "r0,gbr,0x%x,+,=[4]", (code & 0xFF) * 4); } else if (IS_MOVB_GBRREF_R0 (code)) { op->type = RZ_ANAL_OP_TYPE_LOAD; - op->dst = anal_fill_ai_rg (anal, 0); + op->dst = analysis_fill_ai_rg (analysis, 0); rz_strbuf_setf (&op->esil, "gbr,0x%x,+,[1],DUP,0x80,&,?{,0xFFFFFF00,|,},r0,=", (code & 0xFF)); } else if (IS_MOVW_GBRREF_R0 (code)) { op->type = RZ_ANAL_OP_TYPE_LOAD; - op->dst = anal_fill_ai_rg (anal, 0); + op->dst = analysis_fill_ai_rg (analysis, 0); rz_strbuf_setf (&op->esil, "gbr,0x%x,+,[2],DUP,0x8000,&,?{,0xFFFF0000,|,},r0,=", (code & 0xFF)*2); } else if (IS_MOVL_GBRREF_R0 (code)) { op->type = RZ_ANAL_OP_TYPE_LOAD; - op->dst = anal_fill_ai_rg (anal, 0); + op->dst = analysis_fill_ai_rg (analysis, 0); rz_strbuf_setf (&op->esil, "gbr,0x%x,+,[4],r0,=", (code & 0xFF) * 4); } @@ -1038,34 +1038,34 @@ static int first_nibble_is_c(RzAnal* anal, RzAnalOp* op, ut16 code) { } //nibble=d; 1101nnnni8 : mov.l @(,PC), Rn -static int movl_pcdisp_reg(RzAnal* anal, RzAnalOp* op, ut16 code) { +static int movl_pcdisp_reg(RzAnalysis* analysis, RzAnalysisOp* op, ut16 code) { op->type = RZ_ANAL_OP_TYPE_LOAD; - op->src[0] = anal_pcrel_disp_mov (anal, op, code & 0xFF, LONG_SIZE); + op->src[0] = analysis_pcrel_disp_mov (analysis, op, code & 0xFF, LONG_SIZE); //TODO: check it - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); //rz_strbuf_setf (&op->esil, "0x%x,[4],r%d,=", (code & 0xFF) * 4 + (op->addr & 0xfffffff3) + 4, GET_TARGET_REG (code)); rz_strbuf_setf (&op->esil, "0x%" PFMT64x ",[4],r%d,=", (code & 0xFF) * 4 + ((op->addr >> 2)<<2) + 4, GET_TARGET_REG (code)); return op->size; } //nibble=e; 1110nnnni8*1.... mov #, -static int mov_imm_reg(RzAnal* anal, RzAnalOp* op, ut16 code) { +static int mov_imm_reg(RzAnalysis* analysis, RzAnalysisOp* op, ut16 code) { op->type = RZ_ANAL_OP_TYPE_MOV; - op->dst = anal_fill_ai_rg (anal, GET_TARGET_REG (code)); - op->src[0] = anal_fill_im (anal, (st8)(code & 0xFF)); + op->dst = analysis_fill_ai_rg (analysis, GET_TARGET_REG (code)); + op->src[0] = analysis_fill_im (analysis, (st8)(code & 0xFF)); rz_strbuf_setf (&op->esil, "0x%x,r%d,=,r%d,0x80,&,?{,0xFFFFFF00,r%d,|=,}", code & 0xFF, GET_TARGET_REG (code), GET_TARGET_REG (code), GET_TARGET_REG (code)); return op->size; } //nibble=f; -static int fpu_insn(RzAnal* anal, RzAnalOp* op, ut16 code) { +static int fpu_insn(RzAnalysis* analysis, RzAnalysisOp* op, ut16 code) { //Not interested on FPU stuff for now op->family = RZ_ANAL_OP_FAMILY_FPU; return op->size; } /* Table of routines for further analysis based on 1st nibble */ -static int (*first_nibble_decode[])(RzAnal*,RzAnalOp*,ut16) = { +static int (*first_nibble_decode[])(RzAnalysis*,RzAnalysisOp*,ut16) = { first_nibble_is_0, movl_reg_rdisp, first_nibble_is_2, @@ -1088,7 +1088,7 @@ static int (*first_nibble_decode[])(RzAnal*,RzAnalOp*,ut16) = { /* This is the basic operation analysis. Just initialize and jump to * routines defined in first_nibble_decode table */ -static int sh_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int len, RzAnalOpMask mask) { +static int sh_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *data, int len, RzAnalysisOpMask mask) { ut8 op_MSB, op_LSB; int ret; if (!data || len < 2) { @@ -1099,15 +1099,15 @@ static int sh_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int len op->size = 2; - op_MSB = anal->big_endian? data[0]: data[1]; - op_LSB = anal->big_endian? data[1]: data[0]; - ret = first_nibble_decode[(op_MSB>>4) & 0x0F](anal, op, (ut16)(op_MSB<<8 | op_LSB)); + op_MSB = analysis->big_endian? data[0]: data[1]; + op_LSB = analysis->big_endian? data[1]: data[0]; + ret = first_nibble_decode[(op_MSB>>4) & 0x0F](analysis, op, (ut16)(op_MSB<<8 | op_LSB)); return ret; } /* Set the profile register */ -static bool sh_set_reg_profile(RzAnal* anal) { +static bool sh_set_reg_profile(RzAnalysis* analysis) { //TODO Add system ( ssr, spc ) + fpu regs const char *p = "=PC pc\n" @@ -1142,10 +1142,10 @@ static bool sh_set_reg_profile(RzAnal* anal) { "gpr vbr .32 80 0\n" "gpr mach .32 84 0\n" "gpr macl .32 88 0\n"; - return rz_reg_set_profile_string(anal->reg, p); + return rz_reg_set_profile_string(analysis->reg, p); } -static int archinfo(RzAnal *anal, int q) { +static int archinfo(RzAnalysis *analysis, int q) { #if 0 if (q == RZ_ANAL_ARCHINFO_ALIGN) { return 4; @@ -1155,7 +1155,7 @@ static int archinfo(RzAnal *anal, int q) { } -RzAnalPlugin rz_anal_plugin_sh = { +RzAnalysisPlugin rz_analysis_plugin_sh = { .name = "sh", .desc = "SH-4 code analysis plugin", .license = "LGPL3", @@ -1170,7 +1170,7 @@ RzAnalPlugin rz_anal_plugin_sh = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_sh, + .data = &rz_analysis_plugin_sh, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_snes.c b/librz/analysis/p/analysis_snes.c similarity index 94% rename from librz/anal/p/anal_snes.c rename to librz/analysis/p/analysis_snes.c index 72fbb23cf0..8230e08359 100644 --- a/librz/anal/p/anal_snes.c +++ b/librz/analysis/p/analysis_snes.c @@ -4,13 +4,13 @@ #include #include #include -#include +#include #include "../../asm/arch/snes/snes_op_table.h" #include "../../asm/p/asm_snes.h" static struct snes_asm_flags* snesflags = NULL; -static int snes_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int len, RzAnalOpMask mask) { +static int snes_anop(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *data, int len, RzAnalysisOpMask mask) { op->size = snes_op_get_size(snesflags->M, snesflags->X, &snes_op[data[0]]); if (op->size > len) { return op->size = 0; @@ -238,7 +238,7 @@ static int snes_anop(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int return op->size; } -static int snes_anal_init (void* user) { +static int snes_analysis_init (void* user) { if (!snesflags) { snesflags = malloc (sizeof (struct snes_asm_flags)); } @@ -246,27 +246,27 @@ static int snes_anal_init (void* user) { return 0; } -static int snes_anal_fini (void* user) { +static int snes_analysis_fini (void* user) { free(snesflags); snesflags = NULL; return 0; } -RzAnalPlugin rz_anal_plugin_snes = { +RzAnalysisPlugin rz_analysis_plugin_snes = { .name = "snes", .desc = "SNES analysis plugin", .license = "LGPL3", .arch = "snes", .bits = 16, - .init = snes_anal_init, - .fini = snes_anal_fini, + .init = snes_analysis_init, + .fini = snes_analysis_fini, .op = &snes_anop, }; #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_snes, + .data = &rz_analysis_plugin_snes, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_sparc_cs.c b/librz/analysis/p/analysis_sparc_cs.c similarity index 94% rename from librz/anal/p/anal_sparc_cs.c rename to librz/analysis/p/analysis_sparc_cs.c index f48879a6bb..4bd177ad6e 100644 --- a/librz/anal/p/anal_sparc_cs.c +++ b/librz/analysis/p/analysis_sparc_cs.c @@ -1,6 +1,6 @@ /* rizin - LGPL - Copyright 2014-2017 - pancake */ -#include +#include #include #include #include @@ -70,13 +70,13 @@ static int parse_reg_name(RzRegItem *reg, csh handle, cs_insn *insn, int reg_num return 0; } -static void op_fillval(RzAnalOp *op, csh handle, cs_insn *insn) { +static void op_fillval(RzAnalysisOp *op, csh handle, cs_insn *insn) { static RzRegItem reg; switch (op->type & RZ_ANAL_OP_TYPE_MASK) { case RZ_ANAL_OP_TYPE_LOAD: if (INSOP(0).type == SPARC_OP_MEM) { ZERO_FILL (reg); - op->src[0] = rz_anal_value_new (); + op->src[0] = rz_analysis_value_new (); op->src[0]->reg = ® parse_reg_name (op->src[0]->reg, handle, insn, 0); op->src[0]->delta = INSOP(0).mem.disp; @@ -85,7 +85,7 @@ static void op_fillval(RzAnalOp *op, csh handle, cs_insn *insn) { case RZ_ANAL_OP_TYPE_STORE: if (INSOP(1).type == SPARC_OP_MEM) { ZERO_FILL (reg); - op->dst = rz_anal_value_new (); + op->dst = rz_analysis_value_new (); op->dst->reg = ® parse_reg_name (op->dst->reg, handle, insn, 1); op->dst->delta = INSOP(1).mem.disp; @@ -94,7 +94,7 @@ static void op_fillval(RzAnalOp *op, csh handle, cs_insn *insn) { } } -static int analop(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, RzAnalOpMask mask) { +static int analop(RzAnalysis *a, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, RzAnalysisOpMask mask) { static csh handle = 0; static int omode; cs_insn *insn; @@ -318,7 +318,7 @@ static int analop(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, R return op->size; } -static bool set_reg_profile(RzAnal *anal) { +static bool set_reg_profile(RzAnalysis *analysis) { const char *p = \ "=PC pc\n" "=SP sp\n" @@ -373,14 +373,14 @@ static bool set_reg_profile(RzAnal *anal) { "gpr fp .32 136 0\n" "gpr i7 .32 140 0\n" ; - return rz_reg_set_profile_string (anal->reg, p); + return rz_reg_set_profile_string (analysis->reg, p); } -static int archinfo(RzAnal *anal, int q) { +static int archinfo(RzAnalysis *analysis, int q) { return 4; /* :D */ } -RzAnalPlugin rz_anal_plugin_sparc_cs = { +RzAnalysisPlugin rz_analysis_plugin_sparc_cs = { .name = "sparc", .desc = "Capstone SPARC analysis", .esil = true, @@ -395,7 +395,7 @@ RzAnalPlugin rz_anal_plugin_sparc_cs = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_sparc_cs, + .data = &rz_analysis_plugin_sparc_cs, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_sparc_gnu.c b/librz/analysis/p/analysis_sparc_gnu.c similarity index 87% rename from librz/anal/p/anal_sparc_gnu.c rename to librz/analysis/p/analysis_sparc_gnu.c index 3d78941e48..b668065433 100644 --- a/librz/anal/p/anal_sparc_gnu.c +++ b/librz/analysis/p/analysis_sparc_gnu.c @@ -5,7 +5,7 @@ #include #include #include -#include +#include enum { GPR_G0 = 0, @@ -274,27 +274,27 @@ static st64 get_immed_sgnext(const ut64 insn, const ut8 nbit) { | (((insn & ((ut64)1 << nbit)) >> nbit) * mask)); } -static RzAnalValue * value_fill_addr_pc_disp(const ut64 addr, const st64 disp) { - RzAnalValue *val = rz_anal_value_new(); +static RzAnalysisValue * value_fill_addr_pc_disp(const ut64 addr, const st64 disp) { + RzAnalysisValue *val = rz_analysis_value_new(); val->base = addr + disp; return val; } -static RzAnalValue * value_fill_addr_reg_regdelta(RzAnal const * const anal, const int ireg, const int iregdelta) { - RzAnalValue *val = rz_anal_value_new(); - val->reg = rz_reg_get(anal->reg, gpr_regs[ireg], RZ_REG_TYPE_GPR); - val->reg = rz_reg_get(anal->reg, gpr_regs[iregdelta], RZ_REG_TYPE_GPR); +static RzAnalysisValue * value_fill_addr_reg_regdelta(RzAnalysis const * const analysis, const int ireg, const int iregdelta) { + RzAnalysisValue *val = rz_analysis_value_new(); + val->reg = rz_reg_get(analysis->reg, gpr_regs[ireg], RZ_REG_TYPE_GPR); + val->reg = rz_reg_get(analysis->reg, gpr_regs[iregdelta], RZ_REG_TYPE_GPR); return val; } -static RzAnalValue * value_fill_addr_reg_disp(RzAnal const * const anal, const int ireg, const st64 disp) { - RzAnalValue *val = rz_anal_value_new(); - val->reg = rz_reg_get(anal->reg, gpr_regs[ireg], RZ_REG_TYPE_GPR); +static RzAnalysisValue * value_fill_addr_reg_disp(RzAnalysis const * const analysis, const int ireg, const st64 disp) { + RzAnalysisValue *val = rz_analysis_value_new(); + val->reg = rz_reg_get(analysis->reg, gpr_regs[ireg], RZ_REG_TYPE_GPR); val->delta = disp; return val; } -static void anal_call(RzAnalOp *op, const ut32 insn, const ut64 addr) { +static void analysis_call(RzAnalysisOp *op, const ut32 insn, const ut64 addr) { const st64 disp = (get_immed_sgnext(insn, 29) * 4); op->type = RZ_ANAL_OP_TYPE_CALL; op->dst = value_fill_addr_pc_disp(addr, disp); @@ -302,7 +302,7 @@ static void anal_call(RzAnalOp *op, const ut32 insn, const ut64 addr) { op->fail = addr + 4; } -static void anal_jmpl(RzAnal const * const anal, RzAnalOp *op, const ut32 insn, const ut64 addr) { +static void analysis_jmpl(RzAnalysis const * const analysis, RzAnalysisOp *op, const ut32 insn, const ut64 addr) { st64 disp = 0; if (X_LDST_I (insn)) { disp = get_immed_sgnext (insn, 12); @@ -325,13 +325,13 @@ static void anal_jmpl(RzAnal const * const anal, RzAnalOp *op, const ut32 insn, } if(X_LDST_I(insn)) { - op->dst = value_fill_addr_reg_disp(anal, X_RS1(insn), disp); + op->dst = value_fill_addr_reg_disp(analysis, X_RS1(insn), disp); } else { - op->dst = value_fill_addr_reg_regdelta(anal, X_RS1(insn), X_RS2(insn)); + op->dst = value_fill_addr_reg_regdelta(analysis, X_RS1(insn), X_RS2(insn)); } } -static void anal_branch(RzAnalOp *op, const ut32 insn, const ut64 addr) { +static void analysis_branch(RzAnalysisOp *op, const ut32 insn, const ut64 addr) { st64 disp = 0; int rz_cond = 0; op->eob = true; @@ -369,7 +369,7 @@ static void anal_branch(RzAnalOp *op, const ut32 insn, const ut64 addr) { } // TODO: this implementation is just a fast hack. needs to be rewritten and completed -static int sparc_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int len, RzAnalOpMask mask) { +static int sparc_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *data, int len, RzAnalysisOpMask mask) { int sz = 4; ut32 insn; @@ -377,7 +377,7 @@ static int sparc_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int op->addr = addr; op->size = sz; - if(!anal->big_endian) { + if(!analysis->big_endian) { ((char*)&insn)[0] = data[3]; ((char*)&insn)[1] = data[2]; ((char*)&insn)[2] = data[1]; @@ -391,18 +391,18 @@ static int sparc_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int case OP2_ILLTRAP: case OP2_INV: op->type = RZ_ANAL_OP_TYPE_ILL; - sz = 0; /* make rz_core_anal_bb stop */ + sz = 0; /* make rz_core_analysis_bb stop */ break; case OP2_BPcc: case OP2_Bicc: case OP2_BPr: case OP2_FBPfcc: case OP2_FBfcc: - anal_branch(op, insn, addr); + analysis_branch(op, insn, addr); break; } } else if(X_OP(insn) == OP_1) { - anal_call(op, insn, addr); + analysis_call(op, insn, addr); } else if(X_OP(insn) == OP_2) { switch(X_OP3(insn)) { @@ -412,29 +412,29 @@ static int sparc_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int case OP32_INV4: case OP32_INV5: op->type = RZ_ANAL_OP_TYPE_ILL; - sz = 0; /* make rz_core_anal_bb stop */ + sz = 0; /* make rz_core_analysis_bb stop */ break; case OP32_CONDINV1: if(X_RD(insn) == 1) { op->type = RZ_ANAL_OP_TYPE_ILL; - sz = 0; /* make rz_core_anal_bb stop */ + sz = 0; /* make rz_core_analysis_bb stop */ } break; case OP32_CONDINV2: if(X_RS1(insn) == 1) { op->type = RZ_ANAL_OP_TYPE_ILL; - sz = 0; /* make rz_core_anal_bb stop */ + sz = 0; /* make rz_core_analysis_bb stop */ } break; case OP32_CONDINV3: if(X_RS1(insn) != 0) { op->type = RZ_ANAL_OP_TYPE_ILL; - sz = 0; /* make rz_core_anal_bb stop */ + sz = 0; /* make rz_core_analysis_bb stop */ } break; case OP32_JMPL: - anal_jmpl(anal, op, insn, addr); + analysis_jmpl(analysis, op, insn, addr); break; } } else if (X_OP(insn) == OP_3) { @@ -456,7 +456,7 @@ static int sparc_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int case OP33_INV15: case OP33_INV16: op->type = RZ_ANAL_OP_TYPE_ILL; - sz = 0; /* make rz_core_anal_bb stop */ + sz = 0; /* make rz_core_analysis_bb stop */ break; } } @@ -464,7 +464,7 @@ static int sparc_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int return sz; } -static bool set_reg_profile(RzAnal *anal) { +static bool set_reg_profile(RzAnalysis *analysis) { /* As far as I can see, sparc v9 register and instruction set don't depened on bits of the running application. But: They depend on the bits of the consuming application, @@ -600,14 +600,14 @@ static bool set_reg_profile(RzAnal *anal) { "fpu qf60 .128 544 0\n" /* df60 df62 */ "gpr fsr .64 560 0\n"; /* note that we've left out the filler */ - return rz_reg_set_profile_string (anal->reg, p); + return rz_reg_set_profile_string (analysis->reg, p); } -static int archinfo(RzAnal *anal, int q) { +static int archinfo(RzAnalysis *analysis, int q) { return 4; /* :D */ } -RzAnalPlugin rz_anal_plugin_sparc_gnu = { +RzAnalysisPlugin rz_analysis_plugin_sparc_gnu = { .name = "sparc.gnu", .desc = "SPARC analysis plugin", .license = "LGPL3", @@ -621,7 +621,7 @@ RzAnalPlugin rz_anal_plugin_sparc_gnu = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_sparc_gnu, + .data = &rz_analysis_plugin_sparc_gnu, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_sysz.c b/librz/analysis/p/analysis_sysz.c similarity index 92% rename from librz/anal/p/anal_sysz.c rename to librz/analysis/p/analysis_sysz.c index 1a12949455..6dc0bd30ae 100644 --- a/librz/anal/p/anal_sysz.c +++ b/librz/analysis/p/analysis_sysz.c @@ -1,6 +1,6 @@ /* rizin - LGPL - Copyright 2014-2019 - pancake */ -#include +#include #include #include #include @@ -50,7 +50,7 @@ static void opex(RzStrBuf *buf, csh handle, cs_insn *insn) { rz_strbuf_append (buf, "]}"); } -static int analop(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, RzAnalOpMask mask) { +static int analop(RzAnalysis *a, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, RzAnalysisOpMask mask) { csh handle; cs_insn *insn; int mode = CS_MODE_BIG_ENDIAN; @@ -141,7 +141,7 @@ static int analop(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, R return op->size; } -static bool set_reg_profile(RzAnal *anal) { +static bool set_reg_profile(RzAnalysis *analysis) { const char *p = "=PC r15\n" "=LR r14\n" @@ -177,10 +177,10 @@ static bool set_reg_profile(RzAnal *anal) { "gpr r14 .32 56 0\n" "gpr r15 .32 60 0\n" ; - return rz_reg_set_profile_string (anal->reg, p); + return rz_reg_set_profile_string (analysis->reg, p); } -static int archinfo(RzAnal *anal, int q) { +static int archinfo(RzAnalysis *analysis, int q) { switch (q) { case RZ_ANAL_ARCHINFO_ALIGN: return 2; @@ -192,7 +192,7 @@ static int archinfo(RzAnal *anal, int q) { return 2; } -RzAnalPlugin rz_anal_plugin_sysz = { +RzAnalysisPlugin rz_analysis_plugin_sysz = { .name = "sysz", .desc = "Capstone SystemZ microanalysis", .esil = false, @@ -207,7 +207,7 @@ RzAnalPlugin rz_anal_plugin_sysz = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_sysz, + .data = &rz_analysis_plugin_sysz, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_tms320.c b/librz/analysis/p/analysis_tms320.c similarity index 67% rename from librz/anal/p/anal_tms320.c rename to librz/analysis/p/analysis_tms320.c index 922df9e71a..4cc6288a79 100644 --- a/librz/anal/p/anal_tms320.c +++ b/librz/analysis/p/analysis_tms320.c @@ -6,28 +6,28 @@ * Distributed under LGPL */ -#include -#include "anal_tms320c64x.c" +#include +#include "analysis_tms320c64x.c" #include "../../asm/arch/tms320/tms320_dasm.h" static tms320_dasm_t engine = { 0 }; -typedef int (* TMS_ANAL_OP_FN)(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int len); +typedef int (* TMS_ANAL_OP_FN)(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len); -int tms320_c54x_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int len); -int tms320_c55x_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int len); -int tms320_c55x_plus_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int len); +int tms320_c54x_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len); +int tms320_c55x_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len); +int tms320_c55x_plus_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len); static bool match(const char * str, const char * token) { return !strncasecmp(str, token, strlen(token)); } -int tms320_c54x_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int len) { +int tms320_c54x_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len) { // TODO: add the implementation return 0; } -int tms320_c55x_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int len) { +int tms320_c55x_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len) { const char * str = engine.syntax; op->delay = 0; @@ -80,24 +80,24 @@ int tms320_c55x_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int le return op->size; } -int tms320_op(RzAnal * anal, RzAnalOp * op, ut64 addr, const ut8 * buf, int len, RzAnalOpMask mask) { +int tms320_op(RzAnalysis * analysis, RzAnalysisOp * op, ut64 addr, const ut8 * buf, int len, RzAnalysisOpMask mask) { TMS_ANAL_OP_FN aop = tms320_c55x_op; - if (anal->cpu && rz_str_casecmp(anal->cpu, "c64x") == 0) { + if (analysis->cpu && rz_str_casecmp(analysis->cpu, "c64x") == 0) { #ifdef CAPSTONE_TMS320C64X_H - return tms320c64x_analop (anal, op, addr, buf, len, mask); + return tms320c64x_analop (analysis, op, addr, buf, len, mask); #else return -1; #endif } - if (anal->cpu && rz_str_casecmp(anal->cpu, "c54x") == 0) { + if (analysis->cpu && rz_str_casecmp(analysis->cpu, "c54x") == 0) { aop = tms320_c54x_op; - } else if (anal->cpu && rz_str_casecmp(anal->cpu, "c55x") == 0) { + } else if (analysis->cpu && rz_str_casecmp(analysis->cpu, "c55x") == 0) { aop = tms320_c55x_op; - } else if (anal->cpu && rz_str_casecmp(anal->cpu, "c55x+") == 0) { + } else if (analysis->cpu && rz_str_casecmp(analysis->cpu, "c55x+") == 0) { aop = tms320_c55x_plus_op; } - return aop (anal, op, addr, buf, len); + return aop (analysis, op, addr, buf, len); } static int tms320_init(void * unused) { @@ -108,7 +108,7 @@ static int tms320_fini(void * unused) { return tms320_dasm_fini (&engine); } -RzAnalPlugin rz_anal_plugin_tms320 = { +RzAnalysisPlugin rz_analysis_plugin_tms320 = { .name = "tms320", .arch = "tms320", .bits = 32, @@ -122,7 +122,7 @@ RzAnalPlugin rz_anal_plugin_tms320 = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_tms320, + .data = &rz_analysis_plugin_tms320, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_tms320_c55x_plus.c b/librz/analysis/p/analysis_tms320_c55x_plus.c similarity index 94% rename from librz/anal/p/anal_tms320_c55x_plus.c rename to librz/analysis/p/analysis_tms320_c55x_plus.c index 6c10a12e91..5a09b71b2f 100644 --- a/librz/anal/p/anal_tms320_c55x_plus.c +++ b/librz/analysis/p/analysis_tms320_c55x_plus.c @@ -4,11 +4,11 @@ #include #include #include -#include +#include ut32 get_ins_len(ut8 opcode); -int tms320_c55x_plus_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int len) { +int tms320_c55x_plus_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len) { ut16 *ins = (ut16*)buf; ut32 ins_len; diff --git a/librz/anal/p/anal_tms320c64x.c b/librz/analysis/p/analysis_tms320c64x.c similarity index 93% rename from librz/anal/p/anal_tms320c64x.c rename to librz/analysis/p/analysis_tms320c64x.c index 8782ba2812..5023062cc5 100644 --- a/librz/anal/p/anal_tms320c64x.c +++ b/librz/analysis/p/analysis_tms320c64x.c @@ -1,6 +1,6 @@ /* rizin - LGPL - Copyright 2017 - pancake */ -#include +#include #include #include @@ -59,7 +59,7 @@ static void opex(RzStrBuf *buf, csh handle, cs_insn *insn) { rz_strbuf_append (buf, "]}"); } -static int tms320c64x_analop(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, RzAnalOpMask mask) { +static int tms320c64x_analop(RzAnalysis *a, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, RzAnalysisOpMask mask) { static csh handle = 0; static int omode; cs_insn *insn; @@ -184,11 +184,11 @@ static int tms320c64x_analop(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, /* -static int archinfo(RzAnal *anal, int q) { +static int archinfo(RzAnalysis *analysis, int q) { return 4; // :D } -RzAnalPlugin rz_anal_plugin_tms320c64x = { +RzAnalysisPlugin rz_analysis_plugin_tms320c64x = { .name = "tms320c64x", .desc = "Capstone TMS320C64X analysis", .license = "BSD", @@ -199,7 +199,7 @@ RzAnalPlugin rz_anal_plugin_tms320c64x = { }; #else -RzAnalPlugin rz_anal_plugin_tms320c64x = { +RzAnalysisPlugin rz_analysis_plugin_tms320c64x = { .name = "tms320c64x", .desc = "Capstone TMS320C64X analysis (unsupported)", .license = "BSD", @@ -211,7 +211,7 @@ RzAnalPlugin rz_anal_plugin_tms320c64x = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_tms320c64x, + .data = &rz_analysis_plugin_tms320c64x, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_tricore.c b/librz/analysis/p/analysis_tricore.c similarity index 89% rename from librz/anal/p/anal_tricore.c rename to librz/analysis/p/analysis_tricore.c index 815132f26c..dc2d90c1f4 100644 --- a/librz/anal/p/anal_tricore.c +++ b/librz/analysis/p/analysis_tricore.c @@ -4,10 +4,10 @@ #include #include #include -#include +#include //#include "../../asm/arch/tricore/gnu/tricore-opc.c" -static bool set_reg_profile(RzAnal *anal) { +static bool set_reg_profile(RzAnalysis *analysis) { const char *p = "=PC pc\n" "=SP a10\n" @@ -70,10 +70,10 @@ static bool set_reg_profile(RzAnal *anal) { "gpr BIV .32 152 0\n" "gpr BTV .32 156 0\n" "gpr pc .32 160 0\n"; - return rz_reg_set_profile_string (anal->reg, p); + return rz_reg_set_profile_string (analysis->reg, p); } -RzAnalPlugin rz_anal_plugin_tricore = { +RzAnalysisPlugin rz_analysis_plugin_tricore = { .name = "tricore", .desc = "TRICORE analysis plugin", .license = "LGPL3", @@ -85,7 +85,7 @@ RzAnalPlugin rz_anal_plugin_tricore = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_tricore, + .data = &rz_analysis_plugin_tricore, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_v810.c b/librz/analysis/p/analysis_v810.c similarity index 95% rename from librz/anal/p/anal_v810.c rename to librz/analysis/p/analysis_v810.c index ee68153197..9b0002a258 100644 --- a/librz/anal/p/anal_v810.c +++ b/librz/analysis/p/analysis_v810.c @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include @@ -16,7 +16,7 @@ enum { V810_FLAG_Z = 8, }; -static void update_flags(RzAnalOp *op, int flags) { +static void update_flags(RzAnalysisOp *op, int flags) { if (flags & V810_FLAG_CY) { rz_strbuf_append (&op->esil, ",31,$c,cy,:="); } @@ -31,7 +31,7 @@ static void update_flags(RzAnalOp *op, int flags) { } } -static void clear_flags(RzAnalOp *op, int flags) { +static void clear_flags(RzAnalysisOp *op, int flags) { if (flags & V810_FLAG_CY) { rz_strbuf_append (&op->esil, ",0,cy,:="); } @@ -46,7 +46,7 @@ static void clear_flags(RzAnalOp *op, int flags) { } } -static int v810_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, RzAnalOpMask mask) { +static int v810_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, RzAnalysisOpMask mask) { int ret; ut8 opcode, reg1, reg2, imm5, cond; ut16 word1, word2 = 0; @@ -60,10 +60,10 @@ static int v810_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int le return ret; } - word1 = rz_read_ble16 (buf, anal->big_endian); + word1 = rz_read_ble16 (buf, analysis->big_endian); if (ret == 4) { - word2 = rz_read_ble16 (buf+2, anal->big_endian); + word2 = rz_read_ble16 (buf+2, analysis->big_endian); } op->addr = addr; @@ -386,7 +386,7 @@ static int v810_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int le return ret; } -static bool set_reg_profile(RzAnal *anal) { +static bool set_reg_profile(RzAnalysis *analysis) { const char *p = "=PC pc\n" "=SP r3\n" @@ -440,10 +440,10 @@ static bool set_reg_profile(RzAnal *anal) { "flg s .1 132.30 0\n" "flg z .1 132.31 0\n"; - return rz_reg_set_profile_string (anal->reg, p); + return rz_reg_set_profile_string (analysis->reg, p); } -RzAnalPlugin rz_anal_plugin_v810 = { +RzAnalysisPlugin rz_analysis_plugin_v810 = { .name = "v810", .desc = "V810 code analysis plugin", .license = "LGPL3", @@ -457,7 +457,7 @@ RzAnalPlugin rz_anal_plugin_v810 = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_v810, + .data = &rz_analysis_plugin_v810, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_v850.c b/librz/analysis/p/analysis_v850.c similarity index 96% rename from librz/anal/p/anal_v850.c rename to librz/analysis/p/analysis_v850.c index 5e4a3078f1..49d6b6563a 100644 --- a/librz/anal/p/anal_v850.c +++ b/librz/analysis/p/analysis_v850.c @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include @@ -133,7 +133,7 @@ static const char* V850_REG_NAMES[] = { "lp", }; -static void update_flags(RzAnalOp *op, int flags) { +static void update_flags(RzAnalysisOp *op, int flags) { if (flags & V850_FLAG_CY) { rz_strbuf_append (&op->esil, "31,$c,cy,:="); } @@ -148,7 +148,7 @@ static void update_flags(RzAnalOp *op, int flags) { } } -static void clear_flags(RzAnalOp *op, int flags) { +static void clear_flags(RzAnalysisOp *op, int flags) { if (flags & V850_FLAG_CY) { rz_strbuf_append (&op->esil, ",0,cy,="); } @@ -163,7 +163,7 @@ static void clear_flags(RzAnalOp *op, int flags) { } } -static int v850_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, RzAnalOpMask mask) { +static int v850_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, RzAnalysisOpMask mask) { int ret = 0; ut8 opcode = 0; const char *reg1 = NULL; @@ -487,7 +487,7 @@ static int v850_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int le return ret; } -static char *get_reg_profile(RzAnal *anal) { +static char *get_reg_profile(RzAnalysis *analysis) { const char *p = "=PC pc\n" "=SP r3\n" @@ -553,7 +553,7 @@ static char *get_reg_profile(RzAnal *anal) { return strdup (p); } -static RzList *anal_preludes(RzAnal *anal) { +static RzList *analysis_preludes(RzAnalysis *analysis) { #define KW(d,ds,m,ms) rz_list_append (l, rz_search_keyword_new((const ut8*)d,ds,(const ut8*)m, ms, NULL)) RzList *l = rz_list_newf ((RzListFree)rz_search_keyword_free); KW ("\x80\x07", 2, "\xf0\xff", 2); @@ -561,7 +561,7 @@ static RzList *anal_preludes(RzAnal *anal) { return l; } -static int archinfo(RzAnal *anal, int q) { +static int archinfo(RzAnalysis *analysis, int q) { switch (q) { case RZ_ANAL_ARCHINFO_ALIGN: return 2; @@ -573,11 +573,11 @@ static int archinfo(RzAnal *anal, int q) { return 0; } -RzAnalPlugin rz_anal_plugin_v850 = { +RzAnalysisPlugin rz_analysis_plugin_v850 = { .name = "v850", .desc = "V850 code analysis plugin", .license = "LGPL3", - .preludes = anal_preludes, + .preludes = analysis_preludes, .arch = "v850", .bits = 32, .op = v850_op, @@ -589,7 +589,7 @@ RzAnalPlugin rz_anal_plugin_v850 = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_v850, + .data = &rz_analysis_plugin_v850, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_vax.c b/librz/analysis/p/analysis_vax.c similarity index 88% rename from librz/anal/p/anal_vax.c rename to librz/analysis/p/analysis_vax.c index a3d3e7b395..844547f718 100644 --- a/librz/anal/p/anal_vax.c +++ b/librz/analysis/p/analysis_vax.c @@ -5,13 +5,13 @@ #include #include #include -#include +#include // XXX: this is just a PoC // XXX: do not hardcode size/type here, use proper decoding table // http://hotkosc.ru:8080/method-vax.doc -static int vax_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, RzAnalOpMask mask) { +static int vax_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, RzAnalysisOpMask mask) { op->size = 1; if (len < 1) { return -1; @@ -79,7 +79,7 @@ static int vax_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf, int len return op->size; } -RzAnalPlugin rz_anal_plugin_vax = { +RzAnalysisPlugin rz_analysis_plugin_vax = { .name = "vax", .desc = "VAX code analysis plugin", .license = "LGPL3", @@ -98,7 +98,7 @@ RzAnalPlugin rz_anal_plugin_vax = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_vax, + .data = &rz_analysis_plugin_vax, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_wasm.c b/librz/analysis/p/analysis_wasm.c similarity index 74% rename from librz/anal/p/anal_wasm.c rename to librz/analysis/p/analysis_wasm.c index b4992f264c..5f99eaa4a5 100644 --- a/librz/anal/p/anal_wasm.c +++ b/librz/analysis/p/analysis_wasm.c @@ -4,7 +4,7 @@ #include #include #include -#include +#include #undef RZ_IPI #define RZ_IPI static #define WASM_NO_ASM // to get rid of a warning @@ -17,7 +17,7 @@ static ut64 scope_hint = UT64_MAX; static ut64 addr_old = UT64_MAX; // finds the address of the call function (essentially where to jump to). -static ut64 get_cf_offset(RzAnal *anal, const ut8 *data, int len) { +static ut64 get_cf_offset(RzAnalysis *analysis, const ut8 *data, int len) { ut32 fcn_id; if (!read_u32_leb128 (&data[1], &data[len - 1], &fcn_id)) { @@ -26,7 +26,7 @@ static ut64 get_cf_offset(RzAnal *anal, const ut8 *data, int len) { rz_cons_push (); // 0xfff.. are bad addresses for wasm // cgvwzq: 0xfff... can be external imported JS funcs - char *s = anal->coreb.cmdstrf (anal->coreb.core, "is~FUNC[2:%u]", fcn_id); + char *s = analysis->coreb.cmdstrf (analysis->coreb.core, "is~FUNC[2:%u]", fcn_id); rz_cons_pop (); if (s) { ut64 n = rz_num_get (NULL, s); @@ -36,13 +36,13 @@ static ut64 get_cf_offset(RzAnal *anal, const ut8 *data, int len) { return UT64_MAX; } -static bool advance_till_scope_end(RzAnal* anal, RzAnalOp *op, ut64 address, ut32 expected_type, ut32 depth, bool use_else) { +static bool advance_till_scope_end(RzAnalysis* analysis, RzAnalysisOp *op, ut64 address, ut32 expected_type, ut32 depth, bool use_else) { ut8 buffer[16]; ut8 *ptr = buffer; ut8 *end = ptr + sizeof (buffer); WasmOp wop = {{0}}; int size = 0; - while (anal->iob.read_at (anal->iob.io, address, buffer, sizeof (buffer))) { + while (analysis->iob.read_at (analysis->iob.io, address, buffer, sizeof (buffer))) { size = wasm_dis (&wop, ptr, end - ptr); if (!wop.txt || (wop.type == WASM_TYPE_OP_CORE && wop.op.core == WASM_OP_TRAP)) { // if invalid stop here. @@ -72,9 +72,9 @@ static bool advance_till_scope_end(RzAnal* anal, RzAnalOp *op, ut64 address, ut3 } // analyzes the wasm opcode. -static int wasm_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int len, RzAnalOpMask mask) { +static int wasm_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *data, int len, RzAnalysisOpMask mask) { WasmOp wop = {{0}}; - RzAnalHint *hint = NULL; + RzAnalysisHint *hint = NULL; int ret = wasm_dis (&wop, data, len); op->size = ret; op->addr = addr; @@ -99,7 +99,7 @@ static int wasm_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l } if (addr_old == addr && (wop.type != WASM_TYPE_OP_CORE || wop.op.core != WASM_OP_END)) { - goto anal_end; + goto analysis_end; } switch (wop.type) { @@ -108,26 +108,26 @@ static int wasm_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l /* Calls here are using index instead of address */ case WASM_OP_LOOP: op->type = RZ_ANAL_OP_TYPE_NOP; - if (!(hint = rz_anal_hint_get (anal, addr))) { + if (!(hint = rz_analysis_hint_get (analysis, addr))) { scope_hint--; - rz_anal_hint_set_opcode (anal, scope_hint, "loop"); - rz_anal_hint_set_jump (anal, scope_hint, addr); + rz_analysis_hint_set_opcode (analysis, scope_hint, "loop"); + rz_analysis_hint_set_jump (analysis, scope_hint, addr); } break; case WASM_OP_BLOCK: op->type = RZ_ANAL_OP_TYPE_NOP; - if (!(hint = rz_anal_hint_get (anal, addr))) { + if (!(hint = rz_analysis_hint_get (analysis, addr))) { scope_hint--; - rz_anal_hint_set_opcode (anal, scope_hint, "block"); - rz_anal_hint_set_jump (anal, scope_hint, addr); + rz_analysis_hint_set_opcode (analysis, scope_hint, "block"); + rz_analysis_hint_set_jump (analysis, scope_hint, addr); } break; case WASM_OP_IF: - if (!(hint = rz_anal_hint_get (anal, addr))) { + if (!(hint = rz_analysis_hint_get (analysis, addr))) { scope_hint--; - rz_anal_hint_set_opcode (anal, scope_hint, "if"); - rz_anal_hint_set_jump (anal, scope_hint, addr); - if (advance_till_scope_end (anal, op, addr + op->size, RZ_ANAL_OP_TYPE_CJMP, 0, true)) { + rz_analysis_hint_set_opcode (analysis, scope_hint, "if"); + rz_analysis_hint_set_jump (analysis, scope_hint, addr); + if (advance_till_scope_end (analysis, op, addr + op->size, RZ_ANAL_OP_TYPE_CJMP, 0, true)) { op->fail = addr + op->size; } } else { @@ -138,8 +138,8 @@ static int wasm_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l break; case WASM_OP_ELSE: // get if and set hint. - if (!(hint = rz_anal_hint_get (anal, addr))) { - advance_till_scope_end (anal, op, addr + op->size, RZ_ANAL_OP_TYPE_JMP, 0, true); + if (!(hint = rz_analysis_hint_get (analysis, addr))) { + advance_till_scope_end (analysis, op, addr + op->size, RZ_ANAL_OP_TYPE_JMP, 0, true); } else { op->type = RZ_ANAL_OP_TYPE_JMP; op->jump = hint->jump; @@ -147,82 +147,82 @@ static int wasm_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l break; case WASM_OP_BR: { - RzAnalHint *hint2 = NULL; + RzAnalysisHint *hint2 = NULL; ut32 val; read_u32_leb128 (data + 1, data + len, &val); - if ((hint2 = rz_anal_hint_get (anal, addr)) && hint2->jump != UT64_MAX) { + if ((hint2 = rz_analysis_hint_get (analysis, addr)) && hint2->jump != UT64_MAX) { op->type = RZ_ANAL_OP_TYPE_JMP; op->jump = hint2->jump; - } else if ((hint = rz_anal_hint_get (anal, scope_hint))) { + } else if ((hint = rz_analysis_hint_get (analysis, scope_hint))) { if (hint->opcode && !strncmp ("loop", hint->opcode, 4)) { op->type = RZ_ANAL_OP_TYPE_JMP; op->jump = hint->jump; - rz_anal_hint_set_jump (anal, addr, op->jump); + rz_analysis_hint_set_jump (analysis, addr, op->jump); } else { - if (advance_till_scope_end (anal, op, addr + op->size, RZ_ANAL_OP_TYPE_JMP, val, false)) { - rz_anal_hint_set_jump (anal, addr, op->jump); + if (advance_till_scope_end (analysis, op, addr + op->size, RZ_ANAL_OP_TYPE_JMP, val, false)) { + rz_analysis_hint_set_jump (analysis, addr, op->jump); } } } else { - if (advance_till_scope_end (anal, op, addr + op->size, RZ_ANAL_OP_TYPE_JMP, val, false)) { + if (advance_till_scope_end (analysis, op, addr + op->size, RZ_ANAL_OP_TYPE_JMP, val, false)) { eprintf ("[wasm] cannot find jump type for br (using block type)\n"); - rz_anal_hint_set_jump (anal, addr, op->jump); + rz_analysis_hint_set_jump (analysis, addr, op->jump); } else { eprintf ("[wasm] cannot find jump for br\n"); } } - rz_anal_hint_free (hint2); + rz_analysis_hint_free (hint2); } break; case WASM_OP_BRIF: { - RzAnalHint *hint2 = NULL; + RzAnalysisHint *hint2 = NULL; ut32 val; read_u32_leb128 (data + 1, data + len, &val); - if ((hint2 = rz_anal_hint_get (anal, addr)) && hint2->jump != UT64_MAX) { + if ((hint2 = rz_analysis_hint_get (analysis, addr)) && hint2->jump != UT64_MAX) { op->type = RZ_ANAL_OP_TYPE_CJMP; op->jump = hint2->jump; op->fail = addr + op->size; - } else if ((hint = rz_anal_hint_get (anal, scope_hint))) { + } else if ((hint = rz_analysis_hint_get (analysis, scope_hint))) { if (hint->opcode && !strncmp ("loop", hint->opcode, 4)) { op->fail = addr + op->size; op->jump = hint->jump; - rz_anal_hint_set_jump (anal, addr, op->jump); + rz_analysis_hint_set_jump (analysis, addr, op->jump); } else { - if (advance_till_scope_end (anal, op, addr + op->size, RZ_ANAL_OP_TYPE_CJMP, val, false)) { + if (advance_till_scope_end (analysis, op, addr + op->size, RZ_ANAL_OP_TYPE_CJMP, val, false)) { op->fail = addr + op->size; - rz_anal_hint_set_jump (anal, addr, op->jump); + rz_analysis_hint_set_jump (analysis, addr, op->jump); } } } else { - if (advance_till_scope_end (anal, op, addr + op->size, RZ_ANAL_OP_TYPE_CJMP, val, false)) { + if (advance_till_scope_end (analysis, op, addr + op->size, RZ_ANAL_OP_TYPE_CJMP, val, false)) { eprintf ("[wasm] cannot find jump type for br_if (using block type)\n"); op->fail = addr + op->size; - rz_anal_hint_set_jump (anal, addr, op->jump); + rz_analysis_hint_set_jump (analysis, addr, op->jump); } else { eprintf ("[wasm] cannot find jump for br_if\n"); } } - rz_anal_hint_free (hint2); + rz_analysis_hint_free (hint2); } break; case WASM_OP_END: { op->type = RZ_ANAL_OP_TYPE_NOP; if (scope_hint < UT64_MAX) { - hint = rz_anal_hint_get (anal, scope_hint); + hint = rz_analysis_hint_get (analysis, scope_hint); if (hint && !strncmp ("loop", hint->opcode, 4)) { - rz_anal_hint_set_jump (anal, addr, op->jump); - rz_anal_hint_set_jump (anal, op->jump, addr); + rz_analysis_hint_set_jump (analysis, addr, op->jump); + rz_analysis_hint_set_jump (analysis, op->jump, addr); } else if (hint && !strncmp ("block", hint->opcode, 5)) { // if/else/block - rz_anal_hint_set_jump (anal, hint->jump, addr); - rz_anal_hint_set_jump (anal, addr, UT64_MAX); + rz_analysis_hint_set_jump (analysis, hint->jump, addr); + rz_analysis_hint_set_jump (analysis, addr, UT64_MAX); } if (hint) { - rz_anal_hint_set_opcode (anal, scope_hint, "invalid"); - rz_anal_hint_set_jump (anal, scope_hint, UT64_MAX); - rz_anal_hint_del (anal, scope_hint, 1); + rz_analysis_hint_set_opcode (analysis, scope_hint, "invalid"); + rz_analysis_hint_set_jump (analysis, scope_hint, UT64_MAX); + rz_analysis_hint_del (analysis, scope_hint, 1); scope_hint++; } else { // all wasm routines ends with an end. @@ -231,7 +231,7 @@ static int wasm_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l scope_hint = UT64_MAX; } } else { - if (!(hint = rz_anal_hint_get (anal, addr))) { + if (!(hint = rz_analysis_hint_get (analysis, addr))) { // all wasm routines ends with an end. op->eob = true; op->type = RZ_ANAL_OP_TYPE_RET; @@ -337,7 +337,7 @@ static int wasm_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l case WASM_OP_CALL: case WASM_OP_CALLINDIRECT: op->type = RZ_ANAL_OP_TYPE_CALL; - op->jump = get_cf_offset (anal, data, len); + op->jump = get_cf_offset (analysis, data, len); op->fail = addr + op->size; if (op->jump != UT64_MAX) { op->ptr = op->jump; @@ -432,18 +432,18 @@ static int wasm_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l break; } -anal_end: +analysis_end: addr_old = addr; free (wop.txt); - rz_anal_hint_free (hint); + rz_analysis_hint_free (hint); return op->size; } -static int archinfo(RzAnal *a, int q) { +static int archinfo(RzAnalysis *a, int q) { return 1; } -static char *get_reg_profile(RzAnal *anal) { +static char *get_reg_profile(RzAnalysis *analysis) { return strdup ( "=PC pc\n" "=BP bp\n" @@ -455,7 +455,7 @@ static char *get_reg_profile(RzAnal *anal) { ); } -RzAnalPlugin rz_anal_plugin_wasm = { +RzAnalysisPlugin rz_analysis_plugin_wasm = { .name = "wasm", .desc = "WebAssembly analysis plugin", .license = "LGPL3", @@ -470,7 +470,7 @@ RzAnalPlugin rz_anal_plugin_wasm = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_wasm, + .data = &rz_analysis_plugin_wasm, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_ws.c b/librz/analysis/p/analysis_ws.c similarity index 85% rename from librz/anal/p/anal_ws.c rename to librz/analysis/p/analysis_ws.c index e60b0cf1fe..249d0c5fab 100644 --- a/librz/anal/p/anal_ws.c +++ b/librz/analysis/p/analysis_ws.c @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include #include #define WS_API static @@ -26,7 +26,7 @@ static ut64 ws_find_label(int l, const RzIOBind *iob) { return 0; } -static int ws_anal(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int len, RzAnalOpMask mask) { +static int ws_analysis(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *data, int len, RzAnalysisOpMask mask) { op->addr = addr; op->type = RZ_ANAL_OP_TYPE_UNK; RzAsmOp *aop = RZ_NEW0 (RzAsmOp); @@ -62,7 +62,7 @@ static int ws_anal(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l if (buf_asm[1] == 'a') { op->type = RZ_ANAL_OP_TYPE_CALL; op->fail = addr + aop->size; - op->jump = ws_find_label (atoi (buf_asm + 5), &anal->iob); + op->jump = ws_find_label (atoi (buf_asm + 5), &analysis->iob); } else { op->type = RZ_ANAL_OP_TYPE_UPUSH; } @@ -70,10 +70,10 @@ static int ws_anal(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l case 'j': if (buf_asm[1] == 'm') { op->type = RZ_ANAL_OP_TYPE_JMP; - op->jump = ws_find_label(atoi (buf_asm + 4), &anal->iob); + op->jump = ws_find_label(atoi (buf_asm + 4), &analysis->iob); } else { op->type = RZ_ANAL_OP_TYPE_CJMP; - op->jump = ws_find_label(atoi(buf_asm + 3), &anal->iob); + op->jump = ws_find_label(atoi(buf_asm + 3), &analysis->iob); } op->fail = addr + aop->size; break; @@ -91,7 +91,7 @@ static int ws_anal(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l c[3] = '\0'; c[0] = c[2] = '\''; c[1] = (char) atoi (buf_asm + 5); - rz_meta_set_string (anal, RZ_META_TYPE_COMMENT, addr, c); + rz_meta_set_string (analysis, RZ_META_TYPE_COMMENT, addr, c); } } else { op->type = RZ_ANAL_OP_TYPE_IO; @@ -119,19 +119,19 @@ static int ws_anal(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int l return op->size; } -RzAnalPlugin rz_anal_plugin_ws = { +RzAnalysisPlugin rz_analysis_plugin_ws = { .name = "ws", .desc = "Space, tab and linefeed analysis plugin", .license = "LGPL3", .arch = "ws", .bits = 32, - .op = &ws_anal, + .op = &ws_analysis, }; #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_ws, + .data = &rz_analysis_plugin_ws, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_x86_cs.c b/librz/analysis/p/analysis_x86_cs.c similarity index 97% rename from librz/anal/p/anal_x86_cs.c rename to librz/analysis/p/analysis_x86_cs.c index 30fead1074..bb154c4c6c 100644 --- a/librz/anal/p/anal_x86_cs.c +++ b/librz/analysis/p/analysis_x86_cs.c @@ -1,6 +1,6 @@ /* rizin - LGPL - Copyright 2013-2019 - pancake */ -#include +#include #include #include #include @@ -376,7 +376,7 @@ static const char *reg32_to_name(ut8 reg) { return reg < RZ_ARRAY_SIZE (names) ? names[reg] : "unk"; } -static void anop_esil(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, csh *handle, cs_insn *insn) { +static void anop_esil(RzAnalysis *a, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, csh *handle, cs_insn *insn) { int rs = a->bits/8; const char *pc = (a->bits==16)?"ip": (a->bits==32)?"eip":"rip"; @@ -1328,7 +1328,7 @@ static void anop_esil(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int le case X86_OP_REG: { src = getarg (&gop, 0, 0, NULL, SRC_AR, NULL); - op->src[0] = rz_anal_value_new (); + op->src[0] = rz_analysis_value_new (); op->src[0]->reg = rz_reg_get (a->reg, src, RZ_REG_TYPE_GPR); //XXX fallthrough } @@ -1895,9 +1895,9 @@ static RzRegItem *cs_reg2reg(RzReg *reg, csh *h, int id) { return rz_reg_get (reg, (char *)cs_reg_name (*h, id), -1); } -static void set_access_info(RzReg *reg, RzAnalOp *op, csh *handle, cs_insn *insn, int mode) { +static void set_access_info(RzReg *reg, RzAnalysisOp *op, csh *handle, cs_insn *insn, int mode) { int i; - RzAnalValue *val; + RzAnalysisValue *val; int regsz; x86_reg sp; switch (mode) { @@ -1918,13 +1918,13 @@ static void set_access_info(RzReg *reg, RzAnalOp *op, csh *handle, cs_insn *insn sp = X86_REG_ESP; break; } - RzList *ret = rz_list_newf ((RzListFree)rz_anal_value_free); + RzList *ret = rz_list_newf ((RzListFree)rz_analysis_value_free); if (!ret) { return; } // PC register - val = rz_anal_value_new (); + val = rz_analysis_value_new (); val->type = RZ_ANAL_VAL_REG; val->access = RZ_ANAL_ACC_W; val->reg = cs_reg2reg (reg, handle, X86_REG_RIP); @@ -1937,7 +1937,7 @@ static void set_access_info(RzReg *reg, RzAnalOp *op, csh *handle, cs_insn *insn if (cs_regs_access (*handle, insn, regs_read, &read_count, regs_write, &write_count) == 0) { if (read_count > 0) { for (i = 0; i < read_count; i++) { - val = rz_anal_value_new (); + val = rz_analysis_value_new (); val->type = RZ_ANAL_VAL_REG; val->access = RZ_ANAL_ACC_R; val->reg = cs_reg2reg (reg, handle, regs_read[i]); @@ -1946,7 +1946,7 @@ static void set_access_info(RzReg *reg, RzAnalOp *op, csh *handle, cs_insn *insn } if (write_count > 0) { for (i = 0; i < write_count; i++) { - val = rz_anal_value_new (); + val = rz_analysis_value_new (); val->type = RZ_ANAL_VAL_REG; val->access = RZ_ANAL_ACC_W; val->reg = cs_reg2reg (reg, handle, regs_write[i]); @@ -1958,7 +1958,7 @@ static void set_access_info(RzReg *reg, RzAnalOp *op, csh *handle, cs_insn *insn switch (insn->id) { case X86_INS_PUSH: - val = rz_anal_value_new (); + val = rz_analysis_value_new (); val->type = RZ_ANAL_VAL_MEM; val->access = RZ_ANAL_ACC_W; val->reg = cs_reg2reg (reg, handle, sp); @@ -1968,7 +1968,7 @@ static void set_access_info(RzReg *reg, RzAnalOp *op, csh *handle, cs_insn *insn break; case X86_INS_PUSHAW: // AX, CX, DX, BX, SP, BP, SI, DI - val = rz_anal_value_new (); + val = rz_analysis_value_new (); val->type = RZ_ANAL_VAL_MEM; val->access = RZ_ANAL_ACC_W; val->reg = cs_reg2reg (reg, handle, sp); @@ -1978,7 +1978,7 @@ static void set_access_info(RzReg *reg, RzAnalOp *op, csh *handle, cs_insn *insn break; case X86_INS_PUSHAL: // EAX, ECX, EDX, EBX, EBP, ESP, EBP, ESI, EDI - val = rz_anal_value_new (); + val = rz_analysis_value_new (); val->type = RZ_ANAL_VAL_MEM; val->access = RZ_ANAL_ACC_W; val->reg = cs_reg2reg (reg, handle, sp); @@ -1987,7 +1987,7 @@ static void set_access_info(RzReg *reg, RzAnalOp *op, csh *handle, cs_insn *insn rz_list_append (ret, val); break; case X86_INS_PUSHF: - val = rz_anal_value_new (); + val = rz_analysis_value_new (); val->type = RZ_ANAL_VAL_MEM; val->access = RZ_ANAL_ACC_W; val->reg = cs_reg2reg (reg, handle, sp); @@ -1996,7 +1996,7 @@ static void set_access_info(RzReg *reg, RzAnalOp *op, csh *handle, cs_insn *insn rz_list_append (ret, val); break; case X86_INS_PUSHFD: - val = rz_anal_value_new (); + val = rz_analysis_value_new (); val->type = RZ_ANAL_VAL_MEM; val->access = RZ_ANAL_ACC_W; val->reg = cs_reg2reg (reg, handle, sp); @@ -2005,7 +2005,7 @@ static void set_access_info(RzReg *reg, RzAnalOp *op, csh *handle, cs_insn *insn rz_list_append (ret, val); break; case X86_INS_PUSHFQ: - val = rz_anal_value_new (); + val = rz_analysis_value_new (); val->type = RZ_ANAL_VAL_MEM; val->access = RZ_ANAL_ACC_W; val->reg = cs_reg2reg (reg, handle, sp); @@ -2015,7 +2015,7 @@ static void set_access_info(RzReg *reg, RzAnalOp *op, csh *handle, cs_insn *insn break; case X86_INS_CALL: case X86_INS_LCALL: - val = rz_anal_value_new (); + val = rz_analysis_value_new (); val->type = RZ_ANAL_VAL_MEM; val->access = RZ_ANAL_ACC_W; val->reg = cs_reg2reg (reg, handle, sp); @@ -2030,7 +2030,7 @@ static void set_access_info(RzReg *reg, RzAnalOp *op, csh *handle, cs_insn *insn // Memory access info based on operands for (i = 0; i < INSOPS; i++) { if (INSOP (i).type == X86_OP_MEM) { - val = rz_anal_value_new (); + val = rz_analysis_value_new (); val->type = RZ_ANAL_VAL_MEM; #if CS_API_MAJOR >= 4 switch (INSOP (i).access) { @@ -2065,12 +2065,12 @@ static void set_access_info(RzReg *reg, RzAnalOp *op, csh *handle, cs_insn *insn } #define CREATE_SRC_DST(op) \ - (op)->src[0] = rz_anal_value_new (); \ - (op)->src[1] = rz_anal_value_new (); \ - (op)->src[2] = rz_anal_value_new (); \ - (op)->dst = rz_anal_value_new (); + (op)->src[0] = rz_analysis_value_new (); \ + (op)->src[1] = rz_analysis_value_new (); \ + (op)->src[2] = rz_analysis_value_new (); \ + (op)->dst = rz_analysis_value_new (); -static void set_src_dst(RzReg *reg, RzAnalValue *val, csh *handle, cs_insn *insn, int x) { +static void set_src_dst(RzReg *reg, RzAnalysisValue *val, csh *handle, cs_insn *insn, int x) { switch (INSOP (x).type) { case X86_OP_MEM: val->mul = INSOP (x).mem.scale; @@ -2091,7 +2091,7 @@ static void set_src_dst(RzReg *reg, RzAnalValue *val, csh *handle, cs_insn *insn } } -static void op_fillval(RzAnal *a, RzAnalOp *op, csh *handle, cs_insn *insn, int mode) { +static void op_fillval(RzAnalysis *a, RzAnalysisOp *op, csh *handle, cs_insn *insn, int mode) { set_access_info (a->reg, op, handle, insn, mode); switch (op->type & RZ_ANAL_OP_TYPE_MASK) { case RZ_ANAL_OP_TYPE_MOV: @@ -2130,7 +2130,7 @@ static void op_fillval(RzAnal *a, RzAnalOp *op, csh *handle, cs_insn *insn, int } } -static void op0_memimmhandle(RzAnalOp *op, cs_insn *insn, ut64 addr, int regsz) { +static void op0_memimmhandle(RzAnalysisOp *op, cs_insn *insn, ut64 addr, int regsz) { op->ptr = UT64_MAX; switch (INSOP(0).type) { case X86_OP_MEM: @@ -2168,7 +2168,7 @@ static void op0_memimmhandle(RzAnalOp *op, cs_insn *insn, ut64 addr, int regsz) } } -static void op1_memimmhandle(RzAnalOp *op, cs_insn *insn, ut64 addr, int regsz) { +static void op1_memimmhandle(RzAnalysisOp *op, cs_insn *insn, ut64 addr, int regsz) { if (op->refptr < 1 || op->ptr == UT64_MAX) { switch (INSOP(1).type) { case X86_OP_MEM: @@ -2196,7 +2196,7 @@ static void op1_memimmhandle(RzAnalOp *op, cs_insn *insn, ut64 addr, int regsz) } } -static void op_stackidx(RzAnalOp *op, cs_insn *insn, bool minus) { +static void op_stackidx(RzAnalysisOp *op, cs_insn *insn, bool minus) { if (INSOP(0).type == X86_OP_REG && INSOP(1).type == X86_OP_IMM) { if (INSOP(0).reg == X86_REG_RSP || INSOP(0).reg == X86_REG_ESP) { op->stackop = RZ_ANAL_STACK_INC; @@ -2209,7 +2209,7 @@ static void op_stackidx(RzAnalOp *op, cs_insn *insn, bool minus) { } } -static void set_opdir(RzAnalOp *op, cs_insn *insn) { +static void set_opdir(RzAnalysisOp *op, cs_insn *insn) { switch (op->type & RZ_ANAL_OP_TYPE_MASK) { case RZ_ANAL_OP_TYPE_MOV: switch (INSOP(0).type) { @@ -2239,7 +2239,7 @@ static void set_opdir(RzAnalOp *op, cs_insn *insn) { } } -static void anop(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, csh *handle, cs_insn *insn) { +static void anop(RzAnalysis *a, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, csh *handle, cs_insn *insn) { struct Getarg gop = { .handle = *handle, .insn = insn, @@ -2586,7 +2586,7 @@ static void anop(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, cs op->type = RZ_ANAL_OP_TYPE_SHR; op->val = INSOP(1).imm; // XXX this should be op->imm - //op->src[0] = rz_anal_value_new (); + //op->src[0] = rz_analysis_value_new (); //op->src[0]->imm = INSOP(1).imm; break; case X86_INS_CMP: @@ -3165,7 +3165,7 @@ static int cs_len_prefix_opcode(uint8_t *item) { return len; } -static int analop(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, RzAnalOpMask mask) { +static int analop(RzAnalysis *a, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, RzAnalysisOpMask mask) { static int omode = 0; #if USE_ITERZ_API static @@ -3269,29 +3269,29 @@ static int analop(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, R } #if 0 -static int x86_int_0x80(RzAnalEsil *esil, int interrupt) { +static int x86_int_0x80(RzAnalysisEsil *esil, int interrupt) { int syscall; ut64 eax, ebx, ecx, edx; if (!esil || (interrupt != 0x80)) return false; - rz_anal_esil_reg_read (esil, "eax", &eax, NULL); - rz_anal_esil_reg_read (esil, "ebx", &ebx, NULL); - rz_anal_esil_reg_read (esil, "ecx", &ecx, NULL); - rz_anal_esil_reg_read (esil, "edx", &edx, NULL); + rz_analysis_esil_reg_read (esil, "eax", &eax, NULL); + rz_analysis_esil_reg_read (esil, "ebx", &ebx, NULL); + rz_analysis_esil_reg_read (esil, "ecx", &ecx, NULL); + rz_analysis_esil_reg_read (esil, "edx", &edx, NULL); syscall = (int) eax; switch (syscall) { case 3: { char *dst = calloc (1, (size_t)edx); (void)read ((ut32)ebx, dst, (size_t)edx); - rz_anal_esil_mem_write (esil, ecx, (ut8 *)dst, (int)edx); + rz_analysis_esil_mem_write (esil, ecx, (ut8 *)dst, (int)edx); free (dst); return true; } case 4: { char *src = malloc ((size_t)edx); - rz_anal_esil_mem_read (esil, ecx, (ut8 *)src, (int)edx); + rz_analysis_esil_mem_read (esil, ecx, (ut8 *)src, (int)edx); write ((ut32)ebx, src, (size_t)edx); free (src); return true; @@ -3303,21 +3303,21 @@ static int x86_int_0x80(RzAnalEsil *esil, int interrupt) { #endif #if 0 -static int esil_x86_cs_intr(RzAnalEsil *esil, int intr) { +static int esil_x86_cs_intr(RzAnalysisEsil *esil, int intr) { if (!esil) return false; eprintf ("INTERRUPT 0x%02x HAPPENS\n", intr); return true; } #endif -static int esil_x86_cs_init(RzAnalEsil *esil) { +static int esil_x86_cs_init(RzAnalysisEsil *esil) { if (!esil) { return false; } // XXX. this depends on kernel - // rz_anal_esil_set_interrupt (esil, 0x80, x86_int_0x80); + // rz_analysis_esil_set_interrupt (esil, 0x80, x86_int_0x80); /* disable by default */ -// rz_anal_esil_set_interrupt (esil, 0x80, NULL); // this is stupid, don't do this +// rz_analysis_esil_set_interrupt (esil, 0x80, NULL); // this is stupid, don't do this return true; } @@ -3335,13 +3335,13 @@ static int fini(void *p) { return true; } -static int esil_x86_cs_fini(RzAnalEsil *esil) { +static int esil_x86_cs_fini(RzAnalysisEsil *esil) { return true; } -static char *get_reg_profile(RzAnal *anal) { +static char *get_reg_profile(RzAnalysis *analysis) { const char *p = NULL; - switch (anal->bits) { + switch (analysis->bits) { case 16: p = "=PC ip\n" "=SP sp\n" @@ -3464,7 +3464,7 @@ static char *get_reg_profile(RzAnal *anal) { break; case 64: { - const char *cc = rz_anal_cc_default (anal); + const char *cc = rz_analysis_cc_default (analysis); const char *args_prof = cc && !strcmp (cc, "ms") ? // Microsoft x64 CC "# RAX return value\n" @@ -3736,7 +3736,7 @@ static char *get_reg_profile(RzAnal *anal) { return (p && *p)? strdup (p): NULL; } -static int archinfo(RzAnal *anal, int q) { +static int archinfo(RzAnalysis *analysis, int q) { switch (q) { case RZ_ANAL_ARCHINFO_ALIGN: return 0; @@ -3748,10 +3748,10 @@ static int archinfo(RzAnal *anal, int q) { return 0; } -static RzList *anal_preludes(RzAnal *anal) { +static RzList *analysis_preludes(RzAnalysis *analysis) { #define KW(d,ds,m,ms) rz_list_append (l, rz_search_keyword_new((const ut8*)d,ds,(const ut8*)m, ms, NULL)) RzList *l = rz_list_newf ((RzListFree)rz_search_keyword_free); - switch (anal->bits) { + switch (analysis->bits) { case 32: KW ("\x8b\xff\x55\x8b\xec", 5, NULL, 0); KW ("\x55\x89\xe5", 3, NULL, 0); @@ -3771,7 +3771,7 @@ static RzList *anal_preludes(RzAnal *anal) { return l; } -RzAnalPlugin rz_anal_plugin_x86_cs = { +RzAnalysisPlugin rz_analysis_plugin_x86_cs = { .name = "x86", .desc = "Capstone X86 analysis", .esil = true, @@ -3779,7 +3779,7 @@ RzAnalPlugin rz_anal_plugin_x86_cs = { .arch = "x86", .bits = 16|32|64, .op = &analop, - .preludes = anal_preludes, + .preludes = analysis_preludes, .archinfo = archinfo, .get_reg_profile = &get_reg_profile, .init = init, @@ -3792,7 +3792,7 @@ RzAnalPlugin rz_anal_plugin_x86_cs = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_x86_cs, + .data = &rz_analysis_plugin_x86_cs, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_xap.c b/librz/analysis/p/analysis_xap.c similarity index 93% rename from librz/anal/p/anal_xap.c rename to librz/analysis/p/analysis_xap.c index 8c54641542..d9ac99ae1d 100644 --- a/librz/anal/p/anal_xap.c +++ b/librz/analysis/p/analysis_xap.c @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include "../asm/arch/xap/dis.c" static int label_off(struct directive *d) { @@ -37,13 +37,13 @@ static inline ut16 i2ut16(struct instruction *in) { return *((uint16_t*)in); } -static int xap_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *bytes, int len, RzAnalOpMask mask) { +static int xap_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *bytes, int len, RzAnalysisOpMask mask) { struct instruction *in = (struct instruction *)bytes; ut16 lol, ins; struct directive d = {{0}}; struct state s = {0}; - if (!anal || !op) { + if (!analysis || !op) { return 2; } @@ -60,7 +60,7 @@ static int xap_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *bytes, int l xap_decode (&s, &d); d.d_operand = get_operand (&s, &d); - memset (op, 0, sizeof (RzAnalOp)); + memset (op, 0, sizeof (RzAnalysisOp)); op->type = RZ_ANAL_OP_TYPE_UNK; op->size = 2; @@ -209,7 +209,7 @@ static int xap_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *bytes, int l return op->size; } -RzAnalPlugin rz_anal_plugin_xap = { +RzAnalysisPlugin rz_analysis_plugin_xap = { .name = "xap", .desc = "XAP code analysis plugin", .license = "LGPL3", @@ -221,7 +221,7 @@ RzAnalPlugin rz_anal_plugin_xap = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_xap, + .data = &rz_analysis_plugin_xap, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_xcore_cs.c b/librz/analysis/p/analysis_xcore_cs.c similarity index 93% rename from librz/anal/p/anal_xcore_cs.c rename to librz/analysis/p/analysis_xcore_cs.c index 36dd2d8659..844b164dda 100644 --- a/librz/anal/p/anal_xcore_cs.c +++ b/librz/analysis/p/analysis_xcore_cs.c @@ -1,6 +1,6 @@ /* rizin - LGPL - Copyright 2014-2017 - pancake */ -#include +#include #include #include #include @@ -50,7 +50,7 @@ static void opex(RzStrBuf *buf, csh handle, cs_insn *insn) { rz_strbuf_append (buf, "}"); } -static int analop(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, RzAnalOpMask mask) { +static int analop(RzAnalysis *a, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, RzAnalysisOpMask mask) { static csh handle = 0; static int omode = 0; cs_insn *insn; @@ -122,7 +122,7 @@ static int analop(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *buf, int len, R return op->size; } -RzAnalPlugin rz_anal_plugin_xcore_cs = { +RzAnalysisPlugin rz_analysis_plugin_xcore_cs = { .name = "xcore", .desc = "Capstone XCORE analysis", .license = "BSD", @@ -136,7 +136,7 @@ RzAnalPlugin rz_anal_plugin_xcore_cs = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_xcore_cs, + .data = &rz_analysis_plugin_xcore_cs, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_xtensa.c b/librz/analysis/p/analysis_xtensa.c similarity index 84% rename from librz/anal/p/anal_xtensa.c rename to librz/analysis/p/analysis_xtensa.c index 5ef6fdeb1a..07475d6164 100644 --- a/librz/anal/p/anal_xtensa.c +++ b/librz/analysis/p/analysis_xtensa.c @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include @@ -52,74 +52,74 @@ static inline ut64 xtensa_imm12s (ut64 addr, const ut8 *buf) { return (addr + 4 + imm12); } -typedef void (*XtensaOpFn) (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf); +typedef void (*XtensaOpFn) (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf); -static void xtensa_null_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_null_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { op->type = RZ_ANAL_OP_TYPE_NULL; } -static void xtensa_unk_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_unk_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { op->type = RZ_ANAL_OP_TYPE_UNK; } -static void xtensa_mov_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_mov_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { op->type = RZ_ANAL_OP_TYPE_MOV; } -static void xtensa_load_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_load_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { op->type = RZ_ANAL_OP_TYPE_LOAD; } -static void xtensa_store_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_store_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { op->type = RZ_ANAL_OP_TYPE_STORE; } -static void xtensa_add_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_add_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { op->type = RZ_ANAL_OP_TYPE_ADD; } -static void xtensa_sub_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_sub_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { op->type = RZ_ANAL_OP_TYPE_SUB; } -static void xtensa_mul_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_mul_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { op->type = RZ_ANAL_OP_TYPE_MUL; } -static void xtensa_div_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_div_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { op->type = RZ_ANAL_OP_TYPE_DIV; } -static void xtensa_mod_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_mod_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { op->type = RZ_ANAL_OP_TYPE_MOD; } -static void xtensa_and_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_and_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { op->type = RZ_ANAL_OP_TYPE_AND; } -static void xtensa_or_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_or_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { op->type = RZ_ANAL_OP_TYPE_OR; } -static void xtensa_xor_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_xor_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { op->type = RZ_ANAL_OP_TYPE_XOR; } -static void xtensa_shl_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_shl_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { op->type = RZ_ANAL_OP_TYPE_SHL; } -static void xtensa_shr_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_shr_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { op->type = RZ_ANAL_OP_TYPE_SHR; } -static void xtensa_l32r_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_l32r_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { op->type = RZ_ANAL_OP_TYPE_LOAD; op->ptr = ((addr + 3) & ~3) + ((buf[2] << 8 | buf[1]) << 2) - 0x40000; } -static void xtensa_snm0_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_snm0_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { switch ((buf[0] >> 4) & 0xf) { case 0x0: case 0x1: case 0x2: case 0x3: op->type = RZ_ANAL_OP_TYPE_ILL; @@ -134,12 +134,12 @@ static void xtensa_snm0_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *bu op->type = RZ_ANAL_OP_TYPE_UCALL; break; default: - xtensa_unk_op (anal, op, addr, buf); + xtensa_unk_op (analysis, op, addr, buf); break; } } -static void xtensa_sync_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_sync_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { switch ((buf[0] >> 4) & 0xf) { case 0x0: case 0x1: case 0x2: case 0x3: case 0x8: @@ -148,12 +148,12 @@ static void xtensa_sync_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *bu op->type = RZ_ANAL_OP_TYPE_NULL; break; default: - xtensa_unk_op (anal, op, addr, buf); + xtensa_unk_op (analysis, op, addr, buf); break; } } -static void xtensa_rfei_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_rfei_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { switch ((buf[0] >> 4) & 0xf) { case 0x0: switch (buf[1] & 0xf) { @@ -162,7 +162,7 @@ static void xtensa_rfei_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *bu op->type = RZ_ANAL_OP_TYPE_RET; break; default: - xtensa_unk_op (anal, op, addr, buf); + xtensa_unk_op (analysis, op, addr, buf); break; } break; @@ -170,24 +170,24 @@ static void xtensa_rfei_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *bu op->type = RZ_ANAL_OP_TYPE_RET; break; default: - xtensa_unk_op (anal, op, addr, buf); + xtensa_unk_op (analysis, op, addr, buf); break; } } -static void xtensa_st0_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_st0_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { switch ((buf[1] >> 4) & 0xf) { case 0x0: - xtensa_snm0_op (anal, op, addr, buf); + xtensa_snm0_op (analysis, op, addr, buf); break; case 0x1: op->type = RZ_ANAL_OP_TYPE_CMOV; break; case 0x2: - xtensa_sync_op (anal, op, addr, buf); + xtensa_sync_op (analysis, op, addr, buf); break; case 0x3: - xtensa_rfei_op (anal, op, addr, buf); + xtensa_rfei_op (analysis, op, addr, buf); break; case 0x4: op->type = RZ_ANAL_OP_TYPE_TRAP; @@ -199,12 +199,12 @@ static void xtensa_st0_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf op->type = RZ_ANAL_OP_TYPE_MOV; break; default: - xtensa_unk_op (anal, op, addr, buf); + xtensa_unk_op (analysis, op, addr, buf); break; } } -static void xtensa_st1_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_st1_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { switch ((buf[1] >> 4) & 0xf) { case 0x0: case 0x1: case 0x2: case 0x3: case 0x4: @@ -223,12 +223,12 @@ static void xtensa_st1_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf op->type = RZ_ANAL_OP_TYPE_NULL; break; default: - xtensa_unk_op (anal, op, addr, buf); + xtensa_unk_op (analysis, op, addr, buf); break; } } -static void xtensa_rt0_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_rt0_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { switch (buf[1] & 0xf) { case 0: op->type = RZ_ANAL_OP_TYPE_NOT; @@ -238,12 +238,12 @@ static void xtensa_rt0_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf op->type = RZ_ANAL_OP_TYPE_MOV; break; default: - xtensa_unk_op (anal, op, addr, buf); + xtensa_unk_op (analysis, op, addr, buf); break; } } -static void xtensa_tlb_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_tlb_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { switch ((buf[2] >> 4) & 0xf) { case 0x3: case 0x4: case 0x5: case 0x6: case 0x7: @@ -252,12 +252,12 @@ static void xtensa_tlb_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf op->type = RZ_ANAL_OP_TYPE_MOV; break; default: - xtensa_unk_op (anal, op, addr, buf); + xtensa_unk_op (analysis, op, addr, buf); break; } } -static void xtensa_accer_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_accer_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { switch ((buf[2] >> 4) & 0xf) { case 0x0: case 0x8: @@ -265,12 +265,12 @@ static void xtensa_accer_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *b /*op->type = RZ_ANAL_OP_TYPE_MOV;*/ break; default: - xtensa_unk_op (anal, op, addr, buf); + xtensa_unk_op (analysis, op, addr, buf); break; } } -static void xtensa_imp_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_imp_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { switch ((buf[1] >> 4) & 0xf) { case 0x0: case 0x1: case 0x2: case 0x3: case 0x8: case 0x9: @@ -280,11 +280,11 @@ static void xtensa_imp_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf if (((buf[0] >> 4) & 0xf) <= 1) { op->type = RZ_ANAL_OP_TYPE_RET; } else { - xtensa_unk_op (anal, op, addr, buf); + xtensa_unk_op (analysis, op, addr, buf); } break; default: - xtensa_unk_op (anal, op, addr, buf); + xtensa_unk_op (analysis, op, addr, buf); break; } } @@ -346,47 +346,47 @@ static XtensaOpFn xtensa_rst2_fns[] = { xtensa_mod_op }; -static void xtensa_rst0_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { - xtensa_rst0_fns[(buf[2] >> 4) & 0xf] (anal, op, addr, buf); +static void xtensa_rst0_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { + xtensa_rst0_fns[(buf[2] >> 4) & 0xf] (analysis, op, addr, buf); } -static void xtensa_rst1_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { - xtensa_rst1_fns[(buf[2] >> 4) & 0xf] (anal, op, addr, buf); +static void xtensa_rst1_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { + xtensa_rst1_fns[(buf[2] >> 4) & 0xf] (analysis, op, addr, buf); } -static void xtensa_rst2_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { - xtensa_rst2_fns[(buf[2] >> 4) & 0xf] (anal, op, addr, buf); +static void xtensa_rst2_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { + xtensa_rst2_fns[(buf[2] >> 4) & 0xf] (analysis, op, addr, buf); } -static void xtensa_lsc4_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_lsc4_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { switch ((buf[2] >> 4) & 0xf) { case 0x0: - xtensa_load_op (anal, op, addr, buf); + xtensa_load_op (analysis, op, addr, buf); break; case 0x4: - xtensa_store_op (anal, op, addr, buf); + xtensa_store_op (analysis, op, addr, buf); break; default: - xtensa_unk_op (anal, op, addr, buf); + xtensa_unk_op (analysis, op, addr, buf); break; } } -static void xtensa_lscx_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_lscx_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { op->family = RZ_ANAL_OP_FAMILY_FPU; switch ((buf[2] >> 4) & 0xf) { case 0x0: case 0x1: - xtensa_load_op (anal, op, addr, buf); + xtensa_load_op (analysis, op, addr, buf); break; case 0x4: case 0x5: - xtensa_store_op (anal, op, addr, buf); + xtensa_store_op (analysis, op, addr, buf); break; default: - xtensa_unk_op (anal, op, addr, buf); + xtensa_unk_op (analysis, op, addr, buf); break; } } -static void xtensa_fp0_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_fp0_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { op->family = RZ_ANAL_OP_FAMILY_FPU; switch ((buf[2] >> 4) & 0xf) { case 0x0: case 0x4: @@ -414,17 +414,17 @@ static void xtensa_fp0_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf op->type = RZ_ANAL_OP_TYPE_NOT; break; default: - xtensa_unk_op (anal, op, addr, buf); + xtensa_unk_op (analysis, op, addr, buf); break; } break; default: - xtensa_unk_op (anal, op, addr, buf); + xtensa_unk_op (analysis, op, addr, buf); break; } } -static void xtensa_fp1_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_fp1_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { op->family = RZ_ANAL_OP_FAMILY_FPU; switch ((buf[2] >> 4) & 0xf) { case 0x1: case 0x2: case 0x3: @@ -436,7 +436,7 @@ static void xtensa_fp1_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf op->type = RZ_ANAL_OP_TYPE_MOV; break; default: - xtensa_unk_op (anal, op, addr, buf); + xtensa_unk_op (analysis, op, addr, buf); break; } } @@ -460,8 +460,8 @@ static XtensaOpFn xtensa_qrst_fns[] = { xtensa_unk_op }; -static void xtensa_qrst_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { - xtensa_qrst_fns[buf[2] & 0xf] (anal, op, addr, buf); +static void xtensa_qrst_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { + xtensa_qrst_fns[buf[2] & 0xf] (analysis, op, addr, buf); } static XtensaOpFn xtensa_lsai_fns[] = { @@ -483,37 +483,37 @@ static XtensaOpFn xtensa_lsai_fns[] = { xtensa_store_op }; -static void xtensa_lsai_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { - xtensa_lsai_fns[(buf[1] >> 4) & 0xf] (anal, op, addr, buf); +static void xtensa_lsai_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { + xtensa_lsai_fns[(buf[1] >> 4) & 0xf] (analysis, op, addr, buf); } -static void xtensa_lsci_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_lsci_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { ut8 r = buf[1] >> 4; op->family = RZ_ANAL_OP_FAMILY_FPU; if ((r & 3) == 0) { if (r & 4) { - xtensa_store_op (anal, op, addr, buf); + xtensa_store_op (analysis, op, addr, buf); } else { - xtensa_load_op (anal, op, addr, buf); + xtensa_load_op (analysis, op, addr, buf); } } else { - xtensa_unk_op (anal, op, addr, buf); + xtensa_unk_op (analysis, op, addr, buf); } } -static void xtensa_calln_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_calln_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { op->type = RZ_ANAL_OP_TYPE_CALL; op->fail = addr + op->size; op->jump = xtensa_offset (addr, buf); } -static void xtensa_b_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_b_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { op->type = RZ_ANAL_OP_TYPE_CJMP; op->fail = addr + op->size; op->jump = xtensa_imm8s (addr, buf[2]); } -static void xtensa_si_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_si_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { ut8 n = (buf[0] >> 4) & 3; ut8 m = (buf[0] >> 6); switch (n) { @@ -527,7 +527,7 @@ static void xtensa_si_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) op->jump = xtensa_imm12s (addr, buf); break; case 2: - xtensa_b_op (anal, op, addr, buf); + xtensa_b_op (analysis, op, addr, buf); break; case 3: switch (m) { @@ -537,7 +537,7 @@ static void xtensa_si_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) case 1: switch (buf[1] >> 4) { case 0: case 1: - xtensa_b_op (anal, op, addr, buf); + xtensa_b_op (analysis, op, addr, buf); break; case 0x8: case 0x9: case 0xa: op->type = RZ_ANAL_OP_TYPE_CJMP; @@ -545,25 +545,25 @@ static void xtensa_si_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) op->jump = addr + 4 + buf[2]; break; default: - xtensa_unk_op (anal, op, addr, buf); + xtensa_unk_op (analysis, op, addr, buf); break; } break; case 2: case 3: - xtensa_b_op (anal, op, addr, buf); + xtensa_b_op (analysis, op, addr, buf); break; default: - xtensa_unk_op (anal, op, addr, buf); + xtensa_unk_op (analysis, op, addr, buf); break; } break; default: - xtensa_unk_op (anal, op, addr, buf); + xtensa_unk_op (analysis, op, addr, buf); break; } } -static void xtensa_st2n_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_st2n_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { if (buf[0] & 0x80) { op->type = RZ_ANAL_OP_TYPE_CJMP; op->fail = addr + op->size; @@ -573,7 +573,7 @@ static void xtensa_st2n_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *bu } } -static void xtensa_st3n_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf) { +static void xtensa_st3n_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf) { switch ((buf[1] >> 4) & 0xf) { case 0x0: op->type = RZ_ANAL_OP_TYPE_MOV; @@ -593,12 +593,12 @@ static void xtensa_st3n_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *bu op->type = RZ_ANAL_OP_TYPE_ILL; break; default: - xtensa_unk_op (anal, op, addr, buf); + xtensa_unk_op (analysis, op, addr, buf); break; } break; default: - xtensa_unk_op (anal, op, addr, buf); + xtensa_unk_op (analysis, op, addr, buf); break; } } @@ -636,7 +636,7 @@ static inline void sign_extend2(st32 *value, ut8 bit1, ut8 bit2, ut8 shift) { } static void xtensa_check_stack_op(xtensa_isa isa, xtensa_opcode opcode, xtensa_format format, - size_t i, xtensa_insnbuf slot_buffer, RzAnalOp *op) { + size_t i, xtensa_insnbuf slot_buffer, RzAnalysisOp *op) { st32 imm; ut32 dst; ut32 src; @@ -695,7 +695,7 @@ static void esil_sign_extend(RzStrBuf *esil, ut8 bit) { } static void esil_load_imm(xtensa_isa isa, xtensa_opcode opcode, xtensa_format format, - size_t i, xtensa_insnbuf slot_buffer, RzAnalOp *op) { + size_t i, xtensa_insnbuf slot_buffer, RzAnalysisOp *op) { ut32 offset; ut32 reg_d; ut32 reg_a; @@ -765,7 +765,7 @@ static void esil_load_imm(xtensa_isa isa, xtensa_opcode opcode, xtensa_format fo } static void esil_load_relative(xtensa_isa isa, xtensa_opcode opcode, xtensa_format format, - size_t i, xtensa_insnbuf slot_buffer, RzAnalOp *op) { + size_t i, xtensa_insnbuf slot_buffer, RzAnalysisOp *op) { ut32 offset; st32 dst; @@ -805,7 +805,7 @@ static void esil_load_relative(xtensa_isa isa, xtensa_opcode opcode, xtensa_form } static void esil_add_imm(xtensa_isa isa, xtensa_opcode opcode, xtensa_format format, - size_t i, xtensa_insnbuf slot_buffer, RzAnalOp *op) { + size_t i, xtensa_insnbuf slot_buffer, RzAnalysisOp *op) { st32 imm; ut32 dst; ut32 src; @@ -838,7 +838,7 @@ static void esil_add_imm(xtensa_isa isa, xtensa_opcode opcode, xtensa_format for } static void esil_store_imm(xtensa_isa isa, xtensa_opcode opcode, xtensa_format format, - size_t i, xtensa_insnbuf slot_buffer, RzAnalOp *op) { + size_t i, xtensa_insnbuf slot_buffer, RzAnalysisOp *op) { ut32 offset; ut32 reg_d; @@ -895,7 +895,7 @@ static void esil_store_imm(xtensa_isa isa, xtensa_opcode opcode, xtensa_format f } static void esil_move_imm(xtensa_isa isa, xtensa_opcode opcode, xtensa_format format, - size_t i, xtensa_insnbuf slot_buffer, RzAnalOp *op) { + size_t i, xtensa_insnbuf slot_buffer, RzAnalysisOp *op) { st32 imm; ut32 reg; @@ -927,7 +927,7 @@ static void esil_move_imm(xtensa_isa isa, xtensa_opcode opcode, xtensa_format fo } static void esil_move(xtensa_isa isa, xtensa_opcode opcode, xtensa_format format, - size_t i, xtensa_insnbuf slot_buffer, RzAnalOp *op) { + size_t i, xtensa_insnbuf slot_buffer, RzAnalysisOp *op) { ut32 dst; ut32 src; @@ -950,7 +950,7 @@ static void esil_move(xtensa_isa isa, xtensa_opcode opcode, xtensa_format format } static void esil_move_conditional(xtensa_isa isa, xtensa_opcode opcode, xtensa_format format, - size_t i, xtensa_insnbuf slot_buffer, RzAnalOp *op) { + size_t i, xtensa_insnbuf slot_buffer, RzAnalysisOp *op) { ut32 dst; ut32 src; ut32 cond; @@ -1011,7 +1011,7 @@ static void esil_move_conditional(xtensa_isa isa, xtensa_opcode opcode, xtensa_f } static void esil_add_sub(xtensa_isa isa, xtensa_opcode opcode, xtensa_format format, - size_t i, xtensa_insnbuf slot_buffer, RzAnalOp *op) { + size_t i, xtensa_insnbuf slot_buffer, RzAnalysisOp *op) { ut32 dst; ut32 op1; ut32 op2; @@ -1072,7 +1072,7 @@ static void esil_add_sub(xtensa_isa isa, xtensa_opcode opcode, xtensa_format for } static void esil_branch_compare_imm(xtensa_isa isa, xtensa_opcode opcode, - xtensa_format format, size_t i, xtensa_insnbuf slot_buffer, RzAnalOp *op) { + xtensa_format format, size_t i, xtensa_insnbuf slot_buffer, RzAnalysisOp *op) { ut32 cmp_reg; // Unsigned immediate operands still fit in st32 st32 cmp_imm; @@ -1136,7 +1136,7 @@ static void esil_branch_compare_imm(xtensa_isa isa, xtensa_opcode opcode, } static void esil_branch_compare(xtensa_isa isa, xtensa_opcode opcode, - xtensa_format format, size_t i, xtensa_insnbuf slot_buffer, RzAnalOp *op) { + xtensa_format format, size_t i, xtensa_insnbuf slot_buffer, RzAnalysisOp *op) { ut32 op1_reg; ut32 op2_reg; st32 branch_imm; @@ -1199,7 +1199,7 @@ static void esil_branch_compare(xtensa_isa isa, xtensa_opcode opcode, } static void esil_branch_compare_single(xtensa_isa isa, xtensa_opcode opcode, - xtensa_format format, size_t i, xtensa_insnbuf slot_buffer, RzAnalOp *op) { + xtensa_format format, size_t i, xtensa_insnbuf slot_buffer, RzAnalysisOp *op) { ut32 op_reg; st32 branch_imm; @@ -1257,7 +1257,7 @@ static void esil_branch_compare_single(xtensa_isa isa, xtensa_opcode opcode, } static void esil_branch_check_mask(xtensa_isa isa, xtensa_opcode opcode, - xtensa_format format, size_t i, xtensa_insnbuf slot_buffer, RzAnalOp *op) { + xtensa_format format, size_t i, xtensa_insnbuf slot_buffer, RzAnalysisOp *op) { ut32 op1_reg; ut32 op2_reg; st32 branch_imm; @@ -1334,7 +1334,7 @@ static void esil_branch_check_mask(xtensa_isa isa, xtensa_opcode opcode, } static void esil_bitwise_op(xtensa_isa isa, xtensa_opcode opcode, xtensa_format format, - size_t i, xtensa_insnbuf slot_buffer, RzAnalOp *op) { + size_t i, xtensa_insnbuf slot_buffer, RzAnalysisOp *op) { ut32 dst; ut32 op1; ut32 op2; @@ -1381,7 +1381,7 @@ static void esil_bitwise_op(xtensa_isa isa, xtensa_opcode opcode, xtensa_format } static void esil_branch_check_bit_imm(xtensa_isa isa, xtensa_opcode opcode, xtensa_format format, - size_t i, xtensa_insnbuf slot_buffer, RzAnalOp *op) { + size_t i, xtensa_insnbuf slot_buffer, RzAnalysisOp *op) { ut32 src_reg; ut32 imm_bit; st32 imm_offset; @@ -1440,7 +1440,7 @@ static void esil_branch_check_bit_imm(xtensa_isa isa, xtensa_opcode opcode, xten } static void esil_branch_check_bit(xtensa_isa isa, xtensa_opcode opcode, xtensa_format format, - size_t i, xtensa_insnbuf slot_buffer, RzAnalOp *op) { + size_t i, xtensa_insnbuf slot_buffer, RzAnalysisOp *op) { ut32 src_reg; ut32 bit_reg; st32 imm_offset; @@ -1504,7 +1504,7 @@ static void esil_branch_check_bit(xtensa_isa isa, xtensa_opcode opcode, xtensa_f } static void esil_abs_neg(xtensa_isa isa, xtensa_opcode opcode, xtensa_format format, - size_t i, xtensa_insnbuf slot_buffer, RzAnalOp *op) { + size_t i, xtensa_insnbuf slot_buffer, RzAnalysisOp *op) { ut32 src_reg; ut32 dst_reg; @@ -1565,7 +1565,7 @@ static void esil_abs_neg(xtensa_isa isa, xtensa_opcode opcode, xtensa_format for } static void esil_call(xtensa_isa isa, xtensa_opcode opcode, - xtensa_format format, size_t i, xtensa_insnbuf slot_buffer, RzAnalOp *op) { + xtensa_format format, size_t i, xtensa_insnbuf slot_buffer, RzAnalysisOp *op) { bool call = opcode == 76; st32 imm_offset; @@ -1595,7 +1595,7 @@ static void esil_call(xtensa_isa isa, xtensa_opcode opcode, } static void esil_callx(xtensa_isa isa, xtensa_opcode opcode, - xtensa_format format, size_t i, xtensa_insnbuf slot_buffer, RzAnalOp *op) { + xtensa_format format, size_t i, xtensa_insnbuf slot_buffer, RzAnalysisOp *op) { bool callx = opcode == 77; ut32 dst_reg; @@ -1622,7 +1622,7 @@ static void esil_callx(xtensa_isa isa, xtensa_opcode opcode, } static void esil_set_shift_amount(xtensa_isa isa, xtensa_opcode opcode, - xtensa_format format, size_t i, xtensa_insnbuf slot_buffer, RzAnalOp *op) { + xtensa_format format, size_t i, xtensa_insnbuf slot_buffer, RzAnalysisOp *op) { ut32 src_reg; xtensa_operand_get_field (isa, opcode, 0, format, i, slot_buffer, &src_reg); @@ -1639,7 +1639,7 @@ static void esil_set_shift_amount(xtensa_isa isa, xtensa_opcode opcode, } static void esil_set_shift_amount_imm(xtensa_isa isa, xtensa_opcode opcode, - xtensa_format format, size_t i, xtensa_insnbuf slot_buffer, RzAnalOp *op) { + xtensa_format format, size_t i, xtensa_insnbuf slot_buffer, RzAnalysisOp *op) { ut32 sa_imm; xtensa_operand_get_field (isa, opcode, 0, format, i, slot_buffer, &sa_imm); @@ -1655,7 +1655,7 @@ static void esil_set_shift_amount_imm(xtensa_isa isa, xtensa_opcode opcode, } static void esil_shift_logic_imm(xtensa_isa isa, xtensa_opcode opcode, - xtensa_format format, size_t i, xtensa_insnbuf slot_buffer, RzAnalOp *op) { + xtensa_format format, size_t i, xtensa_insnbuf slot_buffer, RzAnalysisOp *op) { ut32 reg_dst; ut32 reg_src; ut32 imm_amount; @@ -1694,7 +1694,7 @@ static void esil_shift_logic_imm(xtensa_isa isa, xtensa_opcode opcode, } static void esil_shift_logic_sar(xtensa_isa isa, xtensa_opcode opcode, - xtensa_format format, size_t i, xtensa_insnbuf slot_buffer, RzAnalOp *op) { + xtensa_format format, size_t i, xtensa_insnbuf slot_buffer, RzAnalysisOp *op) { ut32 reg_dst; ut32 reg_src; @@ -1729,7 +1729,7 @@ static void esil_shift_logic_sar(xtensa_isa isa, xtensa_opcode opcode, } static void esil_extract_unsigned(xtensa_isa isa, xtensa_opcode opcode, - xtensa_format format, size_t i, xtensa_insnbuf slot_buffer, RzAnalOp *op) { + xtensa_format format, size_t i, xtensa_insnbuf slot_buffer, RzAnalysisOp *op) { ut32 reg_dst; ut32 reg_src; ut32 imm_shift; @@ -1764,7 +1764,7 @@ static void esil_extract_unsigned(xtensa_isa isa, xtensa_opcode opcode, } static void analop_esil (xtensa_isa isa, xtensa_opcode opcode, xtensa_format format, - size_t i, xtensa_insnbuf slot_buffer, RzAnalOp *op) { + size_t i, xtensa_insnbuf slot_buffer, RzAnalysisOp *op) { switch (opcode) { case 26: /* add.n */ case 41: /* add */ @@ -1909,7 +1909,7 @@ static void analop_esil (xtensa_isa isa, xtensa_opcode opcode, xtensa_format for } } -static int xtensa_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf_original, int len_original, RzAnalOpMask mask) { +static int xtensa_op (RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf_original, int len_original, RzAnalysisOpMask mask) { if (!op) { return 1; } @@ -1919,7 +1919,7 @@ static int xtensa_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf_orig return 1; } - xtensa_op0_fns[(buf_original[0] & 0xf)] (anal, op, addr, buf_original); + xtensa_op0_fns[(buf_original[0] & 0xf)] (analysis, op, addr, buf_original); ut8 buffer[XTENSA_MAX_LENGTH] = { 0 }; int len = RZ_MIN(op->size, XTENSA_MAX_LENGTH); @@ -1973,7 +1973,7 @@ static int xtensa_op (RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *buf_orig return op->size; } -static char *get_reg_profile(RzAnal *anal) { +static char *get_reg_profile(RzAnalysis *analysis) { return strdup ( // Assuming call0 ABI "# a0 return address\n" @@ -2015,7 +2015,7 @@ static char *get_reg_profile(RzAnal *anal) { ); } -RzAnalPlugin rz_anal_plugin_xtensa = { +RzAnalysisPlugin rz_analysis_plugin_xtensa = { .name = "xtensa", .desc = "Xtensa disassembler", .license = "LGPL3", @@ -2029,7 +2029,7 @@ RzAnalPlugin rz_anal_plugin_xtensa = { #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_xtensa, + .data = &rz_analysis_plugin_xtensa, .version = RZ_VERSION }; #endif diff --git a/librz/anal/p/anal_z80.c b/librz/analysis/p/analysis_z80.c similarity index 94% rename from librz/anal/p/anal_z80.c rename to librz/analysis/p/analysis_z80.c index 7ea1c6d6fc..34997dd45e 100644 --- a/librz/anal/p/anal_z80.c +++ b/librz/analysis/p/analysis_z80.c @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include "../../asm/arch/z80/z80_tab.h" static void z80_op_size(const ut8 *data, int len, int *size, int *size_prefix) { @@ -54,7 +54,7 @@ static void z80_op_size(const ut8 *data, int len, int *size, int *size_prefix) { } } -static int z80_anal_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int len, RzAnalOpMask mask) { +static int z80_analysis_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *data, int len, RzAnalysisOpMask mask) { int ilen = 0; z80_op_size (data, len, &ilen, &op->nopcode); @@ -367,7 +367,7 @@ static int z80_anal_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, i return ilen; } -static bool set_reg_profile(RzAnal *anal) { +static bool set_reg_profile(RzAnalysis *analysis) { const char *p = "=PC mpc\n" "=SP sp\n" @@ -406,14 +406,14 @@ static bool set_reg_profile(RzAnal *anal) { "gpr mbcram .16 16 0\n" "gpr ime .1 18 0\n"; - return rz_reg_set_profile_string (anal->reg, p); + return rz_reg_set_profile_string (analysis->reg, p); } -static int archinfo(RzAnal *anal, int q) { +static int archinfo(RzAnalysis *analysis, int q) { return 1; } -RzAnalPlugin rz_anal_plugin_z80 = { +RzAnalysisPlugin rz_analysis_plugin_z80 = { .name = "z80", .arch = "z80", .license = "LGPL3", @@ -421,13 +421,13 @@ RzAnalPlugin rz_anal_plugin_z80 = { .set_reg_profile = &set_reg_profile, .desc = "Z80 CPU code analysis plugin", .archinfo = archinfo, - .op = &z80_anal_op, + .op = &z80_analysis_op, }; #ifndef RZ_PLUGIN_INCORE RZ_API RzLibStruct rizin_plugin = { .type = RZ_LIB_TYPE_ANAL, - .data = &rz_anal_plugin_z80, + .data = &rz_analysis_plugin_z80, .version = RZ_VERSION }; #endif diff --git a/librz/analysis/p/arc.mk b/librz/analysis/p/arc.mk new file mode 100644 index 0000000000..901ad1a294 --- /dev/null +++ b/librz/analysis/p/arc.mk @@ -0,0 +1,9 @@ +OBJ_ARC=analysis_arc.o + +STATIC_OBJ+=${OBJ_ARC} +TARGET_ARC=analysis_arc.${EXT_SO} + +ALL_TARGETS+=${TARGET_ARC} + +${TARGET_ARC}: ${OBJ_ARC} + ${CC} $(call libname,analysis_arc) ${LDFLAGS} ${CFLAGS} -o analysis_arc.${EXT_SO} ${OBJ_ARC} diff --git a/librz/anal/p/arm_cs.mk b/librz/analysis/p/arm_cs.mk similarity index 84% rename from librz/anal/p/arm_cs.mk rename to librz/analysis/p/arm_cs.mk index 29651c305f..36b237073e 100644 --- a/librz/anal/p/arm_cs.mk +++ b/librz/analysis/p/arm_cs.mk @@ -1,5 +1,5 @@ -N=anal_arm_cs -OBJ_ARM_CS=anal_arm_cs.o +N=analysis_arm_cs +OBJ_ARM_CS=analysis_arm_cs.o include $(CURDIR)capstone.mk diff --git a/librz/anal/p/arm_gnu.mk b/librz/analysis/p/arm_gnu.mk similarity index 72% rename from librz/anal/p/arm_gnu.mk rename to librz/analysis/p/arm_gnu.mk index cecd168e74..63a2a75e0a 100644 --- a/librz/anal/p/arm_gnu.mk +++ b/librz/analysis/p/arm_gnu.mk @@ -1,5 +1,5 @@ -N=anal_arm_gnu -OBJ_ARM=anal_arm_gnu.o ../../asm/arch/arm/winedbg/be_arm.o +N=analysis_arm_gnu +OBJ_ARM=analysis_arm_gnu.o ../../asm/arch/arm/winedbg/be_arm.o STATIC_OBJ+=${OBJ_ARM} TARGET_ARM=$(N).${EXT_SO} diff --git a/librz/analysis/p/avr.mk b/librz/analysis/p/avr.mk new file mode 100644 index 0000000000..987166bcfa --- /dev/null +++ b/librz/analysis/p/avr.mk @@ -0,0 +1,9 @@ +OBJ_AVR=analysis_avr.o + +STATIC_OBJ+=${OBJ_AVR} +TARGET_AVR=analysis_avr.${EXT_SO} + +ALL_TARGETS+=${TARGET_AVR} + +${TARGET_AVR}: ${OBJ_AVR} + ${CC} $(call libname,analysis_avr) ${CFLAGS} -o analysis_avr.${EXT_SO} ${OBJ_AVR} diff --git a/librz/analysis/p/bf.mk b/librz/analysis/p/bf.mk new file mode 100644 index 0000000000..22cd578745 --- /dev/null +++ b/librz/analysis/p/bf.mk @@ -0,0 +1,9 @@ +OBJ_BF=analysis_bf.o + +STATIC_OBJ+=${OBJ_BF} +TARGET_BF=analysis_bf.${EXT_SO} + +ALL_TARGETS+=${TARGET_BF} + +${TARGET_BF}: ${OBJ_BF} + ${CC} $(call libname,analysis_bf) ${LDFLAGS} ${CFLAGS} -o analysis_bf.${EXT_SO} ${OBJ_BF} diff --git a/librz/anal/p/capstone.mk b/librz/analysis/p/capstone.mk similarity index 100% rename from librz/anal/p/capstone.mk rename to librz/analysis/p/capstone.mk diff --git a/librz/analysis/p/chip8.mk b/librz/analysis/p/chip8.mk new file mode 100644 index 0000000000..7a5f143406 --- /dev/null +++ b/librz/analysis/p/chip8.mk @@ -0,0 +1,9 @@ +OBJ_CHIP8=analysis_chip8.o + +STATIC_OBJ+=${OBJ_CHIP8} +TARGET_CHIP8=analysis_chip8.${EXT_SO} + +ALL_TARGETS+=${TARGET_CHIP8} + +${TARGET_CHIP8}: ${OBJ_CHIP8} + ${CC} $(call libname,analysis_chip8) ${CFLAGS} -o analysis_chip8.${EXT_SO} ${OBJ_CHIP8} diff --git a/librz/anal/p/cr16.mk b/librz/analysis/p/cr16.mk similarity index 74% rename from librz/anal/p/cr16.mk rename to librz/analysis/p/cr16.mk index 41ad2c901d..f08420ab95 100644 --- a/librz/anal/p/cr16.mk +++ b/librz/analysis/p/cr16.mk @@ -1,14 +1,14 @@ -OBJ_CR16=anal_cr16.o +OBJ_CR16=analysis_cr16.o CFLAGS+=-I../asm/arch/cr16/ STATIC_OBJ+=${OBJ_CR16} #OBJ_CR16+=../../../../../../../../../../../../../../../../../../../../${LTOP}/asm/arch/cr16/cr16_disas.o OBJ_CR16+=../../asm/arch/cr16/cr16_disas.o -TARGET_CR16=anal_cr16.${EXT_SO} +TARGET_CR16=analysis_cr16.${EXT_SO} ALL_TARGETS+=${TARGET_CR16} ${TARGET_CR16}: ${OBJ_CR16} ${SHARED_OBJ} $(call pwd) - ${CC} $(call libname,anal_cr16) ${CFLAGS} \ + ${CC} $(call libname,analysis_cr16) ${CFLAGS} \ -o ${TARGET_CR16} ${OBJ_CR16} diff --git a/librz/analysis/p/cris.mk b/librz/analysis/p/cris.mk new file mode 100644 index 0000000000..e01e1bc08f --- /dev/null +++ b/librz/analysis/p/cris.mk @@ -0,0 +1,10 @@ +OBJ_CRIS=analysis_cris.o + +STATIC_OBJ+=$(OBJ_CRIS) +TARGET_CRIS=analysis_cris.${EXT_SO} + +ALL_TARGETS+=${TARGET_CRIS} + +${TARGET_CRIS}: ${OBJ_CRIS} + ${CC} ${CFLAGS} $(call libname,analysis_cris) \ + -o analysis_cris.${EXT_SO} ${OBJ_CRIS} diff --git a/librz/analysis/p/dalvik.mk b/librz/analysis/p/dalvik.mk new file mode 100644 index 0000000000..127eb900c7 --- /dev/null +++ b/librz/analysis/p/dalvik.mk @@ -0,0 +1,9 @@ +OBJ_DALVIK=analysis_dalvik.o + +STATIC_OBJ+=${OBJ_DALVIK} +TARGET_DALVIK=analysis_dalvik.${EXT_SO} + +ALL_TARGETS+=${TARGET_DALVIK} + +${TARGET_DALVIK}: ${OBJ_DALVIK} + ${CC} $(call libname,analysis_dalvik) ${LDFLAGS} ${CFLAGS} -o analysis_dalvik.${EXT_SO} ${OBJ_DALVIK} diff --git a/librz/anal/p/ebc.mk b/librz/analysis/p/ebc.mk similarity index 74% rename from librz/anal/p/ebc.mk rename to librz/analysis/p/ebc.mk index df132d29a1..9150953cb7 100644 --- a/librz/anal/p/ebc.mk +++ b/librz/analysis/p/ebc.mk @@ -1,14 +1,14 @@ -OBJ_EBC=anal_ebc.o +OBJ_EBC=analysis_ebc.o CFLAGS+=-I../asm/arch/ebc/ STATIC_OBJ+=${OBJ_EBC} #OBJ_EBC+=../../../../../../../../../../../../../../../../../../../../${LTOP}/asm/arch/ebc/ebc_disas.o OBJ_EBC+=../../asm/arch/ebc/ebc_disas.o -TARGET_EBC=anal_ebc.${EXT_SO} +TARGET_EBC=analysis_ebc.${EXT_SO} ALL_TARGETS+=${TARGET_EBC} ${TARGET_EBC}: ${OBJ_EBC} ${SHARED_OBJ} $(call pwd) - ${CC} $(call libname,anal_ebc) ${CFLAGS} \ + ${CC} $(call libname,analysis_ebc) ${CFLAGS} \ -o ${TARGET_EBC} ${OBJ_EBC} diff --git a/librz/anal/p/gb.mk b/librz/analysis/p/gb.mk similarity index 52% rename from librz/anal/p/gb.mk rename to librz/analysis/p/gb.mk index d372974c18..d971c6e671 100644 --- a/librz/anal/p/gb.mk +++ b/librz/analysis/p/gb.mk @@ -1,12 +1,12 @@ -OBJ_GB=anal_gb.o +OBJ_GB=analysis_gb.o STATIC_OBJ+=${OBJ_GB} -TARGET_GB=anal_gb.${EXT_SO} +TARGET_GB=analysis_gb.${EXT_SO} ALL_TARGETS+=${TARGET_GB} CFLAGS += -Iarch/gb/ ${TARGET_GB}: ${OBJ_GB} - ${CC} $(call libname,anal_gb) ${LDFLAGS} ${CFLAGS} \ + ${CC} $(call libname,analysis_gb) ${LDFLAGS} ${CFLAGS} \ -o ${TARGET_GB} ${OBJ_GB} diff --git a/librz/anal/p/h8300.mk b/librz/analysis/p/h8300.mk similarity index 74% rename from librz/anal/p/h8300.mk rename to librz/analysis/p/h8300.mk index a2f6557399..5ec48d4b62 100644 --- a/librz/anal/p/h8300.mk +++ b/librz/analysis/p/h8300.mk @@ -1,14 +1,14 @@ -OBJ_H8300=anal_h8300.o +OBJ_H8300=analysis_h8300.o CFLAGS+=-I../asm/arch/h8300/ STATIC_OBJ+=${OBJ_H8300} #OBJ_H8300+=../../../../../../../../../../../../../../../../../../../../${LTOP}/asm/arch/h8300/h8300_disas.o OBJ_H8300+=../../asm/arch/h8300/h8300_disas.o -TARGET_H8300=anal_h8300.${EXT_SO} +TARGET_H8300=analysis_h8300.${EXT_SO} ALL_TARGETS+=${TARGET_H8300} ${TARGET_H8300}: ${OBJ_H8300} ${SHARED_OBJ} $(call pwd) - ${CC} $(call libname,anal_h8300) ${CFLAGS} \ + ${CC} $(call libname,analysis_h8300) ${CFLAGS} \ -o ${TARGET_H8300} ${OBJ_H8300} diff --git a/librz/anal/p/hexagon.mk b/librz/analysis/p/hexagon.mk similarity index 53% rename from librz/anal/p/hexagon.mk rename to librz/analysis/p/hexagon.mk index 68c189fd84..d05090eb36 100644 --- a/librz/anal/p/hexagon.mk +++ b/librz/analysis/p/hexagon.mk @@ -1,16 +1,16 @@ -OBJ_HEXAGON=anal_hexagon.o +OBJ_HEXAGON=analysis_hexagon.o OBJ_HEXAGON+=../../asm/arch/hexagon/hexagon.o OBJ_HEXAGON+=../../asm/arch/hexagon/hexagon_disas.o -OBJ_HEXAGON+=../../anal/arch/hexagon/hexagon_anal.o +OBJ_HEXAGON+=../../analysis/arch/hexagon/hexagon_anal.o CFLAGS +=-I../asm/arch/hexagon -CFLAGS +=-I../anal/arch/hexagon +CFLAGS +=-I../analysis/arch/hexagon STATIC_OBJ+=${OBJ_HEXAGON} -TARGET_HEXAGON=anal_hexagon.${EXT_SO} +TARGET_HEXAGON=analysis_hexagon.${EXT_SO} ALL_TARGETS+=${TARGET_HEXAGON} ${TARGET_HEXAGON}: ${OBJ_HEXAGON} - ${CC} $(call libname,anal_hexagon) ${LDFLAGS} ${CFLAGS} \ + ${CC} $(call libname,analysis_hexagon) ${LDFLAGS} ${CFLAGS} \ -o $(TARGET_HEXAGON) $(OBJ_HEXAGON) diff --git a/librz/analysis/p/i4004.mk b/librz/analysis/p/i4004.mk new file mode 100644 index 0000000000..91b4523dae --- /dev/null +++ b/librz/analysis/p/i4004.mk @@ -0,0 +1,9 @@ +OBJ_I4004=analysis_i4004.o + +STATIC_OBJ+=${OBJ_I4004} +TARGET_I4004=analysis_i4004.${EXT_SO} + +ALL_TARGETS+=${TARGET_I4004} + +${TARGET_I4004}: ${OBJ_I4004} + ${CC} $(call libname,analysis_i4004) ${CFLAGS} -o analysis_i4004.${EXT_SO} ${OBJ_I4004} diff --git a/librz/analysis/p/i8080.mk b/librz/analysis/p/i8080.mk new file mode 100644 index 0000000000..c6d5603e8c --- /dev/null +++ b/librz/analysis/p/i8080.mk @@ -0,0 +1,9 @@ +OBJ_I8080=analysis_i8080.o + +STATIC_OBJ+=${OBJ_I8080} +TARGET_I8080=analysis_i8080.${EXT_SO} + +ALL_TARGETS+=${TARGET_I8080} + +${TARGET_I8080}: ${OBJ_I8080} + ${CC} $(call libname,analysis_z80) ${LDFLAGS} ${CFLAGS} -o analysis_i8080.${EXT_SO} ${OBJ_I8080} diff --git a/librz/anal/p/java.mk b/librz/analysis/p/java.mk similarity index 64% rename from librz/anal/p/java.mk rename to librz/analysis/p/java.mk index ab411f1eb4..ee703be527 100644 --- a/librz/anal/p/java.mk +++ b/librz/analysis/p/java.mk @@ -1,16 +1,16 @@ -OBJ_JAVA=anal_java.o +OBJ_JAVA=analysis_java.o SHARED2_JAVA=$(addprefix ../,${SHARED_JAVA}) OBJ_JAVA+=${SHARED2_JAVA} STATIC_OBJ+=${OBJ_JAVA} -TARGET_JAVA=anal_java.${EXT_SO} +TARGET_JAVA=analysis_java.${EXT_SO} ALL_TARGETS+=${TARGET_JAVA} ${TARGET_JAVA}: ${OBJ_JAVA} - ${CC} $(call libname,anal_java) ${CFLAGS} \ - -o anal_java.${EXT_SO} \ + ${CC} $(call libname,analysis_java) ${CFLAGS} \ + -o analysis_java.${EXT_SO} \ ${OBJ_JAVA} ${SHARED2_JAVA} \ $(SHLR)/java/librz_java.$(EXT_AR) \ $(SHLR)/sdb/src/libsdb.$(EXT_AR) diff --git a/librz/analysis/p/m680x_cs.mk b/librz/analysis/p/m680x_cs.mk new file mode 100644 index 0000000000..740fc7fd62 --- /dev/null +++ b/librz/analysis/p/m680x_cs.mk @@ -0,0 +1,13 @@ +OBJ_M680X_CS=analysis_m680x_cs.o + +include ${CURDIR}capstone.mk + +STATIC_OBJ+=$(OBJ_M680X_CS) + +TARGET_M680X_CS=analysis_m680x_cs.${EXT_SO} + +ALL_TARGETS+=${TARGET_M680X_CS} + +${TARGET_M680X_CS}: ${OBJ_M680X_CS} + ${CC} ${CFLAGS} $(call libname,analysis_m680x_cs) $(CS_CFLAGS) \ + -o analysis_m680x_cs.${EXT_SO} ${OBJ_M680X_CS} $(CS_LDFLAGS) diff --git a/librz/analysis/p/m68k_cs.mk b/librz/analysis/p/m68k_cs.mk new file mode 100644 index 0000000000..28d8b00f10 --- /dev/null +++ b/librz/analysis/p/m68k_cs.mk @@ -0,0 +1,13 @@ +OBJ_M68K_CS=analysis_m68k_cs.o + +include ${CURDIR}capstone.mk + +STATIC_OBJ+=$(OBJ_M68K_CS) + +TARGET_M68K_CS=analysis_m68k_cs.${EXT_SO} + +ALL_TARGETS+=${TARGET_M68K_CS} + +${TARGET_M68K_CS}: ${OBJ_M68K_CS} + ${CC} ${CFLAGS} $(call libname,analysis_m68k_cs) $(CS_CFLAGS) \ + -o analysis_m68k_cs.${EXT_SO} ${OBJ_M68K_CS} $(CS_LDFLAGS) diff --git a/librz/analysis/p/malbolge.mk b/librz/analysis/p/malbolge.mk new file mode 100644 index 0000000000..62991a6384 --- /dev/null +++ b/librz/analysis/p/malbolge.mk @@ -0,0 +1,9 @@ +OBJ_MALBOLGE=analysis_malbolge.o + +STATIC_OBJ+=${OBJ_MALBOLGE} +TARGET_MALBOLGE=analysis_malbolge.${EXT_SO} + +ALL_TARGETS+=${TARGET_MALBOLGE} + +${TARGET_MALBOLGE}: ${OBJ_MALBOLGE} + ${CC} $(call libname,analysis_malbolge) ${LDFLAGS} ${CFLAGS} -o analysis_malbolge.${EXT_SO} ${OBJ_MALBOLGE} diff --git a/librz/analysis/p/mcore.mk b/librz/analysis/p/mcore.mk new file mode 100644 index 0000000000..8100604f9c --- /dev/null +++ b/librz/analysis/p/mcore.mk @@ -0,0 +1,11 @@ +OBJ_MCORE=analysis_mcore.o ../../asm/arch/mcore/mcore.o + +STATIC_OBJ+=${OBJ_MCORE} + +TARGET_MCORE=analysis_mcore.${EXT_SO} + +ALL_TARGETS+=${TARGET_MCORE} + +${TARGET_MCORE}: ${OBJ_MCORE} + ${CC} ${CFLAGS} $(call libname,analysis_mcore) $(CS_LDFLAGS) \ + -o analysis_mcore.${EXT_SO} ${OBJ_MCORE} diff --git a/librz/analysis/p/mips_cs.mk b/librz/analysis/p/mips_cs.mk new file mode 100644 index 0000000000..082c3c22fb --- /dev/null +++ b/librz/analysis/p/mips_cs.mk @@ -0,0 +1,12 @@ +OBJ_MIPS_CS=analysis_mips_cs.o + +include $(CURDIR)capstone.mk + +STATIC_OBJ+=$(OBJ_MIPS_CS) +TARGET_MIPS_CS=analysis_mips_cs.${EXT_SO} + +ALL_TARGETS+=${TARGET_MIPS_CS} + +${TARGET_MIPS_CS}: ${OBJ_MIPS_CS} + ${CC} ${CFLAGS} $(call libname,analysis_mips_cs) $(CS_CFLAGS) \ + -o analysis_mips_cs.${EXT_SO} ${OBJ_MIPS_CS} $(CS_LDFLAGS) diff --git a/librz/anal/p/mips_gnu.mk b/librz/analysis/p/mips_gnu.mk similarity index 92% rename from librz/anal/p/mips_gnu.mk rename to librz/analysis/p/mips_gnu.mk index 1f62d44fae..59aea3d1f7 100644 --- a/librz/anal/p/mips_gnu.mk +++ b/librz/analysis/p/mips_gnu.mk @@ -1,4 +1,4 @@ -N=anal_mips_gnu +N=analysis_mips_gnu OBJ_MIPS=$(N).o include p/capstone.mk diff --git a/librz/anal/p/msp430.mk b/librz/analysis/p/msp430.mk similarity index 66% rename from librz/anal/p/msp430.mk rename to librz/analysis/p/msp430.mk index 65f465028c..11febe5fe3 100644 --- a/librz/anal/p/msp430.mk +++ b/librz/analysis/p/msp430.mk @@ -1,13 +1,13 @@ -OBJ_msp430=anal_msp430.o +OBJ_msp430=analysis_msp430.o CFLAGS+=-I../asm/arch/msp430/ STATIC_OBJ+=${OBJ_msp430} OBJ_msp430+=../../asm/arch/msp430/msp430_disas.o -TARGET_msp430=anal_msp430.${EXT_SO} +TARGET_msp430=analysis_msp430.${EXT_SO} ALL_TARGETS+=${TARGET_msp430} ${TARGET_msp430}: ${OBJ_msp430} ${SHARED_OBJ} $(call pwd) - ${CC} $(call libname,anal_msp430) ${CFLAGS} \ + ${CC} $(call libname,analysis_msp430) ${CFLAGS} \ -o ${TARGET_msp430} ${OBJ_msp430} diff --git a/librz/analysis/p/nios2.mk b/librz/analysis/p/nios2.mk new file mode 100644 index 0000000000..ed9c2b22f4 --- /dev/null +++ b/librz/analysis/p/nios2.mk @@ -0,0 +1,10 @@ +OBJ_NIOS2=analysis_nios2.o + +STATIC_OBJ+=${OBJ_NIOS2} +TARGET_NIOS2=analysis_nios2.${EXT_SO} + +ALL_TARGETS+=${TARGET_NIOS2} + +${TARGET_NIOS2}: ${OBJ_NIOS2} + ${CC} $(call libname,analysis_nios2) ${LDFLAGS} ${CFLAGS} \ + -o analysis_nios2.${EXT_SO} ${OBJ_NIOS2} diff --git a/librz/analysis/p/null.mk b/librz/analysis/p/null.mk new file mode 100644 index 0000000000..59aa2921c2 --- /dev/null +++ b/librz/analysis/p/null.mk @@ -0,0 +1,10 @@ +OBJ_NULL=analysis_null.o + +STATIC_OBJ+=${OBJ_NULL} +TARGET_NULL=analysis_null.${EXT_SO} + +ALL_TARGETS+=${TARGET_NULL} + +${TARGET_NULL}: ${OBJ_NULL} + ${CC} $(call libname,analysis_null) ${LDFLAGS} \ + ${CFLAGS} -o analysis_null.${EXT_SO} ${OBJ_NULL} diff --git a/librz/analysis/p/or1k.mk b/librz/analysis/p/or1k.mk new file mode 100644 index 0000000000..0fbaa5f04a --- /dev/null +++ b/librz/analysis/p/or1k.mk @@ -0,0 +1,12 @@ +OBJ_OR1K=analysis_or1k.o +OBJ_OR1K+=../../asm/arch/or1k/or1k_disas.o +CFLAGS+=-I../asm/arch/or1k + +STATIC_OBJ+=${OBJ_OR1K} +TARGET_OR1K=analysis_or1k.${EXT_SO} + +ALL_TARGETS+=${TARGET_OR1K} + +${TARGET_OR1K}: ${OBJ_OR1K} + ${CC} $(call libname,analysis_nios2) ${LDFLAGS} ${CFLAGS} \ + -o analysis_or1k.${EXT_SO} ${OBJ_OR1K} diff --git a/librz/analysis/p/pic.mk b/librz/analysis/p/pic.mk new file mode 100644 index 0000000000..7076f2ac45 --- /dev/null +++ b/librz/analysis/p/pic.mk @@ -0,0 +1,10 @@ +OBJ_PIC=analysis_pic.o + +STATIC_OBJ+=$(OBJ_PIC) +OBJ_PIC+=../../asm/arch/pic/pic_midrange.o +TARGET_PIC=analysis_pic.$(EXT_SO) + +ALL_TARTGETS+=$(TARGET_PIC) + +$(TARGET_PIC): $(OBJ_PIC) + $(CC) $(call libname,analysis_pic) ${LDFLAGS} ${CFLAGS} -o analysis_pic.$(EXT_SO) $(OBJ_PIC) diff --git a/librz/analysis/p/ppc_cs.mk b/librz/analysis/p/ppc_cs.mk new file mode 100644 index 0000000000..36e25604af --- /dev/null +++ b/librz/analysis/p/ppc_cs.mk @@ -0,0 +1,12 @@ +OBJ_PPC_CS=analysis_ppc_cs.o ../../asm/arch/ppc/libvle/vle.o + +include $(CURDIR)capstone.mk + +STATIC_OBJ+=${OBJ_PPC_CS} +TARGET_PPC_CS=analysis_ppc_cs.${EXT_SO} + +ALL_TARGETS+=${TARGET_PPC_CS} + +${TARGET_PPC_CS}: ${OBJ_PPC_CS} + ${CC} ${CFLAGS} $(call libname,analysis_ppc_cs) $(CS_CFLAGS) \ + -o analysis_ppc_cs.${EXT_SO} ${OBJ_PPC_CS} $(CS_LDFLAGS) diff --git a/librz/analysis/p/ppc_gnu.mk b/librz/analysis/p/ppc_gnu.mk new file mode 100644 index 0000000000..3c15189c3c --- /dev/null +++ b/librz/analysis/p/ppc_gnu.mk @@ -0,0 +1,10 @@ +OBJ_PPC=analysis_ppc_gnu.o + +STATIC_OBJ+=${OBJ_PPC} +TARGET_PPC=analysis_ppc_gnu.${EXT_SO} + +ALL_TARGETS+=${TARGET_PPC} + +${TARGET_PPC}: ${OBJ_PPC} + ${CC} $(call libname,analysis_ppc_gnu) ${CFLAGS} \ + -o analysis_ppc_gnu.${EXT_SO} ${OBJ_PPC} diff --git a/librz/anal/p/propeller.mk b/librz/analysis/p/propeller.mk similarity index 66% rename from librz/anal/p/propeller.mk rename to librz/analysis/p/propeller.mk index b3f7fdcf35..694ab02ca8 100644 --- a/librz/anal/p/propeller.mk +++ b/librz/analysis/p/propeller.mk @@ -1,13 +1,13 @@ -OBJ_propeller=anal_propeller.o +OBJ_propeller=analysis_propeller.o CFLAGS+=-I../asm/arch/propeller/ STATIC_OBJ+=${OBJ_propeller} OBJ_propeller+=../../asm/arch/propeller/propeller_disas.o -TARGET_propeller=anal_propeller.${EXT_SO} +TARGET_propeller=analysis_propeller.${EXT_SO} ALL_TARGETS+=${TARGET_propeller} ${TARGET_propeller}: ${OBJ_propeller} ${SHARED_OBJ} $(call pwd) - ${CC} $(call libname,anal_propeller) ${CFLAGS} \ + ${CC} $(call libname,analysis_propeller) ${CFLAGS} \ -o ${TARGET_propeller} ${OBJ_propeller} diff --git a/librz/anal/p/pyc.mk b/librz/analysis/p/pyc.mk similarity index 89% rename from librz/anal/p/pyc.mk rename to librz/analysis/p/pyc.mk index 05ee1d982a..64b8fd9a3f 100644 --- a/librz/anal/p/pyc.mk +++ b/librz/analysis/p/pyc.mk @@ -1,5 +1,5 @@ PYC_ASM_ROOT=../../asm/arch/pyc/ -OBJ_PYC=anal_pyc.o +OBJ_PYC=analysis_pyc.o OBJ_PYC+=$(PYC_ASM_ROOT)/opcode_10.o OBJ_PYC+=$(PYC_ASM_ROOT)/opcode_11.o OBJ_PYC+=$(PYC_ASM_ROOT)/opcode_12.o @@ -32,10 +32,10 @@ OBJ_PYC+=$(PYC_ASM_ROOT)/opcode_arg_fmt.o OBJ_PYC+=$(PYC_ASM_ROOT)/opcode.o STATIC_OBJ+=${OBJ_PYC} -TARGET_PYC=anal_pyc.$(EXT_SO) +TARGET_PYC=analysis_pyc.$(EXT_SO) ALL_TARGETS+=${TARGET_PYC} CFLAGS+=-I$(PYC_ROOT) ${TARGET_PYC}: ${OBJ_PYC} - ${CC} $(call libname,anal_pyc) ${CFLAGS} $(LDFLAGS) -o ${TARGET_PYC} ${OBJ_PYC} -lrz_util + ${CC} $(call libname,analysis_pyc) ${CFLAGS} $(LDFLAGS) -o ${TARGET_PYC} ${OBJ_PYC} -lrz_util diff --git a/librz/analysis/p/riscv.mk b/librz/analysis/p/riscv.mk new file mode 100644 index 0000000000..7e9718d0e0 --- /dev/null +++ b/librz/analysis/p/riscv.mk @@ -0,0 +1,9 @@ +OBJ_RISCV=analysis_riscv.o + +STATIC_OBJ+=${OBJ_RISCV} +TARGET_RISCV=analysis_riscv.${EXT_SO} + +ALL_TARGETS+=${TARGET_RISCV} + +${TARGET_RISCV}: ${OBJ_RISCV} + ${CC} $(call libname,analysis_RISCV) ${LDFLAGS} ${CFLAGS} -o analysis_riscv.${EXT_SO} ${OBJ_RISCV} diff --git a/librz/analysis/p/riscv_cs.mk b/librz/analysis/p/riscv_cs.mk new file mode 100644 index 0000000000..de1f7dea82 --- /dev/null +++ b/librz/analysis/p/riscv_cs.mk @@ -0,0 +1,12 @@ +OBJ_RISCV_CS=analysis_riscv_cs.o + +include $(CURDIR)capstone.mk + +STATIC_OBJ+=$(OBJ_RISCV_CS) +TARGET_RISCV_CS=analysis_riscv_cs.${EXT_SO} + +ALL_TARGETS+=${TARGET_RISCV_CS} + +${TARGET_RISCV_CS}: ${OBJ_RISCV_CS} + ${CC} ${CFLAGS} $(call libname,analysis_riscv_cs) $(CS_CFLAGS) \ + -o analysis_riscv_cs.${EXT_SO} ${OBJ_RISCV_CS} $(CS_LDFLAGS) diff --git a/librz/anal/p/rsp.mk b/librz/analysis/p/rsp.mk similarity index 55% rename from librz/anal/p/rsp.mk rename to librz/analysis/p/rsp.mk index f6a1d2ca67..d597170c8d 100644 --- a/librz/anal/p/rsp.mk +++ b/librz/analysis/p/rsp.mk @@ -1,12 +1,12 @@ -OBJ_RSP=anal_rsp.o +OBJ_RSP=analysis_rsp.o #RSP_ROOT=$(LIBR)/asm/arch/rsp CFLAGS+=-I../asm/arch/rsp STATIC_OBJ+=${OBJ_RSP} OBJ_RSP+=../../asm/arch/rsp/rsp_idec.o -TARGET_RSP=anal_rsp.${EXT_SO} +TARGET_RSP=analysis_rsp.${EXT_SO} ALL_TARGETS+=${TARGET_RSP} ${TARGET_RSP}: ${OBJ_RSP} - ${CC} $(call libname,anal_rsp) ${LDFLAGS} ${CFLAGS} -o ${TARGET_RSP} ${OBJ_RSP} + ${CC} $(call libname,analysis_rsp) ${LDFLAGS} ${CFLAGS} -o ${TARGET_RSP} ${OBJ_RSP} diff --git a/librz/analysis/p/sh.mk b/librz/analysis/p/sh.mk new file mode 100644 index 0000000000..9cae714245 --- /dev/null +++ b/librz/analysis/p/sh.mk @@ -0,0 +1,10 @@ +OBJ_SH=analysis_sh.o + +STATIC_OBJ+=${OBJ_SH} +TARGET_SH=analysis_sh.${EXT_SO} + +ALL_TARGETS+=${TARGET_SH} + +${TARGET_SH}: ${OBJ_SH} + ${CC} $(call libname,analysis_sh) ${LDFLAGS} \ + ${CFLAGS} -o analysis_sh.${EXT_SO} ${OBJ_SH} diff --git a/librz/analysis/p/snes.mk b/librz/analysis/p/snes.mk new file mode 100644 index 0000000000..d9666fabeb --- /dev/null +++ b/librz/analysis/p/snes.mk @@ -0,0 +1,9 @@ +OBJ_SNES=analysis_snes.o + +STATIC_OBJ+=${OBJ_SNES} +TARGET_SNES=analysis_snes.${EXT_SO} + +ALL_TARGETS+=${TARGET_SNES} + +${TARGET_SNES}: ${OBJ_SNES} + ${CC} $(call libname,analysis_snes) ${LDFLAGS} ${CFLAGS} -o analysis_snes.${EXT_SO} ${OBJ_SNES} diff --git a/librz/analysis/p/sparc_cs.mk b/librz/analysis/p/sparc_cs.mk new file mode 100644 index 0000000000..b8be726ddf --- /dev/null +++ b/librz/analysis/p/sparc_cs.mk @@ -0,0 +1,12 @@ +OBJ_SPARC_CS=analysis_sparc_cs.o + +include ${CURDIR}capstone.mk + +STATIC_OBJ+=$(OBJ_SPARC_CS) +TARGET_SPARC_CS=analysis_sparc_cs.${EXT_SO} + +ALL_TARGETS+=${TARGET_SPARC_CS} + +${TARGET_SPARC_CS}: ${OBJ_SPARC_CS} + ${CC} ${CFLAGS} $(call libname,analysis_sparc_cs) $(CS_CFLAGS) \ + -o analysis_sparc_cs.${EXT_SO} ${OBJ_SPARC_CS} $(CS_LDFLAGS) diff --git a/librz/analysis/p/sparc_gnu.mk b/librz/analysis/p/sparc_gnu.mk new file mode 100644 index 0000000000..98d562a642 --- /dev/null +++ b/librz/analysis/p/sparc_gnu.mk @@ -0,0 +1,9 @@ +OBJ_SPARC=analysis_sparc_gnu.o + +STATIC_OBJ+=${OBJ_SPARC} +TARGET_SPARC=analysis_sparc_gnu.${EXT_SO} + +ALL_TARGETS+=${TARGET_SPARC} + +${TARGET_SPARC}: ${OBJ_SPARC} + ${CC} $(call libname,analysis_sparc_gnu) ${CFLAGS} -o analysis_sparc_gnu.${EXT_SO} ${OBJ_SPARC} diff --git a/librz/analysis/p/sysz.mk b/librz/analysis/p/sysz.mk new file mode 100644 index 0000000000..73cef711fb --- /dev/null +++ b/librz/analysis/p/sysz.mk @@ -0,0 +1,13 @@ +OBJ_SYSTEMZ_CS=analysis_sysz.o + +include p/capstone.mk + +STATIC_OBJ+=${OBJ_SYSTEMZ_CS} + +TARGET_SYSTEMZ_CS=analysis_sysz.${EXT_SO} + +ALL_TARGETS+=${TARGET_SYSTEMZ_CS} + +${TARGET_SYSTEMZ_CS}: ${OBJ_SYSTEMZ_CS} + ${CC} ${CFLAGS} $(call libname,analysis_sysz) $(CS_LDFLAGS) \ + -o analysis_sysz.${EXT_SO} ${OBJ_SYSTEMZ_CS} diff --git a/librz/anal/p/tms320.mk b/librz/analysis/p/tms320.mk similarity index 83% rename from librz/anal/p/tms320.mk rename to librz/analysis/p/tms320.mk index 304a51886d..a22c77f874 100644 --- a/librz/anal/p/tms320.mk +++ b/librz/analysis/p/tms320.mk @@ -1,5 +1,5 @@ -OBJ_TMS320=anal_tms320.o -OBJ_TMS320+=anal_tms320_c55x_plus.o +OBJ_TMS320=analysis_tms320.o +OBJ_TMS320+=analysis_tms320_c55x_plus.o STATIC_OBJ+=${OBJ_TMS320} #OBJ_TMS320+=../../../../../../../../../../../${LTOP}/asm/arch/tms320/tms320_dasm.o @@ -13,10 +13,10 @@ OBJ_TMS320+=$(ROOT)/asm/arch/tms320/c55x_plus/decode_funcs.o OBJ_TMS320+=$(ROOT)/asm/arch/tms320/c55x_plus/utils.o OBJ_TMS320+=$(ROOT)/asm/arch/tms320/c55x_plus/hashtable.o OBJ_TMS320+=$(ROOT)/asm/arch/tms320/c55x_plus/hashvector.o -TARGET_TMS320=anal_tms320.${EXT_SO} +TARGET_TMS320=analysis_tms320.${EXT_SO} ALL_TARGETS+=${TARGET_TMS320} ${TARGET_TMS320}: ${OBJ_TMS320} ${SHARED_OBJ} - ${CC} $(call libname,anal_tms320) ${CFLAGS} \ + ${CC} $(call libname,analysis_tms320) ${CFLAGS} \ -I../../include/ -o ${TARGET_TMS320} ${OBJ_TMS320} diff --git a/librz/analysis/p/tms320c64x.mk b/librz/analysis/p/tms320c64x.mk new file mode 100644 index 0000000000..b101c86e48 --- /dev/null +++ b/librz/analysis/p/tms320c64x.mk @@ -0,0 +1,12 @@ +OBJ_TMS3264C64X_CS=analysis_tms320c64x.o + +include ${CURDIR}capstone.mk + +STATIC_OBJ+=$(OBJ_TMS3264C64X_CS) +TARGET_TMS3264C64X_CS=analysis_tms320c64x.${EXT_SO} + +ALL_TARGETS+=${TARGET_TMS3264C64X_CS} + +${TARGET_TMS3264C64X_CS}: ${OBJ_TMS3264C64X_CS} + ${CC} ${CFLAGS} $(call libname,analysis_tms320c64x) $(CS_CFLAGS) \ + -o analysis_tms320c64x.${EXT_SO} ${OBJ_TMS3264C64X_CS} $(CS_LDFLAGS) diff --git a/librz/analysis/p/tricore.mk b/librz/analysis/p/tricore.mk new file mode 100644 index 0000000000..3250e09191 --- /dev/null +++ b/librz/analysis/p/tricore.mk @@ -0,0 +1,10 @@ +OBJ_TRICORE=analysis_tricore.o + +STATIC_OBJ+=${OBJ_TRICORE} +TARGET_TRICORE=analysis_tricore.${EXT_SO} + +ALL_TARGETS+=${TARGET_TRICORE} + +${TARGET_TRICORE}: ${OBJ_TRICORE} + ${CC} $(call libname,analysis_tricore) ${LDFLAGS} ${CFLAGS} \ + -o $(TARGET_TRICORE) $(OBJ_TRICORE) \ No newline at end of file diff --git a/librz/anal/p/v810.mk b/librz/analysis/p/v810.mk similarity index 68% rename from librz/anal/p/v810.mk rename to librz/analysis/p/v810.mk index 9c30400f93..a5f5f623ce 100644 --- a/librz/anal/p/v810.mk +++ b/librz/analysis/p/v810.mk @@ -1,8 +1,8 @@ -OBJ_V810=anal_v810.o +OBJ_V810=analysis_v810.o STATIC_OBJ+=${OBJ_V810} OBJ_V810+=../../asm/arch/v810/v810_disas.o -TARGET_V810=anal_v810.${EXT_SO} +TARGET_V810=analysis_v810.${EXT_SO} CFLAGS+=-I../asm/arch/v810/ @@ -10,5 +10,5 @@ ALL_TARGETS+=${TARGET_V810} ${TARGET_V810}: ${OBJ_V810} ${SHARED_OBJ} $(call pwd) - ${CC} $(call libname,anal_v810) ${CFLAGS} \ + ${CC} $(call libname,analysis_v810) ${CFLAGS} \ -I../../asm/arch/v810/ -o ${TARGET_V810} ${OBJ_V810} diff --git a/librz/anal/p/v850.mk b/librz/analysis/p/v850.mk similarity index 75% rename from librz/anal/p/v850.mk rename to librz/analysis/p/v850.mk index c30ab9a0b6..89166f5abd 100644 --- a/librz/anal/p/v850.mk +++ b/librz/analysis/p/v850.mk @@ -1,9 +1,9 @@ -OBJ_V850=anal_v850.o +OBJ_V850=analysis_v850.o STATIC_OBJ+=${OBJ_V850} #OBJ_V850+=../../../../../../../../../../../../../../../../../../../../${LTOP}/asm/arch/v850/v850_disas.o OBJ_V850+=../../asm/arch/v850/v850_disas.o -TARGET_V850=anal_v850.${EXT_SO} +TARGET_V850=analysis_v850.${EXT_SO} CFLAGS+=-I../asm/arch/v850/ @@ -11,5 +11,5 @@ ALL_TARGETS+=${TARGET_V850} ${TARGET_V850}: ${OBJ_V850} ${SHARED_OBJ} $(call pwd) - ${CC} $(call libname,anal_v850) ${CFLAGS} \ + ${CC} $(call libname,analysis_v850) ${CFLAGS} \ -I../../asm/arch/v850/ -o ${TARGET_V850} ${OBJ_V850} diff --git a/librz/analysis/p/vax.mk b/librz/analysis/p/vax.mk new file mode 100644 index 0000000000..ed9b00608a --- /dev/null +++ b/librz/analysis/p/vax.mk @@ -0,0 +1,9 @@ +OBJ_VAX=analysis_vax.o + +STATIC_OBJ+=${OBJ_VAX} +TARGET_VAX=analysis_vax.${EXT_SO} + +ALL_TARGETS+=${TARGET_VAX} + +${TARGET_VAX}: ${OBJ_VAX} + ${CC} $(call libname,analysis_vax) ${CFLAGS} -o analysis_vax.${EXT_SO} ${OBJ_VAX} diff --git a/librz/anal/p/wasm.mk b/librz/analysis/p/wasm.mk similarity index 55% rename from librz/anal/p/wasm.mk rename to librz/analysis/p/wasm.mk index 5eebadd132..bf20ddeacd 100644 --- a/librz/anal/p/wasm.mk +++ b/librz/analysis/p/wasm.mk @@ -1,12 +1,12 @@ -OBJ_WASM=anal_wasm.o +OBJ_WASM=analysis_wasm.o CFLAGS+=-I$(WASM_ROOT) STATIC_OBJ+=${OBJ_WASM} -TARGET_WASM=anal_wasm.${EXT_SO} +TARGET_WASM=analysis_wasm.${EXT_SO} # results in dupped symbol when building statically #OBJ_WASM+=../../asm/arch/wasm/wasm.o ALL_TARGETS+=${TARGET_WASM} ${TARGET_WASM}: ${OBJ_WASM} - ${CC} $(call libname,anal_wasm) ${LDFLAGS} ${CFLAGS} -o anal_wasm.${EXT_SO} ${OBJ_WASM} + ${CC} $(call libname,analysis_wasm) ${LDFLAGS} ${CFLAGS} -o analysis_wasm.${EXT_SO} ${OBJ_WASM} diff --git a/librz/analysis/p/ws.mk b/librz/analysis/p/ws.mk new file mode 100644 index 0000000000..29fb5c325e --- /dev/null +++ b/librz/analysis/p/ws.mk @@ -0,0 +1,10 @@ +OBJ_WS=analysis_ws.o + +STATIC_OBJ+=${OBJ_WS} +TARGET_WS=analysis_ws.${EXT_SO} + +ALL_TARGETS+=${TARGET_WS} + +${TARGET_WS}: ${OBJ_WS} + ${CC} $(call libname,analysis_ws) ${LDFLAGS} ${CFLAGS} \ + -o analysis_ws.${EXT_SO} ${OBJ_WS} diff --git a/librz/analysis/p/x86_cs.mk b/librz/analysis/p/x86_cs.mk new file mode 100644 index 0000000000..64a88f8c22 --- /dev/null +++ b/librz/analysis/p/x86_cs.mk @@ -0,0 +1,13 @@ +OBJ_X86_CS=analysis_x86_cs.o + +include $(CURDIR)capstone.mk + +STATIC_OBJ+=$(OBJ_X86_CS) + +TARGET_X86_CS=analysis_x86_cs.${EXT_SO} + +ALL_TARGETS+=${TARGET_X86_CS} + +${TARGET_X86_CS}: ${OBJ_X86_CS} + ${CC} ${CFLAGS} $(call libname,analysis_x86_cs) $(CS_CFLAGS) \ + -o analysis_x86_cs.${EXT_SO} ${OBJ_X86_CS} $(CS_LDFLAGS) diff --git a/librz/analysis/p/xap.mk b/librz/analysis/p/xap.mk new file mode 100644 index 0000000000..ff6fc084ac --- /dev/null +++ b/librz/analysis/p/xap.mk @@ -0,0 +1,9 @@ +OBJ_XAP=analysis_xap.o + +STATIC_OBJ+=${OBJ_XAP} +TARGET_XAP=analysis_xap.${EXT_SO} + +ALL_TARGETS+=${TARGET_XAP} + +${TARGET_XAP}: ${OBJ_XAP} + ${CC} $(call libname,analysis_xap) ${CFLAGS} -o analysis_xap.${EXT_SO} ${OBJ_XAP} diff --git a/librz/analysis/p/xcore_cs.mk b/librz/analysis/p/xcore_cs.mk new file mode 100644 index 0000000000..9a08953cfa --- /dev/null +++ b/librz/analysis/p/xcore_cs.mk @@ -0,0 +1,12 @@ +OBJ_XCORE_CS=analysis_xcore_cs.o + +include p/capstone.mk + +STATIC_OBJ+=${OBJ_XCORE_CS} +TARGET_XCORE_CS=analysis_xcore_cs.${EXT_SO} + +ALL_TARGETS+=${TARGET_XCORE_CS} + +${TARGET_XCORE_CS}: ${OBJ_XCORE_CS} + ${CC} ${CFLAGS} $(call libname,analysis_xcore_cs) $(CS_CFLAGS) \ + -o analysis_xcore_cs.${EXT_SO} ${OBJ_XCORE_CS} $(CS_LDFLAGS) diff --git a/librz/analysis/p/xtensa.mk b/librz/analysis/p/xtensa.mk new file mode 100644 index 0000000000..4962e61a26 --- /dev/null +++ b/librz/analysis/p/xtensa.mk @@ -0,0 +1,10 @@ +OBJ_XTENSA=analysis_xtensa.o + +STATIC_OBJ+=${OBJ_XTENSA} +TARGET_XTENSA=analysis_xtensa.${EXT_SO} + +ALL_TARGETS+=$(TARGET_XTENSA) + +$(TARGET_XTENSA): $(OBJ_XTENSA) + $(CC) $(call libname,analysis_xtensa) -I$(LTOP)/asm/arch/include/ \ + $(LDFLAGS) $(CFLAGS) -o analysis_xtensa.$(EXT_SO) $(OBJ_XTENSA) diff --git a/librz/analysis/p/z80.mk b/librz/analysis/p/z80.mk new file mode 100644 index 0000000000..2cb689cc82 --- /dev/null +++ b/librz/analysis/p/z80.mk @@ -0,0 +1,10 @@ +OBJ_Z80=analysis_z80.o + +STATIC_OBJ+=${OBJ_Z80} +TARGET_Z80=analysis_z80.${EXT_SO} + +ALL_TARGETS+=${TARGET_Z80} + +${TARGET_Z80}: ${OBJ_Z80} + ${CC} $(call libname,analysis_z80) ${LDFLAGS} ${CFLAGS} \ + -o analysis_z80.${EXT_SO} ${OBJ_Z80} diff --git a/librz/anal/pin.c b/librz/analysis/pin.c similarity index 69% rename from librz/anal/pin.c rename to librz/analysis/pin.c index 3efd49d11e..bd83c31c96 100644 --- a/librz/anal/pin.c +++ b/librz/analysis/pin.c @@ -1,20 +1,20 @@ // SPDX-License-Identifier: LGPL-3.0-only -#include +#include -typedef void (*RzAnalEsilPin)(RzAnal *a); +typedef void (*RzAnalysisEsilPin)(RzAnalysis *a); #if 0 // TODO: those hardcoded functions should go /* default pins from libc */ -static void pin_strlen(RzAnal *a) { +static void pin_strlen(RzAnalysis *a) { // get a0 register // read memory and interpret it as a string // set a0 to the result of strlen; eprintf ("esilpin: strlen\n"); } -static void pin_write(RzAnal *a) { +static void pin_write(RzAnalysis *a) { // get a0 register for fd // get a1 register for data // get a2 register for len @@ -28,32 +28,32 @@ static void pin_write(RzAnal *a) { #define DB a->sdb_pins -RZ_API void rz_anal_pin_init(RzAnal *a) { +RZ_API void rz_analysis_pin_init(RzAnalysis *a) { sdb_free (DB); DB = sdb_new0(); // sdb_ptr_set (DB, "strlen", pin_strlen, 0); // sdb_ptr_set (DB, "write", pin_write, 0); } -RZ_API void rz_anal_pin_fini(RzAnal *a) { +RZ_API void rz_analysis_pin_fini(RzAnalysis *a) { if (sdb_free (DB)) { DB = NULL; } } -RZ_API void rz_anal_pin(RzAnal *a, ut64 addr, const char *name) { +RZ_API void rz_analysis_pin(RzAnalysis *a, ut64 addr, const char *name) { char buf[64]; const char *key = sdb_itoa (addr, buf, 16); sdb_set (DB, key, name, 0); } -RZ_API void rz_anal_pin_unset(RzAnal *a, ut64 addr) { +RZ_API void rz_analysis_pin_unset(RzAnalysis *a, ut64 addr) { char buf[64]; const char *key = sdb_itoa (addr, buf, 16); sdb_unset (DB, key, 0); } -RZ_API const char *rz_anal_pin_call(RzAnal *a, ut64 addr) { +RZ_API const char *rz_analysis_pin_call(RzAnalysis *a, ut64 addr) { char buf[64]; const char *key = sdb_itoa (addr, buf, 16); if (key) { @@ -61,7 +61,7 @@ RZ_API const char *rz_anal_pin_call(RzAnal *a, ut64 addr) { #if 0 const char *name; if (name) { - RzAnalEsilPin fcnptr = (RzAnalEsilPin) + RzAnalysisEsilPin fcnptr = (RzAnalysisEsilPin) sdb_ptr_get (DB, name, NULL); if (fcnptr) { fcnptr (a); @@ -74,7 +74,7 @@ RZ_API const char *rz_anal_pin_call(RzAnal *a, ut64 addr) { } static bool cb_list(void *user, const char *k, const char *v) { - RzAnal *a = (RzAnal*)user; + RzAnalysis *a = (RzAnalysis*)user; if (*k == '0') { // bind a->cb_printf ("%s = %s\n", k, v); @@ -85,6 +85,6 @@ static bool cb_list(void *user, const char *k, const char *v) { return true; } -RZ_API void rz_anal_pin_list(RzAnal *a) { +RZ_API void rz_analysis_pin_list(RzAnalysis *a) { sdb_foreach (DB, cb_list, a); } diff --git a/librz/anal/reflines.c b/librz/analysis/reflines.c similarity index 83% rename from librz/anal/reflines.c rename to librz/analysis/reflines.c index bffcdbacca..2e634e8d63 100644 --- a/librz/anal/reflines.c +++ b/librz/analysis/reflines.c @@ -12,18 +12,18 @@ typedef struct refline_end { int val; bool is_from; - RzAnalRefline *r; + RzAnalysisRefline *r; } ReflineEnd; static int cmp_asc(const struct refline_end *a, const struct refline_end *b) { return (a->val > b->val) - (a->val < b->val); } -static int cmp_by_ref_lvl(const RzAnalRefline *a, const RzAnalRefline *b) { +static int cmp_by_ref_lvl(const RzAnalysisRefline *a, const RzAnalysisRefline *b) { return (a->level < b->level) - (a->level > b->level); } -static ReflineEnd *refline_end_new(ut64 val, bool is_from, RzAnalRefline *ref) { +static ReflineEnd *refline_end_new(ut64 val, bool is_from, RzAnalysisRefline *ref) { ReflineEnd *re = RZ_NEW0 (struct refline_end); if (!re) { return NULL; @@ -36,7 +36,7 @@ static ReflineEnd *refline_end_new(ut64 val, bool is_from, RzAnalRefline *ref) { static bool add_refline(RzList *list, RzList *sten, ut64 addr, ut64 to, int *idx) { ReflineEnd *re1, *re2; - RzAnalRefline *item = RZ_NEW0 (RzAnalRefline); + RzAnalysisRefline *item = RZ_NEW0 (RzAnalysisRefline); if (!item) { return false; } @@ -65,22 +65,22 @@ static bool add_refline(RzList *list, RzList *sten, ut64 addr, ut64 to, int *idx return true; } -RZ_API void rz_anal_reflines_free (RzAnalRefline *rl) { +RZ_API void rz_analysis_reflines_free (RzAnalysisRefline *rl) { free (rl); } -/* returns a list of RzAnalRefline for the code present in the buffer buf, of - * length len. A RzAnalRefline exists from address A to address B if a jmp, +/* returns a list of RzAnalysisRefline for the code present in the buffer buf, of + * length len. A RzAnalysisRefline exists from address A to address B if a jmp, * conditional jmp or call instruction exists at address A and it targets * address B. * * nlines - max number of lines of code to consider * linesout - true if you want to display lines that go outside of the scope [addr;addr+len) * linescall - true if you want to display call lines */ -RZ_API RzList *rz_anal_reflines_get(RzAnal *anal, ut64 addr, const ut8 *buf, ut64 len, int nlines, int linesout, int linescall) { +RZ_API RzList *rz_analysis_reflines_get(RzAnalysis *analysis, ut64 addr, const ut8 *buf, ut64 len, int nlines, int linesout, int linescall) { RzList *list, *sten; RzListIter *iter; - RzAnalOp op; + RzAnalysisOp op; struct refline_end *el; const ut8 *ptr = buf; const ut8 *end = buf + len; @@ -117,18 +117,18 @@ RZ_API RzList *rz_anal_reflines_get(RzAnal *anal, ut64 addr, const ut8 *buf, ut6 } nlines--; } - if (anal->maxreflines && count > anal->maxreflines) { + if (analysis->maxreflines && count > analysis->maxreflines) { break; } addr += sz; { - RzPVector *metas = rz_meta_get_all_at (anal, addr); + RzPVector *metas = rz_meta_get_all_at (analysis, addr); if (metas) { void **it; ut64 skip = 0; rz_pvector_foreach (metas, it) { RzIntervalNode *node = *it; - RzAnalMetaItem *meta = node->data; + RzAnalysisMetaItem *meta = node->data; switch (meta->type) { case RZ_META_TYPE_DATA: case RZ_META_TYPE_STRING: @@ -150,7 +150,7 @@ do_skip: } } } - if (!anal->iob.is_valid_offset (anal->iob.io, addr, 1)) { + if (!analysis->iob.is_valid_offset (analysis->iob.io, addr, 1)) { const int size = 4; ptr += size; addr += size; @@ -158,8 +158,8 @@ do_skip: } // This can segfault if opcode length and buffer check fails - rz_anal_op_fini (&op); - sz = rz_anal_op (anal, &op, addr, ptr, (int)(end - ptr), RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_HINT); + rz_analysis_op_fini (&op); + sz = rz_analysis_op (analysis, &op, addr, ptr, (int)(end - ptr), RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_HINT); sz = op.size; if (sz <= 0) { sz = 1; @@ -178,20 +178,20 @@ do_skip: break; } if (!(res = add_refline (list, sten, addr, op.jump, &count))) { - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); goto sten_err; } // add false branch in case its set and its not a call, useful for bf, maybe others if (!op.delay && op.fail != UT64_MAX && op.fail != addr + op.size) { if (!(res = add_refline (list, sten, addr, op.fail, &count))) { - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); goto sten_err; } } break; case RZ_ANAL_OP_TYPE_SWITCH: { - RzAnalCaseOp *caseop; + RzAnalysisCaseOp *caseop; RzListIter *iter; // add caseops @@ -203,7 +203,7 @@ do_skip: goto __next; } if (!(res = add_refline (list, sten, op.switch_op->addr, caseop->jump, &count))) { - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); goto sten_err; } } @@ -213,7 +213,7 @@ do_skip: __next: ptr += sz; } - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); rz_cons_break_pop (); free_levels = RZ_NEWS0 (ut8, rz_list_length (list) + 1); @@ -242,11 +242,11 @@ do_skip: /* XXX: the algorithm can be improved. We can calculate the set of * reflines used in each interval of addresses and store them. - * Considering rz_anal_reflines_str is always called with increasing + * Considering rz_analysis_reflines_str is always called with increasing * addresses, we can just traverse linearly the list of intervals to * know which reflines need to be drawn for each address. In this way, * we don't need to traverse again and again the reflines for each call - * to rz_anal_reflines_str, but we can reuse the data already + * to rz_analysis_reflines_str, but we can reuse the data already * calculated. Those data will be quickly available because the * intervals will be sorted and the addresses to consider are always * increasing. */ @@ -261,9 +261,9 @@ list_err: return NULL; } -RZ_API int rz_anal_reflines_middle(RzAnal *a, RzList* /**/ list, ut64 addr, int len) { +RZ_API int rz_analysis_reflines_middle(RzAnalysis *a, RzList* /**/ list, ut64 addr, int len) { if (a && list) { - RzAnalRefline *ref; + RzAnalysisRefline *ref; RzListIter *iter; rz_list_foreach (list, iter, ref) { if ((ref->to > addr) && (ref->to < addr + len)) { @@ -274,7 +274,7 @@ RZ_API int rz_anal_reflines_middle(RzAnal *a, RzList* /**/ list, return false; } -static const char* get_corner_char(RzAnalRefline *ref, ut64 addr, bool is_middle_before) { +static const char* get_corner_char(RzAnalysisRefline *ref, ut64 addr, bool is_middle_before) { if (ref->from == ref->to) { return "@"; } @@ -306,7 +306,7 @@ static void add_spaces(RzBuffer *b, int level, int pos, bool wide) { } } -static void fill_level(RzBuffer *b, int pos, char ch, RzAnalRefline *r, bool wide) { +static void fill_level(RzBuffer *b, int pos, char ch, RzAnalysisRefline *r, bool wide) { int sz = r->level; if (wide) { sz *= 2; @@ -322,7 +322,7 @@ static void fill_level(RzBuffer *b, int pos, char ch, RzAnalRefline *r, bool wid } } -static inline bool refline_kept(RzAnalRefline *ref, bool middle_after, ut64 addr) { +static inline bool refline_kept(RzAnalysisRefline *ref, bool middle_after, ut64 addr) { if (middle_after) { if (ref->direction < 0) { if (ref->from == addr) { @@ -339,14 +339,14 @@ static inline bool refline_kept(RzAnalRefline *ref, bool middle_after, ut64 addr // TODO: move into another file // TODO: this is TOO SLOW. do not iterate over all reflines -RZ_API RzAnalRefStr *rz_anal_reflines_str(void *_core, ut64 addr, int opts) { +RZ_API RzAnalysisRefStr *rz_analysis_reflines_str(void *_core, ut64 addr, int opts) { RzCore *core = _core; RzCons *cons = core->cons; - RzAnal *anal = core->anal; + RzAnalysis *analysis = core->analysis; RzBuffer *b; RzBuffer *c; RzListIter *iter; - RzAnalRefline *ref; + RzAnalysisRefline *ref; int l; bool wide = opts & RZ_ANAL_REFLINE_TYPE_WIDE; int dir = 0, pos = -1, max_level = -1; @@ -355,13 +355,13 @@ RZ_API RzAnalRefStr *rz_anal_reflines_str(void *_core, ut64 addr, int opts) { char *str = NULL; char *col_str = NULL; - rz_return_val_if_fail (cons && anal && anal->reflines, NULL); + rz_return_val_if_fail (cons && analysis && analysis->reflines, NULL); RzList *lvls = rz_list_new (); if (!lvls) { return NULL; } - rz_list_foreach (anal->reflines, iter, ref) { + rz_list_foreach (analysis->reflines, iter, ref) { if (core->cons && core->cons->context->breaked) { rz_list_free (lvls); return NULL; @@ -445,8 +445,8 @@ RZ_API RzAnalRefStr *rz_anal_reflines_str(void *_core, ut64 addr, int opts) { rz_buf_free (c); return NULL; } - if (core->anal->lineswidth > 0) { - int lw = core->anal->lineswidth; + if (core->analysis->lineswidth > 0) { + int lw = core->analysis->lineswidth; l = strlen (str); if (l > lw) { rz_str_cpy (str, str + l - lw); @@ -472,13 +472,13 @@ RZ_API RzAnalRefStr *rz_anal_reflines_str(void *_core, ut64 addr, int opts) { col_str = rz_str_append (col_str, arr_col); rz_list_free (lvls); - RzAnalRefStr *out = RZ_NEW0 (RzAnalRefStr); + RzAnalysisRefStr *out = RZ_NEW0 (RzAnalysisRefStr); out->str = str; out->cols = col_str; return out; } -RZ_API void rz_anal_reflines_str_free(RzAnalRefStr *refstr) { +RZ_API void rz_analysis_reflines_str_free(RzAnalysisRefStr *refstr) { free (refstr->str); free (refstr->cols); free (refstr); diff --git a/librz/anal/rtti.c b/librz/analysis/rtti.c similarity index 51% rename from librz/anal/rtti.c rename to librz/analysis/rtti.c index 0cc551253c..1ee37ccfc5 100644 --- a/librz/anal/rtti.c +++ b/librz/analysis/rtti.c @@ -1,28 +1,28 @@ // SPDX-License-Identifier: LGPL-3.0-only -#include "rz_anal.h" +#include "rz_analysis.h" -RZ_API char *rz_anal_rtti_demangle_class_name(RzAnal *anal, const char *name) { +RZ_API char *rz_analysis_rtti_demangle_class_name(RzAnalysis *analysis, const char *name) { RVTableContext context; - rz_anal_vtable_begin (anal, &context); + rz_analysis_vtable_begin (analysis, &context); if (context.abi == RZ_ANAL_CPP_ABI_MSVC) { - return rz_anal_rtti_msvc_demangle_class_name (&context, name); + return rz_analysis_rtti_msvc_demangle_class_name (&context, name); } - return rz_anal_rtti_itanium_demangle_class_name (&context, name); + return rz_analysis_rtti_itanium_demangle_class_name (&context, name); } -RZ_API void rz_anal_rtti_print_at_vtable(RzAnal *anal, ut64 addr, int mode) { +RZ_API void rz_analysis_rtti_print_at_vtable(RzAnalysis *analysis, ut64 addr, int mode) { bool use_json = mode == 'j'; if (use_json) { rz_cons_print ("["); } RVTableContext context; - rz_anal_vtable_begin (anal, &context); + rz_analysis_vtable_begin (analysis, &context); if (context.abi == RZ_ANAL_CPP_ABI_MSVC) { - rz_anal_rtti_msvc_print_at_vtable (&context, addr, mode, false); + rz_analysis_rtti_msvc_print_at_vtable (&context, addr, mode, false); } else { - rz_anal_rtti_itanium_print_at_vtable (&context, addr, mode); + rz_analysis_rtti_itanium_print_at_vtable (&context, addr, mode); } if (use_json) { @@ -30,9 +30,9 @@ RZ_API void rz_anal_rtti_print_at_vtable(RzAnal *anal, ut64 addr, int mode) { } } -RZ_API void rz_anal_rtti_print_all(RzAnal *anal, int mode) { +RZ_API void rz_analysis_rtti_print_all(RzAnalysis *analysis, int mode) { RVTableContext context; - rz_anal_vtable_begin (anal, &context); + rz_analysis_vtable_begin (analysis, &context); bool use_json = mode == 'j'; if (use_json) { @@ -40,7 +40,7 @@ RZ_API void rz_anal_rtti_print_all(RzAnal *anal, int mode) { } rz_cons_break_push (NULL, NULL); - RzList *vtables = rz_anal_vtable_search (&context); + RzList *vtables = rz_analysis_vtable_search (&context); RzListIter *vtableIter; RVTableInfo *table; @@ -56,9 +56,9 @@ RZ_API void rz_anal_rtti_print_all(RzAnal *anal, int mode) { comma = true; } if (context.abi == RZ_ANAL_CPP_ABI_MSVC) { - success = rz_anal_rtti_msvc_print_at_vtable (&context, table->saddr, mode, true); + success = rz_analysis_rtti_msvc_print_at_vtable (&context, table->saddr, mode, true); } else { - success = rz_anal_rtti_itanium_print_at_vtable (&context, table->saddr, mode); + success = rz_analysis_rtti_itanium_print_at_vtable (&context, table->saddr, mode); } if (success) { comma = false; @@ -81,17 +81,17 @@ RZ_API void rz_anal_rtti_print_all(RzAnal *anal, int mode) { rz_cons_break_pop (); } -RZ_API void rz_anal_rtti_recover_all(RzAnal *anal) { +RZ_API void rz_analysis_rtti_recover_all(RzAnalysis *analysis) { RVTableContext context; - rz_anal_vtable_begin (anal, &context); + rz_analysis_vtable_begin (analysis, &context); rz_cons_break_push (NULL, NULL); - RzList *vtables = rz_anal_vtable_search (&context); + RzList *vtables = rz_analysis_vtable_search (&context); if (vtables) { if (context.abi == RZ_ANAL_CPP_ABI_MSVC) { - rz_anal_rtti_msvc_recover_all (&context, vtables); + rz_analysis_rtti_msvc_recover_all (&context, vtables); } else { - rz_anal_rtti_itanium_recover_all (&context, vtables); + rz_analysis_rtti_itanium_recover_all (&context, vtables); } } rz_list_free (vtables); diff --git a/librz/anal/rtti_itanium.c b/librz/analysis/rtti_itanium.c similarity index 88% rename from librz/anal/rtti_itanium.c rename to librz/analysis/rtti_itanium.c index eb5d2fef84..682b43d3ef 100644 --- a/librz/anal/rtti_itanium.c +++ b/librz/analysis/rtti_itanium.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: LGPL-3.0-only -#include +#include #include #include #include @@ -71,7 +71,7 @@ typedef struct vmi_class_type_info_t { static bool rtti_itanium_read_type_name(RVTableContext *context, ut64 addr, class_type_info *cti) { ut64 at; - if (!context->read_addr (context->anal, addr, &at)) { + if (!context->read_addr (context->analysis, addr, &at)) { return false; } ut64 unique_mask = 1ULL << (VT_WORD_SIZE (context) * 8 - 1); @@ -79,11 +79,11 @@ static bool rtti_itanium_read_type_name(RVTableContext *context, ut64 addr, clas at &= ~unique_mask; cti->name_addr = at; ut8 buf[NAME_BUF_SIZE]; - if (!context->anal->iob.read_at (context->anal->iob.io, at, buf, sizeof (buf))) { + if (!context->analysis->iob.read_at (context->analysis->iob.io, at, buf, sizeof (buf))) { return false; } buf[NAME_BUF_SIZE - 1] = 0; - cti->name = rz_anal_rtti_itanium_demangle_class_name (context, (char *)buf); + cti->name = rz_analysis_rtti_itanium_demangle_class_name (context, (char *)buf); if (!cti->name) { return false; } @@ -93,7 +93,7 @@ static bool rtti_itanium_read_type_name(RVTableContext *context, ut64 addr, clas // Custom for the prototype now static char *rtti_itanium_read_type_name_custom(RVTableContext *context, ut64 addr, ut64 *str_addr, bool *unique_name) { ut64 at; - if (!context->read_addr (context->anal, addr, &at)) { + if (!context->read_addr (context->analysis, addr, &at)) { return NULL; } ut64 unique_mask = 1ULL << (VT_WORD_SIZE (context) * 8 - 1); @@ -101,11 +101,11 @@ static char *rtti_itanium_read_type_name_custom(RVTableContext *context, ut64 ad at &= ~unique_mask; *str_addr = at; ut8 buf[NAME_BUF_SIZE]; - if (!context->anal->iob.read_at (context->anal->iob.io, at, buf, sizeof (buf))) { + if (!context->analysis->iob.read_at (context->analysis->iob.io, at, buf, sizeof (buf))) { return NULL; } buf[NAME_BUF_SIZE - 1] = 0; - char *name = rz_anal_rtti_itanium_demangle_class_name (context, (char *)buf); + char *name = rz_analysis_rtti_itanium_demangle_class_name (context, (char *)buf); return name; } @@ -131,7 +131,7 @@ static bool rtti_itanium_class_type_info_init(RVTableContext *context, ut64 addr if (addr == UT64_MAX) { return false; } - if (!context->read_addr (context->anal, addr, &at)) { + if (!context->read_addr (context->analysis, addr, &at)) { return false; } cti->vtable_addr = at; @@ -177,7 +177,7 @@ static bool rtti_itanium_vmi_class_type_info_init(RVTableContext *context, ut64 if (addr == UT64_MAX) { return false; } - if (!context->read_addr (context->anal, addr, &at)) { + if (!context->read_addr (context->analysis, addr, &at)) { return false; } vmi_cti->vtable_addr = at; @@ -186,12 +186,12 @@ static bool rtti_itanium_vmi_class_type_info_init(RVTableContext *context, ut64 return false; } addr += VT_WORD_SIZE (context); - if (!context->read_addr (context->anal, addr, &at)) { + if (!context->read_addr (context->analysis, addr, &at)) { return false; } vmi_cti->vmi_flags = at & 0xffffffff; addr += 0x4; - if (!context->read_addr (context->anal, addr, &at)) { + if (!context->read_addr (context->analysis, addr, &at)) { return false; } at = at & 0xffffffff; @@ -208,12 +208,12 @@ static bool rtti_itanium_vmi_class_type_info_init(RVTableContext *context, ut64 int i; for (i = 0; i < vmi_cti->vmi_base_count; i++) { - if (!context->read_addr (context->anal, tmp_addr, &at)) { + if (!context->read_addr (context->analysis, tmp_addr, &at)) { return false; } vmi_cti->vmi_bases[i].base_class_addr = at; tmp_addr += VT_WORD_SIZE (context); - if (!context->read_addr (context->anal, tmp_addr, &at)) { + if (!context->read_addr (context->analysis, tmp_addr, &at)) { return false; } vmi_cti->vmi_bases[i].flags = at; @@ -260,14 +260,14 @@ static bool rtti_itanium_si_class_type_info_init(RVTableContext *context, ut64 a if (addr == UT64_MAX) { return false; } - if (!context->read_addr (context->anal, addr, &at)) { + if (!context->read_addr (context->analysis, addr, &at)) { return false; } si_cti->vtable_addr = at; if (!rtti_itanium_read_type_name (context, addr + VT_WORD_SIZE (context), (class_type_info *)si_cti)) { return false; } - if (!context->read_addr (context->anal, addr + 2 * VT_WORD_SIZE (context), &at)) { + if (!context->read_addr (context->analysis, addr + 2 * VT_WORD_SIZE (context), &at)) { return false; } si_cti->base_class_addr = at; @@ -443,11 +443,11 @@ static void rtti_itanium_print_si_class_type_info_json(si_class_type_info *si_ct } static RTypeInfoType rtti_itanium_type_info_type_from_flag(RVTableContext *context, ut64 atAddress) { - RzCore *core = context->anal->coreb.core; + RzCore *core = context->analysis->coreb.core; rz_return_val_if_fail (core, RZ_TYPEINFO_TYPE_CLASS); // get the reloc flags - const RzList *flags = context->anal->flb.get_list (core->flags, atAddress); + const RzList *flags = context->analysis->flb.get_list (core->flags, atAddress); if (!flags) { return RZ_TYPEINFO_TYPE_UNKNOWN; } @@ -558,10 +558,10 @@ static class_type_info *raw_rtti_parse(RVTableContext *context, ut64 vtable_addr */ ut64 rtti_vptr = 0; ut64 addr = rtti_addr; - if (!context->read_addr (context->anal, addr, &rtti_vptr)) { + if (!context->read_addr (context->analysis, addr, &rtti_vptr)) { return NULL; } - RzBinSection *rtti_section = context->anal->binb.get_vsect_at (context->anal->binb.bin, rtti_vptr); + RzBinSection *rtti_section = context->analysis->binb.get_vsect_at (context->analysis->binb.bin, rtti_vptr); if (rtti_vptr && !can_section_contain_rtti_vpointer (rtti_section)) { ;;; // Right now ignore, seems that some binaries have some weird values inside there.... } @@ -579,11 +579,11 @@ static class_type_info *raw_rtti_parse(RVTableContext *context, ut64 vtable_addr // Right now we already have atleast __class_type_info; ut64 base_type_rtti = 0; - if (!context->read_addr (context->anal, addr, &base_type_rtti)) { + if (!context->read_addr (context->analysis, addr, &base_type_rtti)) { return create_class_type (rtti_vptr, type_name, name_addr, name_unique, rtti_addr, vtable_addr); } - RzBinSection *base_type_rtti_section = context->anal->binb.get_vsect_at (context->anal->binb.bin, base_type_rtti); + RzBinSection *base_type_rtti_section = context->analysis->binb.get_vsect_at (context->analysis->binb.bin, base_type_rtti); if (can_section_contain_rtti_vpointer (base_type_rtti_section)) { return (class_type_info *)create_si_class_type (rtti_vptr, type_name, name_addr, name_unique, base_type_rtti, rtti_addr, vtable_addr); } @@ -591,12 +591,12 @@ static class_type_info *raw_rtti_parse(RVTableContext *context, ut64 vtable_addr // if it's not a valid base_type_rtti ptr, it might be flags for VMI // assume uint are 32bit ut64 integers = 0; - if (!context->read_addr (context->anal, addr, &integers)) { + if (!context->read_addr (context->analysis, addr, &integers)) { return create_class_type (rtti_vptr, type_name, name_addr, name_unique, rtti_addr, vtable_addr); } ut32 vmi_flags = integers & 0xffffffff; addr += 0x4; - if (!context->read_addr (context->anal, addr, &integers)) { + if (!context->read_addr (context->analysis, addr, &integers)) { return create_class_type (rtti_vptr, type_name, name_addr, name_unique, rtti_addr, vtable_addr); } integers = integers & 0xffffffff; @@ -613,13 +613,13 @@ static class_type_info *raw_rtti_parse(RVTableContext *context, ut64 vtable_addr int i; for (i = 0; i < vmi_base_count; i++) { - if (!context->read_addr (context->anal, tmp_addr, &integers)) { + if (!context->read_addr (context->analysis, tmp_addr, &integers)) { free (vmi_bases); return create_class_type (rtti_vptr, type_name, name_addr, name_unique, rtti_addr, vtable_addr); } vmi_bases[i].base_class_addr = integers; tmp_addr += VT_WORD_SIZE (context); - if (!context->read_addr (context->anal, tmp_addr, &integers)) { + if (!context->read_addr (context->analysis, tmp_addr, &integers)) { free (vmi_bases); return create_class_type (rtti_vptr, type_name, name_addr, name_unique, rtti_addr, vtable_addr); } @@ -640,7 +640,7 @@ static class_type_info *rtti_itanium_type_info_new(RVTableContext *context, ut64 ut64 rtti_ptr = vtable_addr - VT_WORD_SIZE (context); // RTTI pointer ut64 rtti_addr; // RTTI address - if (!context->read_addr (context->anal, rtti_ptr, &rtti_addr)) { + if (!context->read_addr (context->analysis, rtti_ptr, &rtti_addr)) { return NULL; } @@ -649,7 +649,7 @@ static class_type_info *rtti_itanium_type_info_new(RVTableContext *context, ut64 // try to find the flag in it's vtable if (type == RZ_TYPEINFO_TYPE_UNKNOWN) { ut64 follow; - if (!context->read_addr (context->anal, rtti_addr, &follow)) { + if (!context->read_addr (context->analysis, rtti_addr, &follow)) { return NULL; } follow -= 2 * context->word_size; @@ -692,7 +692,7 @@ static void rtti_itanium_type_info_free(void *info) { } } -RZ_API bool rz_anal_rtti_itanium_print_at_vtable(RVTableContext *context, ut64 addr, int mode) { +RZ_API bool rz_analysis_rtti_itanium_print_at_vtable(RVTableContext *context, ut64 addr, int mode) { bool use_json = mode == 'j'; class_type_info *cti = rtti_itanium_type_info_new (context, addr); if (!cti) { @@ -735,7 +735,7 @@ RZ_API bool rz_anal_rtti_itanium_print_at_vtable(RVTableContext *context, ut64 a } } -RZ_API char *rz_anal_rtti_itanium_demangle_class_name(RVTableContext *context, const char *name) { +RZ_API char *rz_analysis_rtti_itanium_demangle_class_name(RVTableContext *context, const char *name) { if (!name || !*name) { return NULL; } @@ -744,10 +744,10 @@ RZ_API char *rz_anal_rtti_itanium_demangle_class_name(RVTableContext *context, c if (name[0] != '_') { char *to_demangle = rz_str_newf ("_Z%s", name); - result = context->anal->binb.demangle (NULL, "cxx", to_demangle, 0, false); + result = context->analysis->binb.demangle (NULL, "cxx", to_demangle, 0, false); free (to_demangle); } else { - result = context->anal->binb.demangle (NULL, "cxx", name, 0, false); + result = context->analysis->binb.demangle (NULL, "cxx", name, 0, false); } return result; @@ -758,18 +758,18 @@ static void recovery_apply_vtable(RVTableContext *context, const char *class_nam return; } - RzAnalVTable vtable = { .id = NULL, .offset = 0, .size = 0, .addr = vtable_info->saddr}; - rz_anal_class_vtable_set (context->anal, class_name, &vtable); - rz_anal_class_vtable_fini (&vtable); + RzAnalysisVTable vtable = { .id = NULL, .offset = 0, .size = 0, .addr = vtable_info->saddr}; + rz_analysis_class_vtable_set (context->analysis, class_name, &vtable); + rz_analysis_class_vtable_fini (&vtable); RVTableMethodInfo *vmeth; rz_vector_foreach (&vtable_info->methods, vmeth) { - RzAnalMethod meth; + RzAnalysisMethod meth; meth.addr = vmeth->addr; meth.vtable_offset = vmeth->vtable_offset; meth.name = rz_str_newf ("virtual_%" PFMT64d, meth.vtable_offset); - rz_anal_class_method_set (context->anal, class_name, &meth); - rz_anal_class_method_fini (&meth); + rz_analysis_class_method_set (context->analysis, class_name, &meth); + rz_analysis_class_method_fini (&meth); } } @@ -790,9 +790,9 @@ static void add_class_bases(RVTableContext *context, const class_type_info *cti) base_addr += VT_WORD_SIZE (context); // offset to name if (rtti_itanium_read_type_name (context, base_addr, &base_info)) { // TODO in future, store the RTTI offset from vtable and use it - RzAnalBaseClass base = { .class_name = base_info.name, .offset = 0 }; - rz_anal_class_base_set (context->anal, cti->name, &base); - rz_anal_class_base_fini (&base); + RzAnalysisBaseClass base = { .class_name = base_info.name, .offset = 0 }; + rz_analysis_class_base_set (context->analysis, cti->name, &base); + rz_analysis_class_base_fini (&base); } } break; case RZ_TYPEINFO_TYPE_VMI_CLASS: { @@ -802,9 +802,9 @@ static void add_class_bases(RVTableContext *context, const class_type_info *cti) ut64 base_addr = base_class_info->base_class_addr + VT_WORD_SIZE (context); // offset to name if (rtti_itanium_read_type_name (context, base_addr, &base_info)) { // TODO in future, store the RTTI offset from vtable and use it - RzAnalBaseClass base = { .class_name = base_info.name, .offset = 0 }; - rz_anal_class_base_set (context->anal, cti->name, &base); - rz_anal_class_base_fini (&base); + RzAnalysisBaseClass base = { .class_name = base_info.name, .offset = 0 }; + rz_analysis_class_base_set (context->analysis, cti->name, &base); + rz_analysis_class_base_fini (&base); } } } break; @@ -813,7 +813,7 @@ static void add_class_bases(RVTableContext *context, const class_type_info *cti) } } -RZ_API void rz_anal_rtti_itanium_recover_all(RVTableContext *context, RzList *vtables) { +RZ_API void rz_analysis_rtti_itanium_recover_all(RVTableContext *context, RzList *vtables) { RzList /**/ *rtti_list = rz_list_new (); rtti_list->free = rtti_itanium_type_info_free; // to escape multiple same infos from multiple inheritance @@ -827,7 +827,7 @@ RZ_API void rz_anal_rtti_itanium_recover_all(RVTableContext *context, RzList *vt continue; } - rz_anal_class_create (context->anal, cti->name); + rz_analysis_class_create (context->analysis, cti->name); // can't we name virtual functions virtual even without RTTI? recovery_apply_vtable (context, cti->name, vtable); diff --git a/librz/anal/rtti_msvc.c b/librz/analysis/rtti_msvc.c similarity index 86% rename from librz/anal/rtti_msvc.c rename to librz/analysis/rtti_msvc.c index 9419dc852d..6af4630971 100644 --- a/librz/anal/rtti_msvc.c +++ b/librz/analysis/rtti_msvc.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: LGPL-3.0-only -#include "rz_anal.h" +#include "rz_analysis.h" #define NAME_BUF_SIZE 64 #define BASE_CLASSES_MAX 32 @@ -66,18 +66,18 @@ static bool rtti_msvc_read_complete_object_locator(RVTableContext *context, ut64 return false; } - if (!context->anal->iob.read_at (context->anal->iob.io, addr, buf, colSize)) { + if (!context->analysis->iob.read_at (context->analysis->iob.io, addr, buf, colSize)) { return false; } - ut32 (*read_at_32)(const void *src, size_t offset) = context->anal->big_endian ? rz_read_at_be32 : rz_read_at_le32; + ut32 (*read_at_32)(const void *src, size_t offset) = context->analysis->big_endian ? rz_read_at_be32 : rz_read_at_le32; col->signature = read_at_32 (buf, 0); col->vtable_offset = read_at_32 (buf, 4); col->cd_offset = read_at_32 (buf, 8); int offsetSize = RZ_MIN (context->word_size, 4); - col->type_descriptor_addr = (ut32) rz_read_ble (buf + 12, (bool) context->anal->big_endian, offsetSize * 8); - col->class_descriptor_addr = (ut32) rz_read_ble (buf + 12 + offsetSize, (bool) context->anal->big_endian, offsetSize * 8); + col->type_descriptor_addr = (ut32) rz_read_ble (buf + 12, (bool) context->analysis->big_endian, offsetSize * 8); + col->class_descriptor_addr = (ut32) rz_read_ble (buf + 12 + offsetSize, (bool) context->analysis->big_endian, offsetSize * 8); if (context->word_size == 8) { // 64bit is special: // Type Descriptor and Class Hierarchy Descriptor addresses are computed @@ -102,16 +102,16 @@ static bool rtti_msvc_read_class_hierarchy_descriptor(RVTableContext *context, u return false; } - if (!context->anal->iob.read_at (context->anal->iob.io, addr, buf, chdSize)) { + if (!context->analysis->iob.read_at (context->analysis->iob.io, addr, buf, chdSize)) { return false; } - ut32 (*read_at_32)(const void *src, size_t offset) = context->anal->big_endian ? rz_read_at_be32 : rz_read_at_le32; + ut32 (*read_at_32)(const void *src, size_t offset) = context->analysis->big_endian ? rz_read_at_be32 : rz_read_at_le32; chd->signature = read_at_32 (buf, 0); chd->attributes = read_at_32 (buf, 4); chd->num_base_classes = read_at_32 (buf, 8); if (context->word_size <= 4) { - chd->base_class_array_addr = (ut32) rz_read_ble (buf + 12, (bool) context->anal->big_endian, context->word_size * 8); + chd->base_class_array_addr = (ut32) rz_read_ble (buf + 12, (bool) context->analysis->big_endian, context->word_size * 8); } else { // 64bit is special, like in Complete Object Locator. // Only the offset from the base from Complete Object Locator @@ -136,13 +136,13 @@ static bool rtti_msvc_read_base_class_descriptor(RVTableContext *context, ut64 a return false; } - if (!context->anal->iob.read_at (context->anal->iob.io, addr, buf, bcdSize)) { + if (!context->analysis->iob.read_at (context->analysis->iob.io, addr, buf, bcdSize)) { return false; } - ut32 (*read_at_32)(const void *src, size_t offset) = context->anal->big_endian ? rz_read_at_be32 : rz_read_at_le32; + ut32 (*read_at_32)(const void *src, size_t offset) = context->analysis->big_endian ? rz_read_at_be32 : rz_read_at_le32; int typeDescriptorAddrSize = RZ_MIN (context->word_size, 4); - bcd->type_descriptor_addr = (ut32) rz_read_ble (buf, (bool) context->anal->big_endian, typeDescriptorAddrSize * 8); + bcd->type_descriptor_addr = (ut32) rz_read_ble (buf, (bool) context->analysis->big_endian, typeDescriptorAddrSize * 8); size_t offset = (size_t) typeDescriptorAddrSize; bcd->num_contained_bases = read_at_32 (buf, offset); bcd->where.mdisp = read_at_32 (buf, offset + sizeof (ut32)); @@ -166,7 +166,7 @@ static RzList *rtti_msvc_read_base_class_array(RVTableContext *context, ut32 num ut64 stride = RZ_MIN (context->word_size, 4); if (num_base_classes > BASE_CLASSES_MAX) { - if (context->anal->verbose) { + if (context->analysis->verbose) { eprintf ("WARNING: Length of base class array at 0x%08"PFMT64x" exceeds %d.\n", addr, BASE_CLASSES_MAX); } num_base_classes = BASE_CLASSES_MAX; @@ -180,7 +180,7 @@ static RzList *rtti_msvc_read_base_class_array(RVTableContext *context, ut32 num ut64 bcdAddr; if (context->word_size <= 4) { - if (!context->read_addr (context->anal, addr, &bcdAddr)) { + if (!context->read_addr (context->analysis, addr, &bcdAddr)) { break; } if (bcdAddr == UT32_MAX) { @@ -189,11 +189,11 @@ static RzList *rtti_msvc_read_base_class_array(RVTableContext *context, ut32 num } else { // special offset calculation for 64bit ut8 tmp[4] = {0}; - if (!context->anal->iob.read_at(context->anal->iob.io, addr, tmp, 4)) { + if (!context->analysis->iob.read_at(context->analysis->iob.io, addr, tmp, 4)) { rz_list_free (ret); return NULL; } - ut32 (*read_32)(const void *src) = context->anal->big_endian ? rz_read_be32 : rz_read_le32; + ut32 (*read_32)(const void *src) = context->analysis->big_endian ? rz_read_be32 : rz_read_le32; ut32 bcdOffset = read_32 (tmp); if (bcdOffset == UT32_MAX) { break; @@ -229,10 +229,10 @@ static bool rtti_msvc_read_type_descriptor(RVTableContext *context, ut64 addr, r return false; } - if (!context->read_addr (context->anal, addr, &td->vtable_addr)) { + if (!context->read_addr (context->analysis, addr, &td->vtable_addr)) { return false; } - if (!context->read_addr (context->anal, addr + context->word_size, &td->spare)) { + if (!context->read_addr (context->analysis, addr + context->word_size, &td->spare)) { return false; } @@ -243,7 +243,7 @@ static bool rtti_msvc_read_type_descriptor(RVTableContext *context, ut64 addr, r bool endFound = false; bool endInvalid = false; while (1) { - context->anal->iob.read_at (context->anal->iob.io, nameAddr + bufOffset, buf, sizeof (buf)); + context->analysis->iob.read_at (context->analysis->iob.io, nameAddr + bufOffset, buf, sizeof (buf)); int i; for (i=0; iname, buf, nameLen + 1); } else { - context->anal->iob.read_at (context->anal->iob.io, nameAddr, + context->analysis->iob.read_at (context->analysis->iob.io, nameAddr, (ut8 *)td->name, (int) (nameLen + 1)); } @@ -377,7 +377,7 @@ static void rtti_msvc_print_base_class_descriptor_json(rtti_base_class_descripto * .?AVClassInInnerNamespace@InnerNamespace@OuterNamespace@@ * => OuterNamespace::InnerNamespace::AVClassInInnerNamespace */ -RZ_API char *rz_anal_rtti_msvc_demangle_class_name(RVTableContext *context, const char *name) { +RZ_API char *rz_analysis_rtti_msvc_demangle_class_name(RVTableContext *context, const char *name) { if (!name) { return NULL; } @@ -387,7 +387,7 @@ RZ_API char *rz_anal_rtti_msvc_demangle_class_name(RVTableContext *context, cons || strncmp (name + original_len - 2, "@@", 2) != 0) { return NULL; } - char *ret = context->anal->binb.demangle (NULL, "msvc", name, 0, false); + char *ret = context->analysis->binb.demangle (NULL, "msvc", name, 0, false); if (ret && *ret) { char *n = strchr (ret, ' '); if (n && *(++n)) { @@ -403,7 +403,7 @@ RZ_API char *rz_anal_rtti_msvc_demangle_class_name(RVTableContext *context, cons return ret; } -RZ_API void rz_anal_rtti_msvc_print_complete_object_locator(RVTableContext *context, ut64 addr, int mode) { +RZ_API void rz_analysis_rtti_msvc_print_complete_object_locator(RVTableContext *context, ut64 addr, int mode) { rtti_complete_object_locator col; if (!rtti_msvc_read_complete_object_locator (context, addr, &col)) { eprintf ("Failed to parse Complete Object Locator at 0x%08"PFMT64x"\n", addr); @@ -417,7 +417,7 @@ RZ_API void rz_anal_rtti_msvc_print_complete_object_locator(RVTableContext *cont } } -RZ_API void rz_anal_rtti_msvc_print_type_descriptor(RVTableContext *context, ut64 addr, int mode) { +RZ_API void rz_analysis_rtti_msvc_print_type_descriptor(RVTableContext *context, ut64 addr, int mode) { rtti_type_descriptor td = { 0 }; if (!rtti_msvc_read_type_descriptor (context, addr, &td)) { eprintf ("Failed to parse Type Descriptor at 0x%08"PFMT64x"\n", addr); @@ -433,7 +433,7 @@ RZ_API void rz_anal_rtti_msvc_print_type_descriptor(RVTableContext *context, ut6 rtti_type_descriptor_fini (&td); } -RZ_API void rz_anal_rtti_msvc_print_class_hierarchy_descriptor(RVTableContext *context, ut64 addr, int mode) { +RZ_API void rz_analysis_rtti_msvc_print_class_hierarchy_descriptor(RVTableContext *context, ut64 addr, int mode) { rtti_class_hierarchy_descriptor chd; if (!rtti_msvc_read_class_hierarchy_descriptor (context, addr, &chd)) { eprintf ("Failed to parse Class Hierarchy Descriptor at 0x%08"PFMT64x"\n", addr); @@ -447,7 +447,7 @@ RZ_API void rz_anal_rtti_msvc_print_class_hierarchy_descriptor(RVTableContext *c } } -RZ_API void rz_anal_rtti_msvc_print_base_class_descriptor(RVTableContext *context, ut64 addr, int mode) { +RZ_API void rz_analysis_rtti_msvc_print_base_class_descriptor(RVTableContext *context, ut64 addr, int mode) { rtti_base_class_descriptor bcd; if (!rtti_msvc_read_base_class_descriptor (context, addr, &bcd)) { eprintf ("Failed to parse Base Class Descriptor at 0x%08"PFMT64x"\n", addr); @@ -466,7 +466,7 @@ static bool rtti_msvc_print_complete_object_locator_recurse(RVTableContext *cont ut64 colRefAddr = atAddress - context->word_size; ut64 colAddr; - if (!context->read_addr (context->anal, colRefAddr, &colAddr)) { + if (!context->read_addr (context->analysis, colRefAddr, &colAddr)) { return false; } @@ -585,7 +585,7 @@ static bool rtti_msvc_print_complete_object_locator_recurse(RVTableContext *cont return true; } -RZ_API bool rz_anal_rtti_msvc_print_at_vtable(RVTableContext *context, ut64 addr, int mode, bool strict) { +RZ_API bool rz_analysis_rtti_msvc_print_at_vtable(RVTableContext *context, ut64 addr, int mode, bool strict) { return rtti_msvc_print_complete_object_locator_recurse (context, addr, mode, strict); } @@ -729,7 +729,7 @@ RecoveryCompleteObjectLocator *recovery_anal_complete_object_locator(RRTTIMSVCAn continue; } if (!td->valid) { - if (context->vt_context->anal->verbose) { + if (context->vt_context->analysis->verbose) { eprintf ("Warning: type descriptor of base is invalid.\n"); } continue; @@ -769,13 +769,13 @@ RecoveryTypeDescriptor *recovery_anal_type_descriptor(RRTTIMSVCAnalContext *cont } -static char *unique_class_name(RzAnal *anal, const char *original_name) { - if (!rz_anal_class_exists (anal, original_name)) { +static char *unique_class_name(RzAnalysis *analysis, const char *original_name) { + if (!rz_analysis_class_exists (analysis, original_name)) { return strdup (original_name); } char *name = NULL; - if (anal->verbose) { + if (analysis->verbose) { eprintf ("Warning: class name %s already taken!\n", original_name); } int i = 1; @@ -786,31 +786,31 @@ static char *unique_class_name(RzAnal *anal, const char *original_name) { if (!name) { return NULL; } - } while (rz_anal_class_exists (anal, name)); + } while (rz_analysis_class_exists (analysis, name)); return name; } -static void recovery_apply_vtable(RzAnal *anal, const char *class_name, RVTableInfo *vtable_info) { +static void recovery_apply_vtable(RzAnalysis *analysis, const char *class_name, RVTableInfo *vtable_info) { if (!vtable_info) { return; } - RzAnalVTable vtable; + RzAnalysisVTable vtable; vtable.id = NULL; vtable.offset = 0; vtable.addr = vtable_info->saddr; - rz_anal_class_vtable_set (anal, class_name, &vtable); - rz_anal_class_vtable_fini (&vtable); + rz_analysis_class_vtable_set (analysis, class_name, &vtable); + rz_analysis_class_vtable_fini (&vtable); RVTableMethodInfo *vmeth; rz_vector_foreach (&vtable_info->methods, vmeth) { - RzAnalMethod meth; + RzAnalysisMethod meth; meth.addr = vmeth->addr; meth.vtable_offset = vmeth->vtable_offset; meth.name = rz_str_newf ("virtual_%" PFMT64d, meth.vtable_offset); - rz_anal_class_method_set (anal, class_name, &meth); - rz_anal_class_method_fini (&meth); + rz_analysis_class_method_set (analysis, class_name, &meth); + rz_analysis_class_method_fini (&meth); } } @@ -828,7 +828,7 @@ static void recovery_apply_bases(RRTTIMSVCAnalContext *context, const char *clas const char *base_class_name; if (!base_td->col) { - if (context->vt_context->anal->verbose) { + if (context->vt_context->analysis->verbose) { eprintf ("Warning: Base td %s has no col. Falling back to recovery from td only.\n", base_td->td.name); } base_class_name = recovery_apply_type_descriptor (context, base_td); @@ -837,18 +837,18 @@ static void recovery_apply_bases(RRTTIMSVCAnalContext *context, const char *clas } if (!base_class_name) { - if (context->vt_context->anal->verbose) { + if (context->vt_context->analysis->verbose) { eprintf ("Failed to convert !base td->col or td to a class\n"); } continue; } - RzAnalBaseClass base; + RzAnalysisBaseClass base; base.id = NULL; base.offset = (ut64)base_desc->bcd->where.mdisp; base.class_name = strdup (base_class_name); - rz_anal_class_base_set (context->vt_context->anal, class_name, &base); - rz_anal_class_base_fini (&base); + rz_analysis_class_base_set (context->vt_context->analysis, class_name, &base); + rz_analysis_class_base_fini (&base); } } @@ -859,22 +859,22 @@ static const char *recovery_apply_complete_object_locator(RRTTIMSVCAnalContext * } if (!col->td) { - if (context->vt_context->anal->verbose) { + if (context->vt_context->analysis->verbose) { eprintf ("Warning: no td for col at 0x%"PFMT64x"\n", col->addr); } return NULL; } - RzAnal *anal = context->vt_context->anal; + RzAnalysis *analysis = context->vt_context->analysis; const char *existing = ht_up_find (context->col_td_classes, col->addr, NULL); if (existing != NULL) { return existing; } - char *name = rz_anal_rtti_msvc_demangle_class_name (context->vt_context, col->td->td.name); + char *name = rz_analysis_rtti_msvc_demangle_class_name (context->vt_context, col->td->td.name); if (!name) { - if (context->vt_context->anal->verbose) { + if (context->vt_context->analysis->verbose) { eprintf ("Failed to demangle a class name: \"%s\"\n", col->td->td.name); } name = strdup (col->td->td.name); @@ -884,16 +884,16 @@ static const char *recovery_apply_complete_object_locator(RRTTIMSVCAnalContext * } char *tmp = name; - name = unique_class_name (anal, name); + name = unique_class_name (analysis, name); free (tmp); if (!name) { return NULL; } - rz_anal_class_create (anal, name); + rz_analysis_class_create (analysis, name); ht_up_insert (context->col_td_classes, col->addr, name); - recovery_apply_vtable (anal, name, col->vtable); + recovery_apply_vtable (analysis, name, col->vtable); recovery_apply_bases (context, name, &col->base_td); return name; @@ -906,16 +906,16 @@ static const char *recovery_apply_type_descriptor(RRTTIMSVCAnalContext *context, return NULL; } - RzAnal *anal = context->vt_context->anal; + RzAnalysis *analysis = context->vt_context->analysis; const char *existing = ht_up_find (context->col_td_classes, td->addr, NULL); if (existing != NULL) { return existing; } - char *name = rz_anal_rtti_msvc_demangle_class_name (context->vt_context, td->td.name); + char *name = rz_analysis_rtti_msvc_demangle_class_name (context->vt_context, td->td.name); if (!name) { - if (context->vt_context->anal->verbose) { + if (context->vt_context->analysis->verbose) { eprintf("Failed to demangle a class name: \"%s\"\n", td->td.name); } name = strdup (td->td.name); @@ -924,14 +924,14 @@ static const char *recovery_apply_type_descriptor(RRTTIMSVCAnalContext *context, } } - rz_anal_class_create (anal, name); + rz_analysis_class_create (analysis, name); ht_up_insert (context->col_td_classes, td->addr, name); if (!td->col || !td->col->valid) { return name; } - recovery_apply_vtable (anal, name, td->col->vtable); + recovery_apply_vtable (analysis, name, td->col->vtable); recovery_apply_bases (context, name, &td->col->base_td); return name; @@ -941,10 +941,10 @@ void str_value_free(HtUPKv *kv) { free (kv->value); } -RZ_API void rz_anal_rtti_msvc_recover_all(RVTableContext *vt_context, RzList *vtables) { +RZ_API void rz_analysis_rtti_msvc_recover_all(RVTableContext *vt_context, RzList *vtables) { RRTTIMSVCAnalContext context; context.vt_context = vt_context; - rz_pvector_init (&context.vtables, (RzPVectorFree)rz_anal_vtable_info_free); + rz_pvector_init (&context.vtables, (RzPVectorFree)rz_analysis_vtable_info_free); rz_pvector_init (&context.complete_object_locators, (RzPVectorFree) recovery_complete_object_locator_free); context.addr_col = ht_up_new0 (); @@ -958,7 +958,7 @@ RZ_API void rz_anal_rtti_msvc_recover_all(RVTableContext *vt_context, RzList *vt rz_list_foreach (vtables, vtableIter, table) { ut64 colRefAddr = table->saddr - vt_context->word_size; ut64 colAddr; - if (!vt_context->read_addr (vt_context->anal, colRefAddr, &colAddr)) { + if (!vt_context->read_addr (vt_context->analysis, colRefAddr, &colAddr)) { continue; } recovery_anal_complete_object_locator (&context, colAddr, table); diff --git a/librz/anal/serialize_anal.c b/librz/analysis/serialize_analysis.c similarity index 82% rename from librz/anal/serialize_anal.c rename to librz/analysis/serialize_analysis.c index 880c7c118f..4e4817b78d 100644 --- a/librz/anal/serialize_anal.c +++ b/librz/analysis/serialize_analysis.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: LGPL-3.0-only #include -#include +#include #include "../util/serialize_helper.h" @@ -14,13 +14,13 @@ * / * /blocks * 0x={size:, jump?:, fail?:, traced?:true, folded?:true, colorize?:, - * fingerprint?:"", diff?: , switch_op?:, + * fingerprint?:"", diff?: , switch_op?:, * ninstr:, op_pos?:[], stackptr:, parent_stackptr:, * cmpval:, cmpreg?:} * /functions * 0x={name:, bits?:, type:, cc?:, stack:, maxstack:, * ninstr:, folded?:, pure?:, bp_frame?:, bp_off?:, noreturn?:, - * fingerprint?:"", diff?:, bbs:[], imports?:[], vars?:[], + * fingerprint?:"", diff?:, bbs:[], imports?:[], vars?:[], * labels?: {:}} * /xrefs * 0x=[{to:, type?:"c"|"C"|"d"|"s"}] @@ -35,34 +35,34 @@ * immbase?:,ptr?:,ret?:,syntax?:,opcode?:,esil?:,optype?:, * size?:,frame?:,val?:,high?:} * /classes - * + * * /attrs - * + * * * /zigns - * + * * /spaces * see spaces.c * * /imports * =i * - * RzAnalDiff JSON: + * RzAnalysisDiff JSON: * {type?:"m"|"u", addr:, dist:, name?:, size:} * - * RzAnalSwitchOp JSON: - * {addr:, min:, max:, def:, cases:[]} + * RzAnalysisSwitchOp JSON: + * {addr:, min:, max:, def:, cases:[]} * - * RzAnalCaseOp JSON: + * RzAnalysisCaseOp JSON: * {addr:, jump:, value:} * - * RzAnalVar JSON: + * RzAnalysisVar JSON: * {name:, type:, kind:"s|b|r", arg?:, delta?:, reg?:, cmt?:, * accs?: [{off:, type:"r|w|rw", reg:, sp?:}], constrs?:[,,...]} * */ -RZ_API void rz_serialize_anal_diff_save(RZ_NONNULL PJ *j, RZ_NONNULL RzAnalDiff *diff) { +RZ_API void rz_serialize_anal_diff_save(RZ_NONNULL PJ *j, RZ_NONNULL RzAnalysisDiff *diff) { pj_o (j); switch (diff->type) { case RZ_ANAL_DIFF_TYPE_MATCH: @@ -112,11 +112,11 @@ RZ_API void rz_serialize_anal_diff_parser_free(RzSerializeAnalDiffParser parser) key_parser_free (parser); } -RZ_API RZ_NULLABLE RzAnalDiff *rz_serialize_anal_diff_load(RZ_NONNULL RzSerializeAnalDiffParser parser, RZ_NONNULL const RJson *json) { +RZ_API RZ_NULLABLE RzAnalysisDiff *rz_serialize_anal_diff_load(RZ_NONNULL RzSerializeAnalDiffParser parser, RZ_NONNULL const RJson *json) { if (json->type != RZ_JSON_OBJECT) { return NULL; } - RzAnalDiff *diff = rz_anal_diff_new (); + RzAnalysisDiff *diff = rz_analysis_diff_new (); if (!diff) { return NULL; } @@ -163,7 +163,7 @@ RZ_API RZ_NULLABLE RzAnalDiff *rz_serialize_anal_diff_load(RZ_NONNULL RzSerializ return diff; } -RZ_API void rz_serialize_anal_case_op_save(RZ_NONNULL PJ *j, RZ_NONNULL RzAnalCaseOp *op) { +RZ_API void rz_serialize_anal_case_op_save(RZ_NONNULL PJ *j, RZ_NONNULL RzAnalysisCaseOp *op) { pj_o (j); pj_kn (j, "addr", op->addr); pj_kn (j, "jump", op->jump); @@ -171,7 +171,7 @@ RZ_API void rz_serialize_anal_case_op_save(RZ_NONNULL PJ *j, RZ_NONNULL RzAnalCa pj_end (j); } -RZ_API void rz_serialize_anal_switch_op_save(RZ_NONNULL PJ *j, RZ_NONNULL RzAnalSwitchOp *op) { +RZ_API void rz_serialize_anal_switch_op_save(RZ_NONNULL PJ *j, RZ_NONNULL RzAnalysisSwitchOp *op) { pj_o (j); pj_kn (j, "addr", op->addr); pj_kn (j, "min", op->min_val); @@ -180,7 +180,7 @@ RZ_API void rz_serialize_anal_switch_op_save(RZ_NONNULL PJ *j, RZ_NONNULL RzAnal pj_k (j, "cases"); pj_a (j); RzListIter *it; - RzAnalCaseOp *cop; + RzAnalysisCaseOp *cop; rz_list_foreach (op->cases, it, cop) { rz_serialize_anal_case_op_save (j, cop); } @@ -188,11 +188,11 @@ RZ_API void rz_serialize_anal_switch_op_save(RZ_NONNULL PJ *j, RZ_NONNULL RzAnal pj_end (j); } -RZ_API RzAnalSwitchOp *rz_serialize_anal_switch_op_load(RZ_NONNULL const RJson *json) { +RZ_API RzAnalysisSwitchOp *rz_serialize_anal_switch_op_load(RZ_NONNULL const RJson *json) { if (json->type != RZ_JSON_OBJECT) { return NULL; } - RzAnalSwitchOp *sop = rz_anal_switch_op_new (0, 0, 0, 0); + RzAnalysisSwitchOp *sop = rz_analysis_switch_op_new (0, 0, 0, 0); if (!sop) { return NULL; } @@ -230,14 +230,14 @@ RZ_API RzAnalSwitchOp *rz_serialize_anal_switch_op_load(RZ_NONNULL const RJson * value = cases->num.u_value; } } - rz_anal_switch_op_add_case (sop, addr, value, jump); + rz_analysis_switch_op_add_case (sop, addr, value, jump); } } } return sop; } -static void block_store(RZ_NONNULL Sdb *db, const char *key, RzAnalBlock *block) { +static void block_store(RZ_NONNULL Sdb *db, const char *key, RzAnalysisBlock *block) { PJ *j = pj_new (); if (!j) { return; @@ -313,11 +313,11 @@ static void block_store(RZ_NONNULL Sdb *db, const char *key, RzAnalBlock *block) pj_free (j); } -RZ_API void rz_serialize_anal_blocks_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal) { +RZ_API void rz_serialize_anal_blocks_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis) { RBIter iter; - RzAnalBlock *block; + RzAnalysisBlock *block; RzStrBuf key = { 0 }; - rz_rbtree_foreach (anal->bb_tree, iter, block, RzAnalBlock, _rb) { + rz_rbtree_foreach (analysis->bb_tree, iter, block, RzAnalysisBlock, _rb) { rz_strbuf_setf (&key, "0x%"PFMT64x, block->addr); block_store (db, rz_strbuf_get (&key), block); } @@ -343,7 +343,7 @@ enum { }; typedef struct { - RzAnal *anal; + RzAnalysis *analysis; KeyParser *parser; RzSerializeAnalDiffParser diff_parser; } BlockLoadCtx; @@ -361,7 +361,7 @@ static bool block_load_cb(void *user, const char *k, const char *v) { return false; } - RzAnalBlock proto = { 0 }; + RzAnalysisBlock proto = { 0 }; proto.jump = UT64_MAX; proto.fail = UT64_MAX; proto.size = UT64_MAX; @@ -436,11 +436,11 @@ static bool block_load_cb(void *user, const char *k, const char *v) { break; } case BLOCK_FIELD_DIFF: - rz_anal_diff_free (proto.diff); + rz_analysis_diff_free (proto.diff); proto.diff = rz_serialize_anal_diff_load (ctx->diff_parser, child); break; case BLOCK_FIELD_SWITCH_OP: - rz_anal_switch_op_free (proto.switch_op); + rz_analysis_switch_op_free (proto.switch_op); proto.switch_op = rz_serialize_anal_switch_op_load (child); break; case BLOCK_FIELD_NINSTR: @@ -493,7 +493,7 @@ static bool block_load_cb(void *user, const char *k, const char *v) { if (child->type != RZ_JSON_STRING) { break; } - proto.cmpreg = rz_str_constpool_get (&ctx->anal->constpool, child->str_value); + proto.cmpreg = rz_str_constpool_get (&ctx->analysis->constpool, child->str_value); break; default: break; @@ -509,7 +509,7 @@ static bool block_load_cb(void *user, const char *k, const char *v) { goto error; } - RzAnalBlock *block = rz_anal_create_block (ctx->anal, addr, proto.size); + RzAnalysisBlock *block = rz_analysis_create_block (ctx->analysis, addr, proto.size); if (!block) { goto error; } @@ -535,14 +535,14 @@ static bool block_load_cb(void *user, const char *k, const char *v) { return true; error: free (proto.fingerprint); - rz_anal_diff_free (proto.diff); - rz_anal_switch_op_free (proto.switch_op); + rz_analysis_diff_free (proto.diff); + rz_analysis_switch_op_free (proto.switch_op); free (proto.op_pos); return false; } -RZ_API bool rz_serialize_anal_blocks_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal, RzSerializeAnalDiffParser diff_parser, RZ_NULLABLE RzSerializeResultInfo *res) { - BlockLoadCtx ctx = { anal, key_parser_new (), diff_parser }; +RZ_API bool rz_serialize_anal_blocks_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis, RzSerializeAnalDiffParser diff_parser, RZ_NULLABLE RzSerializeResultInfo *res) { + BlockLoadCtx ctx = { analysis, key_parser_new (), diff_parser }; if (!ctx.parser) { SERIALIZE_ERR ("parser init failed"); return false; @@ -570,7 +570,7 @@ RZ_API bool rz_serialize_anal_blocks_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal return ret; } -RZ_API void rz_serialize_anal_var_save(RZ_NONNULL PJ *j, RZ_NONNULL RzAnalVar *var) { +RZ_API void rz_serialize_anal_var_save(RZ_NONNULL PJ *j, RZ_NONNULL RzAnalysisVar *var) { pj_o (j); pj_ks (j, "name", var->name); pj_ks (j, "type", var->type); @@ -599,7 +599,7 @@ RZ_API void rz_serialize_anal_var_save(RZ_NONNULL PJ *j, RZ_NONNULL RzAnalVar *v } if (!rz_vector_empty (&var->accesses)) { pj_ka (j, "accs"); - RzAnalVarAccess *acc; + RzAnalysisVarAccess *acc; rz_vector_foreach (&var->accesses, acc) { pj_o (j); pj_kn (j, "off", acc->offset); @@ -628,7 +628,7 @@ RZ_API void rz_serialize_anal_var_save(RZ_NONNULL PJ *j, RZ_NONNULL RzAnalVar *v } if (!rz_vector_empty (&var->constraints)) { pj_ka (j, "constrs"); - RzAnalVarConstraint *constr; + RzAnalysisVarConstraint *constr; rz_vector_foreach (&var->constraints, constr) { pj_i (j, (int)constr->cond); pj_n (j, constr->val); @@ -671,23 +671,23 @@ RZ_API void rz_serialize_anal_var_parser_free(RzSerializeAnalVarParser parser) { key_parser_free (parser); } -RZ_API RZ_NULLABLE RzAnalVar *rz_serialize_anal_var_load(RZ_NONNULL RzAnalFunction *fcn, RZ_NONNULL RzSerializeAnalVarParser parser, RZ_NONNULL const RJson *json) { +RZ_API RZ_NULLABLE RzAnalysisVar *rz_serialize_anal_var_load(RZ_NONNULL RzAnalysisFunction *fcn, RZ_NONNULL RzSerializeAnalVarParser parser, RZ_NONNULL const RJson *json) { if (json->type != RZ_JSON_OBJECT) { return NULL; } const char *name = NULL; const char *type = NULL; - RzAnalVarKind kind = -1; + RzAnalysisVarKind kind = -1; bool arg = false; st64 delta = ST64_MAX; const char *regname = NULL; const char *comment = NULL; RzVector accesses; - rz_vector_init (&accesses, sizeof (RzAnalVarAccess), NULL, NULL); + rz_vector_init (&accesses, sizeof (RzAnalysisVarAccess), NULL, NULL); RzVector constraints; - rz_vector_init (&constraints, sizeof (RzAnalVarConstraint), NULL, NULL); + rz_vector_init (&constraints, sizeof (RzAnalysisVarConstraint), NULL, NULL); - RzAnalVar *ret = NULL; + RzAnalysisVar *ret = NULL; KEY_PARSER_JSON (parser, json, child, { case VAR_FIELD_NAME: @@ -790,7 +790,7 @@ RZ_API RZ_NULLABLE RzAnalVar *rz_serialize_anal_var_load(RZ_NONNULL RzAnalFuncti continue; } - RzAnalVarAccess *acc = rz_vector_push (&accesses, NULL); + RzAnalysisVarAccess *acc = rz_vector_push (&accesses, NULL); acc->offset = offv->num.s_value; acc->type = acctype; acc->stackptr = spv ? spv->num.s_value : 0; @@ -811,8 +811,8 @@ RZ_API RZ_NULLABLE RzAnalVar *rz_serialize_anal_var_load(RZ_NONNULL RzAnalFuncti if (!sibling || sibling->type != RZ_JSON_INTEGER) { break; } - RzAnalVarConstraint constr; - constr.cond = (_RzAnalCond)baby->num.s_value; + RzAnalysisVarConstraint constr; + constr.cond = (_RzAnalysisCond)baby->num.s_value; constr.val = sibling->num.u_value; if (constr.cond < RZ_ANAL_COND_AL || constr.cond > RZ_ANAL_COND_LS) { baby = sibling; @@ -831,7 +831,7 @@ RZ_API RZ_NULLABLE RzAnalVar *rz_serialize_anal_var_load(RZ_NONNULL RzAnalFuncti if (!regname) { goto beach; } - RzRegItem *reg = rz_reg_get (fcn->anal->reg, regname, -1); + RzRegItem *reg = rz_reg_get (fcn->analysis->reg, regname, -1); if (!reg) { goto beach; } @@ -840,7 +840,7 @@ RZ_API RZ_NULLABLE RzAnalVar *rz_serialize_anal_var_load(RZ_NONNULL RzAnalFuncti if (!name || !type || kind == -1 || delta == ST64_MAX) { goto beach; } - ret = rz_anal_function_set_var (fcn, delta, kind, type, 0, arg, name); + ret = rz_analysis_function_set_var (fcn, delta, kind, type, 0, arg, name); if (!ret) { goto beach; } @@ -848,13 +848,13 @@ RZ_API RZ_NULLABLE RzAnalVar *rz_serialize_anal_var_load(RZ_NONNULL RzAnalFuncti free (ret->comment); ret->comment = strdup (comment); } - RzAnalVarAccess *acc; + RzAnalysisVarAccess *acc; rz_vector_foreach (&accesses, acc) { - rz_anal_var_set_access (ret, acc->reg, fcn->addr + acc->offset, acc->type, acc->stackptr); + rz_analysis_var_set_access (ret, acc->reg, fcn->addr + acc->offset, acc->type, acc->stackptr); } - RzAnalVarConstraint *constr; + RzAnalysisVarConstraint *constr; rz_vector_foreach (&constraints, constr) { - rz_anal_var_add_constraint (ret, constr); + rz_analysis_var_add_constraint (ret, constr); } beach: @@ -868,7 +868,7 @@ static bool store_label_cb(void *j, const ut64 k, const void *v) { return true; } -static void function_store(RZ_NONNULL Sdb *db, const char *key, RzAnalFunction *function) { +static void function_store(RZ_NONNULL Sdb *db, const char *key, RzAnalysisFunction *function) { PJ *j = pj_new (); if (!j) { return; @@ -915,7 +915,7 @@ static void function_store(RZ_NONNULL Sdb *db, const char *key, RzAnalFunction * pj_ka (j, "bbs"); RzListIter *it; - RzAnalBlock *block; + RzAnalysisBlock *block; rz_list_foreach (function->bbs, it, block) { pj_n (j, block->addr); } @@ -934,7 +934,7 @@ static void function_store(RZ_NONNULL Sdb *db, const char *key, RzAnalFunction * pj_ka (j, "vars"); void **vit; rz_pvector_foreach (&function->vars, vit) { - RzAnalVar *var = *vit; + RzAnalysisVar *var = *vit; rz_serialize_anal_var_save (j, var); } pj_end (j); @@ -951,12 +951,12 @@ static void function_store(RZ_NONNULL Sdb *db, const char *key, RzAnalFunction * pj_free (j); } -RZ_API void rz_serialize_anal_functions_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal) { +RZ_API void rz_serialize_anal_functions_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis) { RzListIter *it; - RzAnalFunction *function; + RzAnalysisFunction *function; RzStrBuf key; rz_strbuf_init (&key); - rz_list_foreach (anal->fcns, it, function) { + rz_list_foreach (analysis->fcns, it, function) { rz_strbuf_setf (&key, "0x%"PFMT64x, function->addr); function_store (db, rz_strbuf_get (&key), function); } @@ -985,7 +985,7 @@ enum { }; typedef struct { - RzAnal *anal; + RzAnalysis *analysis; KeyParser *parser; RzSerializeAnalDiffParser diff_parser; RzSerializeAnalVarParser var_parser; @@ -1004,7 +1004,7 @@ static bool function_load_cb(void *user, const char *k, const char *v) { return false; } - RzAnalFunction *function = rz_anal_function_new (ctx->anal); + RzAnalysisFunction *function = rz_analysis_function_new (ctx->analysis); function->bits = 0; // should be 0 if not specified function->bp_frame = false; // should be false if not specified function->bp_off = 0; // 0 if not specified @@ -1036,7 +1036,7 @@ static bool function_load_cb(void *user, const char *k, const char *v) { if (child->type != RZ_JSON_STRING) { break; } - function->cc = rz_str_constpool_get (&ctx->anal->constpool, child->str_value); + function->cc = rz_str_constpool_get (&ctx->analysis->constpool, child->str_value); break; case FUNCTION_FIELD_STACK: if (child->type != RZ_JSON_INTEGER) { @@ -1120,7 +1120,7 @@ static bool function_load_cb(void *user, const char *k, const char *v) { } break; case FUNCTION_FIELD_DIFF: - rz_anal_diff_free (function->diff); + rz_analysis_diff_free (function->diff); function->diff = rz_serialize_anal_diff_load (ctx->diff_parser, child); break; case FUNCTION_FIELD_BBS: { @@ -1132,11 +1132,11 @@ static bool function_load_cb(void *user, const char *k, const char *v) { if (baby->type != RZ_JSON_INTEGER) { continue; } - RzAnalBlock *block = rz_anal_get_block_at (ctx->anal, baby->num.u_value); + RzAnalysisBlock *block = rz_analysis_get_block_at (ctx->analysis, baby->num.u_value); if (!block) { continue; } - rz_anal_function_add_block (function, block); + rz_analysis_function_add_block (function, block); } break; } @@ -1180,7 +1180,7 @@ static bool function_load_cb(void *user, const char *k, const char *v) { if (baby->type != RZ_JSON_INTEGER) { continue; } - rz_anal_function_set_label (function, baby->key, baby->num.u_value); + rz_analysis_function_set_label (function, baby->key, baby->num.u_value); } break; } @@ -1191,12 +1191,12 @@ static bool function_load_cb(void *user, const char *k, const char *v) { bool ret = true; errno = 0; function->addr = strtoull (k, NULL, 0); - if (errno || !function->name || !rz_anal_add_function (ctx->anal, function)) { - rz_anal_function_free (function); + if (errno || !function->name || !rz_analysis_add_function (ctx->analysis, function)) { + rz_analysis_function_free (function); ret = false; goto beach; } - function->is_noreturn = noreturn; // Can't set directly, rz_anal_add_function() overwrites it + function->is_noreturn = noreturn; // Can't set directly, rz_analysis_add_function() overwrites it if (vars_json) { RJson *baby; @@ -1211,9 +1211,9 @@ beach: return ret; } -RZ_API bool rz_serialize_anal_functions_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal, RzSerializeAnalDiffParser diff_parser, RZ_NULLABLE RzSerializeResultInfo *res) { +RZ_API bool rz_serialize_anal_functions_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis, RzSerializeAnalDiffParser diff_parser, RZ_NULLABLE RzSerializeResultInfo *res) { FunctionLoadCtx ctx = { - .anal = anal, + .analysis = analysis, .parser = key_parser_new (), .diff_parser = diff_parser, .var_parser = rz_serialize_anal_var_parser_new () @@ -1253,7 +1253,7 @@ beach: } static bool store_xref_cb(void *j, const ut64 k, const void *v) { - const RzAnalRef *xref = v; + const RzAnalysisRef *xref = v; pj_o (j); pj_kn (j, "to", k); if (xref->type != RZ_ANAL_REF_TYPE_NULL) { @@ -1282,12 +1282,12 @@ static bool store_xrefs_list_cb(void *db, const ut64 k, const void *v) { return true; } -RZ_API void rz_serialize_anal_xrefs_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal) { - ht_up_foreach (anal->dict_refs, store_xrefs_list_cb, db); +RZ_API void rz_serialize_anal_xrefs_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis) { + ht_up_foreach (analysis->dict_refs, store_xrefs_list_cb, db); } static bool xrefs_load_cb(void *user, const char *k, const char *v) { - RzAnal *anal = user; + RzAnalysis *analysis = user; errno = 0; ut64 from = strtoull (k, NULL, 0); @@ -1316,7 +1316,7 @@ static bool xrefs_load_cb(void *user, const char *k, const char *v) { } ut64 to = baby->num.u_value; - RzAnalRefType type = RZ_ANAL_REF_TYPE_NULL; + RzAnalysisRefType type = RZ_ANAL_REF_TYPE_NULL; baby = rz_json_get (child, "type"); if (baby) { // must be a 1-char string @@ -1335,7 +1335,7 @@ static bool xrefs_load_cb(void *user, const char *k, const char *v) { } } - rz_anal_xrefs_set (anal, from, to, type); + rz_analysis_xrefs_set (analysis, from, to, type); } rz_json_free (json); @@ -1348,16 +1348,16 @@ error: return false; } -RZ_API bool rz_serialize_anal_xrefs_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal, RZ_NULLABLE RzSerializeResultInfo *res) { - bool ret = sdb_foreach (db, xrefs_load_cb, anal); +RZ_API bool rz_serialize_anal_xrefs_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis, RZ_NULLABLE RzSerializeResultInfo *res) { + bool ret = sdb_foreach (db, xrefs_load_cb, analysis); if (!ret) { SERIALIZE_ERR ("xrefs parsing failed"); } return ret; } -RZ_API void rz_serialize_anal_meta_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal) { - rz_serialize_spaces_save (sdb_ns (db, "spaces", true), &anal->meta_spaces); +RZ_API void rz_serialize_anal_meta_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis) { + rz_serialize_spaces_save (sdb_ns (db, "spaces", true), &analysis->meta_spaces); PJ *j = pj_new (); if (!j) { @@ -1365,14 +1365,14 @@ RZ_API void rz_serialize_anal_meta_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *a } char key[0x20]; RzIntervalTreeIter it; - RzAnalMetaItem *meta; + RzAnalysisMetaItem *meta; ut64 addr = 0; size_t count = 0; #define FLUSH pj_end (j); \ if (snprintf (key, sizeof (key), "0x%"PFMT64x, addr) >= 0) { \ sdb_set (db, key, pj_string (j), 0); \ } - rz_interval_tree_foreach (&anal->meta, it, meta) { + rz_interval_tree_foreach (&analysis->meta, it, meta) { RzIntervalNode *node = rz_interval_tree_iter_get (&it); if (count && node->start != addr) { // new address @@ -1446,7 +1446,7 @@ RZ_API void rz_serialize_anal_meta_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *a } static bool meta_load_cb(void *user, const char *k, const char *v) { - RzAnal *anal = user; + RzAnalysis *analysis = user; errno = 0; ut64 addr = strtoull (k, NULL, 0); @@ -1471,7 +1471,7 @@ static bool meta_load_cb(void *user, const char *k, const char *v) { } ut64 size = 1; - RzAnalMetaType type = RZ_META_TYPE_ANY; + RzAnalysisMetaType type = RZ_META_TYPE_ANY; const char *str = NULL; int subtype = 0; const char *space_name = NULL; @@ -1548,13 +1548,13 @@ static bool meta_load_cb(void *user, const char *k, const char *v) { continue; } - RzAnalMetaItem *item = RZ_NEW0 (RzAnalMetaItem); + RzAnalysisMetaItem *item = RZ_NEW0 (RzAnalysisMetaItem); if (!item) { break; } item->type = type; item->subtype = subtype; - item->space = space_name ? rz_spaces_get (&anal->meta_spaces, space_name) : NULL; + item->space = space_name ? rz_spaces_get (&analysis->meta_spaces, space_name) : NULL; item->str = str ? strdup (str) : NULL; if (str && !item->str) { free (item); @@ -1564,7 +1564,7 @@ static bool meta_load_cb(void *user, const char *k, const char *v) { if (end < addr) { end = UT64_MAX; } - rz_interval_tree_insert (&anal->meta, addr, end, item); + rz_interval_tree_insert (&analysis->meta, addr, end, item); } rz_json_free (json); @@ -1577,16 +1577,16 @@ error: return false; } -RZ_API bool rz_serialize_anal_meta_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal, RZ_NULLABLE RzSerializeResultInfo *res) { +RZ_API bool rz_serialize_anal_meta_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis, RZ_NULLABLE RzSerializeResultInfo *res) { Sdb *spaces_db = sdb_ns (db, "spaces", false); if (!spaces_db) { SERIALIZE_ERR ("missing meta spaces namespace"); return false; } - if (!rz_serialize_spaces_load (spaces_db, &anal->meta_spaces, false, res)) { + if (!rz_serialize_spaces_load (spaces_db, &analysis->meta_spaces, false, res)) { return false; } - bool ret = sdb_foreach (db, meta_load_cb, anal); + bool ret = sdb_foreach (db, meta_load_cb, analysis); if (!ret) { SERIALIZE_ERR ("meta parsing failed"); } @@ -1594,7 +1594,7 @@ RZ_API bool rz_serialize_anal_meta_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *a } typedef struct { - const RzVector/**/ *addr_hints; + const RzVector/**/ *addr_hints; const char *arch; int bits; bool arch_set; @@ -1618,7 +1618,7 @@ static HintsAtAddr *hints_at_addr(HtUP *acc, ut64 addr) { return h; } -static bool addr_hint_acc_cb(ut64 addr, const RzVector/**/ *records, void *user) { +static bool addr_hint_acc_cb(ut64 addr, const RzVector/**/ *records, void *user) { HintsAtAddr *h = hints_at_addr (user, addr); if (!h) { return false; @@ -1671,7 +1671,7 @@ static bool hints_acc_store_cb(void *user, const ut64 addr, const void *v) { pj_ki (j, "bits", h->bits); } if (h->addr_hints) { - RzAnalAddrHintRecord *record; + RzAnalysisAddrHintRecord *record; rz_vector_foreach (h->addr_hints, record) { switch (record->type) { case RZ_ANAL_ADDR_HINT_TYPE_IMMBASE: @@ -1731,11 +1731,11 @@ static bool hints_acc_store_cb(void *user, const ut64 addr, const void *v) { return true; } -RZ_API void rz_serialize_anal_hints_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal) { +RZ_API void rz_serialize_anal_hints_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis) { HtUP/**/ *acc = ht_up_new (NULL, hints_at_addr_kv_free, NULL); - rz_anal_addr_hints_foreach (anal, addr_hint_acc_cb, acc); - rz_anal_arch_hints_foreach (anal, arch_hint_acc_cb, acc); - rz_anal_bits_hints_foreach (anal, bits_hint_acc_cb, acc); + rz_analysis_addr_hints_foreach (analysis, addr_hint_acc_cb, acc); + rz_analysis_arch_hints_foreach (analysis, arch_hint_acc_cb, acc); + rz_analysis_bits_hints_foreach (analysis, bits_hint_acc_cb, acc); ht_up_foreach (acc, hints_acc_store_cb, db); ht_up_free (acc); } @@ -1762,13 +1762,13 @@ enum { }; typedef struct { - RzAnal *anal; + RzAnalysis *analysis; KeyParser *parser; } HintsLoadCtx; static bool hints_load_cb(void *user, const char *k, const char *v) { HintsLoadCtx *ctx = user; - RzAnal *anal = ctx->anal; + RzAnalysis *analysis = ctx->analysis; errno = 0; ut64 addr = strtoull (k, NULL, 0); @@ -1788,106 +1788,106 @@ static bool hints_load_cb(void *user, const char *k, const char *v) { KEY_PARSER_JSON (ctx->parser, json, child, { case HINTS_FIELD_ARCH: - rz_anal_hint_set_arch (anal, addr, child->type == RZ_JSON_STRING ? child->str_value : NULL); + rz_analysis_hint_set_arch (analysis, addr, child->type == RZ_JSON_STRING ? child->str_value : NULL); break; case HINTS_FIELD_BITS: - rz_anal_hint_set_bits (anal, addr, child->type == RZ_JSON_INTEGER ? (int)child->num.s_value : 0); + rz_analysis_hint_set_bits (analysis, addr, child->type == RZ_JSON_INTEGER ? (int)child->num.s_value : 0); break; case HINTS_FIELD_IMMBASE: if (child->type != RZ_JSON_INTEGER) { break; } - rz_anal_hint_set_immbase (anal, addr, (int)child->num.s_value); + rz_analysis_hint_set_immbase (analysis, addr, (int)child->num.s_value); break; case HINTS_FIELD_JUMP: if (child->type != RZ_JSON_INTEGER) { break; } - rz_anal_hint_set_jump (anal, addr, child->num.u_value); + rz_analysis_hint_set_jump (analysis, addr, child->num.u_value); break; case HINTS_FIELD_FAIL: if (child->type != RZ_JSON_INTEGER) { break; } - rz_anal_hint_set_fail (anal, addr, child->num.u_value); + rz_analysis_hint_set_fail (analysis, addr, child->num.u_value); break; case HINTS_FIELD_STACKFRAME: if (child->type != RZ_JSON_INTEGER) { break; } - rz_anal_hint_set_stackframe (anal, addr, child->num.u_value); + rz_analysis_hint_set_stackframe (analysis, addr, child->num.u_value); break; case HINTS_FIELD_PTR: if (child->type != RZ_JSON_INTEGER) { break; } - rz_anal_hint_set_pointer (anal, addr, child->num.u_value); + rz_analysis_hint_set_pointer (analysis, addr, child->num.u_value); break; case HINTS_FIELD_NWORD: if (child->type != RZ_JSON_INTEGER) { break; } - rz_anal_hint_set_nword (anal, addr, (int)child->num.s_value); + rz_analysis_hint_set_nword (analysis, addr, (int)child->num.s_value); break; case HINTS_FIELD_RET: if (child->type != RZ_JSON_INTEGER) { break; } - rz_anal_hint_set_ret (anal, addr, child->num.u_value); + rz_analysis_hint_set_ret (analysis, addr, child->num.u_value); break; case HINTS_FIELD_NEW_BITS: if (child->type != RZ_JSON_INTEGER) { break; } - rz_anal_hint_set_newbits (anal, addr, (int)child->num.s_value); + rz_analysis_hint_set_newbits (analysis, addr, (int)child->num.s_value); break; case HINTS_FIELD_SIZE: if (child->type != RZ_JSON_INTEGER) { break; } - rz_anal_hint_set_size (anal, addr, child->num.u_value); + rz_analysis_hint_set_size (analysis, addr, child->num.u_value); break; case HINTS_FIELD_SYNTAX: if (child->type != RZ_JSON_STRING) { break; } - rz_anal_hint_set_syntax (anal, addr, child->str_value); + rz_analysis_hint_set_syntax (analysis, addr, child->str_value); break; case HINTS_FIELD_OPTYPE: if (child->type != RZ_JSON_INTEGER) { break; } - rz_anal_hint_set_type (anal, addr, (int)child->num.s_value); + rz_analysis_hint_set_type (analysis, addr, (int)child->num.s_value); break; case HINTS_FIELD_OPCODE: if (child->type != RZ_JSON_STRING) { break; } - rz_anal_hint_set_opcode (anal, addr, child->str_value); + rz_analysis_hint_set_opcode (analysis, addr, child->str_value); break; case HINTS_FIELD_TYPE_OFFSET: if (child->type != RZ_JSON_STRING) { break; } - rz_anal_hint_set_offset (anal, addr, child->str_value); + rz_analysis_hint_set_offset (analysis, addr, child->str_value); break; case HINTS_FIELD_ESIL: if (child->type != RZ_JSON_STRING) { break; } - rz_anal_hint_set_esil (anal, addr, child->str_value); + rz_analysis_hint_set_esil (analysis, addr, child->str_value); break; case HINTS_FIELD_HIGH: if (child->type != RZ_JSON_BOOLEAN || !child->num.u_value) { break; } - rz_anal_hint_set_high (anal, addr); + rz_analysis_hint_set_high (analysis, addr); break; case HINTS_FIELD_VAL: if (child->type != RZ_JSON_INTEGER) { break; } - rz_anal_hint_set_val (anal, addr, child->num.u_value); + rz_analysis_hint_set_val (analysis, addr, child->num.u_value); break; default: break; @@ -1899,9 +1899,9 @@ static bool hints_load_cb(void *user, const char *k, const char *v) { return true; } -RZ_API bool rz_serialize_anal_hints_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal, RZ_NULLABLE RzSerializeResultInfo *res) { +RZ_API bool rz_serialize_anal_hints_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis, RZ_NULLABLE RzSerializeResultInfo *res) { HintsLoadCtx ctx = { - .anal = anal, + .analysis = analysis, .parser = key_parser_new (), }; bool ret; @@ -1937,140 +1937,140 @@ beach: return ret; } -RZ_API void rz_serialize_anal_classes_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal) { - sdb_copy (anal->sdb_classes, db); +RZ_API void rz_serialize_anal_classes_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis) { + sdb_copy (analysis->sdb_classes, db); } -RZ_API bool rz_serialize_anal_classes_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal, RZ_NULLABLE RzSerializeResultInfo *res) { +RZ_API bool rz_serialize_anal_classes_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis, RZ_NULLABLE RzSerializeResultInfo *res) { if (!sdb_ns (db, "attrs", false)) { SERIALIZE_ERR ("missing attrs namespace"); return false; } - sdb_reset (anal->sdb_classes); - sdb_reset (anal->sdb_classes_attrs); - sdb_copy (db, anal->sdb_classes); + sdb_reset (analysis->sdb_classes); + sdb_reset (analysis->sdb_classes_attrs); + sdb_copy (db, analysis->sdb_classes); return true; } -RZ_API void rz_serialize_anal_types_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal) { - sdb_copy (anal->sdb_types, db); +RZ_API void rz_serialize_anal_types_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis) { + sdb_copy (analysis->sdb_types, db); } -RZ_API bool rz_serialize_anal_types_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal, RZ_NULLABLE RzSerializeResultInfo *res) { - sdb_reset (anal->sdb_types); - sdb_copy (db, anal->sdb_types); +RZ_API bool rz_serialize_anal_types_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis, RZ_NULLABLE RzSerializeResultInfo *res) { + sdb_reset (analysis->sdb_types); + sdb_copy (db, analysis->sdb_types); return true; } -RZ_API void rz_serialize_anal_sign_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal) { - sdb_copy (anal->sdb_zigns, db); - rz_serialize_spaces_save (sdb_ns (db, "spaces", true), &anal->zign_spaces); +RZ_API void rz_serialize_anal_sign_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis) { + sdb_copy (analysis->sdb_zigns, db); + rz_serialize_spaces_save (sdb_ns (db, "spaces", true), &analysis->zign_spaces); } -RZ_API bool rz_serialize_anal_sign_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal, RZ_NULLABLE RzSerializeResultInfo *res) { - sdb_reset (anal->sdb_zigns); - sdb_copy (db, anal->sdb_zigns); +RZ_API bool rz_serialize_anal_sign_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis, RZ_NULLABLE RzSerializeResultInfo *res) { + sdb_reset (analysis->sdb_zigns); + sdb_copy (db, analysis->sdb_zigns); Sdb *spaces_db = sdb_ns (db, "spaces", false); if (!spaces_db) { SERIALIZE_ERR ("missing spaces namespace"); return false; } - if (!rz_serialize_spaces_load (spaces_db, &anal->zign_spaces, false, res)) { + if (!rz_serialize_spaces_load (spaces_db, &analysis->zign_spaces, false, res)) { return false; } return true; } -RZ_API void rz_serialize_anal_imports_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal) { +RZ_API void rz_serialize_anal_imports_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis) { RzListIter *it; const char *imp; - rz_list_foreach (anal->imports, it, imp) { + rz_list_foreach (analysis->imports, it, imp) { sdb_set (db, imp, "i", 0); } } static bool import_load_cb(void *user, const char *k, const char *v) { - rz_anal_add_import (user, k); + rz_analysis_add_import (user, k); return true; } -RZ_API bool rz_serialize_anal_imports_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal, RZ_NULLABLE RzSerializeResultInfo *res) { - return sdb_foreach (db, import_load_cb, anal); +RZ_API bool rz_serialize_anal_imports_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis, RZ_NULLABLE RzSerializeResultInfo *res) { + return sdb_foreach (db, import_load_cb, analysis); } -RZ_API void rz_serialize_anal_pin_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal) { - sdb_copy (anal->sdb_pins, db); +RZ_API void rz_serialize_anal_pin_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis) { + sdb_copy (analysis->sdb_pins, db); } -RZ_API bool rz_serialize_anal_pin_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal, RZ_NULLABLE RzSerializeResultInfo *res) { - sdb_copy (db, anal->sdb_pins); +RZ_API bool rz_serialize_anal_pin_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis, RZ_NULLABLE RzSerializeResultInfo *res) { + sdb_copy (db, analysis->sdb_pins); return true; } -RZ_API void rz_serialize_anal_cc_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal) { - sdb_copy (anal->sdb_cc, db); +RZ_API void rz_serialize_anal_cc_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis) { + sdb_copy (analysis->sdb_cc, db); } -RZ_API bool rz_serialize_anal_cc_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal, RZ_NULLABLE RzSerializeResultInfo *res) { - sdb_copy (db, anal->sdb_cc); +RZ_API bool rz_serialize_anal_cc_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis, RZ_NULLABLE RzSerializeResultInfo *res) { + sdb_copy (db, analysis->sdb_cc); return true; } -RZ_API void rz_serialize_anal_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal) { - rz_serialize_anal_xrefs_save (sdb_ns (db, "xrefs", true), anal); - rz_serialize_anal_blocks_save (sdb_ns (db, "blocks", true), anal); - rz_serialize_anal_functions_save (sdb_ns (db, "functions", true), anal); - rz_serialize_anal_meta_save (sdb_ns (db, "meta", true), anal); - rz_serialize_anal_hints_save (sdb_ns (db, "hints", true), anal); - rz_serialize_anal_classes_save (sdb_ns (db, "classes", true), anal); - rz_serialize_anal_types_save (sdb_ns (db, "types", true), anal); - rz_serialize_anal_sign_save (sdb_ns (db, "zigns", true), anal); - rz_serialize_anal_imports_save (sdb_ns (db, "imports", true), anal); - rz_serialize_anal_pin_save (sdb_ns (db, "pins", true), anal); - rz_serialize_anal_cc_save (sdb_ns (db, "cc", true), anal); +RZ_API void rz_serialize_anal_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis) { + rz_serialize_anal_xrefs_save (sdb_ns (db, "xrefs", true), analysis); + rz_serialize_anal_blocks_save (sdb_ns (db, "blocks", true), analysis); + rz_serialize_anal_functions_save (sdb_ns (db, "functions", true), analysis); + rz_serialize_anal_meta_save (sdb_ns (db, "meta", true), analysis); + rz_serialize_anal_hints_save (sdb_ns (db, "hints", true), analysis); + rz_serialize_anal_classes_save (sdb_ns (db, "classes", true), analysis); + rz_serialize_anal_types_save (sdb_ns (db, "types", true), analysis); + rz_serialize_anal_sign_save (sdb_ns (db, "zigns", true), analysis); + rz_serialize_anal_imports_save (sdb_ns (db, "imports", true), analysis); + rz_serialize_anal_pin_save (sdb_ns (db, "pins", true), analysis); + rz_serialize_anal_cc_save (sdb_ns (db, "cc", true), analysis); } -RZ_API bool rz_serialize_anal_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal, RZ_NULLABLE RzSerializeResultInfo *res) { +RZ_API bool rz_serialize_anal_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis, RZ_NULLABLE RzSerializeResultInfo *res) { bool ret = false; RzSerializeAnalDiffParser diff_parser = rz_serialize_anal_diff_parser_new (); if (!diff_parser) { goto beach; } - rz_anal_purge (anal); + rz_analysis_purge (analysis); Sdb *subdb; #define SUB(ns, call) SUB_DO(ns, call, goto beach;) - SUB ("xrefs", rz_serialize_anal_xrefs_load (subdb, anal, res)); + SUB ("xrefs", rz_serialize_anal_xrefs_load (subdb, analysis, res)); - SUB ("blocks", rz_serialize_anal_blocks_load (subdb, anal, diff_parser, res)); + SUB ("blocks", rz_serialize_anal_blocks_load (subdb, analysis, diff_parser, res)); // All bbs have ref=1 now - SUB ("functions", rz_serialize_anal_functions_load (subdb, anal, diff_parser, res)); + SUB ("functions", rz_serialize_anal_functions_load (subdb, analysis, diff_parser, res)); // BB's refs have increased if they are part of a function. // We must subtract from each to hold our invariant again. // If any block has ref=0 then, it should be deleted. But we can't do this while // iterating the RBTree, otherwise this will become a segfault cacophony, so we cache them. RzPVector orphaned_bbs; - rz_pvector_init (&orphaned_bbs, (RzPVectorFree)rz_anal_block_unref); + rz_pvector_init (&orphaned_bbs, (RzPVectorFree)rz_analysis_block_unref); RBIter iter; - RzAnalBlock *block; - rz_rbtree_foreach (anal->bb_tree, iter, block, RzAnalBlock, _rb) { + RzAnalysisBlock *block; + rz_rbtree_foreach (analysis->bb_tree, iter, block, RzAnalysisBlock, _rb) { if (block->ref <= 1) { rz_pvector_push (&orphaned_bbs, block); continue; } - rz_anal_block_unref (block); + rz_analysis_block_unref (block); } rz_pvector_clear (&orphaned_bbs); // unrefs all - SUB ("meta", rz_serialize_anal_meta_load (subdb, anal, res)); - SUB ("hints", rz_serialize_anal_hints_load (subdb, anal, res)); - SUB ("classes", rz_serialize_anal_classes_load (subdb, anal, res)); - SUB ("types", rz_serialize_anal_types_load (subdb, anal, res)); - SUB ("zigns", rz_serialize_anal_sign_load (subdb, anal, res)); - SUB ("imports", rz_serialize_anal_imports_load (subdb, anal, res)); - SUB ("pins", rz_serialize_anal_pin_load (subdb, anal, res)); - SUB ("cc", rz_serialize_anal_cc_load (subdb, anal, res)); + SUB ("meta", rz_serialize_anal_meta_load (subdb, analysis, res)); + SUB ("hints", rz_serialize_anal_hints_load (subdb, analysis, res)); + SUB ("classes", rz_serialize_anal_classes_load (subdb, analysis, res)); + SUB ("types", rz_serialize_anal_types_load (subdb, analysis, res)); + SUB ("zigns", rz_serialize_anal_sign_load (subdb, analysis, res)); + SUB ("imports", rz_serialize_anal_imports_load (subdb, analysis, res)); + SUB ("pins", rz_serialize_anal_pin_load (subdb, analysis, res)); + SUB ("cc", rz_serialize_anal_cc_load (subdb, analysis, res)); ret = true; beach: diff --git a/librz/anal/sign.c b/librz/analysis/sign.c similarity index 88% rename from librz/anal/sign.c rename to librz/analysis/sign.c index f31ed8561e..9604a28583 100644 --- a/librz/anal/sign.c +++ b/librz/analysis/sign.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: LGPL-3.0-only -#include +#include #include #include #include @@ -32,7 +32,7 @@ const char *getRealRef(RzCore *core, ut64 off) { return NULL; } -RZ_API RzList *rz_sign_fcn_vars(RzAnal *a, RzAnalFunction *fcn) { +RZ_API RzList *rz_sign_fcn_vars(RzAnalysis *a, RzAnalysisFunction *fcn) { rz_return_val_if_fail (a && fcn, NULL); RzCore *core = a->coreb.core; @@ -42,14 +42,14 @@ RZ_API RzList *rz_sign_fcn_vars(RzAnal *a, RzAnalFunction *fcn) { } RzListIter *iter; - RzAnalVar *var; + RzAnalysisVar *var; RzList *ret = rz_list_newf ((RzListFree) free); if (!ret) { return NULL; } - RzList *reg_vars = rz_anal_var_list (core->anal, fcn, RZ_ANAL_VAR_KIND_REG); - RzList *spv_vars = rz_anal_var_list (core->anal, fcn, RZ_ANAL_VAR_KIND_SPV); - RzList *bpv_vars = rz_anal_var_list (core->anal, fcn, RZ_ANAL_VAR_KIND_BPV); + RzList *reg_vars = rz_analysis_var_list (core->analysis, fcn, RZ_ANAL_VAR_KIND_REG); + RzList *spv_vars = rz_analysis_var_list (core->analysis, fcn, RZ_ANAL_VAR_KIND_SPV); + RzList *bpv_vars = rz_analysis_var_list (core->analysis, fcn, RZ_ANAL_VAR_KIND_BPV); rz_list_foreach (bpv_vars, iter, var) { rz_list_append (ret, rz_str_newf ("b%d", var->delta)); } @@ -65,7 +65,7 @@ RZ_API RzList *rz_sign_fcn_vars(RzAnal *a, RzAnalFunction *fcn) { return ret; } -RZ_API RzList *rz_sign_fcn_types(RzAnal *a, RzAnalFunction *fcn) { +RZ_API RzList *rz_sign_fcn_types(RzAnalysis *a, RzAnalysisFunction *fcn) { // From anal/types/*: // Get key-value types from sdb matching "func.%s", fcn->name @@ -111,9 +111,9 @@ RZ_API RzList *rz_sign_fcn_types(RzAnal *a, RzAnalFunction *fcn) { return ret; } -RZ_API RzList *rz_sign_fcn_xrefs(RzAnal *a, RzAnalFunction *fcn) { +RZ_API RzList *rz_sign_fcn_xrefs(RzAnalysis *a, RzAnalysisFunction *fcn) { RzListIter *iter = NULL; - RzAnalRef *refi = NULL; + RzAnalysisRef *refi = NULL; rz_return_val_if_fail (a && fcn, NULL); @@ -124,7 +124,7 @@ RZ_API RzList *rz_sign_fcn_xrefs(RzAnal *a, RzAnalFunction *fcn) { } RzList *ret = rz_list_newf ((RzListFree) free); - RzList *xrefs = rz_anal_function_get_xrefs (fcn); + RzList *xrefs = rz_analysis_function_get_xrefs (fcn); rz_list_foreach (xrefs, iter, refi) { if (refi->type == RZ_ANAL_REF_TYPE_CODE || refi->type == RZ_ANAL_REF_TYPE_CALL) { const char *flag = getRealRef (core, refi->addr); @@ -137,9 +137,9 @@ RZ_API RzList *rz_sign_fcn_xrefs(RzAnal *a, RzAnalFunction *fcn) { return ret; } -RZ_API RzList *rz_sign_fcn_refs(RzAnal *a, RzAnalFunction *fcn) { +RZ_API RzList *rz_sign_fcn_refs(RzAnalysis *a, RzAnalysisFunction *fcn) { RzListIter *iter = NULL; - RzAnalRef *refi = NULL; + RzAnalysisRef *refi = NULL; rz_return_val_if_fail (a && fcn, NULL); @@ -150,7 +150,7 @@ RZ_API RzList *rz_sign_fcn_refs(RzAnal *a, RzAnalFunction *fcn) { } RzList *ret = rz_list_newf ((RzListFree) free); - RzList *refs = rz_anal_function_get_refs (fcn); + RzList *refs = rz_analysis_function_get_refs (fcn); rz_list_foreach (refs, iter, refi) { if (refi->type == RZ_ANAL_REF_TYPE_CODE || refi->type == RZ_ANAL_REF_TYPE_CALL) { const char *flag = getRealRef (core, refi->addr); @@ -163,7 +163,7 @@ RZ_API RzList *rz_sign_fcn_refs(RzAnal *a, RzAnalFunction *fcn) { return ret; } -static RzList *zign_types_to_list(RzAnal *a, const char *types) { +static RzList *zign_types_to_list(RzAnalysis *a, const char *types) { RzList *ret = rz_list_newf ((RzListFree)free); if (!ret) { return NULL; @@ -208,7 +208,7 @@ static RzList *do_reflike_sig(const char *token) { success = false; \ goto out; \ } -RZ_API bool rz_sign_deserialize(RzAnal *a, RzSignItem *it, const char *k, const char *v) { +RZ_API bool rz_sign_deserialize(RzAnalysis *a, RzSignItem *it, const char *k, const char *v) { rz_return_val_if_fail (a && it && k && v, false); bool success = true; @@ -379,15 +379,15 @@ out: } #undef DBL_VAL_FAIL -static void serializeKey(RzAnal *a, const RzSpace *space, const char* name, char *k) { +static void serializeKey(RzAnalysis *a, const RzSpace *space, const char* name, char *k) { snprintf (k, RZ_SIGN_KEY_MAXSZ, "zign|%s|%s", space? space->name: "*", name); } -static void serializeKeySpaceStr(RzAnal *a, const char *space, const char* name, char *k) { +static void serializeKeySpaceStr(RzAnalysis *a, const char *space, const char* name, char *k) { snprintf (k, RZ_SIGN_KEY_MAXSZ, "zign|%s|%s", space, name); } -static void serialize(RzAnal *a, RzSignItem *it, char *k, char *v) { +static void serialize(RzAnalysis *a, RzSignItem *it, char *k, char *v) { RzListIter *iter = NULL; char *hexbytes = NULL, *hexmask = NULL, *hexgraph = NULL; char *refs = NULL, *xrefs = NULL, *ref = NULL, *var, *vars = NULL; @@ -510,7 +510,7 @@ static void serialize(RzAnal *a, RzSignItem *it, char *k, char *v) { } } -static RzList *deserialize_sign_space(RzAnal *a, RzSpace *space) { +static RzList *deserialize_sign_space(RzAnalysis *a, RzSpace *space) { rz_return_val_if_fail (a && space, NULL); char k[RZ_SIGN_KEY_MAXSZ]; @@ -631,7 +631,7 @@ static void mergeItem(RzSignItem *dst, RzSignItem *src) { } } -RZ_API RzSignItem *rz_sign_get_item(RzAnal *a, const char *name) { +RZ_API RzSignItem *rz_sign_get_item(RzAnalysis *a, const char *name) { char k[RZ_SIGN_KEY_MAXSZ]; serializeKey (a, rz_spaces_current (&a->zign_spaces), name, k); @@ -650,7 +650,7 @@ RZ_API RzSignItem *rz_sign_get_item(RzAnal *a, const char *name) { return it; } -RZ_API bool rz_sign_add_item(RzAnal *a, RzSignItem *it) { +RZ_API bool rz_sign_add_item(RzAnalysis *a, RzSignItem *it) { char key[RZ_SIGN_KEY_MAXSZ], val[RZ_SIGN_VAL_MAXSZ]; const char *curval = NULL; bool retval = true; @@ -678,7 +678,7 @@ out: return retval; } -static bool addHash(RzAnal *a, const char *name, int type, const char *val) { +static bool addHash(RzAnalysis *a, const char *name, int type, const char *val) { RzSignItem *it = rz_sign_item_new (); if (!it) { rz_sign_item_free (it); @@ -708,7 +708,7 @@ static bool addHash(RzAnal *a, const char *name, int type, const char *val) { return retval; } -static bool addBBHash(RzAnal *a, RzAnalFunction *fcn, const char *name) { +static bool addBBHash(RzAnalysis *a, RzAnalysisFunction *fcn, const char *name) { bool retval = false; RzSignItem *it = rz_sign_item_new (); if (!it) { @@ -728,7 +728,7 @@ beach: return retval; } -static bool addBytes(RzAnal *a, const char *name, ut64 size, const ut8 *bytes, const ut8 *mask) { +static bool addBytes(RzAnalysis *a, const char *name, ut64 size, const ut8 *bytes, const ut8 *mask) { bool retval = true; if (rz_mem_is_zero (mask, size)) { @@ -774,7 +774,7 @@ fail: return false; } -RZ_API bool rz_sign_add_hash(RzAnal *a, const char *name, int type, const char *val, int len) { +RZ_API bool rz_sign_add_hash(RzAnalysis *a, const char *name, int type, const char *val, int len) { rz_return_val_if_fail (a && name && type && val && len > 0, false); if (type != RZ_SIGN_BBHASH) { eprintf ("error: hash type unknown"); @@ -788,20 +788,20 @@ RZ_API bool rz_sign_add_hash(RzAnal *a, const char *name, int type, const char * return addHash (a, name, type, val); } -RZ_API bool rz_sign_add_bb_hash(RzAnal *a, RzAnalFunction *fcn, const char *name) { +RZ_API bool rz_sign_add_bb_hash(RzAnalysis *a, RzAnalysisFunction *fcn, const char *name) { rz_return_val_if_fail (a && fcn && name, false); return addBBHash (a, fcn, name); } -RZ_API bool rz_sign_add_bytes(RzAnal *a, const char *name, ut64 size, const ut8 *bytes, const ut8 *mask) { +RZ_API bool rz_sign_add_bytes(RzAnalysis *a, const char *name, ut64 size, const ut8 *bytes, const ut8 *mask) { rz_return_val_if_fail (a && name && size > 0 && bytes && mask, false); return addBytes (a, name, size, bytes, mask); } -RZ_API bool rz_sign_add_anal(RzAnal *a, const char *name, ut64 size, const ut8 *bytes, ut64 at) { +RZ_API bool rz_sign_add_anal(RzAnalysis *a, const char *name, ut64 size, const ut8 *bytes, ut64 at) { bool retval = false; rz_return_val_if_fail (a && name && size > 0 && bytes, false); - ut8 *mask = rz_anal_mask (a, size, bytes, at); + ut8 *mask = rz_analysis_mask (a, size, bytes, at); if (mask) { retval = addBytes (a, name, size, bytes, mask); free (mask); @@ -809,21 +809,21 @@ RZ_API bool rz_sign_add_anal(RzAnal *a, const char *name, ut64 size, const ut8 * return retval; } -static RzSignGraph *rz_sign_fcn_graph(RzAnalFunction *fcn) { +static RzSignGraph *rz_sign_fcn_graph(RzAnalysisFunction *fcn) { rz_return_val_if_fail (fcn, false); RzSignGraph *graph = RZ_NEW0 (RzSignGraph); if (graph) { - graph->cc = rz_anal_function_complexity (fcn), + graph->cc = rz_analysis_function_complexity (fcn), graph->nbbs = rz_list_length (fcn->bbs); - graph->edges = rz_anal_function_count_edges (fcn, &graph->ebbs); - graph->bbsum = rz_anal_function_realsize (fcn); + graph->edges = rz_analysis_function_count_edges (fcn, &graph->ebbs); + graph->bbsum = rz_analysis_function_realsize (fcn); } return graph; } static int bb_sort_by_addr(const void *x, const void *y) { - RzAnalBlock *a = (RzAnalBlock *)x; - RzAnalBlock *b = (RzAnalBlock *)y; + RzAnalysisBlock *a = (RzAnalysisBlock *)x; + RzAnalysisBlock *b = (RzAnalysisBlock *)y; if (a->addr > b->addr) { return 1; } @@ -833,7 +833,7 @@ static int bb_sort_by_addr(const void *x, const void *y) { return 0; } -static RzSignBytes *rz_sign_fcn_bytes(RzAnal *a, RzAnalFunction *fcn) { +static RzSignBytes *rz_sign_fcn_bytes(RzAnalysis *a, RzAnalysisFunction *fcn) { rz_return_val_if_fail (a && fcn && fcn->bbs && fcn->bbs->head, false); // get size @@ -841,7 +841,7 @@ static RzSignBytes *rz_sign_fcn_bytes(RzAnal *a, RzAnalFunction *fcn) { int maxsz = a->coreb.cfggeti (core, "zign.maxsz"); rz_list_sort (fcn->bbs, &bb_sort_by_addr); ut64 ea = fcn->addr; - RzAnalBlock *bb = (RzAnalBlock *)fcn->bbs->tail->data; + RzAnalysisBlock *bb = (RzAnalysisBlock *)fcn->bbs->tail->data; int size = RZ_MIN (bb->addr + bb->size - ea, maxsz); // alloc space for signature @@ -880,7 +880,7 @@ static RzSignBytes *rz_sign_fcn_bytes(RzAnal *a, RzAnalFunction *fcn) { } // get mask for block - if (!(tmpmask = rz_anal_mask (a, rsize, sig->bytes + delta, ea))) { + if (!(tmpmask = rz_analysis_mask (a, rsize, sig->bytes + delta, ea))) { goto bytes_failed; } memcpy (sig->mask + delta, tmpmask, rsize); @@ -894,7 +894,7 @@ bytes_failed: return NULL; } -static RzSignHash *rz_sign_fcn_bbhash(RzAnal *a, RzAnalFunction *fcn) { +static RzSignHash *rz_sign_fcn_bbhash(RzAnalysis *a, RzAnalysisFunction *fcn) { rz_return_val_if_fail (a && fcn, NULL); RzSignHash *hash = RZ_NEW0 (RzSignHash); if (!hash) { @@ -910,7 +910,7 @@ static RzSignHash *rz_sign_fcn_bbhash(RzAnal *a, RzAnalFunction *fcn) { return hash; } -RZ_API bool rz_sign_addto_item(RzAnal *a, RzSignItem *it, RzAnalFunction *fcn, RzSignType type) { +RZ_API bool rz_sign_addto_item(RzAnalysis *a, RzSignItem *it, RzAnalysisFunction *fcn, RzSignType type) { rz_return_val_if_fail (a && it && fcn, false); switch (type) { case RZ_SIGN_GRAPH: @@ -945,7 +945,7 @@ RZ_API bool rz_sign_addto_item(RzAnal *a, RzSignItem *it, RzAnalFunction *fcn, R return false; } -RZ_API bool rz_sign_add_graph(RzAnal *a, const char *name, RzSignGraph graph) { +RZ_API bool rz_sign_add_graph(RzAnalysis *a, const char *name, RzSignGraph graph) { rz_return_val_if_fail (a && !RZ_STR_ISEMPTY (name), false); bool retval = true; RzSignItem *it = rz_sign_item_new (); @@ -971,7 +971,7 @@ RZ_API bool rz_sign_add_graph(RzAnal *a, const char *name, RzSignGraph graph) { return retval; } -RZ_API bool rz_sign_add_comment(RzAnal *a, const char *name, const char *comment) { +RZ_API bool rz_sign_add_comment(RzAnalysis *a, const char *name, const char *comment) { rz_return_val_if_fail (a && name && comment, false); RzSignItem *it = rz_sign_item_new (); @@ -986,7 +986,7 @@ RZ_API bool rz_sign_add_comment(RzAnal *a, const char *name, const char *comment return retval; } -RZ_API bool rz_sign_add_name(RzAnal *a, const char *name, const char *realname) { +RZ_API bool rz_sign_add_name(RzAnalysis *a, const char *name, const char *realname) { rz_return_val_if_fail (a && name && realname, false); RzSignItem *it = rz_sign_item_new (); if (it) { @@ -1000,7 +1000,7 @@ RZ_API bool rz_sign_add_name(RzAnal *a, const char *name, const char *realname) return false; } -RZ_API bool rz_sign_add_addr(RzAnal *a, const char *name, ut64 addr) { +RZ_API bool rz_sign_add_addr(RzAnalysis *a, const char *name, ut64 addr) { rz_return_val_if_fail (a && name && addr != UT64_MAX, false); RzSignItem *it = rz_sign_item_new (); @@ -1018,7 +1018,7 @@ RZ_API bool rz_sign_add_addr(RzAnal *a, const char *name, ut64 addr) { return retval; } -RZ_API bool rz_sign_add_vars(RzAnal *a, const char *name, RzList *vars) { +RZ_API bool rz_sign_add_vars(RzAnalysis *a, const char *name, RzList *vars) { rz_return_val_if_fail (a && name && vars, false); RzListIter *iter; @@ -1044,7 +1044,7 @@ RZ_API bool rz_sign_add_vars(RzAnal *a, const char *name, RzList *vars) { return retval; } -RZ_API bool rz_sign_add_types(RzAnal *a, const char *name, RzList *types) { +RZ_API bool rz_sign_add_types(RzAnalysis *a, const char *name, RzList *types) { rz_return_val_if_fail (a && name && types, false); RzListIter *iter; @@ -1070,7 +1070,7 @@ RZ_API bool rz_sign_add_types(RzAnal *a, const char *name, RzList *types) { return retval; } -RZ_API bool rz_sign_add_refs(RzAnal *a, const char *name, RzList *refs) { +RZ_API bool rz_sign_add_refs(RzAnalysis *a, const char *name, RzList *refs) { rz_return_val_if_fail (a && name && refs, false); char *ref; @@ -1095,7 +1095,7 @@ RZ_API bool rz_sign_add_refs(RzAnal *a, const char *name, RzList *refs) { return retval; } -RZ_API bool rz_sign_add_xrefs(RzAnal *a, const char *name, RzList *xrefs) { +RZ_API bool rz_sign_add_xrefs(RzAnalysis *a, const char *name, RzList *xrefs) { rz_return_val_if_fail (a && name && xrefs, false); RzListIter *iter = NULL; @@ -1121,19 +1121,19 @@ RZ_API bool rz_sign_add_xrefs(RzAnal *a, const char *name, RzList *xrefs) { } struct ctxDeleteCB { - RzAnal *anal; + RzAnalysis *analysis; char buf[RZ_SIGN_KEY_MAXSZ]; }; static bool deleteBySpaceCB(void *user, const char *k, const char *v) { struct ctxDeleteCB *ctx = (struct ctxDeleteCB *) user; if (!strncmp (k, ctx->buf, strlen (ctx->buf))) { - sdb_remove (ctx->anal->sdb_zigns, k, 0); + sdb_remove (ctx->analysis->sdb_zigns, k, 0); } return true; } -RZ_API bool rz_sign_delete(RzAnal *a, const char *name) { +RZ_API bool rz_sign_delete(RzAnalysis *a, const char *name) { struct ctxDeleteCB ctx = {0}; char k[RZ_SIGN_KEY_MAXSZ]; @@ -1146,7 +1146,7 @@ RZ_API bool rz_sign_delete(RzAnal *a, const char *name) { sdb_reset (a->sdb_zigns); return true; } - ctx.anal = a; + ctx.analysis = a; serializeKey (a, rz_spaces_current (&a->zign_spaces), "", ctx.buf); sdb_foreach (a->sdb_zigns, deleteBySpaceCB, &ctx); return true; @@ -1358,7 +1358,7 @@ RZ_API void rz_sign_close_match_free(RzSignCloseMatch *match) { } } -RZ_API RzList *rz_sign_find_closest_sig(RzAnal *a, RzSignItem *it, int count, double score_threshold) { +RZ_API RzList *rz_sign_find_closest_sig(RzAnalysis *a, RzSignItem *it, int count, double score_threshold) { rz_return_val_if_fail (a && it && count > 0 && score_threshold >= 0 && score_threshold <= 1, NULL); // need at least one acceptable signature type @@ -1391,7 +1391,7 @@ RZ_API RzList *rz_sign_find_closest_sig(RzAnal *a, RzSignItem *it, int count, do return output; } -RZ_API RzList *rz_sign_find_closest_fcn(RzAnal *a, RzSignItem *it, int count, double score_threshold) { +RZ_API RzList *rz_sign_find_closest_fcn(RzAnalysis *a, RzSignItem *it, int count, double score_threshold) { rz_return_val_if_fail (a && it && count > 0 && score_threshold >= 0 && score_threshold <= 1, NULL); rz_return_val_if_fail (it->bytes || it->graph, NULL); @@ -1412,7 +1412,7 @@ RZ_API RzList *rz_sign_find_closest_fcn(RzAnal *a, RzSignItem *it, int count, do data.bytes_combined = NULL; } - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; RzListIter *iter; rz_list_foreach (a->fcns, iter, fcn) { // turn function into signature item @@ -1437,7 +1437,7 @@ RZ_API RzList *rz_sign_find_closest_fcn(RzAnal *a, RzSignItem *it, int count, do return output; } -RZ_API bool rz_sign_diff(RzAnal *a, RzSignOptions *options, const char *other_space_name) { +RZ_API bool rz_sign_diff(RzAnalysis *a, RzSignOptions *options, const char *other_space_name) { rz_return_val_if_fail (a && other_space_name, false); RzSpace *current_space = rz_spaces_current (&a->zign_spaces); @@ -1495,7 +1495,7 @@ RZ_API bool rz_sign_diff(RzAnal *a, RzSignOptions *options, const char *other_sp return true; } -RZ_API bool rz_sign_diff_by_name(RzAnal *a, RzSignOptions *options, const char *other_space_name, bool not_matching) { +RZ_API bool rz_sign_diff_by_name(RzAnalysis *a, RzSignOptions *options, const char *other_space_name, bool not_matching) { rz_return_val_if_fail (a && other_space_name, false); RzSpace *current_space = rz_spaces_current (&a->zign_spaces); @@ -1554,18 +1554,18 @@ RZ_API bool rz_sign_diff_by_name(RzAnal *a, RzSignOptions *options, const char * } struct ctxListCB { - RzAnal *anal; + RzAnalysis *analysis; int idx; int format; PJ *pj; }; struct ctxGetListCB { - RzAnal *anal; + RzAnalysis *analysis; RzList *list; }; -static void listBytes(RzAnal *a, RzSignItem *it, PJ *pj, int format) { +static void listBytes(RzAnalysis *a, RzSignItem *it, PJ *pj, int format) { RzSignBytes *bytes = it->bytes; if (!bytes->bytes) { @@ -1607,7 +1607,7 @@ static void listBytes(RzAnal *a, RzSignItem *it, PJ *pj, int format) { free (strmask); } -static void listGraph(RzAnal *a, RzSignItem *it, PJ *pj, int format) { +static void listGraph(RzAnalysis *a, RzSignItem *it, PJ *pj, int format) { RzSignGraph *graph = it->graph; if (format == 'q') { @@ -1630,7 +1630,7 @@ static void listGraph(RzAnal *a, RzSignItem *it, PJ *pj, int format) { } } -static void listComment(RzAnal *a, RzSignItem *it, PJ *pj, int format) { +static void listComment(RzAnalysis *a, RzSignItem *it, PJ *pj, int format) { if (it->comment) { if (format == 'q') { // a->cb_printf (" addr(0x%08"PFMT64x")", it->addr); @@ -1645,7 +1645,7 @@ static void listComment(RzAnal *a, RzSignItem *it, PJ *pj, int format) { } } -static void listRealname(RzAnal *a, RzSignItem *it, PJ *pj, int format) { +static void listRealname(RzAnalysis *a, RzSignItem *it, PJ *pj, int format) { if (it->realname) { if (format == 'q') { // a->cb_printf (" addr(0x%08"PFMT64x")", it->addr); @@ -1660,7 +1660,7 @@ static void listRealname(RzAnal *a, RzSignItem *it, PJ *pj, int format) { } } -static void listOffset(RzAnal *a, RzSignItem *it, PJ *pj, int format) { +static void listOffset(RzAnalysis *a, RzSignItem *it, PJ *pj, int format) { if (format == 'q') { // a->cb_printf (" addr(0x%08"PFMT64x")", it->addr); } else if (format == '*') { @@ -1672,7 +1672,7 @@ static void listOffset(RzAnal *a, RzSignItem *it, PJ *pj, int format) { } } -static void listVars(RzAnal *a, RzSignItem *it, PJ *pj, int format) { +static void listVars(RzAnalysis *a, RzSignItem *it, PJ *pj, int format) { RzListIter *iter = NULL; char *var = NULL; int i = 0; @@ -1711,7 +1711,7 @@ static void listVars(RzAnal *a, RzSignItem *it, PJ *pj, int format) { } } -static void print_list_type_header(RzAnal *a, RzSignItem *it, PJ *pj, int format) { +static void print_list_type_header(RzAnalysis *a, RzSignItem *it, PJ *pj, int format) { if (format == '*') { a->cb_printf ("za %s t ", it->name); } else if (format == 'q') { @@ -1724,7 +1724,7 @@ static void print_list_type_header(RzAnal *a, RzSignItem *it, PJ *pj, int format } } -static void print_function_args_json(RzAnal *a, PJ *pj, char *arg_type) { +static void print_function_args_json(RzAnalysis *a, PJ *pj, char *arg_type) { char *arg_name = strchr (arg_type, ','); if (arg_name == NULL) { @@ -1743,7 +1743,7 @@ static void print_function_args_json(RzAnal *a, PJ *pj, char *arg_type) { pj_end (pj); } -static void print_type_json(RzAnal *a, char *type, PJ *pj, size_t pos) { +static void print_type_json(RzAnalysis *a, char *type, PJ *pj, size_t pos) { if (pos == 0) { return; } @@ -1760,7 +1760,7 @@ static void print_type_json(RzAnal *a, char *type, PJ *pj, size_t pos) { print_function_args_json (a, pj, str_type); } -static void print_list_separator(RzAnal *a, RzSignItem *it, PJ *pj, int format, int pos) { +static void print_list_separator(RzAnalysis *a, RzSignItem *it, PJ *pj, int format, int pos) { if (pos == 0 || format == 'j') { return; } @@ -1771,7 +1771,7 @@ static void print_list_separator(RzAnal *a, RzSignItem *it, PJ *pj, int format, } } -static void print_list_type_body(RzAnal *a, RzSignItem *it, PJ *pj, int format) { +static void print_list_type_body(RzAnalysis *a, RzSignItem *it, PJ *pj, int format) { int i = 0; char *type = NULL; RzListIter *iter = NULL; @@ -1790,7 +1790,7 @@ static void print_list_type_body(RzAnal *a, RzSignItem *it, PJ *pj, int format) } } -static void listTypes(RzAnal *a, RzSignItem *it, PJ *pj, int format) { +static void listTypes(RzAnalysis *a, RzSignItem *it, PJ *pj, int format) { print_list_type_header (a, it, pj, format); print_list_type_body (a, it, pj, format); @@ -1801,7 +1801,7 @@ static void listTypes(RzAnal *a, RzSignItem *it, PJ *pj, int format) { } } -static void listXRefs(RzAnal *a, RzSignItem *it, PJ *pj, int format) { +static void listXRefs(RzAnalysis *a, RzSignItem *it, PJ *pj, int format) { RzListIter *iter = NULL; char *ref = NULL; int i = 0; @@ -1842,7 +1842,7 @@ static void listXRefs(RzAnal *a, RzSignItem *it, PJ *pj, int format) { } } -static void listRefs(RzAnal *a, RzSignItem *it, PJ *pj, int format) { +static void listRefs(RzAnalysis *a, RzSignItem *it, PJ *pj, int format) { RzListIter *iter = NULL; char *ref = NULL; int i = 0; @@ -1883,7 +1883,7 @@ static void listRefs(RzAnal *a, RzSignItem *it, PJ *pj, int format) { } } -static void listHash(RzAnal *a, RzSignItem *it, PJ *pj, int format) { +static void listHash(RzAnalysis *a, RzSignItem *it, PJ *pj, int format) { if (!it->hash) { return; } @@ -1916,7 +1916,7 @@ static void listHash(RzAnal *a, RzSignItem *it, PJ *pj, int format) { static bool listCB(void *user, const char *k, const char *v) { struct ctxListCB *ctx = (struct ctxListCB *)user; RzSignItem *it = rz_sign_item_new (); - RzAnal *a = ctx->anal; + RzAnalysis *a = ctx->analysis; if (!rz_sign_deserialize (a, it, k, v)) { eprintf ("error: cannot deserialize zign\n"); @@ -2035,7 +2035,7 @@ out: return true; } -RZ_API void rz_sign_list(RzAnal *a, int format) { +RZ_API void rz_sign_list(RzAnalysis *a, int format) { rz_return_if_fail (a); PJ *pj = NULL; @@ -2060,7 +2060,7 @@ static bool listGetCB(void *user, const char *key, const char *val) { if (!item) { return false; } - if (!rz_sign_deserialize (ctx->anal, item, key, val)) { + if (!rz_sign_deserialize (ctx->analysis, item, key, val)) { rz_sign_item_free (item); return false; } @@ -2068,7 +2068,7 @@ static bool listGetCB(void *user, const char *key, const char *val) { return true; } -RZ_API RzList *rz_sign_get_list(RzAnal *a) { +RZ_API RzList *rz_sign_get_list(RzAnalysis *a) { rz_return_val_if_fail (a, NULL); struct ctxGetListCB ctx = { a, rz_list_newf ((RzListFree)rz_sign_item_free) }; sdb_foreach (a->sdb_zigns, listGetCB, &ctx); @@ -2076,13 +2076,13 @@ RZ_API RzList *rz_sign_get_list(RzAnal *a) { } static int cmpaddr(const void *_a, const void *_b) { - const RzAnalBlock *a = _a, *b = _b; + const RzAnalysisBlock *a = _a, *b = _b; return (a->addr - b->addr); } -RZ_API char *rz_sign_calc_bbhash(RzAnal *a, RzAnalFunction *fcn) { +RZ_API char *rz_sign_calc_bbhash(RzAnalysis *a, RzAnalysisFunction *fcn) { RzListIter *iter = NULL; - RzAnalBlock *bbi = NULL; + RzAnalysisBlock *bbi = NULL; char *digest_hex = NULL; RzHash *ctx = rz_hash_new (true, RZ_ZIGN_HASH); if (!ctx) { @@ -2112,7 +2112,7 @@ beach: } struct ctxCountForCB { - RzAnal *anal; + RzAnalysis *analysis; const RzSpace *space; int count; }; @@ -2121,7 +2121,7 @@ static bool countForCB(void *user, const char *k, const char *v) { struct ctxCountForCB *ctx = (struct ctxCountForCB *) user; RzSignItem *it = rz_sign_item_new (); - if (rz_sign_deserialize (ctx->anal, it, k, v)) { + if (rz_sign_deserialize (ctx->analysis, it, k, v)) { if (it->space == ctx->space) { ctx->count++; } @@ -2133,7 +2133,7 @@ static bool countForCB(void *user, const char *k, const char *v) { return true; } -RZ_API int rz_sign_space_count_for(RzAnal *a, const RzSpace *space) { +RZ_API int rz_sign_space_count_for(RzAnalysis *a, const RzSpace *space) { struct ctxCountForCB ctx = { a, space, 0 }; rz_return_val_if_fail (a, 0); sdb_foreach (a->sdb_zigns, countForCB, &ctx); @@ -2141,7 +2141,7 @@ RZ_API int rz_sign_space_count_for(RzAnal *a, const RzSpace *space) { } struct ctxUnsetForCB { - RzAnal *anal; + RzAnalysis *analysis; const RzSpace *space; }; @@ -2149,11 +2149,11 @@ static bool unsetForCB(void *user, const char *k, const char *v) { struct ctxUnsetForCB *ctx = (struct ctxUnsetForCB *) user; char nk[RZ_SIGN_KEY_MAXSZ], nv[RZ_SIGN_VAL_MAXSZ]; RzSignItem *it = rz_sign_item_new (); - Sdb *db = ctx->anal->sdb_zigns; - if (rz_sign_deserialize (ctx->anal, it, k, v)) { + Sdb *db = ctx->analysis->sdb_zigns; + if (rz_sign_deserialize (ctx->analysis, it, k, v)) { if (it->space && it->space == ctx->space) { it->space = NULL; - serialize (ctx->anal, it, nk, nv); + serialize (ctx->analysis, it, nk, nv); sdb_remove (db, k, 0); sdb_set (db, nk, nv, 0); } @@ -2164,14 +2164,14 @@ static bool unsetForCB(void *user, const char *k, const char *v) { return true; } -RZ_API void rz_sign_space_unset_for(RzAnal *a, const RzSpace *space) { +RZ_API void rz_sign_space_unset_for(RzAnalysis *a, const RzSpace *space) { rz_return_if_fail (a); struct ctxUnsetForCB ctx = { a, space }; sdb_foreach (a->sdb_zigns, unsetForCB, &ctx); } struct ctxRenameForCB { - RzAnal *anal; + RzAnalysis *analysis; char oprefix[RZ_SIGN_KEY_MAXSZ]; char nprefix[RZ_SIGN_KEY_MAXSZ]; }; @@ -2180,7 +2180,7 @@ static bool renameForCB(void *user, const char *k, const char *v) { struct ctxRenameForCB *ctx = (struct ctxRenameForCB *) user; char nk[RZ_SIGN_KEY_MAXSZ], nv[RZ_SIGN_VAL_MAXSZ]; const char *zigname = NULL; - Sdb *db = ctx->anal->sdb_zigns; + Sdb *db = ctx->analysis->sdb_zigns; if (!strncmp (k, ctx->oprefix, strlen (ctx->oprefix))) { zigname = k + strlen (ctx->oprefix); @@ -2192,16 +2192,16 @@ static bool renameForCB(void *user, const char *k, const char *v) { return true; } -RZ_API void rz_sign_space_rename_for(RzAnal *a, const RzSpace *space, const char *oname, const char *nname) { +RZ_API void rz_sign_space_rename_for(RzAnalysis *a, const RzSpace *space, const char *oname, const char *nname) { rz_return_if_fail (a && space && oname && nname); - struct ctxRenameForCB ctx = {.anal = a}; + struct ctxRenameForCB ctx = {.analysis = a}; serializeKeySpaceStr (a, oname, "", ctx.oprefix); serializeKeySpaceStr (a, nname, "", ctx.nprefix); sdb_foreach (a->sdb_zigns, renameForCB, &ctx); } struct ctxForeachCB { - RzAnal *anal; + RzAnalysis *analysis; RzSignForeachCallback cb; bool freeit; void *user; @@ -2210,7 +2210,7 @@ struct ctxForeachCB { static bool foreachCB(void *user, const char *k, const char *v) { struct ctxForeachCB *ctx = (struct ctxForeachCB *) user; RzSignItem *it = rz_sign_item_new (); - RzAnal *a = ctx->anal; + RzAnalysis *a = ctx->analysis; if (rz_sign_deserialize (a, it, k, v)) { RzSpace *cur = rz_spaces_current (&a->zign_spaces); @@ -2226,13 +2226,13 @@ static bool foreachCB(void *user, const char *k, const char *v) { return true; } -static bool rz_sign_foreach_nofree(RzAnal *a, RzSignForeachCallback cb, void *user) { +static bool rz_sign_foreach_nofree(RzAnalysis *a, RzSignForeachCallback cb, void *user) { rz_return_val_if_fail (a && cb, false); struct ctxForeachCB ctx = { a, cb, false, user }; return sdb_foreach (a->sdb_zigns, foreachCB, &ctx); } -RZ_API bool rz_sign_foreach(RzAnal *a, RzSignForeachCallback cb, void *user) { +RZ_API bool rz_sign_foreach(RzAnalysis *a, RzSignForeachCallback cb, void *user) { rz_return_val_if_fail (a && cb, false); struct ctxForeachCB ctx = { a, cb, true, user }; return sdb_foreach (a->sdb_zigns, foreachCB, &ctx); @@ -2286,7 +2286,7 @@ static int addSearchKwCB(RzSignItem *it, void *user) { return 1; } -RZ_API void rz_sign_search_init(RzAnal *a, RzSignSearch *ss, int minsz, RzSignSearchCallback cb, void *user) { +RZ_API void rz_sign_search_init(RzAnalysis *a, RzSignSearch *ss, int minsz, RzSignSearchCallback cb, void *user) { struct ctxAddSearchKwCB ctx = { ss, minsz }; rz_return_if_fail (a && ss && cb); ss->cb = cb; @@ -2298,7 +2298,7 @@ RZ_API void rz_sign_search_init(RzAnal *a, RzSignSearch *ss, int minsz, RzSignSe rz_search_set_callback (ss->search, searchHitCB, ss); } -RZ_API int rz_sign_search_update(RzAnal *a, RzSignSearch *ss, ut64 *at, const ut8 *buf, int len) { +RZ_API int rz_sign_search_update(RzAnalysis *a, RzSignSearch *ss, ut64 *at, const ut8 *buf, int len) { rz_return_val_if_fail (a && ss && buf && len > 0, 0); return rz_search_update (ss->search, *at, buf, len); } @@ -2310,23 +2310,23 @@ static int matchCount(int a, int b) { return RZ_ABS (c) < m; } -static bool fcnMetricsCmp(RzSignItem *it, RzAnalFunction *fcn) { +static bool fcnMetricsCmp(RzSignItem *it, RzAnalysisFunction *fcn) { RzSignGraph *graph = it->graph; int ebbs = -1; - if (graph->cc != -1 && graph->cc != rz_anal_function_complexity (fcn)) { + if (graph->cc != -1 && graph->cc != rz_analysis_function_complexity (fcn)) { return false; } if (graph->nbbs != -1 && graph->nbbs != rz_list_length (fcn->bbs)) { return false; } - if (graph->edges != -1 && graph->edges != rz_anal_function_count_edges (fcn, &ebbs)) { + if (graph->edges != -1 && graph->edges != rz_analysis_function_count_edges (fcn, &ebbs)) { return false; } if (graph->ebbs != -1 && graph->ebbs != ebbs) { return false; } - if (graph->bbsum > 0 && matchCount (graph->bbsum, rz_anal_function_linear_size (fcn))) { + if (graph->bbsum > 0 && matchCount (graph->bbsum, rz_analysis_function_linear_size (fcn))) { return false; } return true; @@ -2364,7 +2364,7 @@ static bool hash_match(RzSignItem *it, char **digest_hex, RzSignSearchMetrics *s } if (!*digest_hex) { - *digest_hex = rz_sign_calc_bbhash (sm->anal, sm->fcn); + *digest_hex = rz_sign_calc_bbhash (sm->analysis, sm->fcn); } if (strcmp (hash->bbhash, *digest_hex)) { return false; @@ -2396,7 +2396,7 @@ static bool vars_match(RzSignItem *it, RzList **vars, RzSignSearchMetrics *sm) { } if (!*vars) { - *vars = rz_sign_fcn_vars (sm->anal, sm->fcn); + *vars = rz_sign_fcn_vars (sm->analysis, sm->fcn); if (!*vars) { return false; } @@ -2415,7 +2415,7 @@ static bool refs_match(RzSignItem *it, RzList **refs, RzSignSearchMetrics *sm) { } if (!*refs) { - *refs = rz_sign_fcn_refs (sm->anal, sm->fcn); + *refs = rz_sign_fcn_refs (sm->analysis, sm->fcn); if (!*refs) { return false; } @@ -2434,7 +2434,7 @@ static bool types_match(RzSignItem *it, RzList **types, RzSignSearchMetrics *sm) } if (!*types) { - *types = rz_sign_fcn_types (sm->anal, sm->fcn); + *types = rz_sign_fcn_types (sm->analysis, sm->fcn); if (!*types) { return false; } @@ -2496,9 +2496,9 @@ static int match_metrics(RzSignItem *it, void *user) { } RZ_API int rz_sign_fcn_match_metrics(RzSignSearchMetrics *sm) { - rz_return_val_if_fail (sm && sm->mincc >= 0 && sm->anal && sm->fcn, false); + rz_return_val_if_fail (sm && sm->mincc >= 0 && sm->analysis && sm->fcn, false); struct metric_ctx ctx = { 0, sm, NULL, NULL, NULL, NULL }; - rz_sign_foreach (sm->anal, match_metrics, (void *)&ctx); + rz_sign_foreach (sm->analysis, match_metrics, (void *)&ctx); rz_list_free (ctx.refs); rz_list_free (ctx.types); rz_list_free (ctx.vars); @@ -2548,7 +2548,7 @@ RZ_API void rz_sign_bytes_free(RzSignBytes *bytes) { } static bool loadCB(void *user, const char *k, const char *v) { - RzAnal *a = (RzAnal *) user; + RzAnalysis *a = (RzAnalysis *) user; char nk[RZ_SIGN_KEY_MAXSZ], nv[RZ_SIGN_VAL_MAXSZ]; RzSignItem *it = rz_sign_item_new (); if (it && rz_sign_deserialize (a, it, k, v)) { @@ -2561,7 +2561,7 @@ static bool loadCB(void *user, const char *k, const char *v) { return true; } -RZ_API char *rz_sign_path(RzAnal *a, const char *file) { +RZ_API char *rz_sign_path(RzAnalysis *a, const char *file) { char *abs = rz_file_abspath (file); if (abs) { if (rz_file_is_regular (abs)) { @@ -2597,7 +2597,7 @@ RZ_API char *rz_sign_path(RzAnal *a, const char *file) { return NULL; } -RZ_API bool rz_sign_load(RzAnal *a, const char *file) { +RZ_API bool rz_sign_load(RzAnalysis *a, const char *file) { if (!a || !file) { return false; } @@ -2619,7 +2619,7 @@ RZ_API bool rz_sign_load(RzAnal *a, const char *file) { return true; } -RZ_API bool rz_sign_load_gz(RzAnal *a, const char *filename) { +RZ_API bool rz_sign_load_gz(RzAnalysis *a, const char *filename) { ut8 *buf = NULL; int size = 0; char *tmpfile = NULL; @@ -2670,7 +2670,7 @@ out: return retval; } -RZ_API bool rz_sign_save(RzAnal *a, const char *file) { +RZ_API bool rz_sign_save(RzAnalysis *a, const char *file) { rz_return_val_if_fail (a && file, false); if (sdb_isempty (a->sdb_zigns)) { diff --git a/librz/analysis/switch.c b/librz/analysis/switch.c new file mode 100644 index 0000000000..cc34e128fd --- /dev/null +++ b/librz/analysis/switch.c @@ -0,0 +1,54 @@ +// SPDX-License-Identifier: LGPL-3.0-only + +#include + +static RzAnalysisSwitchOp *__switch_op_new(void) { + RzAnalysisSwitchOp * swop = RZ_NEW0 (RzAnalysisSwitchOp); + if (swop) { + swop->cases = rz_list_new (); + if (!swop->cases) { + free (swop); + return NULL; + } + swop->cases->free = (void *)free; + swop->min_val = swop->def_val = swop->max_val = 0; + } + return swop; +} + +RZ_API RzAnalysisSwitchOp *rz_analysis_switch_op_new(ut64 addr, ut64 min_val, ut64 max_val, ut64 def_val) { + RzAnalysisSwitchOp *swop = __switch_op_new (); + if (swop) { + swop->addr = addr; + swop->min_val = min_val; + swop->def_val = def_val; + swop->max_val = max_val; + } + return swop; +} + +RZ_API RzAnalysisCaseOp * rz_analysis_case_op_new(ut64 addr, ut64 val, ut64 jump) { + RzAnalysisCaseOp *c = RZ_NEW0 (RzAnalysisCaseOp); + if (c) { + c->addr = addr; + c->value = val; + c->jump = jump; + } + return c; +} + +RZ_API void rz_analysis_switch_op_free(RzAnalysisSwitchOp * swop) { + if (swop) { + rz_list_free (swop->cases); + free (swop); + } +} + +RZ_API RzAnalysisCaseOp* rz_analysis_switch_op_add_case(RzAnalysisSwitchOp * swop, ut64 addr, ut64 value, ut64 jump) { + rz_return_val_if_fail (swop && addr != UT64_MAX, NULL); + RzAnalysisCaseOp * caseop = rz_analysis_case_op_new (addr, value, jump); + if (caseop) { + rz_list_append (swop->cases, caseop); + } + return caseop; +} diff --git a/librz/anal/type.c b/librz/analysis/type.c similarity index 64% rename from librz/anal/type.c rename to librz/analysis/type.c index b9ac3401ec..24e48480b9 100644 --- a/librz/anal/type.c +++ b/librz/analysis/type.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: LGPL-3.0-only -#include +#include #include #include #include "base_types.h" @@ -28,9 +28,9 @@ static char *get_type_data(Sdb *sdb_types, const char *type, const char *sname) return members; } -RZ_API void rz_anal_remove_parsed_type(RzAnal *anal, const char *name) { - rz_return_if_fail (anal && name); - Sdb *TDB = anal->sdb_types; +RZ_API void rz_analysis_remove_parsed_type(RzAnalysis *analysis, const char *name) { + rz_return_if_fail (analysis && name); + Sdb *TDB = analysis->sdb_types; SdbKv *kv; SdbListIter *iter; const char *type = sdb_const_get (TDB, name, 0); @@ -53,8 +53,8 @@ RZ_API void rz_anal_remove_parsed_type(RzAnal *anal, const char *name) { } } -RZ_API void rz_anal_save_parsed_type(RzAnal *anal, const char *parsed) { - rz_return_if_fail (anal && parsed); +RZ_API void rz_analysis_save_parsed_type(RzAnalysis *analysis, const char *parsed) { + rz_return_if_fail (analysis && parsed); // First, if any parsed types exist, let's remove them. char *type = strdup (parsed); @@ -70,23 +70,23 @@ RZ_API void rz_anal_save_parsed_type(RzAnal *anal, const char *parsed) { while (name > type && *(name - 1) != '\n') { name--; } - rz_anal_remove_parsed_type (anal, name); + rz_analysis_remove_parsed_type (analysis, name); } free (type); } // Now add the type to sdb. - sdb_query_lines (anal->sdb_types, parsed); + sdb_query_lines (analysis->sdb_types, parsed); } static int typecmp(const void *a, const void *b) { return strcmp (a, b); } -RZ_API RzList *rz_anal_types_from_fcn(RzAnal *anal, RzAnalFunction *fcn) { +RZ_API RzList *rz_analysis_types_from_fcn(RzAnalysis *analysis, RzAnalysisFunction *fcn) { RzListIter *iter; - RzAnalVar *var; - RzList *list = rz_anal_var_all_list (anal, fcn); + RzAnalysisVar *var; + RzList *list = rz_analysis_var_all_list (analysis, fcn); RzList *type_used = rz_list_new (); rz_list_foreach (list, iter, var) { rz_list_append (type_used, var->type); @@ -98,33 +98,33 @@ RZ_API RzList *rz_anal_types_from_fcn(RzAnal *anal, RzAnalFunction *fcn) { RZ_IPI void enum_type_case_free(void *e, void *user) { (void)user; - RzAnalEnumCase *cas = e; + RzAnalysisEnumCase *cas = e; free ((char *)cas->name); } RZ_IPI void struct_type_member_free(void *e, void *user) { (void)user; - RzAnalStructMember *member = e; + RzAnalysisStructMember *member = e; free ((char *)member->name); free ((char *)member->type); } RZ_IPI void union_type_member_free(void *e, void *user) { (void)user; - RzAnalUnionMember *member = e; + RzAnalysisUnionMember *member = e; free ((char *)member->name); free ((char *)member->type); } -static RzAnalBaseType *get_enum_type(RzAnal *anal, const char *sname) { - rz_return_val_if_fail (anal && sname, NULL); +static RzAnalysisBaseType *get_enum_type(RzAnalysis *analysis, const char *sname) { + rz_return_val_if_fail (analysis && sname, NULL); - RzAnalBaseType *base_type = rz_anal_base_type_new (RZ_ANAL_BASE_TYPE_KIND_ENUM); + RzAnalysisBaseType *base_type = rz_analysis_base_type_new (RZ_ANAL_BASE_TYPE_KIND_ENUM); if (!base_type) { return NULL; } - char *members = get_type_data (anal->sdb_types, "enum", sname); + char *members = get_type_data (analysis->sdb_types, "enum", sname); if (!members) { goto error; } @@ -140,14 +140,14 @@ static RzAnalBaseType *get_enum_type(RzAnal *anal, const char *sname) { if (!val_key) { goto error; } - const char *value = sdb_const_get (anal->sdb_types, val_key, NULL); + const char *value = sdb_const_get (analysis->sdb_types, val_key, NULL); free (val_key); if (!value) { // if nothing is found, ret NULL goto error; } - RzAnalEnumCase cas = { .name = strdup (cur), .val = strtol (value, NULL, 16) }; + RzAnalysisEnumCase cas = { .name = strdup (cur), .val = strtol (value, NULL, 16) }; void *element = rz_vector_push (cases, &cas); // returns null if no space available if (!element) { @@ -162,19 +162,19 @@ static RzAnalBaseType *get_enum_type(RzAnal *anal, const char *sname) { error: free (members); - rz_anal_base_type_free (base_type); + rz_analysis_base_type_free (base_type); return NULL; } -static RzAnalBaseType *get_struct_type(RzAnal *anal, const char *sname) { - rz_return_val_if_fail (anal && sname, NULL); +static RzAnalysisBaseType *get_struct_type(RzAnalysis *analysis, const char *sname) { + rz_return_val_if_fail (analysis && sname, NULL); - RzAnalBaseType *base_type = rz_anal_base_type_new (RZ_ANAL_BASE_TYPE_KIND_STRUCT); + RzAnalysisBaseType *base_type = rz_analysis_base_type_new (RZ_ANAL_BASE_TYPE_KIND_STRUCT); if (!base_type) { return NULL; } - char *sdb_members = get_type_data (anal->sdb_types, "struct", sname); + char *sdb_members = get_type_data (analysis->sdb_types, "struct", sname); if (!sdb_members) { goto error; } @@ -190,7 +190,7 @@ static RzAnalBaseType *get_struct_type(RzAnal *anal, const char *sname) { if (!type_key) { goto error; } - char *values = sdb_get (anal->sdb_types, type_key, NULL); + char *values = sdb_get (analysis->sdb_types, type_key, NULL); free (type_key); if (!values) { @@ -203,7 +203,7 @@ static RzAnalBaseType *get_struct_type(RzAnal *anal, const char *sname) { goto error; } offset = sdb_anext (offset, NULL); - RzAnalStructMember cas = { + RzAnalysisStructMember cas = { .name = strdup (cur), .type = strdup (type), .offset = strtol (offset, NULL, 10) @@ -223,20 +223,20 @@ static RzAnalBaseType *get_struct_type(RzAnal *anal, const char *sname) { return base_type; error: - rz_anal_base_type_free (base_type); + rz_analysis_base_type_free (base_type); free (sdb_members); return NULL; } -static RzAnalBaseType *get_union_type(RzAnal *anal, const char *sname) { - rz_return_val_if_fail (anal && sname, NULL); +static RzAnalysisBaseType *get_union_type(RzAnalysis *analysis, const char *sname) { + rz_return_val_if_fail (analysis && sname, NULL); - RzAnalBaseType *base_type = rz_anal_base_type_new (RZ_ANAL_BASE_TYPE_KIND_UNION); + RzAnalysisBaseType *base_type = rz_analysis_base_type_new (RZ_ANAL_BASE_TYPE_KIND_UNION); if (!base_type) { return NULL; } - char *sdb_members = get_type_data (anal->sdb_types, "union", sname); + char *sdb_members = get_type_data (analysis->sdb_types, "union", sname); if (!sdb_members) { goto error; } @@ -252,14 +252,14 @@ static RzAnalBaseType *get_union_type(RzAnal *anal, const char *sname) { if (!type_key) { goto error; } - char *values = sdb_get (anal->sdb_types, type_key, NULL); + char *values = sdb_get (analysis->sdb_types, type_key, NULL); free (type_key); if (!values) { goto error; } char *value = sdb_anext (values, NULL); - RzAnalUnionMember cas = { .name = strdup (cur), .type = strdup (value) }; + RzAnalysisUnionMember cas = { .name = strdup (cur), .type = strdup (value) }; free (values); void *element = rz_vector_push (members, &cas); // returns null if no space available @@ -274,76 +274,76 @@ static RzAnalBaseType *get_union_type(RzAnal *anal, const char *sname) { return base_type; error: - rz_anal_base_type_free (base_type); + rz_analysis_base_type_free (base_type); free (sdb_members); return NULL; } -static RzAnalBaseType *get_typedef_type(RzAnal *anal, const char *sname) { - rz_return_val_if_fail (anal && RZ_STR_ISNOTEMPTY (sname), NULL); +static RzAnalysisBaseType *get_typedef_type(RzAnalysis *analysis, const char *sname) { + rz_return_val_if_fail (analysis && RZ_STR_ISNOTEMPTY (sname), NULL); - RzAnalBaseType *base_type = rz_anal_base_type_new (RZ_ANAL_BASE_TYPE_KIND_TYPEDEF); + RzAnalysisBaseType *base_type = rz_analysis_base_type_new (RZ_ANAL_BASE_TYPE_KIND_TYPEDEF); if (!base_type) { return NULL; } - base_type->type = get_type_data (anal->sdb_types, "typedef", sname); + base_type->type = get_type_data (analysis->sdb_types, "typedef", sname); if (!base_type->type) { goto error; } return base_type; error: - rz_anal_base_type_free (base_type); + rz_analysis_base_type_free (base_type); return NULL; } -static RzAnalBaseType *get_atomic_type(RzAnal *anal, const char *sname) { - rz_return_val_if_fail (anal && RZ_STR_ISNOTEMPTY (sname), NULL); +static RzAnalysisBaseType *get_atomic_type(RzAnalysis *analysis, const char *sname) { + rz_return_val_if_fail (analysis && RZ_STR_ISNOTEMPTY (sname), NULL); - RzAnalBaseType *base_type = rz_anal_base_type_new (RZ_ANAL_BASE_TYPE_KIND_ATOMIC); + RzAnalysisBaseType *base_type = rz_analysis_base_type_new (RZ_ANAL_BASE_TYPE_KIND_ATOMIC); if (!base_type) { return NULL; } - base_type->type = get_type_data (anal->sdb_types, "type", sname); + base_type->type = get_type_data (analysis->sdb_types, "type", sname); if (!base_type->type) { goto error; } RzStrBuf key; - base_type->size = sdb_num_get (anal->sdb_types, rz_strbuf_initf (&key, "type.%s.size", sname), 0); + base_type->size = sdb_num_get (analysis->sdb_types, rz_strbuf_initf (&key, "type.%s.size", sname), 0); rz_strbuf_fini (&key); return base_type; error: - rz_anal_base_type_free (base_type); + rz_analysis_base_type_free (base_type); return NULL; } // returns NULL if name is not found or any failure happened -RZ_API RzAnalBaseType *rz_anal_get_base_type(RzAnal *anal, const char *name) { - rz_return_val_if_fail (anal && name, NULL); +RZ_API RzAnalysisBaseType *rz_analysis_get_base_type(RzAnalysis *analysis, const char *name) { + rz_return_val_if_fail (analysis && name, NULL); char *sname = rz_str_sanitize_sdb_key (name); - const char *type = sdb_const_get (anal->sdb_types, sname, NULL); + const char *type = sdb_const_get (analysis->sdb_types, sname, NULL); if (!type) { free (sname); return NULL; } - RzAnalBaseType *base_type = NULL; + RzAnalysisBaseType *base_type = NULL; if (!strcmp (type, "struct")) { - base_type = get_struct_type (anal, sname); + base_type = get_struct_type (analysis, sname); } else if (!strcmp (type, "enum")) { - base_type = get_enum_type (anal, sname); + base_type = get_enum_type (analysis, sname); } else if (!strcmp (type, "union")) { - base_type = get_union_type (anal, sname); + base_type = get_union_type (analysis, sname); } else if (!strcmp (type, "typedef")) { - base_type = get_typedef_type (anal, sname); + base_type = get_typedef_type (analysis, sname); } else if (!strcmp (type, "type")) { - base_type = get_atomic_type (anal, sname); + base_type = get_atomic_type (analysis, sname); } if (base_type) { @@ -355,8 +355,8 @@ RZ_API RzAnalBaseType *rz_anal_get_base_type(RzAnal *anal, const char *name) { return base_type; } -static void save_struct(const RzAnal *anal, const RzAnalBaseType *type) { - rz_return_if_fail (anal && type && type->name +static void save_struct(const RzAnalysis *analysis, const RzAnalysisBaseType *type) { + rz_return_if_fail (analysis && type && type->name && type->kind == RZ_ANAL_BASE_TYPE_KIND_STRUCT); char *kind = "struct"; /* @@ -371,7 +371,7 @@ static void save_struct(const RzAnal *anal, const RzAnalBaseType *type) { */ char *sname = rz_str_sanitize_sdb_key (type->name); // name=struct - sdb_set (anal->sdb_types, sname, kind, 0); + sdb_set (analysis->sdb_types, sname, kind, 0); RzStrBuf arglist; RzStrBuf param_key; @@ -381,11 +381,11 @@ static void save_struct(const RzAnal *anal, const RzAnalBaseType *type) { rz_strbuf_init (¶m_val); int i = 0; - RzAnalStructMember *member; + RzAnalysisStructMember *member; rz_vector_foreach (&type->struct_data.members, member) { // struct.name.param=type,offset,argsize char *member_sname = rz_str_sanitize_sdb_key (member->name); - sdb_set (anal->sdb_types, + sdb_set (analysis->sdb_types, rz_strbuf_setf (¶m_key, "%s.%s.%s", kind, sname, member_sname), rz_strbuf_setf (¶m_val, "%s,%zu,%u", member->type, member->offset, 0), 0ULL); free (member_sname); @@ -394,7 +394,7 @@ static void save_struct(const RzAnal *anal, const RzAnalBaseType *type) { } // struct.name=param1,param2,paramN char *key = rz_str_newf ("%s.%s", kind, sname); - sdb_set (anal->sdb_types, key, rz_strbuf_get (&arglist), 0); + sdb_set (analysis->sdb_types, key, rz_strbuf_get (&arglist), 0); free (key); free (sname); @@ -404,8 +404,8 @@ static void save_struct(const RzAnal *anal, const RzAnalBaseType *type) { rz_strbuf_fini (¶m_val); } -static void save_union(const RzAnal *anal, const RzAnalBaseType *type) { - rz_return_if_fail (anal && type && type->name +static void save_union(const RzAnalysis *analysis, const RzAnalysisBaseType *type) { + rz_return_if_fail (analysis && type && type->name && type->kind == RZ_ANAL_BASE_TYPE_KIND_UNION); const char *kind = "union"; /* @@ -420,7 +420,7 @@ static void save_union(const RzAnal *anal, const RzAnalBaseType *type) { */ char *sname = rz_str_sanitize_sdb_key (type->name); // name=union - sdb_set (anal->sdb_types, sname, kind, 0); + sdb_set (analysis->sdb_types, sname, kind, 0); RzStrBuf arglist; RzStrBuf param_key; @@ -430,11 +430,11 @@ static void save_union(const RzAnal *anal, const RzAnalBaseType *type) { rz_strbuf_init (¶m_val); int i = 0; - RzAnalUnionMember *member; + RzAnalysisUnionMember *member; rz_vector_foreach (&type->union_data.members, member) { // union.name.arg1=type,offset,argsize char *member_sname = rz_str_sanitize_sdb_key (member->name); - sdb_set (anal->sdb_types, + sdb_set (analysis->sdb_types, rz_strbuf_setf (¶m_key, "%s.%s.%s", kind, sname, member_sname), rz_strbuf_setf (¶m_val, "%s,%zu,%u", member->type, member->offset, 0), 0ULL); free (member_sname); @@ -443,7 +443,7 @@ static void save_union(const RzAnal *anal, const RzAnalBaseType *type) { } // union.name=arg1,arg2,argN char *key = rz_str_newf ("%s.%s", kind, sname); - sdb_set (anal->sdb_types, key, rz_strbuf_get (&arglist), 0); + sdb_set (analysis->sdb_types, key, rz_strbuf_get (&arglist), 0); free (key); free (sname); @@ -453,8 +453,8 @@ static void save_union(const RzAnal *anal, const RzAnalBaseType *type) { rz_strbuf_fini (¶m_val); } -static void save_enum(const RzAnal *anal, const RzAnalBaseType *type) { - rz_return_if_fail (anal && type && type->name +static void save_enum(const RzAnalysis *analysis, const RzAnalysisBaseType *type) { + rz_return_if_fail (analysis && type && type->name && type->kind == RZ_ANAL_BASE_TYPE_KIND_ENUM); /* C: @@ -470,7 +470,7 @@ static void save_enum(const RzAnal *anal, const RzAnalBaseType *type) { enum.MyEnum.argN=0x3 */ char *sname = rz_str_sanitize_sdb_key (type->name); - sdb_set (anal->sdb_types, sname, "enum", 0); + sdb_set (analysis->sdb_types, sname, "enum", 0); RzStrBuf arglist; RzStrBuf param_key; @@ -480,15 +480,15 @@ static void save_enum(const RzAnal *anal, const RzAnalBaseType *type) { rz_strbuf_init (¶m_val); int i = 0; - RzAnalEnumCase *cas; + RzAnalysisEnumCase *cas; rz_vector_foreach (&type->enum_data.cases, cas) { // enum.name.arg1=type,offset,??? char *case_sname = rz_str_sanitize_sdb_key (cas->name); - sdb_set (anal->sdb_types, + sdb_set (analysis->sdb_types, rz_strbuf_setf (¶m_key, "enum.%s.%s", sname, case_sname), rz_strbuf_setf (¶m_val, "0x%" PFMT32x "", cas->val), 0); - sdb_set (anal->sdb_types, + sdb_set (analysis->sdb_types, rz_strbuf_setf (¶m_key, "enum.%s.0x%" PFMT32x "", sname, cas->val), case_sname, 0); free (case_sname); @@ -497,7 +497,7 @@ static void save_enum(const RzAnal *anal, const RzAnalBaseType *type) { } // enum.name=arg1,arg2,argN char *key = rz_str_newf ("enum.%s", sname); - sdb_set (anal->sdb_types, key, rz_strbuf_get (&arglist), 0); + sdb_set (analysis->sdb_types, key, rz_strbuf_get (&arglist), 0); free (key); free (sname); @@ -507,8 +507,8 @@ static void save_enum(const RzAnal *anal, const RzAnalBaseType *type) { rz_strbuf_fini (¶m_val); } -static void save_atomic_type(const RzAnal *anal, const RzAnalBaseType *type) { - rz_return_if_fail (anal && type && type->name +static void save_atomic_type(const RzAnalysis *analysis, const RzAnalysisBaseType *type) { + rz_return_if_fail (analysis && type && type->name && type->kind == RZ_ANAL_BASE_TYPE_KIND_ATOMIC); /* C: (cannot define a custom atomic type) @@ -518,18 +518,18 @@ static void save_atomic_type(const RzAnal *anal, const RzAnalBaseType *type) { type.char.size=8 */ char *sname = rz_str_sanitize_sdb_key (type->name); - sdb_set (anal->sdb_types, sname, "type", 0); + sdb_set (analysis->sdb_types, sname, "type", 0); RzStrBuf key; RzStrBuf val; rz_strbuf_init (&key); rz_strbuf_init (&val); - sdb_set (anal->sdb_types, + sdb_set (analysis->sdb_types, rz_strbuf_setf (&key, "type.%s.size", sname), rz_strbuf_setf (&val, "%" PFMT64u "", type->size), 0); - sdb_set (anal->sdb_types, + sdb_set (analysis->sdb_types, rz_strbuf_setf (&key, "type.%s", sname), type->type, 0); @@ -538,8 +538,8 @@ static void save_atomic_type(const RzAnal *anal, const RzAnalBaseType *type) { rz_strbuf_fini (&key); rz_strbuf_fini (&val); } -static void save_typedef(const RzAnal *anal, const RzAnalBaseType *type) { - rz_return_if_fail (anal && type && type->name && type->kind == RZ_ANAL_BASE_TYPE_KIND_TYPEDEF); +static void save_typedef(const RzAnalysis *analysis, const RzAnalysisBaseType *type) { + rz_return_if_fail (analysis && type && type->name && type->kind == RZ_ANAL_BASE_TYPE_KIND_TYPEDEF); /* C: typedef char byte; @@ -548,14 +548,14 @@ static void save_typedef(const RzAnal *anal, const RzAnalBaseType *type) { typedef.byte=char */ char *sname = rz_str_sanitize_sdb_key (type->name); - sdb_set (anal->sdb_types, sname, "typedef", 0); + sdb_set (analysis->sdb_types, sname, "typedef", 0); RzStrBuf key; RzStrBuf val; rz_strbuf_init (&key); rz_strbuf_init (&val); - sdb_set (anal->sdb_types, + sdb_set (analysis->sdb_types, rz_strbuf_setf (&key, "typedef.%s", sname), rz_strbuf_setf (&val, "%s", type->type), 0); @@ -565,7 +565,7 @@ static void save_typedef(const RzAnal *anal, const RzAnalBaseType *type) { rz_strbuf_fini (&val); } -RZ_API void rz_anal_base_type_free(RzAnalBaseType *type) { +RZ_API void rz_analysis_base_type_free(RzAnalysisBaseType *type) { rz_return_if_fail (type); RZ_FREE (type->name); RZ_FREE (type->type); @@ -589,21 +589,21 @@ RZ_API void rz_anal_base_type_free(RzAnalBaseType *type) { RZ_FREE (type); } -RZ_API RzAnalBaseType *rz_anal_base_type_new(RzAnalBaseTypeKind kind) { - RzAnalBaseType *type = RZ_NEW0 (RzAnalBaseType); +RZ_API RzAnalysisBaseType *rz_analysis_base_type_new(RzAnalysisBaseTypeKind kind) { + RzAnalysisBaseType *type = RZ_NEW0 (RzAnalysisBaseType); if (!type) { return NULL; } type->kind = kind; switch (type->kind) { case RZ_ANAL_BASE_TYPE_KIND_STRUCT: - rz_vector_init (&type->struct_data.members, sizeof (RzAnalStructMember), struct_type_member_free, NULL); + rz_vector_init (&type->struct_data.members, sizeof (RzAnalysisStructMember), struct_type_member_free, NULL); break; case RZ_ANAL_BASE_TYPE_KIND_ENUM: - rz_vector_init (&type->enum_data.cases, sizeof (RzAnalEnumCase), enum_type_case_free, NULL); + rz_vector_init (&type->enum_data.cases, sizeof (RzAnalysisEnumCase), enum_type_case_free, NULL); break; case RZ_ANAL_BASE_TYPE_KIND_UNION: - rz_vector_init (&type->union_data.members, sizeof (RzAnalUnionMember), union_type_member_free, NULL); + rz_vector_init (&type->union_data.members, sizeof (RzAnalysisUnionMember), union_type_member_free, NULL); break; default: break; @@ -613,32 +613,32 @@ RZ_API RzAnalBaseType *rz_anal_base_type_new(RzAnalBaseTypeKind kind) { } /** - * @brief Saves RzAnalBaseType into the SDB + * @brief Saves RzAnalysisBaseType into the SDB * - * @param anal - * @param type RzAnalBaseType to save + * @param analysis + * @param type RzAnalysisBaseType to save * @param name Name of the type */ -RZ_API void rz_anal_save_base_type(const RzAnal *anal, const RzAnalBaseType *type) { - rz_return_if_fail (anal && type && type->name); +RZ_API void rz_analysis_save_base_type(const RzAnalysis *analysis, const RzAnalysisBaseType *type) { + rz_return_if_fail (analysis && type && type->name); // TODO, solve collisions, if there are 2 types with the same name and kind switch (type->kind) { case RZ_ANAL_BASE_TYPE_KIND_STRUCT: - save_struct (anal, type); + save_struct (analysis, type); break; case RZ_ANAL_BASE_TYPE_KIND_ENUM: - save_enum (anal, type); + save_enum (analysis, type); break; case RZ_ANAL_BASE_TYPE_KIND_UNION: - save_union (anal, type); + save_union (analysis, type); break; case RZ_ANAL_BASE_TYPE_KIND_TYPEDEF: - save_typedef (anal, type); + save_typedef (analysis, type); break; case RZ_ANAL_BASE_TYPE_KIND_ATOMIC: - save_atomic_type (anal, type); + save_atomic_type (analysis, type); break; default: break; diff --git a/librz/anal/type_pdb.c b/librz/analysis/type_pdb.c similarity index 77% rename from librz/anal/type_pdb.c rename to librz/analysis/type_pdb.c index 69a39c4245..cc55c37535 100644 --- a/librz/anal/type_pdb.c +++ b/librz/analysis/type_pdb.c @@ -1,6 +1,6 @@ #include #include -#include +#include #include "../bin/pdb/types.h" #include "base_types.h" @@ -13,8 +13,8 @@ static bool is_parsable_type(const ELeafType type) { /** * @brief Create a type name from offset - * - * @param offset + * + * @param offset * @return char* Name or NULL if error */ static char *create_type_name_from_offset(ut64 offset) { @@ -26,12 +26,12 @@ static char *create_type_name_from_offset(ut64 offset) { /** * @brief Parses class/struct/union member - * + * * @param type_info Current type info (member) * @param types List of all types - * @return RzAnalStructMember* parsed member, NULL if fail + * @return RzAnalysisStructMember* parsed member, NULL if fail */ -static RzAnalStructMember *parse_member(STypeInfo *type_info, RzList *types) { +static RzAnalysisStructMember *parse_member(STypeInfo *type_info, RzList *types) { rz_return_val_if_fail (type_info && types, NULL); if (type_info->leaf_type != eLF_MEMBER) { return NULL; @@ -45,7 +45,7 @@ static RzAnalStructMember *parse_member(STypeInfo *type_info, RzList *types) { type_info->get_val (type_info, &offset); // gets offset type_info->get_name (type_info, &name); type_info->get_print_type (type_info, &type); - RzAnalStructMember *member = RZ_NEW0 (RzAnalStructMember); + RzAnalysisStructMember *member = RZ_NEW0 (RzAnalysisStructMember); if (!member) { goto cleanup; } @@ -60,12 +60,12 @@ cleanup: /** * @brief Parse enum case - * + * * @param type_info Current type info (enum case) * @param types List of all types - * @return RzAnalEnumCase* parsed enum case, NULL if fail + * @return RzAnalysisEnumCase* parsed enum case, NULL if fail */ -static RzAnalEnumCase *parse_enumerate(STypeInfo *type_info, RzList *types) { +static RzAnalysisEnumCase *parse_enumerate(STypeInfo *type_info, RzList *types) { rz_return_val_if_fail (type_info && types && type_info->leaf_type == eLF_ENUMERATE, NULL); rz_return_val_if_fail (type_info->get_val && type_info->get_name, NULL); @@ -74,7 +74,7 @@ static RzAnalEnumCase *parse_enumerate(STypeInfo *type_info, RzList *types) { // sometimes, the type doesn't have get_val for some reason type_info->get_val (type_info, &value); type_info->get_name (type_info, &name); - RzAnalEnumCase *cas = RZ_NEW0 (RzAnalEnumCase); + RzAnalysisEnumCase *cas = RZ_NEW0 (RzAnalysisEnumCase); if (!cas) { goto cleanup; } @@ -88,20 +88,20 @@ cleanup: /** * @brief Parses enum into BaseType and saves it into SDB - * - * @param anal + * + * @param analysis * @param type Current type - * @param types List of all types + * @param types List of all types */ -static void parse_enum(const RzAnal *anal, SType *type, RzList *types) { - rz_return_if_fail (anal && type && types); +static void parse_enum(const RzAnalysis *analysis, SType *type, RzList *types) { + rz_return_if_fail (analysis && type && types); STypeInfo *type_info = &type->type_data; // assert all member functions we need info from rz_return_if_fail (type_info->get_members && type_info->get_name && type_info->get_utype); - RzAnalBaseType *base_type = rz_anal_base_type_new (RZ_ANAL_BASE_TYPE_KIND_ENUM); + RzAnalysisBaseType *base_type = rz_analysis_base_type_new (RZ_ANAL_BASE_TYPE_KIND_ENUM); if (!base_type) { return; } @@ -127,7 +127,7 @@ static void parse_enum(const RzAnal *anal, SType *type, RzList *types) { RzListIter *it = rz_list_iterator (members); while (rz_list_iter_next (it)) { STypeInfo *member_info = rz_list_iter_get (it); - RzAnalEnumCase *enum_case = parse_enumerate (member_info, types); + RzAnalysisEnumCase *enum_case = parse_enumerate (member_info, types); if (!enum_case) { continue; // skip it, move forward } @@ -141,24 +141,24 @@ static void parse_enum(const RzAnal *anal, SType *type, RzList *types) { base_type->size = size; base_type->type = strdup (type_name); // we assume it's sanitized - rz_anal_save_base_type (anal, base_type); + rz_analysis_save_base_type (analysis, base_type); cleanup: if (to_free_name) { RZ_FREE (name); } - rz_anal_base_type_free (base_type); + rz_analysis_base_type_free (base_type); return; } /** * @brief Parses classes, unions and structures into BaseType and saves them into SDB - * - * @param anal + * + * @param analysis * @param type Current type * @param types List of all types */ -static void parse_structure(const RzAnal *anal, SType *type, RzList *types) { - rz_return_if_fail (anal && type && types); +static void parse_structure(const RzAnalysis *analysis, SType *type, RzList *types) { + rz_return_if_fail (analysis && type && types); STypeInfo *type_info = &type->type_data; // assert all member functions we need info from rz_return_if_fail (type_info->get_members && @@ -166,7 +166,7 @@ static void parse_structure(const RzAnal *anal, SType *type, RzList *types) { type_info->get_name && type_info->get_val); - RzAnalBaseType *base_type = rz_anal_base_type_new (RZ_ANAL_BASE_TYPE_KIND_STRUCT); + RzAnalysisBaseType *base_type = rz_analysis_base_type_new (RZ_ANAL_BASE_TYPE_KIND_STRUCT); if (!base_type) { return; } @@ -187,7 +187,7 @@ static void parse_structure(const RzAnal *anal, SType *type, RzList *types) { RzListIter *it = rz_list_iterator (members); while (rz_list_iter_next (it)) { STypeInfo *member_info = rz_list_iter_get (it); - RzAnalStructMember *struct_member = parse_member (member_info, types); + RzAnalysisStructMember *struct_member = parse_member (member_info, types); if (!struct_member) { continue; // skip the failure } @@ -204,24 +204,24 @@ static void parse_structure(const RzAnal *anal, SType *type, RzList *types) { char *sname = rz_str_sanitize_sdb_key (name); base_type->name = sname; base_type->size = size; - rz_anal_save_base_type (anal, base_type); + rz_analysis_save_base_type (analysis, base_type); cleanup: if (to_free_name) { RZ_FREE (name); } - rz_anal_base_type_free (base_type); + rz_analysis_base_type_free (base_type); return; } /** * @brief Delegate the type parsing to appropriate function - * - * @param anal + * + * @param analysis * @param type Current type * @param types List of all types */ -static void parse_type (const RzAnal *anal, SType *type, RzList *types) { - rz_return_if_fail (anal && type && types); +static void parse_type (const RzAnalysis *analysis, SType *type, RzList *types) { + rz_return_if_fail (analysis && type && types); int is_forward_decl; if (type->type_data.is_fwdref) { @@ -234,10 +234,10 @@ static void parse_type (const RzAnal *anal, SType *type, RzList *types) { case eLF_CLASS: case eLF_STRUCTURE: case eLF_UNION: - parse_structure (anal, type, types); + parse_structure (analysis, type, types); break; case eLF_ENUM: - parse_enum (anal, type, types); + parse_enum (analysis, type, types); break; default: // shouldn't happen, happens when someone modifies leafs that get here @@ -249,12 +249,12 @@ static void parse_type (const RzAnal *anal, SType *type, RzList *types) { /** * @brief Saves PDB types from TPI stream into the SDB - * - * @param anal + * + * @param analysis * @param pdb PDB information */ -RZ_API void rz_parse_pdb_types(const RzAnal *anal, const RzPdb *pdb) { - rz_return_if_fail (anal && pdb); +RZ_API void rz_parse_pdb_types(const RzAnalysis *analysis, const RzPdb *pdb) { + rz_return_if_fail (analysis && pdb); RzList *plist = pdb->pdb_streams; // getting the TPI stream from the streams list STpiStream *tpi_stream = rz_list_get_n (plist, ePDB_STREAM_TPI); @@ -266,7 +266,7 @@ RZ_API void rz_parse_pdb_types(const RzAnal *anal, const RzPdb *pdb) { while (rz_list_iter_next (iter)) { // iterate all types SType *type = rz_list_iter_get (iter); if (is_parsable_type (type->type_data.leaf_type)) { - parse_type (anal, type, tpi_stream->types); + parse_type (analysis, type, tpi_stream->types); } } } diff --git a/librz/anal/value.c b/librz/analysis/value.c similarity index 66% rename from librz/anal/value.c rename to librz/analysis/value.c index b9c4627767..c698453bdd 100644 --- a/librz/anal/value.c +++ b/librz/analysis/value.c @@ -1,31 +1,31 @@ // SPDX-License-Identifier: LGPL-3.0-only -#include +#include -RZ_API RzAnalValue *rz_anal_value_new(void) { //macro for this ? - return RZ_NEW0 (RzAnalValue); +RZ_API RzAnalysisValue *rz_analysis_value_new(void) { //macro for this ? + return RZ_NEW0 (RzAnalysisValue); } -RZ_API RzAnalValue *rz_anal_value_new_from_string(const char *str) { +RZ_API RzAnalysisValue *rz_analysis_value_new_from_string(const char *str) { /* TODO */ return NULL; } -RZ_API RzAnalValue *rz_anal_value_copy(RzAnalValue *ov) { +RZ_API RzAnalysisValue *rz_analysis_value_copy(RzAnalysisValue *ov) { rz_return_val_if_fail (ov, NULL); - RzAnalValue *v = RZ_NEW0 (RzAnalValue); + RzAnalysisValue *v = RZ_NEW0 (RzAnalysisValue); if (!v) { return NULL; } - memcpy (v, ov, sizeof (RzAnalValue)); + memcpy (v, ov, sizeof (RzAnalysisValue)); // reference to reg and regdelta should be kept return v; } // TODO: move into .h as #define free -RZ_API void rz_anal_value_free(RzAnalValue *value) { +RZ_API void rz_analysis_value_free(RzAnalysisValue *value) { free (value); #if 0 ut64 pval = (ut64)(size_t)value; @@ -37,49 +37,49 @@ RZ_API void rz_anal_value_free(RzAnalValue *value) { } // mul*value+regbase+regidx+delta -RZ_API ut64 rz_anal_value_to_ut64(RzAnal *anal, RzAnalValue *val) { +RZ_API ut64 rz_analysis_value_to_ut64(RzAnalysis *analysis, RzAnalysisValue *val) { ut64 num; if (!val) { return 0LL; } num = val->base + (val->delta*(val->mul?val->mul:1)); if (val->reg) { - num += rz_reg_get_value (anal->reg, val->reg); + num += rz_reg_get_value (analysis->reg, val->reg); } if (val->regdelta) { - num += rz_reg_get_value (anal->reg, val->regdelta); + num += rz_reg_get_value (analysis->reg, val->regdelta); } switch (val->memref) { case 1: case 2: case 4: case 8: - //anal->bio ... + //analysis->bio ... eprintf ("TODO: memref for to_ut64 not supported\n"); break; } return num; } -RZ_API int rz_anal_value_set_ut64(RzAnal *anal, RzAnalValue *val, ut64 num) { +RZ_API int rz_analysis_value_set_ut64(RzAnalysis *analysis, RzAnalysisValue *val, ut64 num) { if (val->memref) { - if (anal->iob.io) { + if (analysis->iob.io) { ut8 data[8]; - ut64 addr = rz_anal_value_to_ut64 (anal, val); + ut64 addr = rz_analysis_value_to_ut64 (analysis, val); rz_mem_set_num (data, val->memref, num); - anal->iob.write_at (anal->iob.io, addr, data, val->memref); + analysis->iob.write_at (analysis->iob.io, addr, data, val->memref); } else { - eprintf ("No IO binded to rz_anal\n"); + eprintf ("No IO binded to rz_analysis\n"); } } else { if (val->reg) { - rz_reg_set_value (anal->reg, val->reg, num); + rz_reg_set_value (analysis->reg, val->reg, num); } } return false; //is this necessary } -RZ_API char *rz_anal_value_to_string (RzAnalValue *value) { +RZ_API char *rz_analysis_value_to_string (RzAnalysisValue *value) { char *out = NULL; if (value) { out = rz_str_new (""); diff --git a/librz/anal/var.c b/librz/analysis/var.c similarity index 64% rename from librz/anal/var.c rename to librz/analysis/var.c index 0c75780acc..1cc6aff5e4 100644 --- a/librz/anal/var.c +++ b/librz/analysis/var.c @@ -1,15 +1,15 @@ // SPDX-License-Identifier: LGPL-3.0-only -#include +#include #include #include #include #include -#define ACCESS_CMP(x, y) ((x) - ((RzAnalVarAccess *)y)->offset) +#define ACCESS_CMP(x, y) ((x) - ((RzAnalysisVarAccess *)y)->offset) -RZ_API bool rz_anal_var_display(RzAnal *anal, RzAnalVar *var) { - char *fmt = rz_type_format (anal->sdb_types, var->type); +RZ_API bool rz_analysis_var_display(RzAnalysis *analysis, RzAnalysisVar *var) { + char *fmt = rz_type_format (analysis->sdb_types, var->type); RzRegItem *i; if (!fmt) { eprintf ("type:%s doesn't exist\n", var->type); @@ -18,12 +18,12 @@ RZ_API bool rz_anal_var_display(RzAnal *anal, RzAnalVar *var) { bool usePxr = !strcmp (var->type, "int"); // hacky but useful switch (var->kind) { case RZ_ANAL_VAR_KIND_REG: - i = rz_reg_index_get (anal->reg, var->delta); + i = rz_reg_index_get (analysis->reg, var->delta); if (i) { if (usePxr) { - anal->cb_printf ("pxr $w @r:%s\n", i->name); + analysis->cb_printf ("pxr $w @r:%s\n", i->name); } else { - anal->cb_printf ("pf r (%s)\n", i->name); + analysis->cb_printf ("pf r (%s)\n", i->name); } } else { eprintf ("register not found\n"); @@ -34,18 +34,18 @@ RZ_API bool rz_anal_var_display(RzAnal *anal, RzAnalVar *var) { const ut32 udelta = RZ_ABS (real_delta); const char sign = real_delta >= 0 ? '+' : '-'; if (usePxr) { - anal->cb_printf ("pxr $w @%s%c0x%x\n", anal->reg->name[RZ_REG_NAME_BP], sign, udelta); + analysis->cb_printf ("pxr $w @%s%c0x%x\n", analysis->reg->name[RZ_REG_NAME_BP], sign, udelta); } else { - anal->cb_printf ("pf %s @%s%c0x%x\n", fmt, anal->reg->name[RZ_REG_NAME_BP], sign, udelta); + analysis->cb_printf ("pf %s @%s%c0x%x\n", fmt, analysis->reg->name[RZ_REG_NAME_BP], sign, udelta); } } break; case RZ_ANAL_VAR_KIND_SPV: { ut32 udelta = RZ_ABS (var->delta + var->fcn->maxstack); if (usePxr) { - anal->cb_printf ("pxr $w @%s+0x%x\n", anal->reg->name[RZ_REG_NAME_SP], udelta); + analysis->cb_printf ("pxr $w @%s+0x%x\n", analysis->reg->name[RZ_REG_NAME_SP], udelta); } else { - anal->cb_printf ("pf %s @ %s+0x%x\n", fmt, anal->reg->name[RZ_REG_NAME_SP], udelta); + analysis->cb_printf ("pf %s @ %s+0x%x\n", fmt, analysis->reg->name[RZ_REG_NAME_SP], udelta); } break; } @@ -64,11 +64,11 @@ static const char *__int_type_from_size(int size) { } } -RZ_API bool rz_anal_function_rebase_vars(RzAnal *a, RzAnalFunction *fcn) { +RZ_API bool rz_analysis_function_rebase_vars(RzAnalysis *a, RzAnalysisFunction *fcn) { rz_return_val_if_fail (a && fcn, false); RzListIter *it; - RzAnalVar *var; - RzList *var_list = rz_anal_var_all_list (a, fcn); + RzAnalysisVar *var; + RzList *var_list = rz_analysis_var_all_list (a, fcn); rz_return_val_if_fail (var_list, false); rz_list_foreach (var_list, it, var) { @@ -89,8 +89,8 @@ RZ_API bool rz_anal_function_rebase_vars(RzAnal *a, RzAnalFunction *fcn) { // If the type of var is a struct, // remove all other vars that are overlapped by var and are at the offset of one of its struct members -static void shadow_var_struct_members(RzAnalVar *var) { - Sdb *TDB = var->fcn->anal->sdb_types; +static void shadow_var_struct_members(RzAnalysisVar *var) { + Sdb *TDB = var->fcn->analysis->sdb_types; const char *type_kind = sdb_const_get (TDB, var->type, 0); if (type_kind && rz_str_startswith (type_kind, "struct")) { char *field; @@ -104,9 +104,9 @@ static void shadow_var_struct_members(RzAnalVar *var) { char *field_type = sdb_array_get (TDB, field_key, 0, NULL); ut64 field_offset = sdb_array_get_num (TDB, field_key, 1, NULL); if (field_offset != 0) { // delete variables which are overlaid by structure - RzAnalVar *other = rz_anal_function_get_var (var->fcn, var->kind, var->delta + field_offset); + RzAnalysisVar *other = rz_analysis_function_get_var (var->fcn, var->kind, var->delta + field_offset); if (other && other != var) { - rz_anal_var_delete (other); + rz_analysis_var_delete (other); } } free (field_type); @@ -116,9 +116,9 @@ static void shadow_var_struct_members(RzAnalVar *var) { } } -RZ_API RzAnalVar *rz_anal_function_set_var(RzAnalFunction *fcn, int delta, char kind, RZ_NULLABLE const char *type, int size, bool isarg, RZ_NONNULL const char *name) { +RZ_API RzAnalysisVar *rz_analysis_function_set_var(RzAnalysisFunction *fcn, int delta, char kind, RZ_NULLABLE const char *type, int size, bool isarg, RZ_NONNULL const char *name) { rz_return_val_if_fail (fcn && name, NULL); - RzAnalVar *existing = rz_anal_function_get_var_byname (fcn, name); + RzAnalysisVar *existing = rz_analysis_function_get_var_byname (fcn, name); if (existing && (existing->kind != kind || existing->delta != delta)) { // var name already exists at a different kind+delta return NULL; @@ -130,7 +130,7 @@ RZ_API RzAnalVar *rz_anal_function_set_var(RzAnalFunction *fcn, int delta, char if (!type) { type = __int_type_from_size (size); if (!type) { - type = __int_type_from_size (fcn->anal->bits); + type = __int_type_from_size (fcn->analysis->bits); } if (!type) { type = "int32_t"; @@ -146,22 +146,22 @@ RZ_API RzAnalVar *rz_anal_function_set_var(RzAnalFunction *fcn, int delta, char return NULL; } if (kind == RZ_ANAL_VAR_KIND_REG) { - reg = rz_reg_index_get (fcn->anal->reg, RZ_ABS (delta)); + reg = rz_reg_index_get (fcn->analysis->reg, RZ_ABS (delta)); if (!reg) { eprintf ("Register wasn't found at the given delta\n"); return NULL; } } - RzAnalVar *var = rz_anal_function_get_var (fcn, kind, delta); + RzAnalysisVar *var = rz_analysis_function_get_var (fcn, kind, delta); if (!var) { - var = RZ_NEW0 (RzAnalVar); + var = RZ_NEW0 (RzAnalysisVar); if (!var) { return NULL; } rz_pvector_push (&fcn->vars, var); var->fcn = fcn; - rz_vector_init (&var->accesses, sizeof (RzAnalVarAccess), NULL, NULL); - rz_vector_init (&var->constraints, sizeof (RzAnalVarConstraint), NULL, NULL); + rz_vector_init (&var->accesses, sizeof (RzAnalysisVarAccess), NULL, NULL); + rz_vector_init (&var->constraints, sizeof (RzAnalysisVarConstraint), NULL, NULL); } else { free (var->name); free (var->regname); @@ -177,7 +177,7 @@ RZ_API RzAnalVar *rz_anal_function_set_var(RzAnalFunction *fcn, int delta, char return var; } -RZ_API void rz_anal_var_set_type(RzAnalVar *var, const char *type) { +RZ_API void rz_analysis_var_set_type(RzAnalysisVar *var, const char *type) { char *nt = strdup (type); if (!nt) { return; @@ -187,11 +187,11 @@ RZ_API void rz_anal_var_set_type(RzAnalVar *var, const char *type) { shadow_var_struct_members (var); } -static void var_free(RzAnalVar *var) { +static void var_free(RzAnalysisVar *var) { if (!var) { return; } - rz_anal_var_clear_accesses (var); + rz_analysis_var_clear_accesses (var); rz_vector_fini (&var->constraints); free (var->name); free (var->regname); @@ -200,12 +200,12 @@ static void var_free(RzAnalVar *var) { free (var); } -RZ_API void rz_anal_var_delete(RzAnalVar *var) { +RZ_API void rz_analysis_var_delete(RzAnalysisVar *var) { rz_return_if_fail (var); - RzAnalFunction *fcn = var->fcn; + RzAnalysisFunction *fcn = var->fcn; size_t i; for (i = 0; i < rz_pvector_len (&fcn->vars); i++) { - RzAnalVar *v = rz_pvector_at (&fcn->vars, i); + RzAnalysisVar *v = rz_pvector_at (&fcn->vars, i); if (v == var) { rz_pvector_remove_at (&fcn->vars, i); var_free (v); @@ -214,11 +214,11 @@ RZ_API void rz_anal_var_delete(RzAnalVar *var) { } } -RZ_API void rz_anal_function_delete_vars_by_kind(RzAnalFunction *fcn, RzAnalVarKind kind) { +RZ_API void rz_analysis_function_delete_vars_by_kind(RzAnalysisFunction *fcn, RzAnalysisVarKind kind) { rz_return_if_fail (fcn); size_t i; for (i = 0; i < rz_pvector_len (&fcn->vars);) { - RzAnalVar *var = rz_pvector_at (&fcn->vars, i); + RzAnalysisVar *var = rz_pvector_at (&fcn->vars, i); if (var->kind == kind) { rz_pvector_remove_at (&fcn->vars, i); var_free (var); @@ -228,7 +228,7 @@ RZ_API void rz_anal_function_delete_vars_by_kind(RzAnalFunction *fcn, RzAnalVarK } } -RZ_API void rz_anal_function_delete_all_vars(RzAnalFunction *fcn) { +RZ_API void rz_analysis_function_delete_all_vars(RzAnalysisFunction *fcn) { void **it; rz_pvector_foreach (&fcn->vars, it) { var_free (*it); @@ -236,29 +236,29 @@ RZ_API void rz_anal_function_delete_all_vars(RzAnalFunction *fcn) { rz_pvector_clear (&fcn->vars); } -RZ_API void rz_anal_function_delete_unused_vars(RzAnalFunction *fcn) { +RZ_API void rz_analysis_function_delete_unused_vars(RzAnalysisFunction *fcn) { void **v; RzPVector *vars_clone = (RzPVector *)rz_vector_clone ((RzVector *)&fcn->vars); rz_pvector_foreach (vars_clone, v) { - RzAnalVar *var = *v; + RzAnalysisVar *var = *v; if (rz_vector_empty (&var->accesses)) { - rz_anal_function_delete_var (fcn, var); + rz_analysis_function_delete_var (fcn, var); } } rz_pvector_free (vars_clone); } -RZ_API void rz_anal_function_delete_var(RzAnalFunction *fcn, RzAnalVar *var) { +RZ_API void rz_analysis_function_delete_var(RzAnalysisFunction *fcn, RzAnalysisVar *var) { rz_return_if_fail (fcn && var); rz_pvector_remove_data (&fcn->vars, var); var_free (var); } -RZ_API RZ_BORROW RzAnalVar *rz_anal_function_get_var_byname(RzAnalFunction *fcn, const char *name) { +RZ_API RZ_BORROW RzAnalysisVar *rz_analysis_function_get_var_byname(RzAnalysisFunction *fcn, const char *name) { rz_return_val_if_fail (fcn && name, NULL); void **it; rz_pvector_foreach (&fcn->vars, it) { - RzAnalVar *var = *it; + RzAnalysisVar *var = *it; if (!strcmp (var->name, name)) { return var; } @@ -266,10 +266,10 @@ RZ_API RZ_BORROW RzAnalVar *rz_anal_function_get_var_byname(RzAnalFunction *fcn, return NULL; } -RZ_API RzAnalVar *rz_anal_function_get_var(RzAnalFunction *fcn, char kind, int delta) { +RZ_API RzAnalysisVar *rz_analysis_function_get_var(RzAnalysisFunction *fcn, char kind, int delta) { void **it; rz_pvector_foreach (&fcn->vars, it) { - RzAnalVar *var = *it; + RzAnalysisVar *var = *it; if (var->kind == kind && var->delta == delta) { return var; } @@ -277,30 +277,30 @@ RZ_API RzAnalVar *rz_anal_function_get_var(RzAnalFunction *fcn, char kind, int d return NULL; } -RZ_API ut64 rz_anal_var_addr(RzAnalVar *var) { +RZ_API ut64 rz_analysis_var_addr(RzAnalysisVar *var) { rz_return_val_if_fail (var, UT64_MAX); - RzAnal *anal = var->fcn->anal; + RzAnalysis *analysis = var->fcn->analysis; const char *regname = NULL; if (var->kind == RZ_ANAL_VAR_KIND_BPV) { - regname = rz_reg_get_name (anal->reg, RZ_REG_NAME_BP); - return rz_reg_getv (anal->reg, regname) + var->delta + var->fcn->bp_off; + regname = rz_reg_get_name (analysis->reg, RZ_REG_NAME_BP); + return rz_reg_getv (analysis->reg, regname) + var->delta + var->fcn->bp_off; } else if (var->kind == RZ_ANAL_VAR_KIND_SPV) { - regname = rz_reg_get_name (anal->reg, RZ_REG_NAME_SP); - return rz_reg_getv (anal->reg, regname) + var->delta; + regname = rz_reg_get_name (analysis->reg, RZ_REG_NAME_SP); + return rz_reg_getv (analysis->reg, regname) + var->delta; } return 0; } -RZ_API st64 rz_anal_function_get_var_stackptr_at(RzAnalFunction *fcn, st64 delta, ut64 addr) { +RZ_API st64 rz_analysis_function_get_var_stackptr_at(RzAnalysisFunction *fcn, st64 delta, ut64 addr) { st64 offset = (st64)addr - (st64)fcn->addr; RzPVector *inst_accesses = ht_up_find (fcn->inst_vars, offset, NULL); if (!inst_accesses) { return ST64_MAX; } - RzAnalVar *var = NULL; + RzAnalysisVar *var = NULL; void **it; rz_pvector_foreach (inst_accesses, it) { - RzAnalVar *v = *it; + RzAnalysisVar *v = *it; if (v->delta == delta) { var = v; break; @@ -311,7 +311,7 @@ RZ_API st64 rz_anal_function_get_var_stackptr_at(RzAnalFunction *fcn, st64 delta } size_t index; rz_vector_lower_bound (&var->accesses, offset, index, ACCESS_CMP); - RzAnalVarAccess *acc = NULL; + RzAnalysisVarAccess *acc = NULL; if (index < var->accesses.len) { acc = rz_vector_index_ptr (&var->accesses, index); } @@ -321,16 +321,16 @@ RZ_API st64 rz_anal_function_get_var_stackptr_at(RzAnalFunction *fcn, st64 delta return acc->stackptr; } -RZ_API const char *rz_anal_function_get_var_reg_at(RzAnalFunction *fcn, st64 delta, ut64 addr) { +RZ_API const char *rz_analysis_function_get_var_reg_at(RzAnalysisFunction *fcn, st64 delta, ut64 addr) { st64 offset = (st64)addr - (st64)fcn->addr; RzPVector *inst_accesses = ht_up_find (fcn->inst_vars, offset, NULL); if (!inst_accesses) { return NULL; } - RzAnalVar *var = NULL; + RzAnalysisVar *var = NULL; void **it; rz_pvector_foreach (inst_accesses, it) { - RzAnalVar *v = *it; + RzAnalysisVar *v = *it; if (v->delta == delta) { var = v; break; @@ -341,7 +341,7 @@ RZ_API const char *rz_anal_function_get_var_reg_at(RzAnalFunction *fcn, st64 del } size_t index; rz_vector_lower_bound (&var->accesses, offset, index, ACCESS_CMP); - RzAnalVarAccess *acc = NULL; + RzAnalysisVarAccess *acc = NULL; if (index < var->accesses.len) { acc = rz_vector_index_ptr (&var->accesses, index); } @@ -351,16 +351,16 @@ RZ_API const char *rz_anal_function_get_var_reg_at(RzAnalFunction *fcn, st64 del return acc->reg; } -RZ_API bool rz_anal_var_check_name(const char *name) { +RZ_API bool rz_analysis_var_check_name(const char *name) { return !isdigit (*name) && strcspn (name, "., =/"); } -RZ_API bool rz_anal_var_rename(RzAnalVar *var, const char *new_name, bool verbose) { +RZ_API bool rz_analysis_var_rename(RzAnalysisVar *var, const char *new_name, bool verbose) { rz_return_val_if_fail (var, false); - if (!rz_anal_var_check_name (new_name)) { + if (!rz_analysis_var_check_name (new_name)) { return false; } - RzAnalVar *v1 = rz_anal_function_get_var_byname (var->fcn, new_name); + RzAnalysisVar *v1 = rz_analysis_function_get_var_byname (var->fcn, new_name); if (v1) { if (verbose) { eprintf ("variable or arg with name `%s` already exist\n", new_name); @@ -376,23 +376,23 @@ RZ_API bool rz_anal_var_rename(RzAnalVar *var, const char *new_name, bool verbos return true; } -RZ_API int rz_anal_var_get_argnum(RzAnalVar *var) { +RZ_API int rz_analysis_var_get_argnum(RzAnalysisVar *var) { rz_return_val_if_fail (var, -1); - RzAnal *anal = var->fcn->anal; + RzAnalysis *analysis = var->fcn->analysis; if (!var->isarg || var->kind != RZ_ANAL_VAR_KIND_REG) { // TODO: support bp and sp too return -1; } if (!var->regname) { return -1; } - RzRegItem *reg = rz_reg_get (anal->reg, var->regname, -1); + RzRegItem *reg = rz_reg_get (analysis->reg, var->regname, -1); if (!reg) { return -1; } int i; - int arg_max = var->fcn->cc ? rz_anal_cc_max_arg (anal, var->fcn->cc) : 0; + int arg_max = var->fcn->cc ? rz_analysis_cc_max_arg (analysis, var->fcn->cc) : 0; for (i = 0; i < arg_max; i++) { - const char *reg_arg = rz_anal_cc_arg (anal, var->fcn->cc, i); + const char *reg_arg = rz_analysis_cc_arg (analysis, var->fcn->cc, i); if (reg_arg && !strcmp (reg->name, reg_arg)) { return i; } @@ -400,21 +400,21 @@ RZ_API int rz_anal_var_get_argnum(RzAnalVar *var) { return -1; } -RZ_API RZ_BORROW RzPVector *rz_anal_function_get_vars_used_at(RzAnalFunction *fcn, ut64 op_addr) { +RZ_API RZ_BORROW RzPVector *rz_analysis_function_get_vars_used_at(RzAnalysisFunction *fcn, ut64 op_addr) { rz_return_val_if_fail (fcn, NULL); return ht_up_find (fcn->inst_vars, (st64)op_addr - (st64)fcn->addr, NULL); } -RZ_API RZ_DEPRECATE RzAnalVar *rz_anal_get_used_function_var(RzAnal *anal, ut64 addr) { - RzList *fcns = rz_anal_get_functions_in (anal, addr); +RZ_API RZ_DEPRECATE RzAnalysisVar *rz_analysis_get_used_function_var(RzAnalysis *analysis, ut64 addr) { + RzList *fcns = rz_analysis_get_functions_in (analysis, addr); if (!fcns) { return NULL; } - RzAnalVar *var = NULL; + RzAnalysisVar *var = NULL; RzListIter *it; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; rz_list_foreach (fcns, it, fcn) { - RzPVector *used_vars = rz_anal_function_get_vars_used_at (fcn, addr); + RzPVector *used_vars = rz_analysis_function_get_vars_used_at (fcn, addr); if (used_vars && !rz_pvector_empty (used_vars)) { var = rz_pvector_at (used_vars, 0); break; @@ -424,22 +424,22 @@ RZ_API RZ_DEPRECATE RzAnalVar *rz_anal_get_used_function_var(RzAnal *anal, ut64 return var; } -RZ_API RzAnalVar *rz_anal_var_get_dst_var(RzAnalVar *var) { +RZ_API RzAnalysisVar *rz_analysis_var_get_dst_var(RzAnalysisVar *var) { rz_return_val_if_fail (var, NULL); - RzAnalVarAccess *acc; + RzAnalysisVarAccess *acc; rz_vector_foreach (&var->accesses, acc) { if (!(acc->type & RZ_ANAL_VAR_ACCESS_TYPE_READ)) { continue; } ut64 addr = var->fcn->addr + acc->offset; - RzPVector *used_vars = rz_anal_function_get_vars_used_at (var->fcn, addr); + RzPVector *used_vars = rz_analysis_function_get_vars_used_at (var->fcn, addr); void **it; rz_pvector_foreach (used_vars, it) { - RzAnalVar *used_var = *it; + RzAnalysisVar *used_var = *it; if (used_var == var) { continue; } - RzAnalVarAccess *other_acc = rz_anal_var_get_access_at (used_var, addr); + RzAnalysisVarAccess *other_acc = rz_analysis_var_get_access_at (used_var, addr); if (other_acc && other_acc->type & RZ_ANAL_VAR_ACCESS_TYPE_WRITE) { return used_var; } @@ -448,14 +448,14 @@ RZ_API RzAnalVar *rz_anal_var_get_dst_var(RzAnalVar *var) { return NULL; } -RZ_API void rz_anal_var_set_access(RzAnalVar *var, const char *reg, ut64 access_addr, int access_type, st64 stackptr) { +RZ_API void rz_analysis_var_set_access(RzAnalysisVar *var, const char *reg, ut64 access_addr, int access_type, st64 stackptr) { rz_return_if_fail (var); st64 offset = (st64)access_addr - (st64)var->fcn->addr; // accesses are stored ordered by offset, use binary search to get the matching existing or the index to insert a new one size_t index; rz_vector_lower_bound (&var->accesses, offset, index, ACCESS_CMP); - RzAnalVarAccess *acc = NULL; + RzAnalysisVarAccess *acc = NULL; if (index < var->accesses.len) { acc = rz_vector_index_ptr (&var->accesses, index); } @@ -467,7 +467,7 @@ RZ_API void rz_anal_var_set_access(RzAnalVar *var, const char *reg, ut64 access_ acc->type |= (ut8)access_type; acc->stackptr = stackptr; - acc->reg = rz_str_constpool_get (&var->fcn->anal->constpool, reg); + acc->reg = rz_str_constpool_get (&var->fcn->analysis->constpool, reg); // add the inverse reference from the instruction to the var RzPVector *inst_accesses = ht_up_find (var->fcn->inst_vars, (ut64)offset, NULL); @@ -483,7 +483,7 @@ RZ_API void rz_anal_var_set_access(RzAnalVar *var, const char *reg, ut64 access_ } } -RZ_API void rz_anal_var_remove_access_at(RzAnalVar *var, ut64 address) { +RZ_API void rz_analysis_var_remove_access_at(RzAnalysisVar *var, ut64 address) { rz_return_if_fail (var); st64 offset = (st64)address - (st64)var->fcn->addr; size_t index; @@ -491,7 +491,7 @@ RZ_API void rz_anal_var_remove_access_at(RzAnalVar *var, ut64 address) { if (index >= var->accesses.len) { return; } - RzAnalVarAccess *acc = rz_vector_index_ptr (&var->accesses, index); + RzAnalysisVarAccess *acc = rz_vector_index_ptr (&var->accesses, index); if (acc->offset == offset) { rz_vector_remove_at (&var->accesses, index, NULL); RzPVector *inst_accesses = ht_up_find (var->fcn->inst_vars, (ut64)offset, NULL); @@ -499,12 +499,12 @@ RZ_API void rz_anal_var_remove_access_at(RzAnalVar *var, ut64 address) { } } -RZ_API void rz_anal_var_clear_accesses(RzAnalVar *var) { +RZ_API void rz_analysis_var_clear_accesses(RzAnalysisVar *var) { rz_return_if_fail (var); - RzAnalFunction *fcn = var->fcn; + RzAnalysisFunction *fcn = var->fcn; if (fcn->inst_vars) { // remove all inverse references to the var's accesses - RzAnalVarAccess *acc; + RzAnalysisVarAccess *acc; rz_vector_foreach (&var->accesses, acc) { RzPVector *inst_accesses = ht_up_find (fcn->inst_vars, (ut64)acc->offset, NULL); if (!inst_accesses) { @@ -516,7 +516,7 @@ RZ_API void rz_anal_var_clear_accesses(RzAnalVar *var) { rz_vector_clear (&var->accesses); } -RZ_API RzAnalVarAccess *rz_anal_var_get_access_at(RzAnalVar *var, ut64 addr) { +RZ_API RzAnalysisVarAccess *rz_analysis_var_get_access_at(RzAnalysisVar *var, ut64 addr) { rz_return_val_if_fail (var, NULL); st64 offset = (st64)addr - (st64)var->fcn->addr; size_t index; @@ -524,18 +524,18 @@ RZ_API RzAnalVarAccess *rz_anal_var_get_access_at(RzAnalVar *var, ut64 addr) { if (index >= var->accesses.len) { return NULL; } - RzAnalVarAccess *acc = rz_vector_index_ptr (&var->accesses, index); + RzAnalysisVarAccess *acc = rz_vector_index_ptr (&var->accesses, index); if (acc->offset == offset) { return acc; } return NULL; } -RZ_API void rz_anal_var_add_constraint(RzAnalVar *var, RZ_BORROW RzAnalVarConstraint *constraint) { +RZ_API void rz_analysis_var_add_constraint(RzAnalysisVar *var, RZ_BORROW RzAnalysisVarConstraint *constraint) { rz_vector_push (&var->constraints, constraint); } -RZ_API char *rz_anal_var_get_constraints_readable(RzAnalVar *var) { +RZ_API char *rz_analysis_var_get_constraints_readable(RzAnalysisVar *var) { size_t n = var->constraints.len; if (!n) { return NULL; @@ -545,7 +545,7 @@ RZ_API char *rz_anal_var_get_constraints_readable(RzAnalVar *var) { rz_strbuf_init (&sb); size_t i; for (i = 0; i < n; i += 1) { - RzAnalVarConstraint *constr = rz_vector_index_ptr (&var->constraints, i); + RzAnalysisVarConstraint *constr = rz_vector_index_ptr (&var->constraints, i); switch (constr->cond) { case RZ_ANAL_COND_LE: if (high) { @@ -581,10 +581,10 @@ RZ_API char *rz_anal_var_get_constraints_readable(RzAnalVar *var) { return rz_strbuf_drain_nofree (&sb); } -RZ_API int rz_anal_var_count(RzAnal *a, RzAnalFunction *fcn, int kind, int type) { +RZ_API int rz_analysis_var_count(RzAnalysis *a, RzAnalysisFunction *fcn, int kind, int type) { // type { local: 0, arg: 1 }; - RzList *list = rz_anal_var_list (a, fcn, kind); - RzAnalVar *var; + RzList *list = rz_analysis_var_list (a, fcn, kind); + RzAnalysisVar *var; RzListIter *iter; int count[2] = { 0 @@ -600,7 +600,7 @@ RZ_API int rz_anal_var_count(RzAnal *a, RzAnalFunction *fcn, int kind, int type) return count[type]; } -static bool var_add_structure_fields_to_list(RzAnal *a, RzAnalVar *av, RzList *list) { +static bool var_add_structure_fields_to_list(RzAnalysis *a, RzAnalysisVar *av, RzList *list) { Sdb *TDB = a->sdb_types; const char *type_kind = sdb_const_get (TDB, av->type, 0); if (type_kind && !strcmp (type_kind, "struct")) { @@ -612,7 +612,7 @@ static bool var_add_structure_fields_to_list(RzAnal *a, RzAnalVar *av, RzList *l char *field_type = sdb_array_get (TDB, field_key, 0, NULL); ut64 field_offset = sdb_array_get_num (TDB, field_key, 1, NULL); new_name = rz_str_newf ("%s.%s", av->name, field_name); - RzAnalVarField *field = RZ_NEW0 (RzAnalVarField); + RzAnalysisVarField *field = RZ_NEW0 (RzAnalysisVarField); field->name = new_name; field->delta = av->delta + field_offset; field->field = true; @@ -627,24 +627,24 @@ static bool var_add_structure_fields_to_list(RzAnal *a, RzAnalVar *av, RzList *l return false; } -static const char *get_regname(RzAnal *anal, RzAnalValue *value) { +static const char *get_regname(RzAnalysis *analysis, RzAnalysisValue *value) { const char *name = NULL; if (value && value->reg && value->reg->name) { name = value->reg->name; - RzRegItem *ri = rz_reg_get (anal->reg, value->reg->name, -1); - if (ri && (ri->size == 32) && (anal->bits == 64)) { - name = rz_reg_32_to_64 (anal->reg, value->reg->name); + RzRegItem *ri = rz_reg_get (analysis->reg, value->reg->name, -1); + if (ri && (ri->size == 32) && (analysis->bits == 64)) { + name = rz_reg_32_to_64 (analysis->reg, value->reg->name); } } return name; } -RZ_API RZ_OWN char *rz_anal_function_autoname_var(RzAnalFunction *fcn, char kind, const char *pfx, int ptr) { +RZ_API RZ_OWN char *rz_analysis_function_autoname_var(RzAnalysisFunction *fcn, char kind, const char *pfx, int ptr) { void **it; const ut32 uptr = RZ_ABS (ptr); char *varname = rz_str_newf ("%s_%xh", pfx, uptr); rz_pvector_foreach (&fcn->vars, it) { - RzAnalVar *var = *it; + RzAnalysisVar *var = *it; if (!strcmp (varname, var->name)) { if (var->kind != kind) { const char *k = kind == RZ_ANAL_VAR_KIND_SPV ? "sp" : "bp"; @@ -656,17 +656,17 @@ RZ_API RZ_OWN char *rz_anal_function_autoname_var(RzAnalFunction *fcn, char kind do { free (varname); varname = rz_str_newf ("%s_%xh_%u", pfx, uptr, i++); - } while (rz_anal_function_get_var_byname (fcn, varname)); + } while (rz_analysis_function_get_var_byname (fcn, varname)); return varname; } } return varname; } -static RzAnalVar *get_stack_var(RzAnalFunction *fcn, int delta) { +static RzAnalysisVar *get_stack_var(RzAnalysisFunction *fcn, int delta) { void **it; rz_pvector_foreach (&fcn->vars, it) { - RzAnalVar *var = *it; + RzAnalysisVar *var = *it; bool is_stack = var->kind == RZ_ANAL_VAR_KIND_SPV || var->kind == RZ_ANAL_VAR_KIND_BPV; if (is_stack && var->delta == delta) { return var; @@ -675,11 +675,11 @@ static RzAnalVar *get_stack_var(RzAnalFunction *fcn, int delta) { return NULL; } -static void extract_arg(RzAnal *anal, RzAnalFunction *fcn, RzAnalOp *op, const char *reg, const char *sign, char type) { +static void extract_arg(RzAnalysis *analysis, RzAnalysisFunction *fcn, RzAnalysisOp *op, const char *reg, const char *sign, char type) { st64 ptr = 0; char *addr, *esil_buf = NULL; - rz_return_if_fail (anal && fcn && op && reg); + rz_return_if_fail (analysis && fcn && op && reg); size_t i; for (i = 0; i < RZ_ARRAY_SIZE (op->src); i++) { @@ -716,11 +716,11 @@ static void extract_arg(RzAnal *anal, RzAnalFunction *fcn, RzAnalOp *op, const c if (strncmp (addr, "0x", 2)) { //XXX: This is a workaround for inconsistent esil if (!op->stackop && op->dst) { - const char *sp = rz_reg_get_name (anal->reg, RZ_REG_NAME_SP); - const char *bp = rz_reg_get_name (anal->reg, RZ_REG_NAME_BP); + const char *sp = rz_reg_get_name (analysis->reg, RZ_REG_NAME_SP); + const char *bp = rz_reg_get_name (analysis->reg, RZ_REG_NAME_BP); const char *rn = op->dst->reg ? op->dst->reg->name : NULL; if (rn && ((bp && !strcmp (bp, rn)) || (sp && !strcmp (sp, rn)))) { - if (anal->verbose) { + if (analysis->verbose) { eprintf ("Warning: Analysis didn't fill op->stackop for instruction that alters stack at 0x%" PFMT64x ".\n", op->addr); } goto beach; @@ -748,7 +748,7 @@ static void extract_arg(RzAnal *anal, RzAnalFunction *fcn, RzAnalOp *op, const c } } - if (anal->verbose && (!op->src[0] || !op->dst)) { + if (analysis->verbose && (!op->src[0] || !op->dst)) { eprintf ("Warning: Analysis didn't fill op->src/dst at 0x%" PFMT64x ".\n", op->addr); } @@ -762,39 +762,39 @@ static void extract_arg(RzAnal *anal, RzAnalFunction *fcn, RzAnalOp *op, const c } else { frame_off = ptr - fcn->bp_off; } - RzAnalVar *var = get_stack_var (fcn, frame_off); + RzAnalysisVar *var = get_stack_var (fcn, frame_off); if (var) { - rz_anal_var_set_access (var, reg, op->addr, rw, ptr); + rz_analysis_var_set_access (var, reg, op->addr, rw, ptr); goto beach; } char *varname = NULL, *vartype = NULL; if (isarg) { - const char *place = fcn->cc ? rz_anal_cc_arg (anal, fcn->cc, ST32_MAX) : NULL; + const char *place = fcn->cc ? rz_analysis_cc_arg (analysis, fcn->cc, ST32_MAX) : NULL; bool stack_rev = place ? !strcmp (place, "stack_rev") : false; - char *fname = rz_type_func_guess (anal->sdb_types, fcn->name); + char *fname = rz_type_func_guess (analysis->sdb_types, fcn->name); if (fname) { ut64 sum_sz = 0; size_t from, to, i; if (stack_rev) { - const size_t cnt = rz_type_func_args_count (anal->sdb_types, fname); + const size_t cnt = rz_type_func_args_count (analysis->sdb_types, fname); from = cnt ? cnt - 1 : cnt; - to = fcn->cc ? rz_anal_cc_max_arg (anal, fcn->cc) : 0; + to = fcn->cc ? rz_analysis_cc_max_arg (analysis, fcn->cc) : 0; } else { - from = fcn->cc ? rz_anal_cc_max_arg (anal, fcn->cc) : 0; - to = rz_type_func_args_count (anal->sdb_types, fname); + from = fcn->cc ? rz_analysis_cc_max_arg (analysis, fcn->cc) : 0; + to = rz_type_func_args_count (analysis->sdb_types, fname); } - const int bytes = (fcn->bits ? fcn->bits : anal->bits) / 8; + const int bytes = (fcn->bits ? fcn->bits : analysis->bits) / 8; for (i = from; stack_rev ? i >= to : i < to; stack_rev ? i-- : i++) { - char *tp = rz_type_func_args_type (anal->sdb_types, fname, i); + char *tp = rz_type_func_args_type (analysis->sdb_types, fname, i); if (!tp) { break; } if (sum_sz == frame_off) { vartype = tp; - varname = strdup (rz_type_func_args_name (anal->sdb_types, fname, i)); + varname = strdup (rz_type_func_args_name (analysis->sdb_types, fname, i)); break; } - ut64 bit_sz = rz_type_get_bitsize (anal->sdb_types, tp); + ut64 bit_sz = rz_type_get_bitsize (analysis->sdb_types, tp); sum_sz += bit_sz ? bit_sz / 8 : bytes; sum_sz = RZ_ROUND (sum_sz, bytes); free (tp); @@ -803,34 +803,34 @@ static void extract_arg(RzAnal *anal, RzAnalFunction *fcn, RzAnalOp *op, const c } } if (!varname) { - if (anal->opt.varname_stack) { + if (analysis->opt.varname_stack) { varname = rz_str_newf ("%s_%" PFMT64x "h", pfx, RZ_ABS (frame_off)); } else { - varname = rz_anal_function_autoname_var (fcn, type, pfx, ptr); + varname = rz_analysis_function_autoname_var (fcn, type, pfx, ptr); } } if (varname) { - RzAnalVar *var = rz_anal_function_set_var (fcn, frame_off, type, vartype, anal->bits / 8, isarg, varname); + RzAnalysisVar *var = rz_analysis_function_set_var (fcn, frame_off, type, vartype, analysis->bits / 8, isarg, varname); if (var) { - rz_anal_var_set_access (var, reg, op->addr, rw, ptr); + rz_analysis_var_set_access (var, reg, op->addr, rw, ptr); } free (varname); } free (vartype); } else { st64 frame_off = -(ptr + fcn->bp_off); - RzAnalVar *var = get_stack_var (fcn, frame_off); + RzAnalysisVar *var = get_stack_var (fcn, frame_off); if (var) { - rz_anal_var_set_access (var, reg, op->addr, rw, -ptr); + rz_analysis_var_set_access (var, reg, op->addr, rw, -ptr); goto beach; } - char *varname = anal->opt.varname_stack + char *varname = analysis->opt.varname_stack ? rz_str_newf ("%s_%" PFMT64x "h", VARPREFIX, RZ_ABS (frame_off)) - : rz_anal_function_autoname_var (fcn, type, VARPREFIX, -ptr); + : rz_analysis_function_autoname_var (fcn, type, VARPREFIX, -ptr); if (varname) { - RzAnalVar *var = rz_anal_function_set_var (fcn, frame_off, type, NULL, anal->bits / 8, false, varname); + RzAnalysisVar *var = rz_analysis_function_set_var (fcn, frame_off, type, NULL, analysis->bits / 8, false, varname); if (var) { - rz_anal_var_set_access (var, reg, op->addr, rw, -ptr); + rz_analysis_var_set_access (var, reg, op->addr, rw, -ptr); } free (varname); } @@ -839,9 +839,9 @@ beach: free (esil_buf); } -static bool is_reg_in_src(const char *regname, RzAnal *anal, RzAnalOp *op); +static bool is_reg_in_src(const char *regname, RzAnalysis *analysis, RzAnalysisOp *op); -static inline bool op_affect_dst(RzAnalOp* op) { +static inline bool op_affect_dst(RzAnalysisOp* op) { switch (op->type) { case RZ_ANAL_OP_TYPE_ADD: case RZ_ANAL_OP_TYPE_SUB: @@ -871,25 +871,25 @@ static inline bool arch_destroys_dst(const char *arch) { return (STR_EQUAL (arch, "arm") || STR_EQUAL (arch, "riscv") || STR_EQUAL (arch, "ppc")); } -static bool is_used_like_arg(const char *regname, const char *opsreg, const char *opdreg, RzAnalOp *op, RzAnal *anal) { - RzAnalValue *dst = op->dst; - RzAnalValue *src = op->src[0]; +static bool is_used_like_arg(const char *regname, const char *opsreg, const char *opdreg, RzAnalysisOp *op, RzAnalysis *analysis) { + RzAnalysisValue *dst = op->dst; + RzAnalysisValue *src = op->src[0]; switch (op->type) { case RZ_ANAL_OP_TYPE_POP: return false; case RZ_ANAL_OP_TYPE_MOV: - return (is_reg_in_src (regname, anal, op)) || (STR_EQUAL (opdreg, regname) && dst->memref); + return (is_reg_in_src (regname, analysis, op)) || (STR_EQUAL (opdreg, regname) && dst->memref); case RZ_ANAL_OP_TYPE_CMOV: if (STR_EQUAL (opdreg, regname)) { return false; } - if (is_reg_in_src (regname, anal, op)) { + if (is_reg_in_src (regname, analysis, op)) { return true; } return false; case RZ_ANAL_OP_TYPE_LEA: case RZ_ANAL_OP_TYPE_LOAD: - if (is_reg_in_src (regname, anal, op)) { + if (is_reg_in_src (regname, analysis, op)) { return true; } if (STR_EQUAL (opdreg, regname)) { @@ -902,36 +902,36 @@ static bool is_used_like_arg(const char *regname, const char *opsreg, const char } //fallthrough default: - if (op_affect_dst (op) && arch_destroys_dst (anal->cur->arch)) { - if (is_reg_in_src (regname, anal, op)) { + if (op_affect_dst (op) && arch_destroys_dst (analysis->cur->arch)) { + if (is_reg_in_src (regname, analysis, op)) { return true; } return false; } - return ((STR_EQUAL (opdreg, regname)) || (is_reg_in_src (regname, anal, op))); + return ((STR_EQUAL (opdreg, regname)) || (is_reg_in_src (regname, analysis, op))); } } -static bool is_reg_in_src (const char *regname, RzAnal *anal, RzAnalOp *op) { - const char* opsreg0 = op->src[0] ? get_regname (anal, op->src[0]) : NULL; - const char* opsreg1 = op->src[1] ? get_regname (anal, op->src[1]) : NULL; - const char* opsreg2 = op->src[2] ? get_regname (anal, op->src[2]) : NULL; +static bool is_reg_in_src (const char *regname, RzAnalysis *analysis, RzAnalysisOp *op) { + const char* opsreg0 = op->src[0] ? get_regname (analysis, op->src[0]) : NULL; + const char* opsreg1 = op->src[1] ? get_regname (analysis, op->src[1]) : NULL; + const char* opsreg2 = op->src[2] ? get_regname (analysis, op->src[2]) : NULL; return (STR_EQUAL (regname, opsreg0)) || (STR_EQUAL (regname, opsreg1)) || (STR_EQUAL (regname, opsreg2)); } -RZ_API void rz_anal_extract_rarg(RzAnal *anal, RzAnalOp *op, RzAnalFunction *fcn, int *reg_set, int *count) { +RZ_API void rz_analysis_extract_rarg(RzAnalysis *analysis, RzAnalysisOp *op, RzAnalysisFunction *fcn, int *reg_set, int *count) { int i, argc = 0; - rz_return_if_fail (anal && op && fcn); - const char *opsreg = op->src[0] ? get_regname (anal, op->src[0]) : NULL; - const char *opdreg = op->dst ? get_regname (anal, op->dst) : NULL; - const int size = (fcn->bits ? fcn->bits : anal->bits) / 8; + rz_return_if_fail (analysis && op && fcn); + const char *opsreg = op->src[0] ? get_regname (analysis, op->src[0]) : NULL; + const char *opdreg = op->dst ? get_regname (analysis, op->dst) : NULL; + const int size = (fcn->bits ? fcn->bits : analysis->bits) / 8; if (!fcn->cc) { RZ_LOG_DEBUG ("No calling convention for function '%s' to extract register arguments\n", fcn->name); return; } - char *fname = rz_type_func_guess (anal->sdb_types, fcn->name); - Sdb *TDB = anal->sdb_types; - int max_count = rz_anal_cc_max_arg (anal, fcn->cc); + char *fname = rz_type_func_guess (analysis->sdb_types, fcn->name); + Sdb *TDB = analysis->sdb_types; + int max_count = rz_analysis_cc_max_arg (analysis, fcn->cc); if (!max_count || (*count >= max_count)) { free (fname); return; @@ -946,14 +946,14 @@ RZ_API void rz_anal_extract_rarg(RzAnal *anal, RzAnalOp *op, RzAnalFunction *fcn int callee_rargs = 0; char *callee = NULL; ut64 offset = op->jump == UT64_MAX ? op->ptr : op->jump; - RzAnalFunction *f = rz_anal_get_function_at (anal, offset); + RzAnalysisFunction *f = rz_analysis_get_function_at (analysis, offset); if (!f) { - RzCore *core = (RzCore *)anal->coreb.core; + RzCore *core = (RzCore *)analysis->coreb.core; RzFlagItem *flag = rz_flag_get_by_spaces (core->flags, offset, RZ_FLAGS_FS_IMPORTS, NULL); if (flag) { callee = rz_type_func_guess (TDB, flag->name); if (callee) { - const char *cc = rz_anal_cc_func (anal, callee); + const char *cc = rz_analysis_cc_func (analysis, callee); if (cc && !strcmp (fcn->cc, cc)) { callee_rargs = RZ_MIN (max_count, rz_type_func_args_count (TDB, callee)); } @@ -966,8 +966,8 @@ RZ_API void rz_anal_extract_rarg(RzAnal *anal, RzAnalOp *op, RzAnalFunction *fcn } callee_rargs = callee_rargs ? callee_rargs - : rz_anal_var_count (anal, f, RZ_ANAL_VAR_KIND_REG, 1); - callee_rargs_l = rz_anal_var_list (anal, f, RZ_ANAL_VAR_KIND_REG); + : rz_analysis_var_count (analysis, f, RZ_ANAL_VAR_KIND_REG, 1); + callee_rargs_l = rz_analysis_var_list (analysis, f, RZ_ANAL_VAR_KIND_REG); } size_t i; for (i = 0; i < callee_rargs; i++) { @@ -978,8 +978,8 @@ RZ_API void rz_anal_extract_rarg(RzAnal *anal, RzAnalOp *op, RzAnalFunction *fcn char *type = NULL; char *name = NULL; int delta = 0; - const char *regname = rz_anal_cc_arg (anal, fcn->cc, i); - RzRegItem *ri = rz_reg_get (anal->reg, regname, -1); + const char *regname = rz_analysis_cc_arg (analysis, fcn->cc, i); + RzRegItem *ri = rz_reg_get (analysis->reg, regname, -1); if (ri) { delta = ri->index; } @@ -995,9 +995,9 @@ RZ_API void rz_anal_extract_rarg(RzAnal *anal, RzAnalOp *op, RzAnalFunction *fcn reg_set[i] = 1; } else { RzListIter *it; - RzAnalVar *arg, *found_arg = NULL; + RzAnalysisVar *arg, *found_arg = NULL; rz_list_foreach (callee_rargs_l, it, arg) { - if (rz_anal_var_get_argnum (arg) == i) { + if (rz_analysis_var_get_argnum (arg) == i) { found_arg = arg; break; } @@ -1011,7 +1011,7 @@ RZ_API void rz_anal_extract_rarg(RzAnal *anal, RzAnalOp *op, RzAnalFunction *fcn name = rz_str_newf ("arg%zu", i + 1); vname = name; } - rz_anal_function_set_var (fcn, delta, RZ_ANAL_VAR_KIND_REG, type, size, true, vname); + rz_analysis_function_set_var (fcn, delta, RZ_ANAL_VAR_KIND_REG, type, size, true, vname); (*count)++; free (name); free (type); @@ -1023,20 +1023,20 @@ RZ_API void rz_anal_extract_rarg(RzAnal *anal, RzAnalOp *op, RzAnalFunction *fcn } for (i = 0; i < max_count; i++) { - const char *regname = rz_anal_cc_arg (anal, fcn->cc, i); + const char *regname = rz_analysis_cc_arg (analysis, fcn->cc, i); if (regname) { int delta = 0; RzRegItem *ri = NULL; - RzAnalVar *var = NULL; - bool is_used_like_an_arg = is_used_like_arg (regname, opsreg, opdreg, op, anal); + RzAnalysisVar *var = NULL; + bool is_used_like_an_arg = is_used_like_arg (regname, opsreg, opdreg, op, analysis); if (reg_set[i] != 2 && is_used_like_an_arg) { - ri = rz_reg_get (anal->reg, regname, -1); + ri = rz_reg_get (analysis->reg, regname, -1); if (ri) { delta = ri->index; } } if (reg_set[i] == 1 && is_used_like_an_arg) { - var = rz_anal_function_get_var (fcn, RZ_ANAL_VAR_KIND_REG, delta); + var = rz_analysis_function_get_var (fcn, RZ_ANAL_VAR_KIND_REG, delta); } else if (reg_set[i] != 2 && is_used_like_an_arg) { const char *vname = NULL; char *type = NULL; @@ -1049,65 +1049,65 @@ RZ_API void rz_anal_extract_rarg(RzAnal *anal, RzAnalOp *op, RzAnalFunction *fcn name = rz_str_newf ("arg%d", i + 1); vname = name; } - var = rz_anal_function_set_var (fcn, delta, RZ_ANAL_VAR_KIND_REG, type, size, true, vname); + var = rz_analysis_function_set_var (fcn, delta, RZ_ANAL_VAR_KIND_REG, type, size, true, vname); free (name); free (type); (*count)++; } else { - if (is_reg_in_src (regname, anal, op) || STR_EQUAL (opdreg, regname)) { + if (is_reg_in_src (regname, analysis, op) || STR_EQUAL (opdreg, regname)) { reg_set[i] = 2; } continue; } - if (is_reg_in_src (regname, anal, op) || STR_EQUAL (regname, opdreg)) { + if (is_reg_in_src (regname, analysis, op) || STR_EQUAL (regname, opdreg)) { reg_set[i] = 1; } if (var) { - rz_anal_var_set_access (var, var->regname, op->addr, RZ_ANAL_VAR_ACCESS_TYPE_READ, 0); - rz_meta_set_string (anal, RZ_META_TYPE_VARTYPE, op->addr, var->name); + rz_analysis_var_set_access (var, var->regname, op->addr, RZ_ANAL_VAR_ACCESS_TYPE_READ, 0); + rz_meta_set_string (analysis, RZ_META_TYPE_VARTYPE, op->addr, var->name); } } } - const char *selfreg = rz_anal_cc_self (anal, fcn->cc); + const char *selfreg = rz_analysis_cc_self (analysis, fcn->cc); if (selfreg) { - bool is_used_like_an_arg = is_used_like_arg (selfreg, opsreg, opdreg, op, anal); + bool is_used_like_an_arg = is_used_like_arg (selfreg, opsreg, opdreg, op, analysis); if (reg_set[i] != 2 && is_used_like_an_arg) { int delta = 0; char *vname = strdup ("self"); - RzRegItem *ri = rz_reg_get (anal->reg, selfreg, -1); + RzRegItem *ri = rz_reg_get (analysis->reg, selfreg, -1); if (ri) { delta = ri->index; } - RzAnalVar *newvar = rz_anal_function_set_var (fcn, delta, RZ_ANAL_VAR_KIND_REG, 0, size, true, vname); + RzAnalysisVar *newvar = rz_analysis_function_set_var (fcn, delta, RZ_ANAL_VAR_KIND_REG, 0, size, true, vname); if (newvar) { - rz_anal_var_set_access (newvar, newvar->regname, op->addr, RZ_ANAL_VAR_ACCESS_TYPE_READ, 0); + rz_analysis_var_set_access (newvar, newvar->regname, op->addr, RZ_ANAL_VAR_ACCESS_TYPE_READ, 0); } - rz_meta_set_string (anal, RZ_META_TYPE_VARTYPE, op->addr, vname); + rz_meta_set_string (analysis, RZ_META_TYPE_VARTYPE, op->addr, vname); free (vname); (*count)++; } else { - if (is_reg_in_src (selfreg, anal, op) || STR_EQUAL (opdreg, selfreg)) { + if (is_reg_in_src (selfreg, analysis, op) || STR_EQUAL (opdreg, selfreg)) { reg_set[i] = 2; } } i++; } - const char *errorreg = rz_anal_cc_error (anal, fcn->cc); + const char *errorreg = rz_analysis_cc_error (analysis, fcn->cc); if (errorreg) { if (reg_set[i] == 0 && STR_EQUAL (opdreg, errorreg)) { int delta = 0; char *vname = strdup ("error"); - RzRegItem *ri = rz_reg_get (anal->reg, errorreg, -1); + RzRegItem *ri = rz_reg_get (analysis->reg, errorreg, -1); if (ri) { delta = ri->index; } - RzAnalVar *newvar = rz_anal_function_set_var (fcn, delta, RZ_ANAL_VAR_KIND_REG, 0, size, true, vname); + RzAnalysisVar *newvar = rz_analysis_function_set_var (fcn, delta, RZ_ANAL_VAR_KIND_REG, 0, size, true, vname); if (newvar) { - rz_anal_var_set_access (newvar, newvar->regname, op->addr, RZ_ANAL_VAR_ACCESS_TYPE_READ, 0); + rz_analysis_var_set_access (newvar, newvar->regname, op->addr, RZ_ANAL_VAR_ACCESS_TYPE_READ, 0); } - rz_meta_set_string (anal, RZ_META_TYPE_VARTYPE, op->addr, vname); + rz_meta_set_string (analysis, RZ_META_TYPE_VARTYPE, op->addr, vname); free (vname); (*count)++; reg_set[i] = 2; @@ -1116,19 +1116,19 @@ RZ_API void rz_anal_extract_rarg(RzAnal *anal, RzAnalOp *op, RzAnalFunction *fcn free (fname); } -RZ_API void rz_anal_extract_vars(RzAnal *anal, RzAnalFunction *fcn, RzAnalOp *op) { - rz_return_if_fail (anal && fcn && op); +RZ_API void rz_analysis_extract_vars(RzAnalysis *analysis, RzAnalysisFunction *fcn, RzAnalysisOp *op) { + rz_return_if_fail (analysis && fcn && op); - const char *BP = anal->reg->name[RZ_REG_NAME_BP]; - const char *SP = anal->reg->name[RZ_REG_NAME_SP]; + const char *BP = analysis->reg->name[RZ_REG_NAME_BP]; + const char *SP = analysis->reg->name[RZ_REG_NAME_SP]; if (BP) { - extract_arg (anal, fcn, op, BP, "+", RZ_ANAL_VAR_KIND_BPV); - extract_arg (anal, fcn, op, BP, "-", RZ_ANAL_VAR_KIND_BPV); + extract_arg (analysis, fcn, op, BP, "+", RZ_ANAL_VAR_KIND_BPV); + extract_arg (analysis, fcn, op, BP, "-", RZ_ANAL_VAR_KIND_BPV); } - extract_arg (anal, fcn, op, SP, "+", RZ_ANAL_VAR_KIND_SPV); + extract_arg (analysis, fcn, op, SP, "+", RZ_ANAL_VAR_KIND_SPV); } -static RzList *var_generate_list(RzAnal *a, RzAnalFunction *fcn, int kind) { +static RzList *var_generate_list(RzAnalysis *a, RzAnalysisFunction *fcn, int kind) { if (!a || !fcn) { return NULL; } @@ -1138,7 +1138,7 @@ static RzList *var_generate_list(RzAnal *a, RzAnalFunction *fcn, int kind) { } void **it; rz_pvector_foreach (&fcn->vars, it) { - RzAnalVar *var = *it; + RzAnalysisVar *var = *it; if (var->kind == kind) { rz_list_push (list, var); } @@ -1146,16 +1146,16 @@ static RzList *var_generate_list(RzAnal *a, RzAnalFunction *fcn, int kind) { return list; } -RZ_API RzList *rz_anal_var_all_list(RzAnal *anal, RzAnalFunction *fcn) { - // rz_anal_var_list if there are not vars with that kind returns a list with +RZ_API RzList *rz_analysis_var_all_list(RzAnalysis *analysis, RzAnalysisFunction *fcn) { + // rz_analysis_var_list if there are not vars with that kind returns a list with // zero element.. which is an unnecessary loss of cpu time RzList *list = rz_list_new (); if (!list) { return NULL; } - RzList *reg_vars = rz_anal_var_list (anal, fcn, RZ_ANAL_VAR_KIND_REG); - RzList *bpv_vars = rz_anal_var_list (anal, fcn, RZ_ANAL_VAR_KIND_BPV); - RzList *spv_vars = rz_anal_var_list (anal, fcn, RZ_ANAL_VAR_KIND_SPV); + RzList *reg_vars = rz_analysis_var_list (analysis, fcn, RZ_ANAL_VAR_KIND_REG); + RzList *bpv_vars = rz_analysis_var_list (analysis, fcn, RZ_ANAL_VAR_KIND_BPV); + RzList *spv_vars = rz_analysis_var_list (analysis, fcn, RZ_ANAL_VAR_KIND_SPV); rz_list_join (list, reg_vars); rz_list_join (list, bpv_vars); rz_list_join (list, spv_vars); @@ -1165,11 +1165,11 @@ RZ_API RzList *rz_anal_var_all_list(RzAnal *anal, RzAnalFunction *fcn) { return list; } -RZ_API RzList *rz_anal_var_list(RzAnal *a, RzAnalFunction *fcn, int kind) { +RZ_API RzList *rz_analysis_var_list(RzAnalysis *a, RzAnalysisFunction *fcn, int kind) { return var_generate_list (a, fcn, kind); } -static void var_field_free(RzAnalVarField *field) { +static void var_field_free(RzAnalysisVarField *field) { if (!field) { return; } @@ -1177,7 +1177,7 @@ static void var_field_free(RzAnalVarField *field) { free (field); } -RZ_API RzList *rz_anal_function_get_var_fields(RzAnalFunction *fcn, int kind) { +RZ_API RzList *rz_analysis_function_get_var_fields(RzAnalysisFunction *fcn, int kind) { if (!fcn) { return NULL; } @@ -1187,15 +1187,15 @@ RZ_API RzList *rz_anal_function_get_var_fields(RzAnalFunction *fcn, int kind) { } void **it; rz_pvector_foreach (&fcn->vars, it) { - RzAnalVar *var = *it; + RzAnalysisVar *var = *it; if (var->kind != kind) { continue; } - if (var_add_structure_fields_to_list (fcn->anal, var, list)) { + if (var_add_structure_fields_to_list (fcn->analysis, var, list)) { // this var is a struct and var_add_structure_fields_to_list added all the fields continue; } - RzAnalVarField *field = RZ_NEW0 (RzAnalVarField); + RzAnalysisVarField *field = RZ_NEW0 (RzAnalysisVarField); if (!field) { break; } @@ -1210,19 +1210,19 @@ RZ_API RzList *rz_anal_function_get_var_fields(RzAnalFunction *fcn, int kind) { return list; } -static int var_comparator(const RzAnalVar *a, const RzAnalVar *b){ +static int var_comparator(const RzAnalysisVar *a, const RzAnalysisVar *b){ // avoid NULL dereference return (a && b)? (a->delta > b->delta) - (a->delta < b->delta) : 0; } -static int regvar_comparator(const RzAnalVar *a, const RzAnalVar *b){ +static int regvar_comparator(const RzAnalysisVar *a, const RzAnalysisVar *b){ // avoid NULL dereference return (a && b)? (a->argnum > b->argnum) - (a->argnum < b->argnum): 0; } -RZ_API void rz_anal_var_list_show(RzAnal *anal, RzAnalFunction *fcn, int kind, int mode, PJ *pj) { - RzList *list = rz_anal_var_list (anal, fcn, kind); - RzAnalVar *var; +RZ_API void rz_analysis_var_list_show(RzAnalysis *analysis, RzAnalysisFunction *fcn, int kind, int mode, PJ *pj) { + RzList *list = rz_analysis_var_list (analysis, fcn, kind); + RzAnalysisVar *var; RzListIter *iter; if (!pj && mode == 'j') { return; @@ -1245,18 +1245,18 @@ RZ_API void rz_anal_var_list_show(RzAnal *anal, RzAnalFunction *fcn, int kind, i case '*': // we can't express all type info here :( if (kind == RZ_ANAL_VAR_KIND_REG) { // registers - RzRegItem *i = rz_reg_index_get (anal->reg, var->delta); + RzRegItem *i = rz_reg_index_get (analysis->reg, var->delta); if (!i) { eprintf ("Register not found"); break; } - anal->cb_printf ("afv%c %s %s %s @ 0x%"PFMT64x "\n", + analysis->cb_printf ("afv%c %s %s %s @ 0x%"PFMT64x "\n", kind, i->name, var->name, var->type, fcn->addr); } else { int delta = kind == RZ_ANAL_VAR_KIND_BPV ? var->delta + fcn->bp_off : var->delta; - anal->cb_printf ("afv%c %d %s %s @ 0x%"PFMT64x "\n", + analysis->cb_printf ("afv%c %d %s %s @ 0x%"PFMT64x "\n", kind, delta, var->name, var->type, fcn->addr); } @@ -1275,14 +1275,14 @@ RZ_API void rz_anal_var_list_show(RzAnal *anal, RzAnalFunction *fcn, int kind, i pj_ks (pj, "type", var->type); pj_k (pj, "ref"); pj_o (pj); - pj_ks (pj, "base", anal->reg->name[RZ_REG_NAME_BP]); + pj_ks (pj, "base", analysis->reg->name[RZ_REG_NAME_BP]); pj_kN (pj, "offset", delta); pj_end (pj); pj_end (pj); } break; case RZ_ANAL_VAR_KIND_REG: { - RzRegItem *i = rz_reg_index_get (anal->reg, var->delta); + RzRegItem *i = rz_reg_index_get (analysis->reg, var->delta); if (!i) { eprintf ("Register not found"); break; @@ -1307,7 +1307,7 @@ RZ_API void rz_anal_var_list_show(RzAnal *anal, RzAnalFunction *fcn, int kind, i pj_ks (pj, "type", var->type); pj_k (pj, "ref"); pj_o (pj); - pj_ks (pj, "base", anal->reg->name[RZ_REG_NAME_SP]); + pj_ks (pj, "base", analysis->reg->name[RZ_REG_NAME_SP]); pj_kN (pj, "offset", delta); pj_end (pj); pj_end (pj); @@ -1321,26 +1321,26 @@ RZ_API void rz_anal_var_list_show(RzAnal *anal, RzAnalFunction *fcn, int kind, i { int delta = var->delta + fcn->bp_off; if (var->isarg) { - anal->cb_printf ("arg %s %s @ %s+0x%x\n", + analysis->cb_printf ("arg %s %s @ %s+0x%x\n", var->type, var->name, - anal->reg->name[RZ_REG_NAME_BP], + analysis->reg->name[RZ_REG_NAME_BP], delta); } else { char sign = (-var->delta <= fcn->bp_off) ? '+' : '-'; - anal->cb_printf ("var %s %s @ %s%c0x%x\n", + analysis->cb_printf ("var %s %s @ %s%c0x%x\n", var->type, var->name, - anal->reg->name[RZ_REG_NAME_BP], + analysis->reg->name[RZ_REG_NAME_BP], sign, RZ_ABS (delta)); } } break; case RZ_ANAL_VAR_KIND_REG: { - RzRegItem *i = rz_reg_index_get (anal->reg, var->delta); + RzRegItem *i = rz_reg_index_get (analysis->reg, var->delta); if (!i) { eprintf ("Register not found"); break; } - anal->cb_printf ("arg %s %s @ %s\n", + analysis->cb_printf ("arg %s %s @ %s\n", var->type, var->name, i->name); } break; @@ -1349,14 +1349,14 @@ RZ_API void rz_anal_var_list_show(RzAnal *anal, RzAnalFunction *fcn, int kind, i int delta = fcn->maxstack + var->delta; if (!var->isarg) { char sign = (-var->delta <= fcn->maxstack) ? '+' : '-'; - anal->cb_printf ("var %s %s @ %s%c0x%x\n", + analysis->cb_printf ("var %s %s @ %s%c0x%x\n", var->type, var->name, - anal->reg->name[RZ_REG_NAME_SP], + analysis->reg->name[RZ_REG_NAME_SP], sign, RZ_ABS (delta)); } else { - anal->cb_printf ("arg %s %s @ %s+0x%x\n", + analysis->cb_printf ("arg %s %s @ %s+0x%x\n", var->type, var->name, - anal->reg->name[RZ_REG_NAME_SP], + analysis->reg->name[RZ_REG_NAME_SP], delta); } @@ -1371,21 +1371,21 @@ RZ_API void rz_anal_var_list_show(RzAnal *anal, RzAnalFunction *fcn, int kind, i rz_list_free (list); } -RZ_API void rz_anal_fcn_vars_cache_init(RzAnal *anal, RzAnalFcnVarsCache *cache, RzAnalFunction *fcn) { - cache->bvars = rz_anal_var_list (anal, fcn, RZ_ANAL_VAR_KIND_BPV); - cache->rvars = rz_anal_var_list (anal, fcn, RZ_ANAL_VAR_KIND_REG); - cache->svars = rz_anal_var_list (anal, fcn, RZ_ANAL_VAR_KIND_SPV); +RZ_API void rz_analysis_fcn_vars_cache_init(RzAnalysis *analysis, RzAnalysisFcnVarsCache *cache, RzAnalysisFunction *fcn) { + cache->bvars = rz_analysis_var_list (analysis, fcn, RZ_ANAL_VAR_KIND_BPV); + cache->rvars = rz_analysis_var_list (analysis, fcn, RZ_ANAL_VAR_KIND_REG); + cache->svars = rz_analysis_var_list (analysis, fcn, RZ_ANAL_VAR_KIND_SPV); rz_list_sort (cache->bvars, (RzListComparator)var_comparator); RzListIter *it; - RzAnalVar *var; + RzAnalysisVar *var; rz_list_foreach (cache->rvars, it, var) { - var->argnum = rz_anal_var_get_argnum (var); + var->argnum = rz_analysis_var_get_argnum (var); } rz_list_sort (cache->rvars, (RzListComparator)regvar_comparator); rz_list_sort (cache->svars, (RzListComparator)var_comparator); } -RZ_API void rz_anal_fcn_vars_cache_fini(RzAnalFcnVarsCache *cache) { +RZ_API void rz_analysis_fcn_vars_cache_fini(RzAnalysisFcnVarsCache *cache) { if (!cache) { return; } @@ -1394,9 +1394,9 @@ RZ_API void rz_anal_fcn_vars_cache_fini(RzAnalFcnVarsCache *cache) { rz_list_free (cache->svars); } -RZ_API char *rz_anal_fcn_format_sig(RZ_NONNULL RzAnal *anal, RZ_NONNULL RzAnalFunction *fcn, RZ_NULLABLE char *fcn_name, - RZ_NULLABLE RzAnalFcnVarsCache *reuse_cache, RZ_NULLABLE const char *fcn_name_pre, RZ_NULLABLE const char *fcn_name_post) { - RzAnalFcnVarsCache *cache = NULL; +RZ_API char *rz_analysis_fcn_format_sig(RZ_NONNULL RzAnalysis *analysis, RZ_NONNULL RzAnalysisFunction *fcn, RZ_NULLABLE char *fcn_name, + RZ_NULLABLE RzAnalysisFcnVarsCache *reuse_cache, RZ_NULLABLE const char *fcn_name_pre, RZ_NULLABLE const char *fcn_name_post) { + RzAnalysisFcnVarsCache *cache = NULL; if (!fcn_name) { fcn_name = fcn->name; @@ -1410,10 +1410,10 @@ RZ_API char *rz_anal_fcn_format_sig(RZ_NONNULL RzAnal *anal, RZ_NONNULL RzAnalFu return NULL; } - Sdb *TDB = anal->sdb_types; + Sdb *TDB = analysis->sdb_types; char *type_fcn_name = rz_type_func_guess (TDB, fcn_name); if (type_fcn_name && rz_type_func_exist (TDB, type_fcn_name)) { - const char *fcn_type = rz_type_func_ret (anal->sdb_types, type_fcn_name); + const char *fcn_type = rz_type_func_ret (analysis->sdb_types, type_fcn_name); if (fcn_type) { const char *sp = " "; if (*fcn_type && (fcn_type[strlen (fcn_type) - 1] == '*')) { @@ -1459,18 +1459,18 @@ RZ_API char *rz_anal_fcn_format_sig(RZ_NONNULL RzAnal *anal, RZ_NONNULL RzAnalFu cache = reuse_cache; if (!cache) { - cache = RZ_NEW0 (RzAnalFcnVarsCache); + cache = RZ_NEW0 (RzAnalysisFcnVarsCache); if (!cache) { type_fcn_name = NULL; goto beach; } - rz_anal_fcn_vars_cache_init (anal, cache, fcn); + rz_analysis_fcn_vars_cache_init (analysis, cache, fcn); } bool comma = true; bool arg_bp = false; size_t tmp_len; - RzAnalVar *var; + RzAnalysisVar *var; RzListIter *iter; rz_list_foreach (cache->rvars, iter, var) { @@ -1508,7 +1508,7 @@ RZ_API char *rz_anal_fcn_format_sig(RZ_NONNULL RzAnal *anal, RZ_NONNULL RzAnalFu rz_strbuf_append (buf, ", "); } tmp_len = strlen (var->type); - if (iter->n && ((RzAnalVar *)iter->n->data)->isarg) { + if (iter->n && ((RzAnalysisVar *)iter->n->data)->isarg) { maybe_comma = ", "; } else { maybe_comma = ""; @@ -1524,7 +1524,7 @@ beach: RZ_FREE (type_fcn_name); if (!reuse_cache) { // !reuse_cache => we created our own cache - rz_anal_fcn_vars_cache_fini (cache); + rz_analysis_fcn_vars_cache_fini (cache); free (cache); } return rz_strbuf_drain (buf); diff --git a/librz/anal/vtable.c b/librz/analysis/vtable.c similarity index 71% rename from librz/anal/vtable.c rename to librz/analysis/vtable.c index 8f47c92f01..b2b284e4b0 100644 --- a/librz/anal/vtable.c +++ b/librz/analysis/vtable.c @@ -1,14 +1,14 @@ // SPDX-License-Identifier: LGPL-3.0-only #include "rz_util.h" -#include "rz_anal.h" +#include "rz_analysis.h" #define VTABLE_BUFF_SIZE 10 #define VTABLE_READ_ADDR_FUNC(fname, read_fname, sz) \ - static bool fname(RzAnal *anal, ut64 addr, ut64 *buf) {\ + static bool fname(RzAnalysis *analysis, ut64 addr, ut64 *buf) {\ ut8 tmp[sz];\ - if (!anal->iob.read_at (anal->iob.io, addr, tmp, sz)) {\ + if (!analysis->iob.read_at (analysis->iob.io, addr, tmp, sz)) {\ return false;\ }\ *buf = read_fname (tmp);\ @@ -23,7 +23,7 @@ VTABLE_READ_ADDR_FUNC (vtable_read_addr_be16, rz_read_be16, 2) VTABLE_READ_ADDR_FUNC (vtable_read_addr_be32, rz_read_be32, 4) VTABLE_READ_ADDR_FUNC (vtable_read_addr_be64, rz_read_be64, 8) -RZ_API void rz_anal_vtable_info_free(RVTableInfo *vtable) { +RZ_API void rz_analysis_vtable_info_free(RVTableInfo *vtable) { if (!vtable) { return; } @@ -31,30 +31,30 @@ RZ_API void rz_anal_vtable_info_free(RVTableInfo *vtable) { free (vtable); } -RZ_API ut64 rz_anal_vtable_info_get_size(RVTableContext *context, RVTableInfo *vtable) { +RZ_API ut64 rz_analysis_vtable_info_get_size(RVTableContext *context, RVTableInfo *vtable) { return (ut64)vtable->methods.len * context->word_size; } -RZ_API bool rz_anal_vtable_begin(RzAnal *anal, RVTableContext *context) { - context->anal = anal; - context->abi = anal->cpp_abi; - context->word_size = (ut8) (anal->bits / 8); - const bool is_arm = anal->cur->arch && rz_str_startswith (anal->cur->arch, "arm"); +RZ_API bool rz_analysis_vtable_begin(RzAnalysis *analysis, RVTableContext *context) { + context->analysis = analysis; + context->abi = analysis->cpp_abi; + context->word_size = (ut8) (analysis->bits / 8); + const bool is_arm = analysis->cur->arch && rz_str_startswith (analysis->cur->arch, "arm"); if (is_arm && context->word_size < 4) { context->word_size = 4; } switch (context->word_size) { case 1: - context->read_addr = anal->big_endian ? vtable_read_addr_be8 : vtable_read_addr_le8; + context->read_addr = analysis->big_endian ? vtable_read_addr_be8 : vtable_read_addr_le8; break; case 2: - context->read_addr = anal->big_endian ? vtable_read_addr_be16 : vtable_read_addr_le16; + context->read_addr = analysis->big_endian ? vtable_read_addr_be16 : vtable_read_addr_le16; break; case 4: - context->read_addr = anal->big_endian ? vtable_read_addr_be32 : vtable_read_addr_le32; + context->read_addr = analysis->big_endian ? vtable_read_addr_be32 : vtable_read_addr_le32; break; case 8: - context->read_addr = anal->big_endian ? vtable_read_addr_be64 : vtable_read_addr_le64; + context->read_addr = analysis->big_endian ? vtable_read_addr_be64 : vtable_read_addr_le64; break; default: return false; @@ -64,7 +64,7 @@ RZ_API bool rz_anal_vtable_begin(RzAnal *anal, RVTableContext *context) { static bool vtable_addr_in_text_section(RVTableContext *context, ut64 curAddress) { //section of the curAddress - RzBinSection *value = context->anal->binb.get_vsect_at (context->anal->binb.bin, curAddress); + RzBinSection *value = context->analysis->binb.get_vsect_at (context->analysis->binb.bin, curAddress); //If the pointed value lies in .text section return value && strstr (value->name, "text") && (value->perm & 1) != 0; } @@ -72,7 +72,7 @@ static bool vtable_addr_in_text_section(RVTableContext *context, ut64 curAddress static bool vtable_is_value_in_text_section(RVTableContext *context, ut64 curAddress, ut64 *value) { //value at the current address ut64 curAddressValue; - if (!context->read_addr (context->anal, curAddress, &curAddressValue)) { + if (!context->read_addr (context->analysis, curAddress, &curAddressValue)) { return false; } //if the value is in text section @@ -114,14 +114,14 @@ static bool vtable_is_addr_vtable_start_itanium(RVTableContext *context, RzBinSe if (curAddress && !vtable_is_value_in_text_section (context, curAddress, NULL)) { // Vtable beginning referenced from the code return false; } - if (!context->read_addr (context->anal, curAddress - context->word_size, &value)) { // get the RTTI pointer + if (!context->read_addr (context->analysis, curAddress - context->word_size, &value)) { // get the RTTI pointer return false; } - RzBinSection *rtti_section = context->anal->binb.get_vsect_at (context->anal->binb.bin, value); + RzBinSection *rtti_section = context->analysis->binb.get_vsect_at (context->analysis->binb.bin, value); if (value && !section_can_contain_rtti (rtti_section)) { // RTTI ptr must point somewhere in the data section return false; } - if (!context->read_addr (context->anal, curAddress - 2 * context->word_size, &value)) { // Offset to top + if (!context->read_addr (context->analysis, curAddress - 2 * context->word_size, &value)) { // Offset to top return false; } if ((st32)value > 0) { // Offset to top has to be negative @@ -131,7 +131,7 @@ static bool vtable_is_addr_vtable_start_itanium(RVTableContext *context, RzBinSe } static bool vtable_is_addr_vtable_start_msvc(RVTableContext *context, ut64 curAddress) { - RzAnalRef *xref; + RzAnalysisRef *xref; RzListIter *xrefIter; if (!curAddress || curAddress == UT64_MAX) { @@ -141,7 +141,7 @@ static bool vtable_is_addr_vtable_start_msvc(RVTableContext *context, ut64 curAd return false; } // total xref's to curAddress - RzList *xrefs = rz_anal_xrefs_get (context->anal, curAddress); + RzList *xrefs = rz_analysis_xrefs_get (context->analysis, curAddress); if (rz_list_empty (xrefs)) { rz_list_free (xrefs); return false; @@ -150,19 +150,19 @@ static bool vtable_is_addr_vtable_start_msvc(RVTableContext *context, ut64 curAd // section in which currenct xref lies if (vtable_addr_in_text_section (context, xref->addr)) { ut8 buf[VTABLE_BUFF_SIZE]; - context->anal->iob.read_at (context->anal->iob.io, xref->addr, buf, sizeof(buf)); + context->analysis->iob.read_at (context->analysis->iob.io, xref->addr, buf, sizeof(buf)); - RzAnalOp analop = { 0 }; - rz_anal_op (context->anal, &analop, xref->addr, buf, sizeof(buf), RZ_ANAL_OP_MASK_BASIC); + RzAnalysisOp analop = { 0 }; + rz_analysis_op (context->analysis, &analop, xref->addr, buf, sizeof(buf), RZ_ANAL_OP_MASK_BASIC); if (analop.type == RZ_ANAL_OP_TYPE_MOV || analop.type == RZ_ANAL_OP_TYPE_LEA) { rz_list_free (xrefs); - rz_anal_op_fini (&analop); + rz_analysis_op_fini (&analop); return true; } - rz_anal_op_fini (&analop); + rz_analysis_op_fini (&analop); } } rz_list_free (xrefs); @@ -179,9 +179,9 @@ static bool vtable_is_addr_vtable_start(RVTableContext *context, RzBinSection *s rz_return_val_if_reached (false); } -RZ_API RVTableInfo *rz_anal_vtable_parse_at(RVTableContext *context, ut64 addr) { +RZ_API RVTableInfo *rz_analysis_vtable_parse_at(RVTableContext *context, ut64 addr) { ut64 offset_to_top; - if (!context->read_addr (context->anal, addr - 2 * context->word_size, &offset_to_top)) { + if (!context->read_addr (context->analysis, addr - 2 * context->word_size, &offset_to_top)) { return NULL; } @@ -204,7 +204,7 @@ RZ_API RVTableInfo *rz_anal_vtable_parse_at(RVTableContext *context, ut64 addr) addr += context->word_size; // a ref means the vtable has ended - RzList *ll = rz_anal_xrefs_get (context->anal, addr); + RzList *ll = rz_analysis_xrefs_get (context->analysis, addr); if (!rz_list_empty (ll)) { rz_list_free (ll); break; @@ -214,18 +214,18 @@ RZ_API RVTableInfo *rz_anal_vtable_parse_at(RVTableContext *context, ut64 addr) return vtable; } -RZ_API RzList *rz_anal_vtable_search(RVTableContext *context) { - RzAnal *anal = context->anal; - if (!anal) { +RZ_API RzList *rz_analysis_vtable_search(RVTableContext *context) { + RzAnalysis *analysis = context->analysis; + if (!analysis) { return NULL; } - RzList *vtables = rz_list_newf ((RzListFree)rz_anal_vtable_info_free); + RzList *vtables = rz_list_newf ((RzListFree)rz_analysis_vtable_info_free); if (!vtables) { return NULL; } - RzList *sections = anal->binb.get_sections (anal->binb.bin); + RzList *sections = analysis->binb.get_sections (analysis->binb.bin); if (!sections) { rz_list_free (vtables); return NULL; @@ -254,15 +254,15 @@ RZ_API RzList *rz_anal_vtable_search(RVTableContext *context) { if (rz_cons_is_breaked ()) { break; } - if (!anal->iob.is_valid_offset (anal->iob.io, startAddress, 0)) { + if (!analysis->iob.is_valid_offset (analysis->iob.io, startAddress, 0)) { break; } if (vtable_is_addr_vtable_start (context, section, startAddress)) { - RVTableInfo *vtable = rz_anal_vtable_parse_at (context, startAddress); + RVTableInfo *vtable = rz_analysis_vtable_parse_at (context, startAddress); if (vtable) { rz_list_append (vtables, vtable); - ut64 size = rz_anal_vtable_info_get_size (context, vtable); + ut64 size = rz_analysis_vtable_info_get_size (context, vtable); if (size > 0) { startAddress += size; continue; @@ -283,16 +283,16 @@ RZ_API RzList *rz_anal_vtable_search(RVTableContext *context) { return vtables; } -RZ_API void rz_anal_list_vtables(RzAnal *anal, int rad) { +RZ_API void rz_analysis_list_vtables(RzAnalysis *analysis, int rad) { RVTableContext context; - rz_anal_vtable_begin (anal, &context); + rz_analysis_vtable_begin (analysis, &context); const char *noMethodName = "No Name found"; RVTableMethodInfo *curMethod; RzListIter *vtableIter; RVTableInfo *table; - RzList *vtables = rz_anal_vtable_search (&context); + RzList *vtables = rz_analysis_vtable_search (&context); if (rad == 'j') { bool isFirstElement = true; @@ -307,7 +307,7 @@ RZ_API void rz_anal_list_vtables(RzAnal *anal, int rad) { if (!isFirstMethod) { rz_cons_print (","); } - RzAnalFunction *fcn = rz_anal_get_fcn_in (anal, curMethod->addr, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (analysis, curMethod->addr, 0); const char *const name = fcn ? fcn->name : NULL; rz_cons_printf ("{\"offset\":%"PFMT64d",\"name\":\"%s\"}", curMethod->addr, name ? name : noMethodName); @@ -321,11 +321,11 @@ RZ_API void rz_anal_list_vtables(RzAnal *anal, int rad) { rz_list_foreach (vtables, vtableIter, table) { rz_cons_printf ("f vtable.0x%08"PFMT64x" %"PFMT64d" @ 0x%08"PFMT64x"\n", table->saddr, - rz_anal_vtable_info_get_size (&context, table), + rz_analysis_vtable_info_get_size (&context, table), table->saddr); rz_vector_foreach (&table->methods, curMethod) { rz_cons_printf ("Cd %d @ 0x%08"PFMT64x"\n", context.word_size, table->saddr + curMethod->vtable_offset); - RzAnalFunction *fcn = rz_anal_get_fcn_in (anal, curMethod->addr, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (analysis, curMethod->addr, 0); const char *const name = fcn ? fcn->name : NULL; if (name) { rz_cons_printf ("f %s=0x%08"PFMT64x"\n", name, curMethod->addr); @@ -339,7 +339,7 @@ RZ_API void rz_anal_list_vtables(RzAnal *anal, int rad) { ut64 vtableStartAddress = table->saddr; rz_cons_printf ("\nVtable Found at 0x%08"PFMT64x"\n", vtableStartAddress); rz_vector_foreach (&table->methods, curMethod) { - RzAnalFunction *fcn = rz_anal_get_fcn_in (anal, curMethod->addr, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (analysis, curMethod->addr, 0); const char *const name = fcn ? fcn->name : NULL; rz_cons_printf ("0x%08"PFMT64x" : %s\n", vtableStartAddress, name ? name : noMethodName); vtableStartAddress += context.word_size; diff --git a/librz/anal/xrefs.c b/librz/analysis/xrefs.c similarity index 50% rename from librz/anal/xrefs.c rename to librz/analysis/xrefs.c index 89bf110808..f5fa6fb857 100644 --- a/librz/anal/xrefs.c +++ b/librz/analysis/xrefs.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: LGPL-3.0-only -#include +#include #include #if 0 @@ -24,8 +24,8 @@ xrefs // XXX: is it possible to have multiple type for the same (from, to) pair? // if it is, things need to be adjusted -static RzAnalRef *rz_anal_ref_new(ut64 addr, ut64 at, ut64 type) { - RzAnalRef *ref = RZ_NEW (RzAnalRef); +static RzAnalysisRef *rz_analysis_ref_new(ut64 addr, ut64 at, ut64 type) { + RzAnalysisRef *ref = RZ_NEW (RzAnalysisRef); if (ref) { ref->addr = addr; ref->at = at; @@ -34,12 +34,12 @@ static RzAnalRef *rz_anal_ref_new(ut64 addr, ut64 at, ut64 type) { return ref; } -static void rz_anal_ref_free(void *ref) { +static void rz_analysis_ref_free(void *ref) { free (ref); } -RZ_API RzList *rz_anal_ref_list_new(void) { - return rz_list_newf (rz_anal_ref_free); +RZ_API RzList *rz_analysis_ref_list_new(void) { + return rz_list_newf (rz_analysis_ref_free); } static void xrefs_ht_free(HtUPKv *kv) { @@ -47,13 +47,13 @@ static void xrefs_ht_free(HtUPKv *kv) { } static void xrefs_ref_free(HtUPKv *kv) { - rz_anal_ref_free (kv->value); + rz_analysis_ref_free (kv->value); } static bool appendRef(void *u, const ut64 k, const void *v) { RzList *list = (RzList *)u; - RzAnalRef *ref = (RzAnalRef *)v; - RzAnalRef *cloned = rz_anal_ref_new (ref->addr, ref->at, ref->type); + RzAnalysisRef *ref = (RzAnalysisRef *)v; + RzAnalysisRef *cloned = rz_analysis_ref_new (ref->addr, ref->at, ref->type); if (cloned) { rz_list_append (list, cloned); return true; @@ -67,7 +67,7 @@ static bool mylistrefs_cb(void *list, const ut64 k, const void *v) { return true; } -static int ref_cmp(const RzAnalRef *a, const RzAnalRef *b) { +static int ref_cmp(const RzAnalysisRef *a, const RzAnalysisRef *b) { if (a->at < b->at) { return -1; } @@ -111,61 +111,61 @@ static void setxref(HtUP *m, ut64 from, ut64 to, int type) { } ht_up_insert (m, from, ht); } - RzAnalRef *ref = rz_anal_ref_new (to, from, type); + RzAnalysisRef *ref = rz_analysis_ref_new (to, from, type); if (ref) { ht_up_update (ht, to, ref); } } // set a reference from FROM to TO and a cross-reference(xref) from TO to FROM. -RZ_API int rz_anal_xrefs_set(RzAnal *anal, ut64 from, ut64 to, const RzAnalRefType type) { - if (!anal || from == to) { +RZ_API int rz_analysis_xrefs_set(RzAnalysis *analysis, ut64 from, ut64 to, const RzAnalysisRefType type) { + if (!analysis || from == to) { return false; } - if (anal->iob.is_valid_offset) { - if (!anal->iob.is_valid_offset (anal->iob.io, from, 0)) { + if (analysis->iob.is_valid_offset) { + if (!analysis->iob.is_valid_offset (analysis->iob.io, from, 0)) { return false; } - if (!anal->iob.is_valid_offset (anal->iob.io, to, 0)) { + if (!analysis->iob.is_valid_offset (analysis->iob.io, to, 0)) { return false; } } - setxref (anal->dict_xrefs, to, from, type); - setxref (anal->dict_refs, from, to, type); + setxref (analysis->dict_xrefs, to, from, type); + setxref (analysis->dict_refs, from, to, type); return true; } -RZ_API int rz_anal_xrefs_deln(RzAnal *anal, ut64 from, ut64 to, const RzAnalRefType type) { - if (!anal) { +RZ_API int rz_analysis_xrefs_deln(RzAnalysis *analysis, ut64 from, ut64 to, const RzAnalysisRefType type) { + if (!analysis) { return false; } - ht_up_delete (anal->dict_refs, from); - ht_up_delete (anal->dict_xrefs, to); + ht_up_delete (analysis->dict_refs, from); + ht_up_delete (analysis->dict_xrefs, to); return true; } -RZ_API int rz_anal_xref_del(RzAnal *anal, ut64 from, ut64 to) { +RZ_API int rz_analysis_xref_del(RzAnalysis *analysis, ut64 from, ut64 to) { bool res = false; - res |= rz_anal_xrefs_deln (anal, from, to, RZ_ANAL_REF_TYPE_NULL); - res |= rz_anal_xrefs_deln (anal, from, to, RZ_ANAL_REF_TYPE_CODE); - res |= rz_anal_xrefs_deln (anal, from, to, RZ_ANAL_REF_TYPE_CALL); - res |= rz_anal_xrefs_deln (anal, from, to, RZ_ANAL_REF_TYPE_DATA); - res |= rz_anal_xrefs_deln (anal, from, to, RZ_ANAL_REF_TYPE_STRING); + res |= rz_analysis_xrefs_deln (analysis, from, to, RZ_ANAL_REF_TYPE_NULL); + res |= rz_analysis_xrefs_deln (analysis, from, to, RZ_ANAL_REF_TYPE_CODE); + res |= rz_analysis_xrefs_deln (analysis, from, to, RZ_ANAL_REF_TYPE_CALL); + res |= rz_analysis_xrefs_deln (analysis, from, to, RZ_ANAL_REF_TYPE_DATA); + res |= rz_analysis_xrefs_deln (analysis, from, to, RZ_ANAL_REF_TYPE_STRING); return res; } -RZ_API int rz_anal_xrefs_from(RzAnal *anal, RzList *list, const char *kind, const RzAnalRefType type, ut64 addr) { - listxrefs (anal->dict_refs, addr, list); +RZ_API int rz_analysis_xrefs_from(RzAnalysis *analysis, RzList *list, const char *kind, const RzAnalysisRefType type, ut64 addr) { + listxrefs (analysis->dict_refs, addr, list); sortxrefs (list); return true; } -RZ_API RzList *rz_anal_xrefs_get(RzAnal *anal, ut64 to) { - RzList *list = rz_anal_ref_list_new (); +RZ_API RzList *rz_analysis_xrefs_get(RzAnalysis *analysis, ut64 to) { + RzList *list = rz_analysis_ref_list_new (); if (!list) { return NULL; } - listxrefs (anal->dict_xrefs, to, list); + listxrefs (analysis->dict_xrefs, to, list); sortxrefs (list); if (rz_list_empty (list)) { rz_list_free (list); @@ -174,12 +174,12 @@ RZ_API RzList *rz_anal_xrefs_get(RzAnal *anal, ut64 to) { return list; } -RZ_API RzList *rz_anal_refs_get(RzAnal *anal, ut64 from) { - RzList *list = rz_anal_ref_list_new (); +RZ_API RzList *rz_analysis_refs_get(RzAnalysis *analysis, ut64 from) { + RzList *list = rz_analysis_ref_list_new (); if (!list) { return NULL; } - listxrefs (anal->dict_refs, from, list); + listxrefs (analysis->dict_refs, from, list); sortxrefs (list); if (rz_list_empty (list)) { rz_list_free (list); @@ -188,12 +188,12 @@ RZ_API RzList *rz_anal_refs_get(RzAnal *anal, ut64 from) { return list; } -RZ_API RzList *rz_anal_xrefs_get_from(RzAnal *anal, ut64 to) { - RzList *list = rz_anal_ref_list_new (); +RZ_API RzList *rz_analysis_xrefs_get_from(RzAnalysis *analysis, ut64 to) { + RzList *list = rz_analysis_ref_list_new (); if (!list) { return NULL; } - listxrefs (anal->dict_refs, to, list); + listxrefs (analysis->dict_refs, to, list); sortxrefs (list); if (rz_list_empty (list)) { rz_list_free (list); @@ -202,15 +202,15 @@ RZ_API RzList *rz_anal_xrefs_get_from(RzAnal *anal, ut64 to) { return list; } -RZ_API void rz_anal_xrefs_list(RzAnal *anal, int rad) { +RZ_API void rz_analysis_xrefs_list(RzAnalysis *analysis, int rad) { RzListIter *iter; - RzAnalRef *ref; + RzAnalysisRef *ref; PJ *pj = NULL; - RzList *list = rz_anal_ref_list_new(); - listxrefs (anal->dict_refs, UT64_MAX, list); + RzList *list = rz_analysis_ref_list_new(); + listxrefs (analysis->dict_refs, UT64_MAX, list); sortxrefs (list); if (rad == 'j') { - pj = anal->coreb.pjWithEncoding (anal->coreb.core); + pj = analysis->coreb.pjWithEncoding (analysis->coreb.core); if (!pj) { return; } @@ -220,45 +220,45 @@ RZ_API void rz_anal_xrefs_list(RzAnal *anal, int rad) { int t = ref->type ? ref->type: ' '; switch (rad) { case '*': - anal->cb_printf ("ax%c 0x%"PFMT64x" 0x%"PFMT64x"\n", t, ref->addr, ref->at); + analysis->cb_printf ("ax%c 0x%"PFMT64x" 0x%"PFMT64x"\n", t, ref->addr, ref->at); break; case '\0': { - char *name = anal->coreb.getNameDelta (anal->coreb.core, ref->at); + char *name = analysis->coreb.getNameDelta (analysis->coreb.core, ref->at); if (name) { rz_str_replace_ch (name, ' ', 0, true); - anal->cb_printf ("%40s", name); + analysis->cb_printf ("%40s", name); free (name); } else { - anal->cb_printf ("%40s", "?"); + analysis->cb_printf ("%40s", "?"); } - anal->cb_printf (" 0x%"PFMT64x" -> %9s -> 0x%"PFMT64x, ref->at, rz_anal_xrefs_type_tostring (t), ref->addr); - name = anal->coreb.getNameDelta (anal->coreb.core, ref->addr); + analysis->cb_printf (" 0x%"PFMT64x" -> %9s -> 0x%"PFMT64x, ref->at, rz_analysis_xrefs_type_tostring (t), ref->addr); + name = analysis->coreb.getNameDelta (analysis->coreb.core, ref->addr); if (name) { rz_str_replace_ch (name, ' ', 0, true); - anal->cb_printf (" %s\n", name); + analysis->cb_printf (" %s\n", name); free (name); } else { - anal->cb_printf ("\n"); + analysis->cb_printf ("\n"); } } break; case 'q': - anal->cb_printf ("0x%08"PFMT64x" -> 0x%08"PFMT64x" %s\n", ref->at, ref->addr, rz_anal_xrefs_type_tostring (t)); + analysis->cb_printf ("0x%08"PFMT64x" -> 0x%08"PFMT64x" %s\n", ref->at, ref->addr, rz_analysis_xrefs_type_tostring (t)); break; case 'j': { pj_o (pj); - char *name = anal->coreb.getNameDelta (anal->coreb.core, ref->at); + char *name = analysis->coreb.getNameDelta (analysis->coreb.core, ref->at); if (name) { rz_str_replace_ch (name, ' ', 0, true); pj_ks (pj, "name", name); free (name); } pj_kn (pj, "from", ref->at); - pj_ks (pj, "type", rz_anal_xrefs_type_tostring (t)); + pj_ks (pj, "type", rz_analysis_xrefs_type_tostring (t)); pj_kn (pj, "addr", ref->addr); - name = anal->coreb.getNameDelta (anal->coreb.core, ref->addr); + name = analysis->coreb.getNameDelta (analysis->coreb.core, ref->addr); if (name) { rz_str_replace_ch (name, ' ', 0, true); pj_ks (pj, "refname", name); @@ -273,13 +273,13 @@ RZ_API void rz_anal_xrefs_list(RzAnal *anal, int rad) { } if (rad == 'j') { pj_end (pj); - anal->cb_printf ("%s\n", pj_string (pj)); + analysis->cb_printf ("%s\n", pj_string (pj)); pj_free (pj); } rz_list_free (list); } -RZ_API const char *rz_anal_xrefs_type_tostring(RzAnalRefType type) { +RZ_API const char *rz_analysis_xrefs_type_tostring(RzAnalysisRefType type) { switch (type) { case RZ_ANAL_REF_TYPE_CODE: return "CODE"; @@ -295,38 +295,38 @@ RZ_API const char *rz_anal_xrefs_type_tostring(RzAnalRefType type) { } } -RZ_API RzAnalRefType rz_anal_xrefs_type(char ch) { +RZ_API RzAnalysisRefType rz_analysis_xrefs_type(char ch) { switch (ch) { case RZ_ANAL_REF_TYPE_CODE: case RZ_ANAL_REF_TYPE_CALL: case RZ_ANAL_REF_TYPE_DATA: case RZ_ANAL_REF_TYPE_STRING: case RZ_ANAL_REF_TYPE_NULL: - return (RzAnalRefType)ch; + return (RzAnalysisRefType)ch; default: return RZ_ANAL_REF_TYPE_NULL; } } -RZ_API bool rz_anal_xrefs_init(RzAnal *anal) { - ht_up_free (anal->dict_refs); - anal->dict_refs = NULL; - ht_up_free (anal->dict_xrefs); - anal->dict_xrefs = NULL; +RZ_API bool rz_analysis_xrefs_init(RzAnalysis *analysis) { + ht_up_free (analysis->dict_refs); + analysis->dict_refs = NULL; + ht_up_free (analysis->dict_xrefs); + analysis->dict_xrefs = NULL; HtUP *tmp = ht_up_new (NULL, xrefs_ht_free, NULL); if (!tmp) { return false; } - anal->dict_refs = tmp; + analysis->dict_refs = tmp; tmp = ht_up_new (NULL, xrefs_ht_free, NULL); if (!tmp) { - ht_up_free (anal->dict_refs); - anal->dict_refs = NULL; + ht_up_free (analysis->dict_refs); + analysis->dict_refs = NULL; return false; } - anal->dict_xrefs = tmp; + analysis->dict_xrefs = tmp; return true; } @@ -335,16 +335,16 @@ static bool count_cb(void *user, const ut64 k, const void *v) { return true; } -RZ_API ut64 rz_anal_xrefs_count(RzAnal *anal) { +RZ_API ut64 rz_analysis_xrefs_count(RzAnalysis *analysis) { ut64 ret = 0; - ht_up_foreach (anal->dict_xrefs, count_cb, &ret); + ht_up_foreach (analysis->dict_xrefs, count_cb, &ret); return ret; } -static RzList *fcn_get_refs(RzAnalFunction *fcn, HtUP *ht) { +static RzList *fcn_get_refs(RzAnalysisFunction *fcn, HtUP *ht) { RzListIter *iter; - RzAnalBlock *bb; - RzList *list = rz_anal_ref_list_new (); + RzAnalysisBlock *bb; + RzList *list = rz_analysis_ref_list_new (); if (!list) { return NULL; } @@ -352,7 +352,7 @@ static RzList *fcn_get_refs(RzAnalFunction *fcn, HtUP *ht) { int i; for (i = 0; i < bb->ninstr; i++) { - ut64 at = bb->addr + rz_anal_bb_offset_inst (bb, i); + ut64 at = bb->addr + rz_analysis_bb_offset_inst (bb, i); listxrefs (ht, at, list); } } @@ -360,17 +360,17 @@ static RzList *fcn_get_refs(RzAnalFunction *fcn, HtUP *ht) { return list; } -RZ_API RzList *rz_anal_function_get_refs(RzAnalFunction *fcn) { +RZ_API RzList *rz_analysis_function_get_refs(RzAnalysisFunction *fcn) { rz_return_val_if_fail (fcn, NULL); - return fcn_get_refs (fcn, fcn->anal->dict_refs); + return fcn_get_refs (fcn, fcn->analysis->dict_refs); } -RZ_API RzList *rz_anal_function_get_xrefs(RzAnalFunction *fcn) { +RZ_API RzList *rz_analysis_function_get_xrefs(RzAnalysisFunction *fcn) { rz_return_val_if_fail (fcn, NULL); - return fcn_get_refs (fcn, fcn->anal->dict_xrefs); + return fcn_get_refs (fcn, fcn->analysis->dict_xrefs); } -RZ_API const char *rz_anal_ref_type_tostring(RzAnalRefType t) { +RZ_API const char *rz_analysis_ref_type_tostring(RzAnalysisRefType t) { switch (t) { case RZ_ANAL_REF_TYPE_NULL: return "null"; diff --git a/librz/asm/arch/8051/8051_ops.h b/librz/asm/arch/8051/8051_ops.h index 0cbc545c6c..55ad70e79e 100644 --- a/librz/asm/arch/8051/8051_ops.h +++ b/librz/asm/arch/8051/8051_ops.h @@ -91,7 +91,7 @@ typedef struct { ut8 op; int cycles; op8051 instr; // instruction - _RzAnalOpType type; + _RzAnalysisOpType type; char* string; // disassembly output size_t len; argmask8051 mask; // bits masked to determine opcode diff --git a/librz/asm/arch/amd29k/amd29k.c b/librz/asm/arch/amd29k/amd29k.c index 71373d29fc..7167f09af4 100644 --- a/librz/asm/arch/amd29k/amd29k.c +++ b/librz/asm/arch/amd29k/amd29k.c @@ -2,7 +2,7 @@ #include "amd29k_internal.h" #include #include -#include +#include #define CPU_ANY "*" diff --git a/librz/asm/arch/mcore/mcore.c b/librz/asm/arch/mcore/mcore.c index 16c5f1e8cb..c9f087ad6d 100644 --- a/librz/asm/arch/mcore/mcore.c +++ b/librz/asm/arch/mcore/mcore.c @@ -1,6 +1,6 @@ #include "mcore.h" -#include +#include #include #include #include diff --git a/librz/asm/arch/or1k/or1k_disas.c b/librz/asm/arch/or1k/or1k_disas.c index 8c682f7111..3e173242f8 100644 --- a/librz/asm/arch/or1k/or1k_disas.c +++ b/librz/asm/arch/or1k/or1k_disas.c @@ -1,6 +1,6 @@ /* rizin - LGPL - Copyright 2019 - v3l0c1r4pt0r */ -#include +#include #include "or1k_disas.h" insn_type_descr_t types[] = { diff --git a/librz/asm/arch/or1k/or1k_disas.h b/librz/asm/arch/or1k/or1k_disas.h index 4341e202dd..777887ff50 100644 --- a/librz/asm/arch/or1k/or1k_disas.h +++ b/librz/asm/arch/or1k/or1k_disas.h @@ -106,14 +106,14 @@ typedef struct { char *name; int type; int opcode_mask; - int insn_type; /**< One of \link _RzAnalOpType \endlink */ + int insn_type; /**< One of \link _RzAnalysisOpType \endlink */ } insn_extra_t; typedef struct { ut32 opcode; char *name; int type; - int insn_type; /**< One of \link _RzAnalOpType \endlink */ + int insn_type; /**< One of \link _RzAnalysisOpType \endlink */ insn_extra_t *extra; } insn_t; diff --git a/librz/asm/arch/ppc/libvle/vle.c b/librz/asm/arch/ppc/libvle/vle.c index 4cebacecb2..443abd228c 100644 --- a/librz/asm/arch/ppc/libvle/vle.c +++ b/librz/asm/arch/ppc/libvle/vle.c @@ -1,7 +1,7 @@ /* rizin - LGPL - Copyright 2017 - wargio */ #include "vle.h" #include "vle_internal.h" -#include +#include #define USE_INTERNAL_PPC(x) ((x)->options&VLE_INTERNAL_PPC) diff --git a/librz/asm/arch/pyc/opcode.h b/librz/asm/arch/pyc/opcode.h index 06e567737f..9fadecd09a 100644 --- a/librz/asm/arch/pyc/opcode.h +++ b/librz/asm/arch/pyc/opcode.h @@ -6,7 +6,7 @@ #include #include #include -#include +#include #define OBJECT_SIZE_ON_STACK 1 @@ -61,10 +61,10 @@ typedef struct { typedef struct { char *op_name; - void (*func)(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg); + void (*func)(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg); } op_anal_func; -void anal_pyc_op(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg); +void analysis_pyc_op(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg); pyc_opcodes *opcode_2x(void); pyc_opcodes *opcode_3x(void); diff --git a/librz/asm/arch/pyc/opcode_anal.c b/librz/asm/arch/pyc/opcode_anal.c index 041fb7c14a..caddc003d1 100644 --- a/librz/asm/arch/pyc/opcode_anal.c +++ b/librz/asm/arch/pyc/opcode_anal.c @@ -3,93 +3,93 @@ // The actual code of one opcode varies across the versions. // That's why I specify one opcode by its name, not its code. -static inline void anal_push(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg, ut32 type, st32 push_cnt) { +static inline void anal_push(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg, ut32 type, st32 push_cnt) { op->type = type; op->stackop = RZ_ANAL_STACK_INC; op->stackptr = OBJECT_SIZE_ON_STACK * push_cnt; } -static inline void anal_pop(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg, ut32 type, st32 push_cnt) { +static inline void anal_pop(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg, ut32 type, st32 push_cnt) { op->type = type; op->stackop = RZ_ANAL_STACK_INC; op->stackptr = -(OBJECT_SIZE_ON_STACK * push_cnt); } -static void anal_BEFORE_ASYNC_WITH(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BEFORE_ASYNC_WITH(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_BEGIN_FINALLY(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BEGIN_FINALLY(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_push (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_BINARY_ADD(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BINARY_ADD(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_ADD, 1); } -static void anal_BINARY_AND(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BINARY_AND(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_AND, 1); } -static void anal_BINARY_CALL(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BINARY_CALL(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { // https://github.com/python/cpython/blob/v1.4b3/Include/opcode.h // I can not find this opcode even in v1.4 version source code. op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_BINARY_DIVIDE(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BINARY_DIVIDE(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_DIV, 1); } -static void anal_BINARY_FLOOR_DIVIDE(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BINARY_FLOOR_DIVIDE(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_DIV, 1); } -static void anal_BINARY_LSHIFT(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BINARY_LSHIFT(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_SHL, 1); } -static void anal_BINARY_MATRIX_MULTIPLY(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BINARY_MATRIX_MULTIPLY(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_BINARY_MODULO(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BINARY_MODULO(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_MOD, 1); } -static void anal_BINARY_MULTIPLY(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BINARY_MULTIPLY(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_MUL, 1); } -static void anal_BINARY_OR(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BINARY_OR(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_OR, 1); } -static void anal_BINARY_POWER(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BINARY_POWER(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_BINARY_RSHIFT(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BINARY_RSHIFT(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_SHR, 1); } -static void anal_BINARY_SUBSCR(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BINARY_SUBSCR(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_BINARY_SUBTRACT(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BINARY_SUBTRACT(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_SUB, 1); } -static void anal_BINARY_TRUE_DIVIDE(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BINARY_TRUE_DIVIDE(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_DIV, 1); } -static void anal_BINARY_XOR(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BINARY_XOR(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_XOR, 1); } -static void anal_BREAK_LOOP(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BREAK_LOOP(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { //op->type = RZ_ANAL_OP_TYPE_CJMP; // This is actually a jump, but require further analysis op->type = RZ_ANAL_OP_TYPE_UNK; @@ -97,67 +97,67 @@ static void anal_BREAK_LOOP(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) op->fail = -1; } -static void anal_BUILD_CLASS(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BUILD_CLASS(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_NEW, 2); } -static void anal_BUILD_CONST_KEY_MAP(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BUILD_CONST_KEY_MAP(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_NEW, oparg); } -static void anal_BUILD_FUNCTION(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BUILD_FUNCTION(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_NEW; } -static void anal_BUILD_LIST(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BUILD_LIST(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_NEW, oparg); } -static void anal_BUILD_LIST_UNPACK(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BUILD_LIST_UNPACK(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_NEW, oparg - 1); } -static void anal_BUILD_MAP(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BUILD_MAP(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_NEW, 2 * oparg - 1); } -static void anal_BUILD_MAP_UNPACK(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BUILD_MAP_UNPACK(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_NEW, oparg - 1); } -static void anal_BUILD_MAP_UNPACK_WITH_CALL(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BUILD_MAP_UNPACK_WITH_CALL(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_NEW, oparg); } -static void anal_BUILD_SET(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BUILD_SET(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_NEW, oparg - 1); } -static void anal_BUILD_SET_UNPACK(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BUILD_SET_UNPACK(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_NEW, oparg - 1); } -static void anal_BUILD_SLICE(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BUILD_SLICE(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_NEW, oparg - 1); } -static void anal_BUILD_STRING(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BUILD_STRING(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_NEW, oparg - 1); } -static void anal_BUILD_TUPLE(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BUILD_TUPLE(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_NEW, oparg - 1); } -static void anal_BUILD_TUPLE_UNPACK(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BUILD_TUPLE_UNPACK(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_NEW, oparg - 1); } -static void anal_BUILD_TUPLE_UNPACK_WITH_CALL(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_BUILD_TUPLE_UNPACK_WITH_CALL(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_NEW, oparg); } -static void anal_CALL_FUNCTION(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_CALL_FUNCTION(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { // TODO // Get callee function from stack // Parse oparg by version info @@ -165,89 +165,89 @@ static void anal_CALL_FUNCTION(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 opa op->jump = -1; } -static void anal_CALL_FUNCTION_EX(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_CALL_FUNCTION_EX(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_ICALL; op->jump = -1; } -static void anal_CALL_FUNCTION_KW(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_CALL_FUNCTION_KW(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_ICALL; op->jump = -1; } -static void anal_CALL_FUNCTION_VAR(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_CALL_FUNCTION_VAR(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_ICALL; op->jump = -1; } -static void anal_CALL_FUNCTION_VAR_KW(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_CALL_FUNCTION_VAR_KW(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_ICALL; op->jump = -1; } -static void anal_CALL_METHOD(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_CALL_METHOD(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_ICALL; op->jump = -1; } -static void anal_DELETE_ATTR(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_DELETE_ATTR(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_DELETE_DEREF(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_DELETE_DEREF(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_DELETE_FAST(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_DELETE_FAST(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_DELETE_GLOBAL(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_DELETE_GLOBAL(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_DELETE_NAME(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_DELETE_NAME(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_DELETE_SLICE_0(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_DELETE_SLICE_0(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_DELETE_SLICE_1(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_DELETE_SLICE_1(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_DELETE_SLICE_2(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_DELETE_SLICE_2(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_DELETE_SLICE_3(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_DELETE_SLICE_3(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_DELETE_SUBSCR(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_DELETE_SUBSCR(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_DUP_TOP(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_DUP_TOP(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_push (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UPUSH, 1); } -static void anal_DUP_TOPX(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_DUP_TOPX(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_push (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UPUSH, 1); } -static void anal_DUP_TOP_TWO(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_DUP_TOP_TWO(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_push (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UPUSH, 2); } -static void anal_END_ASYNC_FOR(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_END_ASYNC_FOR(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { // If TOS is StopAsyncIteration pop 7 values from the stack and restore the exception state using the second three of them. op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_END_FINALLY(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_END_FINALLY(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { //op->type = RZ_ANAL_OP_TYPE_CJMP; // This is actually a jump, but require further analysis op->type = RZ_ANAL_OP_TYPE_UNK; @@ -255,15 +255,15 @@ static void anal_END_FINALLY(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg op->fail = -1; } -static void anal_EXEC_STMT(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_EXEC_STMT(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_EXTENDED_ARG(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_EXTENDED_ARG(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_FORMAT_VALUE(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_FORMAT_VALUE(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_UNK; if ((oparg & 0x04) == 0x04) { op->stackop = RZ_ANAL_STACK_INC; @@ -271,458 +271,458 @@ static void anal_FORMAT_VALUE(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 opar } } -static void anal_FOR_LOOP(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_FOR_LOOP(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { // https://github.com/python/cpython/blob/b2b1ed17819ecb24a78d07d3ff1e8e6bc6137721/Python/ceval.c#L1499 op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_GET_AITER(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_GET_AITER(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_GET_ANEXT(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_GET_ANEXT(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_push (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_GET_AWAITABLE(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_GET_AWAITABLE(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_GET_ITER(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_GET_ITER(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_GET_YIELD_FROM_ITER(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_GET_YIELD_FROM_ITER(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_IMPORT_FROM(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_IMPORT_FROM(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_push (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_IMPORT_NAME(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_IMPORT_NAME(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_IMPORT_STAR(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_IMPORT_STAR(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_INPLACE_ADD(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_INPLACE_ADD(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_ADD; } -static void anal_INPLACE_AND(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_INPLACE_AND(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_AND; } -static void anal_INPLACE_DIVIDE(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_INPLACE_DIVIDE(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_DIV; } -static void anal_INPLACE_FLOOR_DIVIDE(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_INPLACE_FLOOR_DIVIDE(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_DIV; } -static void anal_INPLACE_LSHIFT(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_INPLACE_LSHIFT(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_SHL; } -static void anal_INPLACE_MATRIX_MULTIPLY(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_INPLACE_MATRIX_MULTIPLY(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_INPLACE_MODULO(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_INPLACE_MODULO(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_MOD; } -static void anal_INPLACE_MULTIPLY(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_INPLACE_MULTIPLY(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_MUL; } -static void anal_INPLACE_OR(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_INPLACE_OR(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_OR; } -static void anal_INPLACE_POWER(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_INPLACE_POWER(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_INPLACE_RSHIFT(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_INPLACE_RSHIFT(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_SHR; } -static void anal_INPLACE_SUBTRACT(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_INPLACE_SUBTRACT(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_SUB; } -static void anal_INPLACE_TRUE_DIVIDE(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_INPLACE_TRUE_DIVIDE(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_DIV; } -static void anal_INPLACE_XOR(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_INPLACE_XOR(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_XOR; } -static void anal_LIST_APPEND(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_LIST_APPEND(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_LOAD_ASSERTION_ERROR(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_LOAD_ASSERTION_ERROR(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_push (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_LOAD_ATTR(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_LOAD_ATTR(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_LOAD_BUILD_CLASS(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_LOAD_BUILD_CLASS(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_push (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_LOAD_CLASSDEREF(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_LOAD_CLASSDEREF(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_push (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_LOAD_CLOSURE(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_LOAD_CLOSURE(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_push (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_LOAD_CONST(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_LOAD_CONST(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_push (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_LOAD_DEREF(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_LOAD_DEREF(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_push (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_LOAD_FAST(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_LOAD_FAST(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_push (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_LOAD_GLOBAL(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_LOAD_GLOBAL(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_push (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_LOAD_GLOBALS(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_LOAD_GLOBALS(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { // https://github.com/python/cpython/blob/24260ec91623c18569225229d5becb852010ae2c/Include/opcode.h#L80 // Can't find this opcode op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_LOAD_LOCAL(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_LOAD_LOCAL(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_push (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_LOAD_LOCALS(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_LOAD_LOCALS(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_push (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_LOAD_METHOD(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_LOAD_METHOD(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_push (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_LOAD_NAME(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_LOAD_NAME(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_push (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_MAKE_CLOSURE(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_MAKE_CLOSURE(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, oparg); } -static void anal_MAKE_FUNCTION(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_MAKE_FUNCTION(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, oparg); } -static void anal_MAP_ADD(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_MAP_ADD(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_NOP(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_NOP(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_NOP; } -static void anal_POP_BLOCK(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_POP_BLOCK(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_POP, 1); } -static void anal_POP_EXCEPT(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_POP_EXCEPT(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_POP, 1); } -static void anal_POP_FINALLY(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_POP_FINALLY(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { // FIXME // POP_FINALLY will pop 6 elements if TOS is an exception type anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_POP, 1); } -static void anal_POP_TOP(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_POP_TOP(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_POP, 1); } -static void anal_PRINT_EXPR(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_PRINT_EXPR(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_PRINT_ITEM(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_PRINT_ITEM(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_PRINT_ITEM_TO(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_PRINT_ITEM_TO(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 2); } -static void anal_PRINT_NEWLINE(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_PRINT_NEWLINE(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_PRINT_NEWLINE_TO(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_PRINT_NEWLINE_TO(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_RAISE_EXCEPTION(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_RAISE_EXCEPTION(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { // https://github.com/python/cpython/blob/6c3a3aa17b028f6b93067083d32c7eaa4338757c/Include/opcode.h#L89 // Can't find this opcode op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_RAISE_VARARGS(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_RAISE_VARARGS(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, oparg); } -static void anal_RERAISE(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_RERAISE(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 3); } -static void anal_RESERVE_FAST(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_RESERVE_FAST(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { // https://github.com/python/cpython/blob/6c3a3aa17b028f6b93067083d32c7eaa4338757c/Include/opcode.h#L134 // Can't find this opcode op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_RETURN_VALUE(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_RETURN_VALUE(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_RET; op->stackop = RZ_ANAL_STACK_INC; op->stackptr = -OBJECT_SIZE_ON_STACK; op->eob = true; } -static void anal_ROT_FOUR(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_ROT_FOUR(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { // Lifts second, third and forth stack items one position up, moves top down to position four. op->type = RZ_ANAL_OP_TYPE_XCHG; } -static void anal_ROT_THREE(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_ROT_THREE(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { // Lifts second and third stack item one position up, moves top down to position three. op->type = RZ_ANAL_OP_TYPE_XCHG; } -static void anal_ROT_TWO(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_ROT_TWO(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { // Swaps the two top-most stack items. op->type = RZ_ANAL_OP_TYPE_XCHG; } -static void anal_SETUP_ANNOTATIONS(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_SETUP_ANNOTATIONS(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_SET_ADD(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_SET_ADD(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_SET_FUNC_ARGS(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_SET_FUNC_ARGS(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { // https://github.com/python/cpython/blob/v1.4/Python/ceval.c // Can't find this opcode op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_SET_LINENO(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_SET_LINENO(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_SLICE_0(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_SLICE_0(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_SLICE_1(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_SLICE_1(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_SLICE_2(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_SLICE_2(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_SLICE_3(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_SLICE_3(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 2); } -static void anal_STOP_CODE(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_STOP_CODE(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_TRAP; } -static void anal_STORE_ANNOTATION(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_STORE_ANNOTATION(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_STORE_ATTR(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_STORE_ATTR(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_STORE_DEREF(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_STORE_DEREF(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_STORE_FAST(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_STORE_FAST(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_STORE_GLOBAL(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_STORE_GLOBAL(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_STORE_LOCALS(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_STORE_LOCALS(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_STORE_MAP(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_STORE_MAP(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 2); } -static void anal_STORE_NAME(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_STORE_NAME(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_STORE_SLICE_0(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_STORE_SLICE_0(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 2); } -static void anal_STORE_SLICE_1(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_STORE_SLICE_1(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 3); } -static void anal_STORE_SLICE_2(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_STORE_SLICE_2(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 3); } -static void anal_STORE_SLICE_3(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_STORE_SLICE_3(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 4); } -static void anal_STORE_SUBSCR(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_STORE_SUBSCR(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 3); } -static void anal_UNARY_CALL(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_UNARY_CALL(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { // https://github.com/python/cpython/blob/v1.4b3/Include/opcode.h // I can not find this opcode even in v1.4 version source code. op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_UNARY_CONVERT(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_UNARY_CONVERT(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_UNARY_INVERT(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_UNARY_INVERT(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_NOT; } -static void anal_UNARY_NEGATIVE(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_UNARY_NEGATIVE(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_UNARY_NOT(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_UNARY_NOT(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_NOT; } -static void anal_UNARY_POSITIVE(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_UNARY_POSITIVE(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_UNPACK_ARG(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_UNPACK_ARG(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_push (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, oparg - 1); } -static void anal_UNPACK_EX(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_UNPACK_EX(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_push (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, (oparg & 0xFF) + (oparg >> 8)); } -static void anal_UNPACK_LIST(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_UNPACK_LIST(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_push (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, oparg - 1); } -static void anal_UNPACK_SEQUENCE(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_UNPACK_SEQUENCE(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_push (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, oparg - 1); } -static void anal_UNPACK_TUPLE(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_UNPACK_TUPLE(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_push (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, oparg - 1); } -static void anal_UNPACK_VARARG(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_UNPACK_VARARG(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { // https://github.com/python/cpython/blob/v1.4b3/Include/opcode.h // I can not find this opcode even in v1.4 version source code. op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_WITH_CLEANUP(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_WITH_CLEANUP(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { // Need the value on stack op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_WITH_CLEANUP_FINISH(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_WITH_CLEANUP_FINISH(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 2); } -static void anal_WITH_CLEANUP_START(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_WITH_CLEANUP_START(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { // Need the value on stack op->type = RZ_ANAL_OP_TYPE_UNK; } -static void anal_WITH_EXCEPT_START(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_WITH_EXCEPT_START(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_push (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_YIELD_FROM(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_YIELD_FROM(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_YIELD_VALUE(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_YIELD_VALUE(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { anal_pop (op, op_obj, oparg, RZ_ANAL_OP_TYPE_UNK, 1); } -static void anal_FOR_ITER(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_FOR_ITER(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_CJMP; ut64 mid = op->jump; op->jump = op->fail; op->fail = mid; } -static void anal_SETUP_LOOP(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_SETUP_LOOP(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { ut64 mid = op->jump; op->jump = op->fail; op->fail = mid; } -static void anal_SETUP_EXCEPT(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_SETUP_EXCEPT(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { ut64 mid = op->jump; op->jump = op->fail; op->fail = mid; } -static void anal_SETUP_FINALLY(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_SETUP_FINALLY(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { ut64 mid = op->jump; op->jump = op->fail; op->fail = mid; } -static void anal_SETUP_WITH(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_SETUP_WITH(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_CJMP; ut64 mid = op->jump; op->jump = op->fail; op->fail = mid; } -static void anal_SETUP_ASYNC_WITH(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +static void anal_SETUP_ASYNC_WITH(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { op->type = RZ_ANAL_OP_TYPE_CJMP; ut64 mid = op->jump; op->jump = op->fail; @@ -896,7 +896,7 @@ static op_anal_func op_anal[] = { { "SETUP_ASYNC_WITH", anal_SETUP_ASYNC_WITH }, }; -void anal_pyc_op(RzAnalOp *op, pyc_opcode_object *op_obj, ut32 oparg) { +void analysis_pyc_op(RzAnalysisOp *op, pyc_opcode_object *op_obj, ut32 oparg) { size_t i; for (i = 0; i < (sizeof (op_anal) / sizeof (op_anal_func)); i++) { if (!strcmp (op_anal[i].op_name, op_obj->op_name)) { diff --git a/librz/config.h.in b/librz/config.h.in index df9a6d343b..a6b2e91b75 100644 --- a/librz/config.h.in +++ b/librz/config.h.in @@ -16,7 +16,7 @@ #define RZ_DEBUG_STATIC_PLUGINS @plugins_debug@ #define RZ_BP_STATIC_PLUGINS @plugins_bp@ #define RZ_ASM_STATIC_PLUGINS @plugins_asm@ -#define RZ_ANAL_STATIC_PLUGINS @plugins_anal@ +#define RZ_ANALYSIS_STATIC_PLUGINS @plugins_analysis@ #define RZ_CORE_STATIC_PLUGINS @plugins_core@ #define RZ_LANG_STATIC_PLUGINS @plugins_lang@ #define RZ_PARSE_STATIC_PLUGINS @plugins_parse@ diff --git a/librz/core/Makefile b/librz/core/Makefile index 039d74885c..d6156650ce 100644 --- a/librz/core/Makefile +++ b/librz/core/Makefile @@ -3,7 +3,7 @@ include ../config.mk NAME=rz_core RZ_DEPS=rz_config rz_cons rz_io rz_util rz_flag rz_asm -RZ_DEPS+=rz_debug rz_hash rz_bin rz_lang rz_io rz_anal rz_parse rz_bp rz_egg +RZ_DEPS+=rz_debug rz_hash rz_bin rz_lang rz_io rz_analysis rz_parse rz_bp rz_egg RZ_DEPS+=rz_reg rz_search rz_syscall rz_socket rz_magic rz_crypto OBJS=core.o cmd.o cfile.o cconfig.o visual.o cio.o yank.o libs.o agraph.o diff --git a/librz/core/agraph.c b/librz/core/agraph.c index 70a8172351..ba996b6d6d 100644 --- a/librz/core/agraph.c +++ b/librz/core/agraph.c @@ -96,7 +96,7 @@ struct layer_t { struct agraph_refresh_data { RzCore *core; RzAGraph *g; - RzAnalFunction **fcn; + RzAnalysisFunction **fcn; bool follow_offset; int fs; }; @@ -2138,46 +2138,46 @@ static char *get_body(RzCore *core, ut64 addr, int size, int opts) { return body; } -static char *get_bb_body(RzCore *core, RzAnalBlock *b, int opts, RzAnalFunction *fcn, bool emu, ut64 saved_gp, ut8 *saved_arena) { +static char *get_bb_body(RzCore *core, RzAnalysisBlock *b, int opts, RzAnalysisFunction *fcn, bool emu, ut64 saved_gp, ut8 *saved_arena) { if (emu) { - core->anal->gp = saved_gp; + core->analysis->gp = saved_gp; if (b->parent_reg_arena) { - rz_reg_arena_poke (core->anal->reg, b->parent_reg_arena); + rz_reg_arena_poke (core->analysis->reg, b->parent_reg_arena); RZ_FREE (b->parent_reg_arena); - ut64 gp = rz_reg_getv (core->anal->reg, "gp"); + ut64 gp = rz_reg_getv (core->analysis->reg, "gp"); if (gp) { - core->anal->gp = gp; + core->analysis->gp = gp; } } else { - rz_reg_arena_poke (core->anal->reg, saved_arena); + rz_reg_arena_poke (core->analysis->reg, saved_arena); } } if (b->parent_stackptr != INT_MAX) { - core->anal->stackptr = b->parent_stackptr; + core->analysis->stackptr = b->parent_stackptr; } char *body = get_body (core, b->addr, b->size, opts); if (b->jump != UT64_MAX) { if (b->jump > b->addr) { - RzAnalBlock *jumpbb = rz_anal_get_block_at (b->anal, b->jump); + RzAnalysisBlock *jumpbb = rz_analysis_get_block_at (b->analysis, b->jump); if (jumpbb && rz_list_contains (jumpbb->fcns, fcn)) { - if (emu && core->anal->last_disasm_reg != NULL && !jumpbb->parent_reg_arena) { - jumpbb->parent_reg_arena = rz_reg_arena_dup (core->anal->reg, core->anal->last_disasm_reg); + if (emu && core->analysis->last_disasm_reg != NULL && !jumpbb->parent_reg_arena) { + jumpbb->parent_reg_arena = rz_reg_arena_dup (core->analysis->reg, core->analysis->last_disasm_reg); } if (jumpbb->parent_stackptr == INT_MAX) { - jumpbb->parent_stackptr = core->anal->stackptr + b->stackptr; + jumpbb->parent_stackptr = core->analysis->stackptr + b->stackptr; } } } } if (b->fail != UT64_MAX) { if (b->fail > b->addr) { - RzAnalBlock *failbb = rz_anal_get_block_at (b->anal, b->fail); + RzAnalysisBlock *failbb = rz_analysis_get_block_at (b->analysis, b->fail); if (failbb && rz_list_contains (failbb->fcns, fcn)) { - if (emu && core->anal->last_disasm_reg != NULL && !failbb->parent_reg_arena) { - failbb->parent_reg_arena = rz_reg_arena_dup (core->anal->reg, core->anal->last_disasm_reg); + if (emu && core->analysis->last_disasm_reg != NULL && !failbb->parent_reg_arena) { + failbb->parent_reg_arena = rz_reg_arena_dup (core->analysis->reg, core->analysis->last_disasm_reg); } if (failbb->parent_stackptr == INT_MAX) { - failbb->parent_stackptr = core->anal->stackptr + b->stackptr; + failbb->parent_stackptr = core->analysis->stackptr + b->stackptr; } } } @@ -2185,23 +2185,23 @@ static char *get_bb_body(RzCore *core, RzAnalBlock *b, int opts, RzAnalFunction return body; } -static int bbcmp(RzAnalBlock *a, RzAnalBlock *b) { +static int bbcmp(RzAnalysisBlock *a, RzAnalysisBlock *b) { return a->addr - b->addr; } -static void get_bbupdate(RzAGraph *g, RzCore *core, RzAnalFunction *fcn) { - RzAnalBlock *bb; +static void get_bbupdate(RzAGraph *g, RzCore *core, RzAnalysisFunction *fcn) { + RzAnalysisBlock *bb; RzListIter *iter; bool emu = rz_config_get_i (core->config, "asm.emu"); - ut64 saved_gp = core->anal->gp; + ut64 saved_gp = core->analysis->gp; ut8 *saved_arena = NULL; - int saved_stackptr = core->anal->stackptr; + int saved_stackptr = core->analysis->stackptr; char *shortcut = 0; int shortcuts = 0; core->keep_asmqjmps = false; if (emu) { - saved_arena = rz_reg_arena_peek (core->anal->reg); + saved_arena = rz_reg_arena_peek (core->analysis->reg); } if (!fcn) { RZ_FREE (saved_arena); @@ -2236,13 +2236,13 @@ static void get_bbupdate(RzAGraph *g, RzCore *core, RzAnalFunction *fcn) { } if (emu) { - core->anal->gp = saved_gp; + core->analysis->gp = saved_gp; if (saved_arena) { - rz_reg_arena_poke (core->anal->reg, saved_arena); + rz_reg_arena_poke (core->analysis->reg, saved_arena); RZ_FREE (saved_arena); } } - core->anal->stackptr = saved_stackptr; + core->analysis->stackptr = saved_stackptr; } static void fold_asm_trace(RzCore *core, RzAGraph *g) { @@ -2284,14 +2284,14 @@ static void delete_dup_edges (RzAGraph *g) { } } -static bool isbbfew(RzAnalBlock *curbb, RzAnalBlock *bb) { +static bool isbbfew(RzAnalysisBlock *curbb, RzAnalysisBlock *bb) { if (bb->addr == curbb->addr || bb->addr == curbb->jump || bb->addr == curbb->fail) { // do nothing return true; } if (curbb->switch_op) { RzListIter *it; - RzAnalCaseOp *cop; + RzAnalysisCaseOp *cop; rz_list_foreach (curbb->switch_op->cases, it, cop) { if (cop->addr == bb->addr) { return true; @@ -2302,33 +2302,33 @@ static bool isbbfew(RzAnalBlock *curbb, RzAnalBlock *bb) { } /* build the RzGraph inside the RzAGraph g, starting from the Basic Blocks */ -static int get_bbnodes(RzAGraph *g, RzCore *core, RzAnalFunction *fcn) { - RzAnalBlock *bb; +static int get_bbnodes(RzAGraph *g, RzCore *core, RzAnalysisFunction *fcn) { + RzAnalysisBlock *bb; RzListIter *iter; char *shortcut = NULL; int shortcuts = 0; bool emu = rz_config_get_i (core->config, "asm.emu"); bool few = rz_config_get_i (core->config, "graph.few"); int ret = false; - ut64 saved_gp = core->anal->gp; + ut64 saved_gp = core->analysis->gp; ut8 *saved_arena = NULL; - int saved_stackptr = core->anal->stackptr; + int saved_stackptr = core->analysis->stackptr; core->keep_asmqjmps = false; if (!fcn) { return false; } if (emu) { - saved_arena = rz_reg_arena_peek (core->anal->reg); + saved_arena = rz_reg_arena_peek (core->analysis->reg); } rz_list_sort (fcn->bbs, (RzListComparator) bbcmp); - RzAnalBlock *curbb = NULL; + RzAnalysisBlock *curbb = NULL; if (few) { rz_list_foreach (fcn->bbs, iter, bb) { if (!curbb) { curbb = bb; } - if (rz_anal_block_contains (bb, core->offset)) { + if (rz_analysis_block_contains (bb, core->offset)) { curbb = bb; break; } @@ -2390,7 +2390,7 @@ static int get_bbnodes(RzAGraph *g, RzCore *core, RzAnalFunction *fcn) { } if (bb->switch_op) { RzListIter *it; - RzAnalCaseOp *cop; + RzAnalysisCaseOp *cop; rz_list_foreach (bb->switch_op->cases, it, cop) { title = get_title (cop->addr); v = rz_agraph_get_node (g, title); @@ -2405,23 +2405,23 @@ static int get_bbnodes(RzAGraph *g, RzCore *core, RzAnalFunction *fcn) { cleanup: if (emu) { - core->anal->gp = saved_gp; + core->analysis->gp = saved_gp; if (saved_arena) { - rz_reg_arena_poke (core->anal->reg, saved_arena); + rz_reg_arena_poke (core->analysis->reg, saved_arena); RZ_FREE (saved_arena); } } - core->anal->stackptr = saved_stackptr; + core->analysis->stackptr = saved_stackptr; return ret; } /* build the RzGraph inside the RzAGraph g, starting from the Call Graph * information */ -static bool get_cgnodes(RzAGraph *g, RzCore *core, RzAnalFunction *fcn) { - RzAnalFunction *f = rz_anal_get_fcn_in (core->anal, core->offset, 0); +static bool get_cgnodes(RzAGraph *g, RzCore *core, RzAnalysisFunction *fcn) { + RzAnalysisFunction *f = rz_analysis_get_fcn_in (core->analysis, core->offset, 0); RzANode *node, *fcn_anode; RzListIter *iter; - RzAnalRef *ref; + RzAnalysisRef *ref; RzList *refs; if (!f) { return false; @@ -2443,7 +2443,7 @@ static bool get_cgnodes(RzAGraph *g, RzCore *core, RzAnalFunction *fcn) { fcn_anode->x = 10; fcn_anode->y = 3; - refs = rz_anal_function_get_refs (fcn); + refs = rz_analysis_function_get_refs (fcn); rz_list_foreach (refs, iter, ref) { title = get_title (ref->addr); if (rz_agraph_get_node (g, title) != NULL) { @@ -2452,7 +2452,7 @@ static bool get_cgnodes(RzAGraph *g, RzCore *core, RzAnalFunction *fcn) { free (title); int size = 0; - RzAnalBlock *bb = rz_anal_bb_from_offset (core->anal, ref->addr); + RzAnalysisBlock *bb = rz_analysis_bb_from_offset (core->analysis, ref->addr); if (bb) { size = bb->size; } @@ -2478,7 +2478,7 @@ static bool get_cgnodes(RzAGraph *g, RzCore *core, RzAnalFunction *fcn) { return true; } -static bool reload_nodes(RzAGraph *g, RzCore *core, RzAnalFunction *fcn) { +static bool reload_nodes(RzAGraph *g, RzCore *core, RzAnalysisFunction *fcn) { const bool is_c = g->is_callgraph; return is_c? get_cgnodes (g, core, fcn): get_bbnodes (g, core, fcn); } @@ -3152,7 +3152,7 @@ static void agraph_set_zoom(RzAGraph *g, int v) { /* reload all the info in the nodes, depending on the type of the graph * (callgraph, CFG, etc.), set the default layout for these nodes and center * the screen on the selected one */ -static bool agraph_reload_nodes(RzAGraph *g, RzCore *core, RzAnalFunction *fcn) { +static bool agraph_reload_nodes(RzAGraph *g, RzCore *core, RzAnalysisFunction *fcn) { rz_agraph_reset (g); return reload_nodes (g, core, fcn); } @@ -3324,7 +3324,7 @@ static void agraph_prev_node(RzAGraph *g) { agraph_update_seek (g, get_anode (g->curnode), false); } -static void agraph_update_title(RzCore *core, RzAGraph *g, RzAnalFunction *fcn) { +static void agraph_update_title(RzCore *core, RzAGraph *g, RzAnalysisFunction *fcn) { RzANode *a = get_anode (g->curnode); char *sig = rz_core_cmd_str (core, "afcf"); char *new_title = rz_str_newf ( @@ -3338,7 +3338,7 @@ static void agraph_update_title(RzCore *core, RzAGraph *g, RzAnalFunction *fcn) /* look for any change in the state of the graph * and update what's necessary */ -static bool check_changes(RzAGraph *g, int is_interactive, RzCore *core, RzAnalFunction *fcn) { +static bool check_changes(RzAGraph *g, int is_interactive, RzCore *core, RzAnalysisFunction *fcn) { int oldpos[2] = { 0, 0 }; @@ -3368,7 +3368,7 @@ static bool check_changes(RzAGraph *g, int is_interactive, RzCore *core, RzAnalF agraph_set_layout (g); } if (core) { - ut64 off = rz_anal_get_bbaddr (core->anal, core->offset); + ut64 off = rz_analysis_get_bbaddr (core->analysis, core->offset); if (off != UT64_MAX) { char *title = get_title (off); RzANode *cur_anode = get_anode (g->curnode); @@ -3405,7 +3405,7 @@ static bool check_changes(RzAGraph *g, int is_interactive, RzCore *core, RzAnalF return true; } -static int agraph_print(RzAGraph *g, int is_interactive, RzCore *core, RzAnalFunction *fcn) { +static int agraph_print(RzAGraph *g, int is_interactive, RzCore *core, RzAnalysisFunction *fcn) { int h, w = rz_cons_get_size (&h); bool ret = check_changes (g, is_interactive, core, fcn); if (!ret) { @@ -3488,11 +3488,11 @@ static int agraph_print(RzAGraph *g, int is_interactive, RzCore *core, RzAnalFun return true; } -static void check_function_modified(RzCore *core, RzAnalFunction *fcn) { - if (rz_anal_function_was_modified (fcn)) { +static void check_function_modified(RzCore *core, RzAnalysisFunction *fcn) { + if (rz_analysis_function_was_modified (fcn)) { if (rz_config_get_i (core->config, "anal.detectwrites") || rz_cons_yesno ('y', "Function was modified. Reanalyze? (Y/n)")) { - rz_anal_function_update_analysis (fcn); + rz_analysis_function_update_analysis (fcn); } } } @@ -3504,8 +3504,8 @@ static int agraph_refresh(struct agraph_refresh_data *grd) { rz_cons_singleton ()->event_data = grd; RzCore *core = grd->core; RzAGraph *g = grd->g; - RzAnalFunction *f = NULL; - RzAnalFunction **fcn = grd->fcn; + RzAnalysisFunction *f = NULL; + RzAnalysisFunction **fcn = grd->fcn; if (!fcn) { return agraph_print (g, grd->fs, core, NULL); @@ -3519,7 +3519,7 @@ static int agraph_refresh(struct agraph_refresh_data *grd) { ut64 addr = rz_reg_get_value (core->dbg->reg, r); RzANode *acur = get_anode (g->curnode); - addr = rz_anal_get_bbaddr (core->anal, addr); + addr = rz_analysis_get_bbaddr (core->analysis, addr); char *title = get_title (addr); if (!acur || strcmp (acur->title, title)) { rz_core_cmd0 (core, "sr PC"); @@ -3530,7 +3530,7 @@ static int agraph_refresh(struct agraph_refresh_data *grd) { if (grd->follow_offset) { if (rz_io_is_valid_offset (core->io, core->offset, 0)) { - f = rz_anal_get_fcn_in (core->anal, core->offset, 0); + f = rz_analysis_get_fcn_in (core->analysis, core->offset, 0); if (!f) { if (!g->is_dis) { if (!rz_cons_yesno ('y', "\rNo function at 0x%08"PFMT64x". Define it here (Y/n)? ", core->offset)) { @@ -3538,7 +3538,7 @@ static int agraph_refresh(struct agraph_refresh_data *grd) { } rz_core_cmd0 (core, "af"); } - f = rz_anal_get_fcn_in (core->anal, core->offset, 0); + f = rz_analysis_get_fcn_in (core->analysis, core->offset, 0); g->need_reload_nodes = true; } if (f && fcn && f != *fcn) { @@ -3962,7 +3962,7 @@ static void goto_asmqjmps(RzAGraph *g, RzCore *core) { } static void seek_to_node(RzANode *n, RzCore *core) { - ut64 off = rz_anal_get_bbaddr (core->anal, core->offset); + ut64 off = rz_analysis_get_bbaddr (core->analysis, core->offset); char *title = get_title (off); if (title && strcmp (title, n->title)) { @@ -4046,9 +4046,9 @@ static void rotateColor(RzCore *core) { // dupe in visual.c static bool toggle_bb(RzCore *core, ut64 addr) { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, addr, RZ_ANAL_FCN_TYPE_NULL); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, addr, RZ_ANAL_FCN_TYPE_NULL); if (fcn) { - RzAnalBlock *bb = rz_anal_fcn_bbget_in (core->anal, fcn, addr); + RzAnalysisBlock *bb = rz_analysis_fcn_bbget_in (core->analysis, fcn, addr); if (bb) { bb->folded = !bb->folded; } else { @@ -4121,7 +4121,7 @@ static void nextword(RzCore *core, RzAGraph *g, const char *word) { nextword (core, g, word); } -RZ_API int rz_core_visual_graph(RzCore *core, RzAGraph *g, RzAnalFunction *_fcn, int is_interactive) { +RZ_API int rz_core_visual_graph(RzCore *core, RzAGraph *g, RzAnalysisFunction *_fcn, int is_interactive) { if (is_interactive && !rz_cons_is_interactive ()) { eprintf ("Interactive graph mode requires scr.interactive=true.\n"); return 0; @@ -4132,7 +4132,7 @@ RZ_API int rz_core_visual_graph(RzCore *core, RzAGraph *g, RzAnalFunction *_fcn, int update_seek = false; struct agraph_refresh_data *grd; int okey, key; - RzAnalFunction *fcn = NULL; + RzAnalysisFunction *fcn = NULL; const char *key_s; RzConsCanvas *can, *o_can = NULL; bool graph_allocated = false; @@ -4162,7 +4162,7 @@ RZ_API int rz_core_visual_graph(RzCore *core, RzAGraph *g, RzAnalFunction *_fcn, if (!g) { graph_allocated = true; - fcn = _fcn? _fcn: rz_anal_get_fcn_in (core->anal, core->offset, 0); + fcn = _fcn? _fcn: rz_analysis_get_fcn_in (core->analysis, core->offset, 0); if (!fcn) { rz_config_hold_restore (hc); rz_config_hold_free (hc); @@ -4399,7 +4399,7 @@ RZ_API int rz_core_visual_graph(RzCore *core, RzAGraph *g, RzAnalFunction *_fcn, break; } ut64 old_off = core->offset; - ut64 off = rz_anal_get_bbaddr (core->anal, core->offset); + ut64 off = rz_analysis_get_bbaddr (core->analysis, core->offset); rz_core_seek (core, off, false); if ((key == 'x' && !rz_core_visual_refs (core, true, true)) || (key == 'X' && !rz_core_visual_refs (core, false, true))) { @@ -4740,7 +4740,7 @@ RZ_API int rz_core_visual_graph(RzCore *core, RzAGraph *g, RzAnalFunction *_fcn, break; case '^': { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, 0); if (fcn) { rz_core_seek (core, fcn->addr, false); } diff --git a/librz/core/anal_objc.c b/librz/core/anal_objc.c index 226f3bc745..c4010a5ea6 100644 --- a/librz/core/anal_objc.c +++ b/librz/core/anal_objc.c @@ -213,7 +213,7 @@ static void core_objc_free(RzCoreObjc *o) { static bool objc_find_refs(RzCore *core) { RzCoreObjc *objc = core_objc_new (core); if (!objc) { - if (core->anal->verbose) { + if (core->analysis->verbose) { eprintf ("Could not find necessary Objective-C sections...\n"); } return false; @@ -271,12 +271,12 @@ static bool objc_find_refs(RzCore *core) { break; } - RzList *list = rz_anal_xrefs_get (core->anal, selRefVA); + RzList *list = rz_analysis_xrefs_get (core->analysis, selRefVA); if (list) { RzListIter *iter; - RzAnalRef *ref; + RzAnalysisRef *ref; rz_list_foreach (list, iter, ref) { - rz_anal_xrefs_set (core->anal, ref->addr, funcVA, RZ_ANAL_REF_TYPE_CODE); + rz_analysis_xrefs_set (core->analysis, ref->addr, funcVA, RZ_ANAL_REF_TYPE_CODE); total_xrefs++; } } @@ -293,7 +293,7 @@ static bool objc_find_refs(RzCore *core) { ut64 a; const size_t word_size = objc->word_size; for (a = va_selrefs; a < ss_selrefs; a += word_size) { - rz_meta_set (core->anal, RZ_META_TYPE_DATA, a, word_size, NULL); + rz_meta_set (core->analysis, RZ_META_TYPE_DATA, a, word_size, NULL); total_words++; } snprintf (rs, sizeof (rs), "Found %zu objc xrefs in %zu dwords.", total_xrefs, total_words); @@ -302,9 +302,9 @@ static bool objc_find_refs(RzCore *core) { return true; } -RZ_API bool cmd_anal_objc(RzCore *core, const char *input, bool auto_anal) { +RZ_API bool cmd_anal_objc(RzCore *core, const char *input, bool auto_analysis) { rz_return_val_if_fail (core && input, 0); - if (!auto_anal) { + if (!auto_analysis) { objc_analyze (core); } return objc_find_refs (core); diff --git a/librz/core/anal_tp.c b/librz/core/anal_tp.c index 6556316d8c..6d66c2bd6c 100644 --- a/librz/core/anal_tp.c +++ b/librz/core/anal_tp.c @@ -1,57 +1,57 @@ // SPDX-License-Identifier: LGPL-3.0-only /* type matching - type propagation */ -#include +#include #include #include #define LOOP_MAX 10 -static bool anal_emul_init(RzCore *core, RzConfigHold *hc, RzDebugTrace **dt, RzAnalEsilTrace **et) { - if (!core->anal->esil) { +static bool anal_emul_init(RzCore *core, RzConfigHold *hc, RzDebugTrace **dt, RzAnalysisEsilTrace **et) { + if (!core->analysis->esil) { return false; } *dt = core->dbg->trace; - *et = core->anal->esil->trace; + *et = core->analysis->esil->trace; core->dbg->trace = rz_debug_trace_new (); - core->anal->esil->trace = rz_anal_esil_trace_new (core->anal->esil); + core->analysis->esil->trace = rz_analysis_esil_trace_new (core->analysis->esil); rz_config_hold_i (hc, "esil.romem", "dbg.trace", "esil.nonull", "dbg.follow", NULL); rz_config_set (core->config, "esil.romem", "true"); rz_config_set (core->config, "dbg.trace", "true"); rz_config_set (core->config, "esil.nonull", "true"); rz_config_set_i (core->config, "dbg.follow", false); - const char *bp = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_BP); - const char *sp = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_SP); - if ((bp && !rz_reg_getv (core->anal->reg, bp)) && (sp && !rz_reg_getv (core->anal->reg, sp))) { + const char *bp = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_BP); + const char *sp = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_SP); + if ((bp && !rz_reg_getv (core->analysis->reg, bp)) && (sp && !rz_reg_getv (core->analysis->reg, sp))) { eprintf ("Stack isn't initialized.\n"); eprintf ("Try running aei and aeim commands before aft for default stack initialization\n"); return false; } - return (core->dbg->trace && core->anal->esil->trace); + return (core->dbg->trace && core->analysis->esil->trace); } -static void anal_emul_restore(RzCore *core, RzConfigHold *hc, RzDebugTrace *dt, RzAnalEsilTrace *et) { +static void anal_emul_restore(RzCore *core, RzConfigHold *hc, RzDebugTrace *dt, RzAnalysisEsilTrace *et) { rz_config_hold_restore (hc); rz_config_hold_free (hc); rz_debug_trace_free (core->dbg->trace); - rz_anal_esil_trace_free (core->anal->esil->trace); - core->anal->esil->trace = et; + rz_analysis_esil_trace_free (core->analysis->esil->trace); + core->analysis->esil->trace = et; core->dbg->trace = dt; } #define SDB_CONTAINS(i,s) sdb_array_contains (trace, sdb_fmt ("%d.reg.write", i), s, 0) -static bool type_pos_hit(RzAnal *anal, Sdb *trace, bool in_stack, int idx, int size, const char *place) { +static bool type_pos_hit(RzAnalysis *analysis, Sdb *trace, bool in_stack, int idx, int size, const char *place) { if (in_stack) { - const char *sp_name = rz_reg_get_name (anal->reg, RZ_REG_NAME_SP); - ut64 sp = rz_reg_getv (anal->reg, sp_name); + const char *sp_name = rz_reg_get_name (analysis->reg, RZ_REG_NAME_SP); + ut64 sp = rz_reg_getv (analysis->reg, sp_name); ut64 write_addr = sdb_num_get (trace, sdb_fmt ("%d.mem.write", idx), 0); return (write_addr == sp + size); } return SDB_CONTAINS (idx, place); } -static void __var_rename(RzAnal *anal, RzAnalVar *v, const char *name, ut64 addr) { +static void __var_rename(RzAnalysis *analysis, RzAnalysisVar *v, const char *name, ut64 addr) { if (!name || !v) { return; } @@ -67,15 +67,15 @@ static void __var_rename(RzAnal *anal, RzAnalVar *v, const char *name, ut64 addr if (!is_default && (strlen (v->name) > strlen (name))) { return; } - RzAnalFunction *fcn = rz_anal_get_fcn_in (anal, addr, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (analysis, addr, 0); if (!fcn) { return; } - rz_anal_var_rename (v, name, false); + rz_analysis_var_rename (v, name, false); } -static void __var_retype(RzAnal *anal, RzAnalVar *var, const char *vname, const char *type, bool ref, bool pfx) { - rz_return_if_fail (anal && var && type); +static void __var_retype(RzAnalysis *analysis, RzAnalysisVar *var, const char *vname, const char *type, bool ref, bool pfx) { + rz_return_if_fail (analysis && var && type); // XXX types should be passed without spaces to trim type = rz_str_trim_head_ro (type); // default type if none is provided @@ -139,15 +139,15 @@ static void __var_retype(RzAnal *anal, RzAnalVar *var, const char *vname, const } else if (rz_str_startswith (tmp1, "int")) { rz_strbuf_set (sb, "int32_t"); } - rz_anal_var_set_type (var, rz_strbuf_get (sb)); + rz_analysis_var_set_type (var, rz_strbuf_get (sb)); rz_strbuf_free (sb); } static void get_src_regname(RzCore *core, ut64 addr, char *regname, int size) { - RzAnal *anal = core->anal; - RzAnalOp *op = rz_core_anal_op (core, addr, RZ_ANAL_OP_MASK_VAL | RZ_ANAL_OP_MASK_ESIL); + RzAnalysis *analysis = core->analysis; + RzAnalysisOp *op = rz_core_analysis_op (core, addr, RZ_ANAL_OP_MASK_VAL | RZ_ANAL_OP_MASK_ESIL); if (!op || rz_strbuf_is_empty (&op->esil)) { - rz_anal_op_free (op); + rz_analysis_op_free (op); return; } char *op_esil = strdup (rz_strbuf_get (&op->esil)); @@ -156,10 +156,10 @@ static void get_src_regname(RzCore *core, ut64 addr, char *regname, int size) { *tmp = '\0'; } memset (regname, 0, size); - RzRegItem *ri = rz_reg_get (anal->reg, op_esil, -1); + RzRegItem *ri = rz_reg_get (analysis->reg, op_esil, -1); if (ri) { - if ((anal->bits == 64) && (ri->size == 32)) { - const char *reg = rz_reg_32_to_64 (anal->reg, op_esil); + if ((analysis->bits == 64) && (ri->size == 32)) { + const char *reg = rz_reg_32_to_64 (analysis->reg, op_esil); if (reg) { free (op_esil); op_esil = strdup (reg); @@ -168,7 +168,7 @@ static void get_src_regname(RzCore *core, ut64 addr, char *regname, int size) { strncpy (regname, op_esil, size - 1); } free (op_esil); - rz_anal_op_free (op); + rz_analysis_op_free (op); } static ut64 get_addr(Sdb *trace, const char *regname, int idx) { @@ -179,7 +179,7 @@ static ut64 get_addr(Sdb *trace, const char *regname, int idx) { return rz_num_math (NULL, sdb_const_get (trace, query, 0)); } -static _RzAnalCond cond_invert(RzAnal *anal, _RzAnalCond cond) { +static _RzAnalysisCond cond_invert(RzAnalysis *analysis, _RzAnalysisCond cond) { switch (cond) { case RZ_ANAL_COND_LE: return RZ_ANAL_COND_GT; @@ -190,7 +190,7 @@ static _RzAnalCond cond_invert(RzAnal *anal, _RzAnalCond cond) { case RZ_ANAL_COND_GT: return RZ_ANAL_COND_LE; default: - if (anal->verbose) { + if (analysis->verbose) { eprintf ("Unhandled conditional swap\n"); } break; @@ -208,7 +208,7 @@ static RzList *parse_format(RzCore *core, char *fmt) { if (!ret) { return NULL; } - Sdb *s = core->anal->sdb_fmts; + Sdb *s = core->analysis->sdb_fmts; const char *spec = rz_config_get (core->config, "anal.types.spec"); char arr[10] = {0}; char *ptr = strchr (fmt, '%'); @@ -235,30 +235,30 @@ static RzList *parse_format(RzCore *core, char *fmt) { return ret; } -static void retype_callee_arg(RzAnal *anal, const char *callee_name, bool in_stack, const char *place, int size, const char *type) { - RzAnalFunction *fcn = rz_anal_get_function_byname (anal, callee_name); +static void retype_callee_arg(RzAnalysis *analysis, const char *callee_name, bool in_stack, const char *place, int size, const char *type) { + RzAnalysisFunction *fcn = rz_analysis_get_function_byname (analysis, callee_name); if (!fcn) { return; } if (in_stack) { - RzAnalVar *var = rz_anal_function_get_var (fcn, RZ_ANAL_VAR_KIND_BPV, size - fcn->bp_off + 8); + RzAnalysisVar *var = rz_analysis_function_get_var (fcn, RZ_ANAL_VAR_KIND_BPV, size - fcn->bp_off + 8); if (!var) { return; } - __var_retype (anal, var, NULL, type, false, false); + __var_retype (analysis, var, NULL, type, false, false); } else { - RzRegItem *item = rz_reg_get (anal->reg, place, -1); + RzRegItem *item = rz_reg_get (analysis->reg, place, -1); if (!item) { return; } - RzAnalVar *rvar = rz_anal_function_get_var (fcn, RZ_ANAL_VAR_KIND_REG, item->index); + RzAnalysisVar *rvar = rz_analysis_function_get_var (fcn, RZ_ANAL_VAR_KIND_REG, item->index); if (!rvar) { return; } - __var_retype (anal, rvar, NULL, type, false, false); - RzAnalVar *lvar = rz_anal_var_get_dst_var (rvar); + __var_retype (analysis, rvar, NULL, type, false, false); + RzAnalysisVar *lvar = rz_analysis_var_get_dst_var (rvar); if (lvar) { - __var_retype (anal, lvar, NULL, type, false, false); + __var_retype (analysis, lvar, NULL, type, false, false); } } } @@ -280,9 +280,9 @@ static void retype_callee_arg(RzAnal *anal, const char *callee_name, bool in_sta */ static void type_match(RzCore *core, char *fcn_name, ut64 addr, ut64 baddr, const char* cc, int prev_idx, bool userfnc, ut64 caddr) { - Sdb *trace = core->anal->esil->trace->db; - Sdb *TDB = core->anal->sdb_types; - RzAnal *anal = core->anal; + Sdb *trace = core->analysis->esil->trace->db; + Sdb *TDB = core->analysis->sdb_types; + RzAnalysis *analysis = core->analysis; RzList *types = NULL; int idx = sdb_num_get (trace, "idx", 0); bool verbose = rz_config_get_i (core->config, "anal.types.verbose"); @@ -292,13 +292,13 @@ static void type_match(RzCore *core, char *fcn_name, ut64 addr, ut64 baddr, cons return; } int i, j, pos = 0, size = 0, max = rz_type_func_args_count (TDB, fcn_name); - const char *place = rz_anal_cc_arg (anal, cc, ST32_MAX); + const char *place = rz_analysis_cc_arg (analysis, cc, ST32_MAX); rz_cons_break_push (NULL, NULL); if (place && !strcmp (place, "stack_rev")) { stack_rev = true; } - place = rz_anal_cc_arg (anal, cc, 0); + place = rz_analysis_cc_arg (analysis, cc, 0); if (place && rz_str_startswith ("stack", place)) { in_stack = true; } @@ -307,7 +307,7 @@ static void type_match(RzCore *core, char *fcn_name, ut64 addr, ut64 baddr, cons } if (!max) { if (!in_stack) { - max = rz_anal_cc_max_arg (anal, cc); + max = rz_analysis_cc_max_arg (analysis, cc); } else { max = DEFAULT_MAX; } @@ -330,7 +330,7 @@ static void type_match(RzCore *core, char *fcn_name, ut64 addr, ut64 baddr, cons } if (!in_stack) { //XXX: param arg_num must be fixed to support floating point register - place = rz_anal_cc_arg (anal, cc, arg_num); + place = rz_analysis_cc_arg (analysis, cc, arg_num); if (place && rz_str_startswith ("stack", place)) { in_stack = true; } @@ -346,27 +346,27 @@ static void type_match(RzCore *core, char *fcn_name, ut64 addr, ut64 baddr, cons if (instr_addr < baddr) { break; } - RzAnalOp *op = rz_core_anal_op (core, instr_addr, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_VAL); + RzAnalysisOp *op = rz_core_analysis_op (core, instr_addr, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_VAL); if (!op) { - rz_anal_op_free (op); + rz_analysis_op_free (op); break; } - RzAnalOp *next_op = rz_core_anal_op (core, instr_addr + op->size, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_VAL); + RzAnalysisOp *next_op = rz_core_analysis_op (core, instr_addr + op->size, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_VAL); if (!next_op || (j != idx && (next_op->type == RZ_ANAL_OP_TYPE_CALL || next_op->type == RZ_ANAL_OP_TYPE_JMP))) { - rz_anal_op_free (op); - rz_anal_op_free (next_op); + rz_analysis_op_free (op); + rz_analysis_op_free (next_op); break; } - RzAnalVar *var = rz_anal_get_used_function_var (anal, op->addr); + RzAnalysisVar *var = rz_analysis_get_used_function_var (analysis, op->addr); const char *query = sdb_fmt ("%d.mem.read", j); if (op->type == RZ_ANAL_OP_TYPE_MOV && sdb_const_get (trace, query, 0)) { memref = ! (!memref && var && (var->kind != RZ_ANAL_VAR_KIND_REG)); } // Match type from function param to instr - if (type_pos_hit (anal, trace, in_stack, j, size, place)) { + if (type_pos_hit (analysis, trace, in_stack, j, size, place)) { if (!cmt_set && type && name) { - rz_meta_set_string (anal, RZ_META_TYPE_VARTYPE, instr_addr, + rz_meta_set_string (analysis, RZ_META_TYPE_VARTYPE, instr_addr, sdb_fmt ("%s%s%s", type, rz_str_endswith (type, "*") ? "" : " ", name)); cmt_set = true; if ((op->ptr && op->ptr != UT64_MAX) && !strcmp (name, "format")) { @@ -387,11 +387,11 @@ static void type_match(RzCore *core, char *fcn_name, ut64 addr, ut64 baddr, cons if (var) { if (!userfnc) { // not a userfunction, propagate the callee's arg types into our function's vars - __var_retype (anal, var, name, type, memref, false); - __var_rename (anal, var, name, addr); + __var_retype (analysis, var, name, type, memref, false); + __var_rename (analysis, var, name, addr); } else { // callee is a userfunction, propagate our variable's type into the callee's args - retype_callee_arg (anal, fcn_name, in_stack, place, size, var->type); + retype_callee_arg (analysis, fcn_name, in_stack, place, size, var->type); } res = true; } else { @@ -404,11 +404,11 @@ static void type_match(RzCore *core, char *fcn_name, ut64 addr, ut64 baddr, cons if (var) { if (!userfnc) { // not a userfunction, propagate the callee's arg types into our function's vars - __var_retype (anal, var, name, type, memref, false); - __var_rename (anal, var, name, addr); + __var_retype (analysis, var, name, type, memref, false); + __var_rename (analysis, var, name, addr); } else { // callee is a userfunction, propagate our variable's type into the callee's args - retype_callee_arg (anal, fcn_name, in_stack, place, size, var->type); + retype_callee_arg (analysis, fcn_name, in_stack, place, size, var->type); } res = true; } else { @@ -429,13 +429,13 @@ static void type_match(RzCore *core, char *fcn_name, ut64 addr, ut64 baddr, cons get_src_regname (core, instr_addr, tmp, sizeof (tmp)); ut64 ptr = get_addr (trace, tmp, j); if (ptr == xaddr) { - __var_retype (anal, var, name, type? type: "int", memref, false); + __var_retype (analysis, var, name, type? type: "int", memref, false); } } - rz_anal_op_free (op); - rz_anal_op_free (next_op); + rz_analysis_op_free (op); + rz_analysis_op_free (next_op); } - size += anal->bits / 8; + size += analysis->bits / 8; free (type); } rz_list_free (types); @@ -443,28 +443,28 @@ static void type_match(RzCore *core, char *fcn_name, ut64 addr, ut64 baddr, cons } static int bb_cmpaddr(const void *_a, const void *_b) { - const RzAnalBlock *a = _a, *b = _b; + const RzAnalysisBlock *a = _a, *b = _b; return a->addr > b->addr ? 1 : (a->addr < b->addr ? -1 : 0); } -RZ_API void rz_core_anal_type_match(RzCore *core, RzAnalFunction *fcn) { - RzAnalBlock *bb; +RZ_API void rz_core_analysis_type_match(RzCore *core, RzAnalysisFunction *fcn) { + RzAnalysisBlock *bb; RzListIter *it; - RzAnalOp aop = {0}; + RzAnalysisOp aop = {0}; bool resolved = false; - rz_return_if_fail (core && core->anal && fcn); + rz_return_if_fail (core && core->analysis && fcn); - if (!core->anal->esil) { + if (!core->analysis->esil) { eprintf ("Please run aeim\n"); return; } - RzAnal *anal = core->anal; - Sdb *TDB = anal->sdb_types; + RzAnalysis *analysis = core->analysis; + Sdb *TDB = analysis->sdb_types; bool chk_constraint = rz_config_get_i (core->config, "anal.types.constraint"); int ret, bsize = RZ_MAX (64, core->blocksize); - const int mininstrsz = rz_anal_archinfo (anal, RZ_ANAL_ARCHINFO_MIN_OP_SIZE); + const int mininstrsz = rz_analysis_archinfo (analysis, RZ_ANAL_ARCHINFO_MIN_OP_SIZE); const int minopcode = RZ_MAX (1, mininstrsz); int cur_idx , prev_idx = 0; RzConfigHold *hc = rz_config_hold_new (core->config); @@ -472,7 +472,7 @@ RZ_API void rz_core_anal_type_match(RzCore *core, RzAnalFunction *fcn) { return; } RzDebugTrace *dt = NULL; - RzAnalEsilTrace *et = NULL; + RzAnalysisEsilTrace *et = NULL; if (!anal_emul_init (core, hc, &dt, &et) || !fcn) { anal_emul_restore (core, hc, dt, et); return; @@ -484,7 +484,7 @@ RZ_API void rz_core_anal_type_match(RzCore *core, RzAnalFunction *fcn) { } // Reserve bigger ht to avoid rehashing - Sdb *etracedb = core->anal->esil->trace->db; + Sdb *etracedb = core->analysis->esil->trace->db; HtPPOptions opt = etracedb->ht->opt; ht_pp_free (etracedb->ht); etracedb->ht = ht_pp_new_size (fcn->ninstr * 0xf, opt.dupvalue, opt.freefn, opt.calcsizeV); @@ -524,42 +524,42 @@ RZ_API void rz_core_anal_type_match(RzCore *core, RzAnalFunction *fcn) { if (i >= (bsize - 32)) { i = 0; } - ut64 pcval = rz_reg_getv (anal->reg, pc); + ut64 pcval = rz_reg_getv (analysis->reg, pc); if ((addr >= bb->addr + bb->size) || (addr < bb->addr) || pcval != addr) { break; } if (!i) { rz_io_read_at (core->io, addr, buf, bsize); } - ret = rz_anal_op (anal, &aop, addr, buf + i, bsize - i, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_VAL); + ret = rz_analysis_op (analysis, &aop, addr, buf + i, bsize - i, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_VAL); if (ret <= 0) { i += minopcode; addr += minopcode; - rz_anal_op_fini (&aop); + rz_analysis_op_fini (&aop); continue; } - int loop_count = sdb_num_get (anal->esil->trace->db, sdb_fmt ("0x%"PFMT64x".count", addr), 0); + int loop_count = sdb_num_get (analysis->esil->trace->db, sdb_fmt ("0x%"PFMT64x".count", addr), 0); if (loop_count > LOOP_MAX || aop.type == RZ_ANAL_OP_TYPE_RET) { - rz_anal_op_fini (&aop); + rz_analysis_op_fini (&aop); break; } - sdb_num_set (anal->esil->trace->db, sdb_fmt ("0x%"PFMT64x".count", addr), loop_count + 1, 0); - if (rz_anal_op_nonlinear (aop.type)) { // skip the instr + sdb_num_set (analysis->esil->trace->db, sdb_fmt ("0x%"PFMT64x".count", addr), loop_count + 1, 0); + if (rz_analysis_op_nonlinear (aop.type)) { // skip the instr rz_reg_set_value (core->dbg->reg, r, addr + ret); } else { rz_core_esil_step (core, UT64_MAX, NULL, NULL, false); } bool userfnc = false; - Sdb *trace = anal->esil->trace->db; + Sdb *trace = analysis->esil->trace->db; cur_idx = sdb_num_get (trace, "idx", 0); - RzAnalVar *var = rz_anal_get_used_function_var (anal, aop.addr); - RzAnalOp *next_op = rz_core_anal_op (core, addr + ret, RZ_ANAL_OP_MASK_BASIC); // | _VAL ? + RzAnalysisVar *var = rz_analysis_get_used_function_var (analysis, aop.addr); + RzAnalysisOp *next_op = rz_core_analysis_op (core, addr + ret, RZ_ANAL_OP_MASK_BASIC); // | _VAL ? ut32 type = aop.type & RZ_ANAL_OP_TYPE_MASK; if (aop.type == RZ_ANAL_OP_TYPE_CALL || aop.type & RZ_ANAL_OP_TYPE_UCALL) { char *full_name = NULL; ut64 callee_addr; if (aop.type == RZ_ANAL_OP_TYPE_CALL) { - RzAnalFunction *fcn_call = rz_anal_get_fcn_in (anal, aop.jump, -1); + RzAnalysisFunction *fcn_call = rz_analysis_get_fcn_in (analysis, aop.jump, -1); if (fcn_call) { full_name = fcn_call->name; callee_addr = fcn_call->addr; @@ -581,8 +581,8 @@ RZ_API void rz_core_anal_type_match(RzCore *core, RzAnalFunction *fcn) { fcn_name = strdup (full_name); userfnc = true; } - const char* Cc = rz_anal_cc_func (anal, fcn_name); - if (Cc && rz_anal_cc_exist (anal, Cc)) { + const char* Cc = rz_analysis_cc_func (analysis, fcn_name); + if (Cc && rz_analysis_cc_exist (analysis, Cc)) { char *cc = strdup (Cc); type_match (core, fcn_name, addr, bb->addr, cc, prev_idx, userfnc, callee_addr); prev_idx = cur_idx; @@ -592,7 +592,7 @@ RZ_API void rz_core_anal_type_match(RzCore *core, RzAnalFunction *fcn) { ret_type = strdup (rt); } RZ_FREE (ret_reg); - const char *rr = rz_anal_cc_ret (anal, cc); + const char *rr = rz_analysis_cc_ret (analysis, cc); if (rr) { ret_reg = strdup (rr); } @@ -602,15 +602,15 @@ RZ_API void rz_core_anal_type_match(RzCore *core, RzAnalFunction *fcn) { if (!strcmp (fcn_name, "__stack_chk_fail")) { const char *query = sdb_fmt ("%d.addr", cur_idx - 1); ut64 mov_addr = sdb_num_get (trace, query, 0); - RzAnalOp *mop = rz_core_anal_op (core, mov_addr, RZ_ANAL_OP_MASK_VAL | RZ_ANAL_OP_MASK_BASIC); + RzAnalysisOp *mop = rz_core_analysis_op (core, mov_addr, RZ_ANAL_OP_MASK_VAL | RZ_ANAL_OP_MASK_BASIC); if (mop) { - RzAnalVar *mopvar = rz_anal_get_used_function_var (anal, mop->addr); + RzAnalysisVar *mopvar = rz_analysis_get_used_function_var (analysis, mop->addr); ut32 type = mop->type & RZ_ANAL_OP_TYPE_MASK; if (type == RZ_ANAL_OP_TYPE_MOV) { - __var_rename (anal, mopvar, "canary", addr); + __var_rename (analysis, mopvar, "canary", addr); } } - rz_anal_op_free (mop); + rz_analysis_op_free (mop); } free (fcn_name); } @@ -622,7 +622,7 @@ RZ_API void rz_core_anal_type_match(RzCore *core, RzAnalFunction *fcn) { get_src_regname (core, aop.addr, src, sizeof (src)); if (ret_reg && *src && strstr (ret_reg, src)) { if (var && aop.direction == RZ_ANAL_OP_DIR_WRITE) { - __var_retype (anal, var, NULL, ret_type, false, false); + __var_retype (analysis, var, NULL, ret_type, false, false); resolved = true; } else if (type == RZ_ANAL_OP_TYPE_MOV) { RZ_FREE (ret_reg); @@ -647,7 +647,7 @@ RZ_API void rz_core_anal_type_match(RzCore *core, RzAnalFunction *fcn) { get_src_regname (core, next_op->addr, nsrc, sizeof (nsrc)); if (ret_reg && *nsrc && strstr (ret_reg, nsrc) && var && aop.direction == RZ_ANAL_OP_DIR_READ) { - __var_retype (anal, var, NULL, ret_type, true, false); + __var_retype (analysis, var, NULL, ret_type, true, false); } } free (foo); @@ -661,12 +661,12 @@ RZ_API void rz_core_anal_type_match(RzCore *core, RzAnalFunction *fcn) { sign = true; } else { // cmp [local_ch], rax ; jb - __var_retype (anal, var, NULL, "unsigned", false, true); + __var_retype (analysis, var, NULL, "unsigned", false, true); } } // cmp [local_ch], rax ; jge if (sign || aop.sign) { - __var_retype (anal, var, NULL, "signed", false, true); + __var_retype (analysis, var, NULL, "signed", false, true); } // lea rax , str.hello ; mov [local_ch], rax; // mov rdx , [local_4h] ; mov [local_8h], rdx; @@ -675,39 +675,39 @@ RZ_API void rz_core_anal_type_match(RzCore *core, RzAnalFunction *fcn) { get_src_regname (core, addr, reg, sizeof (reg)); bool match = strstr (prev_dest, reg) != NULL; if (str_flag && match) { - __var_retype (anal, var, NULL, "const char *", false, false); + __var_retype (analysis, var, NULL, "const char *", false, false); } if (prop && match && prev_var) { - __var_retype (anal, var, NULL, prev_type, false, false); + __var_retype (analysis, var, NULL, prev_type, false, false); } } if (chk_constraint && var && (type == RZ_ANAL_OP_TYPE_CMP && aop.disp != UT64_MAX) && next_op && next_op->type == RZ_ANAL_OP_TYPE_CJMP) { bool jmp = false; - RzAnalOp *jmp_op = {0}; + RzAnalysisOp *jmp_op = {0}; ut64 jmp_addr = next_op->jump; - RzAnalBlock *jmpbb = rz_anal_fcn_bbget_in (anal, fcn, jmp_addr); + RzAnalysisBlock *jmpbb = rz_analysis_fcn_bbget_in (analysis, fcn, jmp_addr); // Check exit status of jmp branch for (i = 0; i < MAX_INSTR ; i++) { - jmp_op = rz_core_anal_op (core, jmp_addr, RZ_ANAL_OP_MASK_BASIC); + jmp_op = rz_core_analysis_op (core, jmp_addr, RZ_ANAL_OP_MASK_BASIC); if (!jmp_op) { break; } - if ((jmp_op->type == RZ_ANAL_OP_TYPE_RET && rz_anal_block_contains (jmpbb, jmp_addr)) + if ((jmp_op->type == RZ_ANAL_OP_TYPE_RET && rz_analysis_block_contains (jmpbb, jmp_addr)) || jmp_op->type == RZ_ANAL_OP_TYPE_CJMP) { jmp = true; - rz_anal_op_free (jmp_op); + rz_analysis_op_free (jmp_op); break; } jmp_addr += jmp_op->size; - rz_anal_op_free (jmp_op); + rz_analysis_op_free (jmp_op); } - RzAnalVarConstraint constr = { - .cond = jmp? cond_invert (anal, next_op->cond): next_op->cond, + RzAnalysisVarConstraint constr = { + .cond = jmp? cond_invert (analysis, next_op->cond): next_op->cond, .val = aop.val }; - rz_anal_var_add_constraint (var, &constr); + rz_analysis_var_add_constraint (var, &constr); } } prev_var = (var && aop.direction == RZ_ANAL_OP_DIR_READ); @@ -735,7 +735,7 @@ RZ_API void rz_core_anal_type_match(RzCore *core, RzAnalFunction *fcn) { } // mov dword [local_4h], str.hello; if (var && str_flag) { - __var_retype (anal, var, NULL, "const char *", false, false); + __var_retype (analysis, var, NULL, "const char *", false, false); } const char *query = sdb_fmt ("%d.reg.write", cur_idx); prev_dest = sdb_const_get (trace, query, 0); @@ -746,26 +746,26 @@ RZ_API void rz_core_anal_type_match(RzCore *core, RzAnalFunction *fcn) { } i += ret; addr += ret; - rz_anal_op_free (next_op); - rz_anal_op_fini (&aop); + rz_analysis_op_free (next_op); + rz_analysis_op_fini (&aop); } } // Type propgation for register based args - RzList *list = rz_anal_var_list (anal, fcn, RZ_ANAL_VAR_KIND_REG); - RzAnalVar *rvar; + RzList *list = rz_analysis_var_list (analysis, fcn, RZ_ANAL_VAR_KIND_REG); + RzAnalysisVar *rvar; RzListIter *iter; rz_list_foreach (list, iter, rvar) { - RzAnalVar *lvar = rz_anal_var_get_dst_var (rvar); - RzRegItem *i = rz_reg_index_get (anal->reg, rvar->delta); + RzAnalysisVar *lvar = rz_analysis_var_get_dst_var (rvar); + RzRegItem *i = rz_reg_index_get (analysis->reg, rvar->delta); if (!i) { continue; } if (lvar) { // Propagate local var type = to => register-based var - __var_retype (anal, rvar, NULL, lvar->type, false, false); + __var_retype (analysis, rvar, NULL, lvar->type, false, false); // Propagate local var type <= from = register-based var - __var_retype (anal, lvar, NULL, rvar->type, false, false); + __var_retype (analysis, lvar, NULL, rvar->type, false, false); } } rz_list_free (list); diff --git a/librz/core/blaze.c b/librz/core/blaze.c index 7edf0fc2ba..749c76a95d 100644 --- a/librz/core/blaze.c +++ b/librz/core/blaze.c @@ -30,7 +30,7 @@ typedef struct fcn { ut64 ends; } fcn_t; -static bool __is_data_block_cb(RzAnalBlock *block, void *user) { +static bool __is_data_block_cb(RzAnalysisBlock *block, void *user) { bool *block_exists = user; *block_exists = true; return false; @@ -44,17 +44,17 @@ static int __isdata(RzCore *core, ut64 addr) { bool block_exists = false; // This will just set block_exists = true if there is any basic block at this addr - rz_anal_blocks_foreach_in (core->anal, addr, __is_data_block_cb, &block_exists); + rz_analysis_blocks_foreach_in (core->analysis, addr, __is_data_block_cb, &block_exists); if (block_exists) { return 1; } - RzPVector *list = rz_meta_get_all_in (core->anal, addr, RZ_META_TYPE_ANY); + RzPVector *list = rz_meta_get_all_in (core->analysis, addr, RZ_META_TYPE_ANY); void **it; int result = 0; rz_pvector_foreach (list, it) { RzIntervalNode *node = *it; - RzAnalMetaItem *meta = node->data; + RzAnalysisMetaItem *meta = node->data; switch (meta->type) { case RZ_META_TYPE_DATA: case RZ_META_TYPE_STRING: @@ -220,7 +220,7 @@ static void createFunction(RzCore *core, fcn_t* fcn, const char *name) { pfx = "fcn"; } - RzAnalFunction *f = rz_anal_function_new (core->anal); + RzAnalysisFunction *f = rz_analysis_function_new (core->analysis); if (!f) { eprintf ("Failed to create new function\n"); return; @@ -228,19 +228,19 @@ static void createFunction(RzCore *core, fcn_t* fcn, const char *name) { f->name = name? strdup (name): rz_str_newf ("%s.%" PFMT64x, pfx, fcn->addr); f->addr = fcn->addr; - f->bits = core->anal->bits; - f->cc = rz_str_constpool_get (&core->anal->constpool, rz_anal_cc_default (core->anal)); + f->bits = core->analysis->bits; + f->cc = rz_str_constpool_get (&core->analysis->constpool, rz_analysis_cc_default (core->analysis)); f->type = RZ_ANAL_FCN_TYPE_FCN; rz_list_foreach (fcn->bbs, fcn_iter, cur) { if (__isdata (core, cur->start)) { continue; } - rz_anal_fcn_add_bb (core->anal, f, cur->start, (cur->end - cur->start), cur->jump, cur->fail, NULL); + rz_analysis_fcn_add_bb (core->analysis, f, cur->start, (cur->end - cur->start), cur->jump, cur->fail, NULL); } - if (!rz_anal_add_function (core->anal, f)) { + if (!rz_analysis_add_function (core->analysis, f)) { // eprintf ("Failed to insert function\n"); - rz_anal_function_free (f); + rz_analysis_function_free (f); return; } } @@ -293,7 +293,7 @@ RZ_API bool core_anal_bbs(RzCore *core, const char* input) { cur += dsize; continue; } - RzAnalOp *const op = rz_core_anal_op (core, dst, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_DISASM); + RzAnalysisOp *const op = rz_core_analysis_op (core, dst, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_DISASM); if (!op || !op->mnemonic) { block_score -= 10; @@ -315,7 +315,7 @@ RZ_API bool core_anal_bbs(RzCore *core, const char* input) { } break; case RZ_ANAL_OP_TYPE_CALL: - if (rz_anal_noreturn_at (core->anal, op->jump)) { + if (rz_analysis_noreturn_at (core->analysis, op->jump)) { addBB (block_list, b_start, dst + op->size, UT64_MAX, UT64_MAX, END, block_score); b_start = dst + op->size; block_score = 0; @@ -354,7 +354,7 @@ RZ_API bool core_anal_bbs(RzCore *core, const char* input) { break; } cur += op->size; - rz_anal_op_free (op); + rz_analysis_op_free (op); } if (debug) { @@ -539,7 +539,7 @@ RZ_API bool core_anal_bbs_range (RzCore *core, const char* input) { ut64 start = core->offset; ut64 size = input[0] ? rz_num_math (core->num, input + 1) : core->blocksize; ut64 b_start = start; - RzAnalOp *op; + RzAnalysisOp *op; RzListIter *iter; int block_score = 0; RzList *block_list; @@ -583,7 +583,7 @@ RZ_API bool core_anal_bbs_range (RzCore *core, const char* input) { } if (!bFound) { - op = rz_core_anal_op (core, b_start + cur, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_DISASM); + op = rz_core_analysis_op (core, b_start + cur, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_DISASM); if (!op || !op->mnemonic) { block_score -= 10; @@ -635,7 +635,7 @@ RZ_API bool core_anal_bbs_range (RzCore *core, const char* input) { cur += op->size; break; } - rz_anal_op_free (op); + rz_analysis_op_free (op); op = NULL; } else { diff --git a/librz/core/canal.c b/librz/core/canal.c index 1f41ea6bfb..832caceec9 100644 --- a/librz/core/canal.c +++ b/librz/core/canal.c @@ -28,64 +28,64 @@ static void loganal(ut64 from, ut64 to, int depth) { } static int cmpsize (const void *a, const void *b) { - ut64 as = rz_anal_function_linear_size ((RzAnalFunction *) a); - ut64 bs = rz_anal_function_linear_size ((RzAnalFunction *) b); + ut64 as = rz_analysis_function_linear_size ((RzAnalysisFunction *) a); + ut64 bs = rz_analysis_function_linear_size ((RzAnalysisFunction *) b); return (as> bs)? 1: (as< bs)? -1: 0; } static int cmpfcncc(const void *_a, const void *_b) { - RzAnalFunction *a = (RzAnalFunction *)_a; - RzAnalFunction *b = (RzAnalFunction *)_b; - ut64 as = rz_anal_function_complexity (a); - ut64 bs = rz_anal_function_complexity (b); + RzAnalysisFunction *a = (RzAnalysisFunction *)_a; + RzAnalysisFunction *b = (RzAnalysisFunction *)_b; + ut64 as = rz_analysis_function_complexity (a); + ut64 bs = rz_analysis_function_complexity (b); return (as > bs)? 1: (as < bs)? -1: 0; } static int cmpedges(const void *_a, const void *_b) { - const RzAnalFunction *a = _a, *b = _b; + const RzAnalysisFunction *a = _a, *b = _b; int as, bs; - rz_anal_function_count_edges (a, &as); - rz_anal_function_count_edges (b, &bs); + rz_analysis_function_count_edges (a, &as); + rz_analysis_function_count_edges (b, &bs); return (as > bs)? 1: (as < bs)? -1: 0; } static int cmpframe(const void *_a, const void *_b) { - const RzAnalFunction *a = _a, *b = _b; + const RzAnalysisFunction *a = _a, *b = _b; int as = a->maxstack; int bs = b->maxstack; return (as > bs)? 1: (as < bs)? -1: 0; } static int cmpxrefs(const void *_a, const void *_b) { - const RzAnalFunction *a = _a, *b = _b; + const RzAnalysisFunction *a = _a, *b = _b; int as = a->meta.numrefs; int bs = b->meta.numrefs; return (as > bs)? 1: (as < bs)? -1: 0; } static int cmpname(const void *_a, const void *_b) { - const RzAnalFunction *a = _a, *b = _b; + const RzAnalysisFunction *a = _a, *b = _b; int as = strcmp (a->name, b->name); int bs = strcmp (b->name, a->name); return (as > bs)? 1: (as < bs)? -1: 0; } static int cmpcalls(const void *_a, const void *_b) { - const RzAnalFunction *a = _a, *b = _b; + const RzAnalysisFunction *a = _a, *b = _b; int as = a->meta.numcallrefs; int bs = b->meta.numcallrefs; return (as > bs)? 1: (as < bs)? -1: 0; } static int cmpnbbs (const void *_a, const void *_b) { - const RzAnalFunction *a = _a, *b = _b; + const RzAnalysisFunction *a = _a, *b = _b; ut64 as = rz_list_length (a->bbs); ut64 bs = rz_list_length (b->bbs); return (as> bs)? 1: (as< bs)? -1: 0; } static int cmpaddr (const void *_a, const void *_b) { - const RzAnalFunction *a = _a, *b = _b; + const RzAnalysisFunction *a = _a, *b = _b; return (a->addr > b->addr)? 1: (a->addr < b->addr)? -1: 0; } @@ -219,7 +219,7 @@ static char *is_string_at(RzCore *core, ut64 addr, int *olen) { } /* returns the RZ_ANAL_ADDR_TYPE_* of the address 'addr' */ -RZ_API ut64 rz_core_anal_address(RzCore *core, ut64 addr) { +RZ_API ut64 rz_core_analysis_address(RzCore *core, ut64 addr) { ut64 types = 0; RzRegSet *rs = NULL; if (!core) { @@ -244,7 +244,7 @@ RZ_API ut64 rz_core_anal_address(RzCore *core, ut64 addr) { if (rz_flag_get_i (core->flags, addr)) { types |= RZ_ANAL_ADDR_TYPE_FLAG; } - if (rz_anal_get_fcn_in (core->anal, addr, 0)) { + if (rz_analysis_get_fcn_in (core->analysis, addr, 0)) { types |= RZ_ANAL_ADDR_TYPE_FUNC; } // check registers @@ -372,14 +372,14 @@ static bool blacklisted_word(char* name) { return false; } -static char *anal_fcn_autoname(RzCore *core, RzAnalFunction *fcn, int dump, int mode) { +static char *anal_fcn_autoname(RzCore *core, RzAnalysisFunction *fcn, int dump, int mode) { int use_getopt = 0; int use_isatty = 0; PJ *pj = NULL; char *do_call = NULL; - RzAnalRef *ref; + RzAnalysisRef *ref; RzListIter *iter; - RzList *refs = rz_anal_function_get_refs (fcn); + RzList *refs = rz_analysis_function_get_refs (fcn); if (mode == 'j') { // start a new JSON object pj = rz_core_pj_new (core); @@ -474,11 +474,11 @@ static char *anal_fcn_autoname(RzCore *core, RzAnalFunction *fcn, int dump, int } /*this only autoname those function that start with fcn.* or sym.func.* */ -RZ_API void rz_core_anal_autoname_all_fcns(RzCore *core) { +RZ_API void rz_core_analysis_autoname_all_fcns(RzCore *core) { RzListIter *it; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; - rz_list_foreach (core->anal->fcns, it, fcn) { + rz_list_foreach (core->analysis->fcns, it, fcn) { if (!strncmp (fcn->name, "fcn.", 4) || !strncmp (fcn->name, "sym.func.", 9)) { RzFlagItem *item = rz_flag_get (core->flags, fcn->name); if (item) { @@ -498,7 +498,7 @@ RZ_API void rz_core_anal_autoname_all_fcns(RzCore *core) { /* reads .gopclntab section in go binaries to recover function names and adds them as sym.go.* flags */ -RZ_API void rz_core_anal_autoname_all_golang_fcns(RzCore *core) { +RZ_API void rz_core_analysis_autoname_all_golang_fcns(RzCore *core) { RzList* section_list = rz_bin_get_sections (core->bin); RzListIter *iter; const char* oldstr = NULL; @@ -515,7 +515,7 @@ RZ_API void rz_core_anal_autoname_all_golang_fcns(RzCore *core) { rz_print_rowlog_done (core->print, oldstr); return; } - int ptr_size = core->anal->bits / 8; + int ptr_size = core->analysis->bits / 8; ut64 offset = gopclntab + 2 * ptr_size; ut64 size_offset = gopclntab + 3 * ptr_size ; ut8 temp_size[4] = {0}; @@ -564,8 +564,8 @@ RZ_API void rz_core_anal_autoname_all_golang_fcns(RzCore *core) { /* suggest a name for the function at the address 'addr'. * If dump is true, every strings associated with the function is printed */ -RZ_API char *rz_core_anal_fcn_autoname(RzCore *core, ut64 addr, int dump, int mode) { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, addr, 0); +RZ_API char *rz_core_analysis_fcn_autoname(RzCore *core, ut64 addr, int dump, int mode) { + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, addr, 0); if (fcn) { return anal_fcn_autoname (core, fcn, dump, mode); } @@ -583,20 +583,20 @@ static ut64 *next_append(ut64 *next, int *nexti, ut64 v) { return next; } -static void rz_anal_set_stringrefs(RzCore *core, RzAnalFunction *fcn) { +static void rz_analysis_set_stringrefs(RzCore *core, RzAnalysisFunction *fcn) { RzListIter *iter; - RzAnalRef *ref; - RzList *refs = rz_anal_function_get_refs (fcn); + RzAnalysisRef *ref; + RzList *refs = rz_analysis_function_get_refs (fcn); rz_list_foreach (refs, iter, ref) { if (ref->type == RZ_ANAL_REF_TYPE_DATA && rz_bin_is_string (core->bin, ref->addr)) { - rz_anal_xrefs_set (core->anal, ref->at, ref->addr, RZ_ANAL_REF_TYPE_STRING); + rz_analysis_xrefs_set (core->analysis, ref->at, ref->addr, RZ_ANAL_REF_TYPE_STRING); } } rz_list_free (refs); } -static bool rz_anal_try_get_fcn(RzCore *core, RzAnalRef *ref, int fcndepth, int refdepth) { +static bool rz_analysis_try_get_fcn(RzCore *core, RzAnalysisRef *ref, int fcndepth, int refdepth) { if (!refdepth) { return false; } @@ -608,21 +608,21 @@ static bool rz_anal_try_get_fcn(RzCore *core, RzAnalRef *ref, int fcndepth, int if (map->perm & RZ_PERM_X) { ut8 buf[64]; rz_io_read_at (core->io, ref->addr, buf, sizeof (buf)); - bool looksLikeAFunction = rz_anal_check_fcn (core->anal, buf, sizeof (buf), ref->addr, map->itv.addr, + bool looksLikeAFunction = rz_analysis_check_fcn (core->analysis, buf, sizeof (buf), ref->addr, map->itv.addr, map->itv.addr + map->itv.size); if (looksLikeAFunction) { - if (core->anal->limit) { - if (ref->addr < core->anal->limit->from || - ref->addr > core->anal->limit->to) { + if (core->analysis->limit) { + if (ref->addr < core->analysis->limit->from || + ref->addr > core->analysis->limit->to) { return 1; } } - rz_core_anal_fcn (core, ref->addr, ref->at, ref->type, fcndepth - 1); + rz_core_analysis_fcn (core, ref->addr, ref->at, ref->type, fcndepth - 1); } } else { ut64 offs = 0; - ut64 sz = core->anal->bits >> 3; - RzAnalRef ref1; + ut64 sz = core->analysis->bits >> 3; + RzAnalysisRef ref1; ref1.type = RZ_ANAL_REF_TYPE_DATA; ref1.at = ref->addr; ref1.addr = 0; @@ -633,7 +633,7 @@ static bool rz_anal_try_get_fcn(RzCore *core, RzAnalRef *ref, int fcndepth, int for (offs = 0; offs < offe; offs += sz, ref1.at += sz) { ut8 bo[8]; rz_io_read_at (core->io, ref->addr + offs, bo, RZ_MIN (sizeof (bo), sz)); - bool be = core->anal->big_endian; + bool be = core->analysis->big_endian; switch (sz) { case 1: i8 = rz_read_ble8 (bo); @@ -651,16 +651,16 @@ static bool rz_anal_try_get_fcn(RzCore *core, RzAnalRef *ref, int fcndepth, int ref1.addr = rz_read_ble64 (bo, be); break; } - rz_anal_try_get_fcn (core, &ref1, fcndepth, refdepth - 1); + rz_analysis_try_get_fcn (core, &ref1, fcndepth, refdepth - 1); } } return 1; } -static int rz_anal_analyze_fcn_refs(RzCore *core, RzAnalFunction *fcn, int depth) { +static int rz_analysis_analyze_fcn_refs(RzCore *core, RzAnalysisFunction *fcn, int depth) { RzListIter *iter; - RzAnalRef *ref; - RzList *refs = rz_anal_function_get_refs (fcn); + RzAnalysisRef *ref; + RzList *refs = rz_analysis_function_get_refs (fcn); rz_list_foreach (refs, iter, ref) { if (ref->addr == UT64_MAX) { @@ -668,25 +668,25 @@ static int rz_anal_analyze_fcn_refs(RzCore *core, RzAnalFunction *fcn, int depth } switch (ref->type) { case RZ_ANAL_REF_TYPE_DATA: - if (core->anal->opt.followdatarefs) { - rz_anal_try_get_fcn (core, ref, depth, 2); + if (core->analysis->opt.followdatarefs) { + rz_analysis_try_get_fcn (core, ref, depth, 2); } break; case RZ_ANAL_REF_TYPE_CODE: case RZ_ANAL_REF_TYPE_CALL: - rz_core_anal_fcn (core, ref->addr, ref->at, ref->type, depth - 1); + rz_core_analysis_fcn (core, ref->addr, ref->at, ref->type, depth - 1); break; default: break; } // TODO: fix memleak here, fcn not freed even though it is - // added in core->anal->fcns which is freed in rz_anal_free() + // added in core->analysis->fcns which is freed in rz_analysis_free() } rz_list_free (refs); return 1; } -static void function_rename(RzFlag *flags, RzAnalFunction *fcn) { +static void function_rename(RzFlag *flags, RzAnalysisFunction *fcn) { const char *locname = "loc."; const size_t locsize = strlen (locname); char *fcnname = fcn->name; @@ -696,7 +696,7 @@ static void function_rename(RzFlag *flags, RzAnalFunction *fcn) { RzFlagItem *f; fcn->type = RZ_ANAL_FCN_TYPE_FCN; - fcnpfx = rz_anal_fcntype_tostring (fcn->type); + fcnpfx = rz_analysis_fcntype_tostring (fcn->type); restofname = fcn->name + locsize; fcn->name = rz_str_newf ("%s.%s", fcnpfx, restofname); @@ -707,11 +707,11 @@ static void function_rename(RzFlag *flags, RzAnalFunction *fcn) { } } -static void autoname_imp_trampoline(RzCore *core, RzAnalFunction *fcn) { - if (rz_list_length (fcn->bbs) == 1 && ((RzAnalBlock *) rz_list_first (fcn->bbs))->ninstr == 1) { - RzList *refs = rz_anal_function_get_refs (fcn); +static void autoname_imp_trampoline(RzCore *core, RzAnalysisFunction *fcn) { + if (rz_list_length (fcn->bbs) == 1 && ((RzAnalysisBlock *) rz_list_first (fcn->bbs))->ninstr == 1) { + RzList *refs = rz_analysis_function_get_refs (fcn); if (refs && rz_list_length (refs) == 1) { - RzAnalRef *ref = rz_list_first (refs); + RzAnalysisRef *ref = rz_list_first (refs); if (ref->type != RZ_ANAL_REF_TYPE_CALL) { /* Some fcns don't return */ RzFlagItem *flg = rz_flag_get_i (core->flags, ref->addr); if (flg && rz_str_startswith (flg->name, "sym.imp.")) { @@ -724,19 +724,19 @@ static void autoname_imp_trampoline(RzCore *core, RzAnalFunction *fcn) { } } -static void set_fcn_name_from_flag(RzAnalFunction *fcn, RzFlagItem *f, const char *fcnpfx) { +static void set_fcn_name_from_flag(RzAnalysisFunction *fcn, RzFlagItem *f, const char *fcnpfx) { bool nameChanged = false; if (f && f->name) { if (!strncmp (fcn->name, "loc.", 4) || !strncmp (fcn->name, "fcn.", 4)) { - rz_anal_function_rename (fcn, f->name); + rz_analysis_function_rename (fcn, f->name); nameChanged = true; } else if (strncmp (f->name, "sect", 4)) { - rz_anal_function_rename (fcn, f->name); + rz_analysis_function_rename (fcn, f->name); nameChanged = true; } } if (!nameChanged) { - rz_anal_function_rename (fcn, sdb_fmt ("%s.%08" PFMT64x, fcnpfx, fcn->addr)); + rz_analysis_function_rename (fcn, sdb_fmt ("%s.%08" PFMT64x, fcnpfx, fcn->addr)); } } @@ -751,11 +751,11 @@ static int __core_anal_fcn(RzCore *core, ut64 at, ut64 from, int reftype, int de return false; } int has_next = rz_config_get_i (core->config, "anal.hasnext"); - RzAnalHint *hint = NULL; + RzAnalysisHint *hint = NULL; int i, nexti = 0; ut64 *next = NULL; int fcnlen; - RzAnalFunction *fcn = rz_anal_function_new (core->anal); + RzAnalysisFunction *fcn = rz_analysis_function_new (core->analysis); const char *fcnpfx = rz_config_get (core->config, "anal.fcnprefix"); if (!fcnpfx) { fcnpfx = "fcn"; @@ -764,14 +764,14 @@ static int __core_anal_fcn(RzCore *core, ut64 at, ut64 from, int reftype, int de eprintf ("Error: new (fcn)\n"); return false; } - fcn->cc = rz_str_constpool_get (&core->anal->constpool, rz_anal_cc_default (core->anal)); - rz_warn_if_fail (!core->anal->sdb_cc->path || fcn->cc); - hint = rz_anal_hint_get (core->anal, at); + fcn->cc = rz_str_constpool_get (&core->analysis->constpool, rz_analysis_cc_default (core->analysis)); + rz_warn_if_fail (!core->analysis->sdb_cc->path || fcn->cc); + hint = rz_analysis_hint_get (core->analysis, at); if (hint && hint->bits == 16) { // expand 16bit for function fcn->bits = 16; } else { - fcn->bits = core->anal->bits; + fcn->bits = core->analysis->bits; } fcn->addr = at; fcn->name = getFunctionName (core, at); @@ -779,22 +779,22 @@ static int __core_anal_fcn(RzCore *core, ut64 at, ut64 from, int reftype, int de if (!fcn->name) { fcn->name = rz_str_newf ("%s.%08"PFMT64x, fcnpfx, at); } - rz_anal_fcn_invalidate_read_ahead_cache (); + rz_analysis_fcn_invalidate_read_ahead_cache (); do { RzFlagItem *f; - ut64 delta = rz_anal_function_linear_size (fcn); - if (!rz_io_is_valid_offset (core->io, at + delta, !core->anal->opt.noncode)) { + ut64 delta = rz_analysis_function_linear_size (fcn); + if (!rz_io_is_valid_offset (core->io, at + delta, !core->analysis->opt.noncode)) { goto error; } if (rz_cons_is_breaked ()) { break; } - fcnlen = rz_anal_fcn (core->anal, fcn, at + delta, core->anal->opt.bb_max_size, reftype); - if (core->anal->opt.searchstringrefs) { - rz_anal_set_stringrefs (core, fcn); + fcnlen = rz_analysis_fcn (core->analysis, fcn, at + delta, core->analysis->opt.bb_max_size, reftype); + if (core->analysis->opt.searchstringrefs) { + rz_analysis_set_stringrefs (core, fcn); } if (fcnlen == 0) { - if (core->anal->verbose) { + if (core->analysis->verbose) { eprintf ("Analyzed function size is 0 at 0x%08"PFMT64x"\n", at + delta); } goto error; @@ -815,9 +815,9 @@ static int __core_anal_fcn(RzCore *core, ut64 at, ut64 from, int reftype, int de set_fcn_name_from_flag (fcn, f, fcnpfx); if (fcnlen == RZ_ANAL_RET_ERROR || - (fcnlen == RZ_ANAL_RET_END && !rz_anal_function_realsize (fcn))) { /* Error analyzing function */ - if (core->anal->opt.followbrokenfcnsrefs) { - rz_anal_analyze_fcn_refs (core, fcn, depth); + (fcnlen == RZ_ANAL_RET_END && !rz_analysis_function_realsize (fcn))) { /* Error analyzing function */ + if (core->analysis->opt.followbrokenfcnsrefs) { + rz_analysis_analyze_fcn_refs (core, fcn, depth); } goto error; } else if (fcnlen == RZ_ANAL_RET_END) { /* Function analysis complete */ @@ -841,7 +841,7 @@ static int __core_anal_fcn(RzCore *core, ut64 at, ut64 from, int reftype, int de fcn->name = new_name; } else { RZ_FREE (fcn->name); - const char *fcnpfx = rz_anal_fcntype_tostring (fcn->type); + const char *fcnpfx = rz_analysis_fcntype_tostring (fcn->type); if (!fcnpfx || !*fcnpfx || !strcmp (fcnpfx, "fcn")) { fcnpfx = rz_config_get (core->config, "anal.fcnprefix"); } @@ -849,18 +849,18 @@ static int __core_anal_fcn(RzCore *core, ut64 at, ut64 from, int reftype, int de autoname_imp_trampoline (core, fcn); /* Add flag */ rz_flag_space_push (core->flags, RZ_FLAGS_FS_FUNCTIONS); - rz_flag_set (core->flags, fcn->name, fcn->addr, rz_anal_function_linear_size (fcn)); + rz_flag_set (core->flags, fcn->name, fcn->addr, rz_analysis_function_linear_size (fcn)); rz_flag_space_pop (core->flags); } /* New function: Add initial xref */ if (from != UT64_MAX) { - rz_anal_xrefs_set (core->anal, from, fcn->addr, reftype); + rz_analysis_xrefs_set (core->analysis, from, fcn->addr, reftype); } // XXX: this is wrong. See CID 1134565 - rz_anal_add_function (core->anal, fcn); + rz_analysis_add_function (core->analysis, fcn); if (has_next) { - ut64 addr = rz_anal_function_max_addr (fcn); + ut64 addr = rz_analysis_function_max_addr (fcn); RzIOMap *map = rz_io_map_get (core->io, addr); // only get next if found on an executable section if (!map || (map && map->perm & RZ_PERM_X)) { @@ -870,10 +870,10 @@ static int __core_anal_fcn(RzCore *core, ut64 at, ut64 from, int reftype, int de } } if (i == nexti) { - ut64 at = rz_anal_function_max_addr (fcn); + ut64 at = rz_analysis_function_max_addr (fcn); while (true) { ut64 size; - RzAnalMetaItem *mi = rz_meta_get_at (core->anal, at, RZ_META_TYPE_ANY, &size); + RzAnalysisMetaItem *mi = rz_meta_get_at (core->analysis, at, RZ_META_TYPE_ANY, &size); if (!mi) { break; } @@ -887,38 +887,38 @@ static int __core_anal_fcn(RzCore *core, ut64 at, ut64 from, int reftype, int de } } } - if (!rz_anal_analyze_fcn_refs (core, fcn, depth)) { + if (!rz_analysis_analyze_fcn_refs (core, fcn, depth)) { goto error; } } } while (fcnlen != RZ_ANAL_RET_END); - rz_list_free (core->anal->leaddrs); - core->anal->leaddrs = NULL; + rz_list_free (core->analysis->leaddrs); + core->analysis->leaddrs = NULL; if (has_next) { for (i = 0; i < nexti; i++) { - if (!next[i] || rz_anal_get_fcn_in (core->anal, next[i], 0)) { + if (!next[i] || rz_analysis_get_fcn_in (core->analysis, next[i], 0)) { continue; } - rz_core_anal_fcn (core, next[i], from, 0, depth - 1); + rz_core_analysis_fcn (core, next[i], from, 0, depth - 1); } free (next); } - if (core->anal->cur && core->anal->cur->arch && !strcmp (core->anal->cur->arch, "x86")) { - rz_anal_function_check_bp_use (fcn); + if (core->analysis->cur && core->analysis->cur->arch && !strcmp (core->analysis->cur->arch, "x86")) { + rz_analysis_function_check_bp_use (fcn); if (fcn && !fcn->bp_frame) { - rz_anal_function_delete_vars_by_kind (fcn, RZ_ANAL_VAR_KIND_BPV); + rz_analysis_function_delete_vars_by_kind (fcn, RZ_ANAL_VAR_KIND_BPV); } } - rz_anal_hint_free (hint); + rz_analysis_hint_free (hint); return true; error: - rz_list_free (core->anal->leaddrs); - core->anal->leaddrs = NULL; + rz_list_free (core->analysis->leaddrs); + core->analysis->leaddrs = NULL; // ugly hack to free fcn if (fcn) { - if (!rz_anal_function_realsize (fcn) || fcn->addr == UT64_MAX) { - rz_anal_function_free (fcn); + if (!rz_analysis_function_realsize (fcn) || fcn->addr == UT64_MAX) { + rz_analysis_function_free (fcn); fcn = NULL; } else { // TODO: mark this function as not properly analyzed @@ -926,17 +926,17 @@ error: // XXX dupped code. fcn->name = rz_str_newf ( "%s.%08" PFMT64x, - rz_anal_fcntype_tostring (fcn->type), + rz_analysis_fcntype_tostring (fcn->type), at); /* Add flag */ rz_flag_space_push (core->flags, RZ_FLAGS_FS_FUNCTIONS); - rz_flag_set (core->flags, fcn->name, at, rz_anal_function_linear_size (fcn)); + rz_flag_set (core->flags, fcn->name, at, rz_analysis_function_linear_size (fcn)); rz_flag_space_pop (core->flags); } - rz_anal_add_function (core->anal, fcn); + rz_analysis_add_function (core->analysis, fcn); } if (fcn && has_next) { - ut64 newaddr = rz_anal_function_max_addr (fcn); + ut64 newaddr = rz_analysis_function_max_addr (fcn); RzIOMap *map = rz_io_map_get (core->io, newaddr); if (!map || (map && (map->perm & RZ_PERM_X))) { next = next_append (next, &nexti, newaddr); @@ -944,19 +944,19 @@ error: if (!next[i]) { continue; } - rz_core_anal_fcn (core, next[i], next[i], 0, depth - 1); + rz_core_analysis_fcn (core, next[i], next[i], 0, depth - 1); } free (next); } } } - if (fcn && core->anal->cur && core->anal->cur->arch && !strcmp (core->anal->cur->arch, "x86")) { - rz_anal_function_check_bp_use (fcn); + if (fcn && core->analysis->cur && core->analysis->cur->arch && !strcmp (core->analysis->cur->arch, "x86")) { + rz_analysis_function_check_bp_use (fcn); if (!fcn->bp_frame) { - rz_anal_function_delete_vars_by_kind (fcn, RZ_ANAL_VAR_KIND_BPV); + rz_analysis_function_delete_vars_by_kind (fcn, RZ_ANAL_VAR_KIND_BPV); } } - rz_anal_hint_free (hint); + rz_analysis_hint_free (hint); return false; } @@ -964,8 +964,8 @@ static char *get_title(ut64 addr) { return rz_str_newf ("0x%"PFMT64x, addr); } -/* decode and return the RzAnalOp at the address addr */ -RZ_API RzAnalOp* rz_core_anal_op(RzCore *core, ut64 addr, int mask) { +/* decode and return the RzAnalysisOp at the address addr */ +RZ_API RzAnalysisOp* rz_core_analysis_op(RzCore *core, ut64 addr, int mask) { int len; ut8 buf[32]; ut8 *ptr; @@ -974,7 +974,7 @@ RZ_API RzAnalOp* rz_core_anal_op(RzCore *core, ut64 addr, int mask) { if (addr == UT64_MAX) { return NULL; } - RzAnalOp *op = RZ_NEW0 (RzAnalOp); + RzAnalysisOp *op = RZ_NEW0 (RzAnalysisOp); if (!op) { return NULL; } @@ -993,14 +993,14 @@ RZ_API RzAnalOp* rz_core_anal_op(RzCore *core, ut64 addr, int mask) { ptr = buf; len = sizeof (buf); } - if (rz_anal_op (core->anal, op, addr, ptr, len, mask) < 1) { + if (rz_analysis_op (core->analysis, op, addr, ptr, len, mask) < 1) { goto err_op; } // TODO This code block must be deleted when all the anal plugs support disasm if (!op->mnemonic && mask & RZ_ANAL_OP_MASK_DISASM) { RzAsmOp asmop; - if (core->anal->verbose) { - eprintf ("WARNING: Implement RzAnalOp.MASK_DISASM for current anal.arch. Using the sluggish RzAsmOp fallback for now.\n"); + if (core->analysis->verbose) { + eprintf ("WARNING: Implement RzAnalysisOp.MASK_DISASM for current anal.arch. Using the sluggish RzAsmOp fallback for now.\n"); } rz_asm_set_pc (core->rasm, addr); rz_asm_op_init (&asmop); @@ -1025,7 +1025,7 @@ typedef struct { HINT_NODE_BITS } type; union { - const RzVector/**/ *addr_hints; + const RzVector/**/ *addr_hints; const char *arch; int bits; }; @@ -1034,7 +1034,7 @@ typedef struct { static void print_hint_h_format(HintNode *node) { switch (node->type) { case HINT_NODE_ADDR: { - const RzAnalAddrHintRecord *record; + const RzAnalysisAddrHintRecord *record; rz_vector_foreach (node->addr_hints, record) { switch (record->type) { case RZ_ANAL_ADDR_HINT_TYPE_IMMBASE: @@ -1068,7 +1068,7 @@ static void print_hint_h_format(HintNode *node) { rz_cons_printf (" syntax='%s'", record->syntax); break; case RZ_ANAL_ADDR_HINT_TYPE_OPTYPE: { - const char *type = rz_anal_optype_to_string (record->optype); + const char *type = rz_analysis_optype_to_string (record->optype); if (type) { rz_cons_printf (" type='%s'", type); } @@ -1117,7 +1117,7 @@ static void hint_node_print(HintNode *node, int mode, PJ *pj) { #define HINTCMD_ADDR(hint,fmt,x) rz_cons_printf (fmt" @ 0x%"PFMT64x"\n", x, (hint)->addr) switch (node->type) { case HINT_NODE_ADDR: { - const RzAnalAddrHintRecord *record; + const RzAnalysisAddrHintRecord *record; rz_vector_foreach (node->addr_hints, record) { switch (record->type) { case RZ_ANAL_ADDR_HINT_TYPE_IMMBASE: @@ -1151,7 +1151,7 @@ static void hint_node_print(HintNode *node, int mode, PJ *pj) { HINTCMD_ADDR (node, "ahS %s", record->syntax); // TODO: escape for newcmd break; case RZ_ANAL_ADDR_HINT_TYPE_OPTYPE: { - const char *type = rz_anal_optype_to_string (record->optype); + const char *type = rz_analysis_optype_to_string (record->optype); if (type) { HINTCMD_ADDR (node, "aho %s", type); // TODO: escape for newcmd } @@ -1188,7 +1188,7 @@ static void hint_node_print(HintNode *node, int mode, PJ *pj) { case 'j': switch (node->type) { case HINT_NODE_ADDR: { - const RzAnalAddrHintRecord *record; + const RzAnalysisAddrHintRecord *record; rz_vector_foreach (node->addr_hints, record) { switch (record->type) { case RZ_ANAL_ADDR_HINT_TYPE_IMMBASE: @@ -1222,7 +1222,7 @@ static void hint_node_print(HintNode *node, int mode, PJ *pj) { pj_ks (pj, "syntax", record->syntax); break; case RZ_ANAL_ADDR_HINT_TYPE_OPTYPE: { - const char *type = rz_anal_optype_to_string (record->optype); + const char *type = rz_analysis_optype_to_string (record->optype); if (type) { pj_ks (pj, "type", type); } @@ -1280,7 +1280,7 @@ int hint_node_cmp(const void *incoming, const RBNode *in_tree, void *user) { return 0; } -bool print_addr_hint_cb(ut64 addr, const RzVector/**/ *records, void *user) { +bool print_addr_hint_cb(ut64 addr, const RzVector/**/ *records, void *user) { HintNode *node = RZ_NEW0 (HintNode); if (!node) { return false; @@ -1360,28 +1360,28 @@ static void print_hint_tree(RBTree tree, int mode) { } } -RZ_API void rz_core_anal_hint_list(RzAnal *a, int mode) { +RZ_API void rz_core_analysis_hint_list(RzAnalysis *a, int mode) { RBTree tree = NULL; // Collect all hints in the tree to sort them - rz_anal_arch_hints_foreach (a, print_arch_hint_cb, &tree); - rz_anal_bits_hints_foreach (a, print_bits_hint_cb, &tree); - rz_anal_addr_hints_foreach (a, print_addr_hint_cb, &tree); + rz_analysis_arch_hints_foreach (a, print_arch_hint_cb, &tree); + rz_analysis_bits_hints_foreach (a, print_bits_hint_cb, &tree); + rz_analysis_addr_hints_foreach (a, print_addr_hint_cb, &tree); print_hint_tree (tree, mode); rz_rbtree_free (tree, hint_node_free, NULL); } -RZ_API void rz_core_anal_hint_print(RzAnal* a, ut64 addr, int mode) { +RZ_API void rz_core_analysis_hint_print(RzAnalysis* a, ut64 addr, int mode) { RBTree tree = NULL; ut64 hint_addr = UT64_MAX; - const char *arch = rz_anal_hint_arch_at(a, addr, &hint_addr); + const char *arch = rz_analysis_hint_arch_at(a, addr, &hint_addr); if (hint_addr != UT64_MAX) { print_arch_hint_cb (hint_addr, arch, &tree); } - int bits = rz_anal_hint_bits_at (a, addr, &hint_addr); + int bits = rz_analysis_hint_bits_at (a, addr, &hint_addr); if (hint_addr != UT64_MAX) { print_bits_hint_cb (hint_addr, bits, &tree); } - const RzVector *addr_hints = rz_anal_addr_hints_at (a, addr); + const RzVector *addr_hints = rz_analysis_addr_hints_at (a, addr); if (addr_hints) { print_addr_hint_cb (addr, addr_hints, &tree); } @@ -1389,7 +1389,7 @@ RZ_API void rz_core_anal_hint_print(RzAnal* a, ut64 addr, int mode) { rz_rbtree_free (tree, hint_node_free, NULL); } -static char *core_anal_graph_label(RzCore *core, RzAnalBlock *bb, int opts) { +static char *core_anal_graph_label(RzCore *core, RzAnalysisBlock *bb, int opts) { int is_html = rz_cons_singleton ()->is_html; int is_json = opts & RZ_CORE_ANAL_JSON; char cmd[1024], file[1024], *cmdstr = NULL, *filestr = NULL, *str = NULL; @@ -1449,10 +1449,10 @@ static char *palColorFor(const char *k) { return rz_cons_rgb_tostring (rcolor.r, rcolor.g, rcolor.b); } -static void core_anal_color_curr_node(RzCore *core, RzAnalBlock *bbi) { +static void core_anal_color_curr_node(RzCore *core, RzAnalysisBlock *bbi) { bool color_current = rz_config_get_i (core->config, "graph.gv.current"); char *pal_curr = palColorFor ("graph.current"); - bool current = rz_anal_block_contains (bbi, core->offset); + bool current = rz_analysis_block_contains (bbi, core->offset); if (current && color_current) { rz_cons_printf ("\t\"0x%08"PFMT64x"\" ", bbi->addr); @@ -1461,8 +1461,8 @@ static void core_anal_color_curr_node(RzCore *core, RzAnalBlock *bbi) { free (pal_curr); } -static int core_anal_graph_construct_edges (RzCore *core, RzAnalFunction *fcn, int opts, PJ *pj, Sdb *DB) { - RzAnalBlock *bbi; +static int core_anal_graph_construct_edges (RzCore *core, RzAnalysisFunction *fcn, int opts, PJ *pj, Sdb *DB) { + RzAnalysisBlock *bbi; RzListIter *iter; int is_keva = opts & RZ_CORE_ANAL_KEYVALUE; int is_star = opts & RZ_CORE_ANAL_STAR; @@ -1527,7 +1527,7 @@ static int core_anal_graph_construct_edges (RzCore *core, RzAnalFunction *fcn, i } } if (bbi->switch_op) { - RzAnalCaseOp *caseop; + RzAnalysisCaseOp *caseop; RzListIter *iter; if (bbi->fail != UT64_MAX) { @@ -1586,8 +1586,8 @@ static int core_anal_graph_construct_edges (RzCore *core, RzAnalFunction *fcn, i return nodes; } -static int core_anal_graph_construct_nodes (RzCore *core, RzAnalFunction *fcn, int opts, PJ *pj, Sdb *DB) { - RzAnalBlock *bbi; +static int core_anal_graph_construct_nodes (RzCore *core, RzAnalysisFunction *fcn, int opts, PJ *pj, Sdb *DB) { + RzAnalysisBlock *bbi; RzListIter *iter; int is_keva = opts & RZ_CORE_ANAL_KEYVALUE; int is_star = opts & RZ_CORE_ANAL_STAR; @@ -1623,7 +1623,7 @@ static int core_anal_graph_construct_nodes (RzCore *core, RzAnalFunction *fcn, i pj_kn (pj, "fail", bbi->fail); } if (bbi->switch_op) { - RzAnalSwitchOp *op = bbi->switch_op; + RzAnalysisSwitchOp *op = bbi->switch_op; pj_k (pj, "switchop"); pj_o (pj); pj_kn (pj, "offset", op->addr); @@ -1632,7 +1632,7 @@ static int core_anal_graph_construct_nodes (RzCore *core, RzAnalFunction *fcn, i pj_kn (pj, "minval", op->min_val); pj_k (pj, "cases"); pj_a (pj); - RzAnalCaseOp *case_op; + RzAnalysisCaseOp *case_op; RzListIter *case_iter; rz_list_foreach (op->cases, case_iter, case_op) { pj_o (pj); @@ -1782,7 +1782,7 @@ static int core_anal_graph_construct_nodes (RzCore *core, RzAnalFunction *fcn, i top += 250; } } else if (!is_json && !is_keva) { - bool current = rz_anal_block_contains (bbi, core->offset); + bool current = rz_analysis_block_contains (bbi, core->offset); const char *label_color = bbi->traced ? pal_traced : (current && color_current) @@ -1819,7 +1819,7 @@ static int core_anal_graph_construct_nodes (RzCore *core, RzAnalFunction *fcn, i return nodes; } -static int core_anal_graph_nodes(RzCore *core, RzAnalFunction *fcn, int opts, PJ *pj) { +static int core_anal_graph_nodes(RzCore *core, RzAnalysisFunction *fcn, int opts, PJ *pj) { int is_json = opts & RZ_CORE_ANAL_JSON; int is_keva = opts & RZ_CORE_ANAL_KEYVALUE; int nodes = 0; @@ -1837,7 +1837,7 @@ static int core_anal_graph_nodes(RzCore *core, RzAnalFunction *fcn, int opts, PJ if (is_keva) { char ns[64]; - DB = sdb_ns (core->anal->sdb, "graph", 1); + DB = sdb_ns (core->analysis->sdb, "graph", 1); snprintf (ns, sizeof (ns), "fcn.0x%08"PFMT64x, fcn->addr); DB = sdb_ns (DB, ns, 1); } @@ -1847,12 +1847,12 @@ static int core_anal_graph_nodes(RzCore *core, RzAnalFunction *fcn, int opts, PJ sdb_set (DB, "name", fcn->name, 0); sdb_set (DB, "ename", ename, 0); free (ename); - sdb_num_set (DB, "size", rz_anal_function_linear_size (fcn), 0); + sdb_num_set (DB, "size", rz_analysis_function_linear_size (fcn), 0); if (fcn->maxstack > 0) { sdb_num_set (DB, "stack", fcn->maxstack, 0); } sdb_set (DB, "pos", "0,0", 0); // needs to run layout - sdb_set (DB, "type", rz_anal_fcntype_tostring (fcn->type), 0); + sdb_set (DB, "type", rz_analysis_fcntype_tostring (fcn->type), 0); } else if (is_json) { // TODO: show vars, refs and xrefs char *fcn_name_escaped = rz_str_escape_utf8_for_json (fcn->name, -1); @@ -1862,16 +1862,16 @@ static int core_anal_graph_nodes(RzCore *core, RzAnalFunction *fcn, int opts, PJ pj_kn (pj, "offset", fcn->addr); pj_ki (pj, "ninstr", fcn->ninstr); pj_ki (pj, "nargs", - rz_anal_var_count (core->anal, fcn, 'r', 1) + - rz_anal_var_count (core->anal, fcn, 's', 1) + - rz_anal_var_count (core->anal, fcn, 'b', 1)); + rz_analysis_var_count (core->analysis, fcn, 'r', 1) + + rz_analysis_var_count (core->analysis, fcn, 's', 1) + + rz_analysis_var_count (core->analysis, fcn, 'b', 1)); pj_ki (pj, "nlocals", - rz_anal_var_count (core->anal, fcn, 'r', 0) + - rz_anal_var_count (core->anal, fcn, 's', 0) + - rz_anal_var_count (core->anal, fcn, 'b', 0)); - pj_kn (pj, "size", rz_anal_function_linear_size (fcn)); + rz_analysis_var_count (core->analysis, fcn, 'r', 0) + + rz_analysis_var_count (core->analysis, fcn, 's', 0) + + rz_analysis_var_count (core->analysis, fcn, 'b', 0)); + pj_kn (pj, "size", rz_analysis_function_linear_size (fcn)); pj_ki (pj, "stack", fcn->maxstack); - pj_ks (pj, "type", rz_anal_fcntype_tostring (fcn->type)); + pj_ks (pj, "type", rz_analysis_fcntype_tostring (fcn->type)); pj_k (pj, "blocks"); pj_a (pj); } @@ -1892,8 +1892,8 @@ static int core_anal_graph_nodes(RzCore *core, RzAnalFunction *fcn, int opts, PJ /* seek basic block that contains address addr or just addr if there's no such * basic block */ -RZ_API bool rz_core_anal_bb_seek(RzCore *core, ut64 addr) { - ut64 bbaddr = rz_anal_get_bbaddr (core->anal, addr); +RZ_API bool rz_core_analysis_bb_seek(RzCore *core, ut64 addr) { + ut64 bbaddr = rz_analysis_get_bbaddr (core->analysis, addr); if (bbaddr != UT64_MAX) { rz_core_seek (core, bbaddr, false); return true; @@ -1901,12 +1901,12 @@ RZ_API bool rz_core_anal_bb_seek(RzCore *core, ut64 addr) { return false; } -RZ_API int rz_core_anal_esil_fcn(RzCore *core, ut64 at, ut64 from, int reftype, int depth) { +RZ_API int rz_core_analysis_esil_fcn(RzCore *core, ut64 at, ut64 from, int reftype, int depth) { const char *esil; eprintf ("TODO\n"); while (1) { // TODO: Implement the proper logic for doing esil analysis - RzAnalOp *op = rz_core_anal_op (core, at, RZ_ANAL_OP_MASK_ESIL); + RzAnalysisOp *op = rz_core_analysis_op (core, at, RZ_ANAL_OP_MASK_ESIL); if (!op) { break; } @@ -1916,7 +1916,7 @@ RZ_API int rz_core_anal_esil_fcn(RzCore *core, ut64 at, ut64 from, int reftype, // esilIsRet() // esilIsCall() // esilIsJmp() - rz_anal_op_free (op); + rz_analysis_op_free (op); break; } return 0; @@ -1928,7 +1928,7 @@ static int find_sym_flag(const void *a1, const void *a2) { } static bool is_skippable_addr(RzCore *core, ut64 addr) { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, addr, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, addr, 0); if (!fcn) { return false; } @@ -1940,27 +1940,27 @@ static bool is_skippable_addr(RzCore *core, ut64 addr) { } // XXX: This function takes sometimes forever -/* analyze a RzAnalFunction at the address 'at'. +/* analyze a RzAnalysisFunction at the address 'at'. * If the function has been already analyzed, it adds a * reference to that fcn */ -RZ_API int rz_core_anal_fcn(RzCore *core, ut64 at, ut64 from, int reftype, int depth) { +RZ_API int rz_core_analysis_fcn(RzCore *core, ut64 at, ut64 from, int reftype, int depth) { if (from == UT64_MAX && is_skippable_addr (core, at)) { - if (core->anal->verbose) { + if (core->analysis->verbose) { eprintf ("Message: Invalid address for function 0x%08"PFMT64x"\n", at); } return 0; } const bool use_esil = rz_config_get_i (core->config, "anal.esil"); - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; //update bits based on the core->offset otherwise we could have the //last value set and blow everything up rz_core_seek_arch_bits (core, at); if (core->io->va) { - if (!rz_io_is_valid_offset (core->io, at, !core->anal->opt.noncode)) { - if (core->anal->verbose) { + if (!rz_io_is_valid_offset (core->io, at, !core->analysis->opt.noncode)) { + if (core->analysis->verbose) { eprintf ("Warning: Address not mapped or not executable at 0x%08"PFMT64x"\n", at); } return false; @@ -1971,7 +1971,7 @@ RZ_API int rz_core_anal_fcn(RzCore *core, ut64 at, ut64 from, int reftype, int d return 0; } if (use_esil) { - return rz_core_anal_esil_fcn (core, at, from, reftype, depth); + return rz_core_analysis_esil_fcn (core, at, from, reftype, depth); } if ((from != UT64_MAX && !at) || at == UT64_MAX) { @@ -1979,7 +1979,7 @@ RZ_API int rz_core_anal_fcn(RzCore *core, ut64 at, ut64 from, int reftype, int d return false; } if (depth < 0) { - if (core->anal->verbose) { + if (core->analysis->verbose) { eprintf ("Warning: anal depth reached\n"); } return false; @@ -1987,7 +1987,7 @@ RZ_API int rz_core_anal_fcn(RzCore *core, ut64 at, ut64 from, int reftype, int d if (rz_cons_is_breaked ()) { return false; } - fcn = rz_anal_get_fcn_in (core->anal, at, 0); + fcn = rz_analysis_get_fcn_in (core->analysis, at, 0); if (fcn) { if (fcn->addr == at) { // if the function was already analyzed as a "loc.", @@ -1999,8 +1999,8 @@ RZ_API int rz_core_anal_fcn(RzCore *core, ut64 at, ut64 from, int reftype, int d return 0; // already analyzed function } - if (rz_anal_function_contains (fcn, from)) { // inner function - RzList *l = rz_anal_xrefs_get (core->anal, from); + if (rz_analysis_function_contains (fcn, from)) { // inner function + RzList *l = rz_analysis_xrefs_get (core->analysis, from); if (l && !rz_list_empty (l)) { rz_list_free (l); return true; @@ -2009,7 +2009,7 @@ RZ_API int rz_core_anal_fcn(RzCore *core, ut64 at, ut64 from, int reftype, int d // we should analyze and add code ref otherwise aaa != aac if (from != UT64_MAX) { - rz_anal_xrefs_set (core->anal, from, at, reftype); + rz_analysis_xrefs_set (core->analysis, from, at, reftype); } return true; } @@ -2017,7 +2017,7 @@ RZ_API int rz_core_anal_fcn(RzCore *core, ut64 at, ut64 from, int reftype, int d if (__core_anal_fcn (core, at, from, reftype, depth - 1)) { // split function if overlaps if (fcn) { - rz_anal_function_resize (fcn, at - fcn->addr); + rz_analysis_function_resize (fcn, at - fcn->addr); } return true; } @@ -2026,27 +2026,27 @@ RZ_API int rz_core_anal_fcn(RzCore *core, ut64 at, ut64 from, int reftype, int d /* if addr is 0, remove all functions * otherwise remove the function addr falls into */ -RZ_API int rz_core_anal_fcn_clean(RzCore *core, ut64 addr) { - RzAnalFunction *fcni; +RZ_API int rz_core_analysis_fcn_clean(RzCore *core, ut64 addr) { + RzAnalysisFunction *fcni; RzListIter *iter, *iter_tmp; if (!addr) { - rz_list_purge (core->anal->fcns); - if (!(core->anal->fcns = rz_list_new ())) { + rz_list_purge (core->analysis->fcns); + if (!(core->analysis->fcns = rz_list_new ())) { return false; } } else { - rz_list_foreach_safe (core->anal->fcns, iter, iter_tmp, fcni) { - if (rz_anal_function_contains (fcni, addr)) { - rz_anal_function_delete (fcni); + rz_list_foreach_safe (core->analysis->fcns, iter, iter_tmp, fcni) { + if (rz_analysis_function_contains (fcni, addr)) { + rz_analysis_function_delete (fcni); } } } return true; } -RZ_API int rz_core_print_bb_custom(RzCore *core, RzAnalFunction *fcn) { - RzAnalBlock *bb; +RZ_API int rz_core_print_bb_custom(RzCore *core, RzAnalysisFunction *fcn) { + RzAnalysisBlock *bb; RzListIter *iter; if (!fcn) { return false; @@ -2107,7 +2107,7 @@ RZ_API int rz_core_print_bb_custom(RzCore *core, RzAnalFunction *fcn) { } if (bb->switch_op) { RzListIter *it; - RzAnalCaseOp *cop; + RzAnalysisCaseOp *cop; rz_list_foreach (bb->switch_op->cases, it, cop) { v = get_title (cop->addr); rz_cons_printf ("age %s %s\n", u, v); @@ -2120,8 +2120,8 @@ RZ_API int rz_core_print_bb_custom(RzCore *core, RzAnalFunction *fcn) { } #define USE_ID 1 -RZ_API int rz_core_print_bb_gml(RzCore *core, RzAnalFunction *fcn) { - RzAnalBlock *bb; +RZ_API int rz_core_print_bb_gml(RzCore *core, RzAnalysisFunction *fcn) { + RzAnalysisBlock *bb; RzListIter *iter; if (!fcn) { return false; @@ -2185,7 +2185,7 @@ RZ_API int rz_core_print_bb_gml(RzCore *core, RzAnalFunction *fcn) { } if (bb->switch_op) { RzListIter *it; - RzAnalCaseOp *cop; + RzAnalysisCaseOp *cop; rz_list_foreach (bb->switch_op->cases, it, cop) { bool found; int i = ht_uu_find (ht, bb->addr, &found); @@ -2217,7 +2217,7 @@ RZ_API int rz_core_print_bb_gml(RzCore *core, RzAnalFunction *fcn) { } if (bb->switch_op) { RzListIter *it; - RzAnalCaseOp *cop; + RzAnalysisCaseOp *cop; rz_list_foreach (bb->switch_op->cases, it, cop) { rz_cons_printf (" edge [\n" " source %"PFMT64d"\n" @@ -2233,14 +2233,14 @@ RZ_API int rz_core_print_bb_gml(RzCore *core, RzAnalFunction *fcn) { return true; } -RZ_API void rz_core_anal_datarefs(RzCore *core, ut64 addr) { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, addr, -1); +RZ_API void rz_core_analysis_datarefs(RzCore *core, ut64 addr) { + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, addr, -1); if (fcn) { bool found = false; const char *me = fcn->name; RzListIter *iter; - RzAnalRef *ref; - RzList *refs = rz_anal_function_get_refs (fcn); + RzAnalysisRef *ref; + RzList *refs = rz_analysis_function_get_refs (fcn); rz_list_foreach (refs, iter, ref) { RzBinObject *obj = rz_bin_cur_object (core->bin); RzBinSection *binsec = rz_bin_get_section_at (obj, ref->addr, true); @@ -2261,13 +2261,13 @@ RZ_API void rz_core_anal_datarefs(RzCore *core, ut64 addr) { } } -RZ_API void rz_core_anal_coderefs(RzCore *core, ut64 addr) { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, addr, -1); +RZ_API void rz_core_analysis_coderefs(RzCore *core, ut64 addr) { + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, addr, -1); if (fcn) { const char *me = fcn->name; RzListIter *iter; - RzAnalRef *ref; - RzList *refs = rz_anal_function_get_refs (fcn); + RzAnalysisRef *ref; + RzList *refs = rz_analysis_function_get_refs (fcn); rz_cons_printf ("agn %s\n", me); rz_list_foreach (refs, iter, ref) { RzFlagItem *item = rz_flag_get_i (core->flags, ref->addr); @@ -2294,8 +2294,8 @@ static void add_single_addr_xrefs(RzCore *core, ut64 addr, RzGraph *graph) { return; } RzListIter *iter; - RzAnalRef *ref; - RzList *list = rz_anal_xrefs_get (core->anal, addr); + RzAnalysisRef *ref; + RzList *list = rz_analysis_xrefs_get (core->analysis, addr); rz_list_foreach (list, iter, ref) { RzFlagItem *item = rz_flag_get_i (core->flags, ref->addr); char *src = item? rz_str_new (item->name): rz_str_newf ("0x%08" PFMT64x, ref->addr); @@ -2306,7 +2306,7 @@ static void add_single_addr_xrefs(RzCore *core, ut64 addr, RzGraph *graph) { rz_list_free (list); } -RZ_API RzGraph *rz_core_anal_importxrefs(RzCore *core) { +RZ_API RzGraph *rz_core_analysis_importxrefs(RzCore *core) { RzBinInfo *info = rz_bin_get_info (core->bin); RzBinObject *obj = rz_bin_cur_object (core->bin); bool lit = info? info->has_lit: false; @@ -2332,7 +2332,7 @@ RZ_API RzGraph *rz_core_anal_importxrefs(RzCore *core) { return graph; } -RZ_API RzGraph *rz_core_anal_codexrefs(RzCore *core, ut64 addr) { +RZ_API RzGraph *rz_core_analysis_codexrefs(RzCore *core, ut64 addr) { RzGraph *graph = rz_graph_new (); if (!graph) { return NULL; @@ -2341,19 +2341,19 @@ RZ_API RzGraph *rz_core_anal_codexrefs(RzCore *core, ut64 addr) { return graph; } -static int RzAnalRef_cmp(const RzAnalRef* ref1, const RzAnalRef* ref2) { +static int RzAnalysisRef_cmp(const RzAnalysisRef* ref1, const RzAnalysisRef* ref2) { return ref1->addr != ref2->addr; } -RZ_API void rz_core_anal_callgraph(RzCore *core, ut64 addr, int fmt) { +RZ_API void rz_core_analysis_callgraph(RzCore *core, ut64 addr, int fmt) { const char *font = rz_config_get (core->config, "graph.font"); int is_html = rz_cons_singleton ()->is_html; bool refgraph = rz_config_get_i (core->config, "graph.refs"); int first, first2; RzListIter *iter, *iter2; int usenames = rz_config_get_i (core->config, "graph.json.usenames");; - RzAnalFunction *fcni; - RzAnalRef *fcnr; + RzAnalysisFunction *fcni; + RzAnalysisRef *fcnr; ut64 from = rz_config_get_i (core->config, "graph.from"); ut64 to = rz_config_get_i (core->config, "graph.to"); @@ -2403,7 +2403,7 @@ RZ_API void rz_core_anal_callgraph(RzCore *core, ut64 addr, int fmt) { ut64 base = UT64_MAX; int iteration = 0; repeat: - rz_list_foreach (core->anal->fcns, iter, fcni) { + rz_list_foreach (core->analysis->fcns, iter, fcni) { if (base == UT64_MAX) { base = fcni->addr; } @@ -2416,12 +2416,12 @@ repeat: if (addr != UT64_MAX && addr != fcni->addr) { continue; } - RzList *refs = rz_anal_function_get_refs (fcni); + RzList *refs = rz_analysis_function_get_refs (fcni); RzList *calls = rz_list_new (); // TODO: maybe fcni->calls instead ? rz_list_foreach (refs, iter2, fcnr) { // TODO: tail calll jumps are also calls - if (fcnr->type == 'C' && rz_list_find(calls, fcnr, (RzListComparator)RzAnalRef_cmp) == NULL) { + if (fcnr->type == 'C' && rz_list_find(calls, fcnr, (RzListComparator)RzAnalysisRef_cmp) == NULL) { rz_list_append (calls, fcnr); } } @@ -2452,12 +2452,12 @@ repeat: rz_cons_printf ("%s{\"name\":\"%s\", " "\"size\":%" PFMT64u ",\"imports\":[", first ? "," : "", fcni->name, - rz_anal_function_linear_size (fcni)); + rz_analysis_function_linear_size (fcni)); } else { rz_cons_printf ("%s{\"name\":\"0x%08" PFMT64x "\", \"size\":%" PFMT64u ",\"imports\":[", first ? "," : "", fcni->addr, - rz_anal_function_linear_size (fcni)); + rz_analysis_function_linear_size (fcni)); } first = 1; break; @@ -2556,8 +2556,8 @@ repeat: } } -static void fcn_list_bbs(RzAnalFunction *fcn) { - RzAnalBlock *bbi; +static void fcn_list_bbs(RzAnalysisFunction *fcn) { + RzAnalysisBlock *bbi; RzListIter *iter; rz_list_foreach (fcn->bbs, iter, bbi) { @@ -2578,29 +2578,29 @@ static void fcn_list_bbs(RzAnalFunction *fcn) { } } -RZ_API ut64 rz_core_anal_fcn_list_size(RzCore *core) { - RzAnalFunction *fcn; +RZ_API ut64 rz_core_analysis_fcn_list_size(RzCore *core) { + RzAnalysisFunction *fcn; RzListIter *iter; ut64 total = 0; - rz_list_foreach (core->anal->fcns, iter, fcn) { - total += rz_anal_function_realsize (fcn); + rz_list_foreach (core->analysis->fcns, iter, fcn) { + total += rz_analysis_function_realsize (fcn); } rz_cons_printf ("%"PFMT64u"\n", total); return total; } /* Fill out metadata struct of functions */ -static int fcnlist_gather_metadata(RzAnal *anal, RzList *fcns) { +static int fcnlist_gather_metadata(RzAnalysis *analysis, RzList *fcns) { RzListIter *iter; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; RzList *xrefs; rz_list_foreach (fcns, iter, fcn) { // Count the number of references and number of calls RzListIter *callrefiter; - RzAnalRef *ref; - RzList *refs = rz_anal_function_get_refs (fcn); + RzAnalysisRef *ref; + RzList *refs = rz_analysis_function_get_refs (fcn); int numcallrefs = 0; rz_list_foreach (refs, callrefiter, ref) { if (ref->type == RZ_ANAL_REF_TYPE_CALL) { @@ -2609,7 +2609,7 @@ static int fcnlist_gather_metadata(RzAnal *anal, RzList *fcns) { } rz_list_free (refs); fcn->meta.numcallrefs = numcallrefs; - xrefs = rz_anal_xrefs_get (anal, fcn->addr); + xrefs = rz_analysis_xrefs_get (analysis, fcn->addr); fcn->meta.numrefs = xrefs? xrefs->length: 0; rz_list_free (xrefs); } @@ -2617,7 +2617,7 @@ static int fcnlist_gather_metadata(RzAnal *anal, RzList *fcns) { return 0; } -RZ_API char *rz_core_anal_fcn_name(RzCore *core, RzAnalFunction *fcn) { +RZ_API char *rz_core_analysis_fcn_name(RzCore *core, RzAnalysisFunction *fcn) { bool demangle = rz_config_get_i (core->config, "bin.demangle"); const char *lang = demangle ? rz_config_get (core->config, "bin.lang") : NULL; bool keep_lib = rz_config_get_i (core->config, "bin.demangle.libs"); @@ -2633,8 +2633,8 @@ RZ_API char *rz_core_anal_fcn_name(RzCore *core, RzAnalFunction *fcn) { } #define FCN_LIST_VERBOSE_ENTRY "%s0x%0*"PFMT64x" %4"PFMT64d" %5d %5d %5d %4d 0x%0*"PFMT64x" %5"PFMT64d" 0x%0*"PFMT64x" %5d %4d %6d %4d %5d %s%s\n" -static int fcn_print_verbose(RzCore *core, RzAnalFunction *fcn, bool use_color) { - char *name = rz_core_anal_fcn_name (core, fcn); +static int fcn_print_verbose(RzCore *core, RzAnalysisFunction *fcn, bool use_color) { + char *name = rz_core_analysis_fcn_name (core, fcn); int ebbs = 0; int addrwidth = 8; const char *color = ""; @@ -2650,27 +2650,27 @@ static int fcn_print_verbose(RzCore *core, RzAnalFunction *fcn, bool use_color) } } - if (core->anal->bits == 64) { + if (core->analysis->bits == 64) { addrwidth = 16; } rz_cons_printf (FCN_LIST_VERBOSE_ENTRY, color, addrwidth, fcn->addr, - rz_anal_function_realsize (fcn), + rz_analysis_function_realsize (fcn), rz_list_length (fcn->bbs), - rz_anal_function_count_edges (fcn, &ebbs), - rz_anal_function_complexity (fcn), - rz_anal_function_cost (fcn), - addrwidth, rz_anal_function_min_addr (fcn), - rz_anal_function_linear_size (fcn), - addrwidth, rz_anal_function_max_addr (fcn), + rz_analysis_function_count_edges (fcn, &ebbs), + rz_analysis_function_complexity (fcn), + rz_analysis_function_cost (fcn), + addrwidth, rz_analysis_function_min_addr (fcn), + rz_analysis_function_linear_size (fcn), + addrwidth, rz_analysis_function_max_addr (fcn), fcn->meta.numcallrefs, - rz_anal_var_count (core->anal, fcn, 's', 0) + - rz_anal_var_count (core->anal, fcn, 'b', 0) + - rz_anal_var_count (core->anal, fcn, 'r', 0), - rz_anal_var_count (core->anal, fcn, 's', 1) + - rz_anal_var_count (core->anal, fcn, 'b', 1) + - rz_anal_var_count (core->anal, fcn, 'r', 1), + rz_analysis_var_count (core->analysis, fcn, 's', 0) + + rz_analysis_var_count (core->analysis, fcn, 'b', 0) + + rz_analysis_var_count (core->analysis, fcn, 'r', 0), + rz_analysis_var_count (core->analysis, fcn, 's', 1) + + rz_analysis_var_count (core->analysis, fcn, 'b', 1) + + rz_analysis_var_count (core->analysis, fcn, 'r', 1), fcn->meta.numrefs, fcn->maxstack, name, @@ -2684,7 +2684,7 @@ static int fcn_list_verbose(RzCore *core, RzList *fcns, const char *sortby) { int headeraddr_width = 10; char *headeraddr = "=========="; - if (core->anal->bits == 64) { + if (core->analysis->bits == 64) { headeraddr_width = 18; headeraddr = "=================="; } @@ -2718,7 +2718,7 @@ static int fcn_list_verbose(RzCore *core, RzList *fcns, const char *sortby) { rz_cons_printf ("%s ==== ===== ===== ===== ==== %s ===== %s ===== ====== ==== ==== ===== ====\n", headeraddr, headeraddr, headeraddr); RzListIter *iter; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; rz_list_foreach (fcns, iter, fcn) { fcn_print_verbose (core, fcn, use_color); } @@ -2726,13 +2726,13 @@ static int fcn_list_verbose(RzCore *core, RzList *fcns, const char *sortby) { return 0; } -static void __fcn_print_default(RzCore *core, RzAnalFunction *fcn, bool quiet) { +static void __fcn_print_default(RzCore *core, RzAnalysisFunction *fcn, bool quiet) { if (quiet) { rz_cons_printf ("0x%08"PFMT64x" ", fcn->addr); } else { - char *msg, *name = rz_core_anal_fcn_name (core, fcn); - ut64 realsize = rz_anal_function_realsize (fcn); - ut64 size = rz_anal_function_linear_size (fcn); + char *msg, *name = rz_core_analysis_fcn_name (core, fcn); + ut64 realsize = rz_analysis_function_realsize (fcn); + ut64 size = rz_analysis_function_linear_size (fcn); if (realsize == size) { msg = rz_str_newf ("%-12"PFMT64u, size); } else { @@ -2747,7 +2747,7 @@ static void __fcn_print_default(RzCore *core, RzAnalFunction *fcn, bool quiet) { static int fcn_list_default(RzCore *core, RzList *fcns, bool quiet) { RzListIter *iter; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; rz_list_foreach (fcns, iter, fcn) { __fcn_print_default (core, fcn, quiet); if (quiet) { @@ -2758,12 +2758,12 @@ static int fcn_list_default(RzCore *core, RzList *fcns, bool quiet) { } // for a given function returns an RzList of all functions that were called in it -RZ_API RzList *rz_core_anal_fcn_get_calls (RzCore *core, RzAnalFunction *fcn) { - RzAnalRef *refi; +RZ_API RzList *rz_core_analysis_fcn_get_calls (RzCore *core, RzAnalysisFunction *fcn) { + RzAnalysisRef *refi; RzListIter *iter, *iter2; // get all references from this function - RzList *refs = rz_anal_function_get_refs (fcn); + RzList *refs = rz_analysis_function_get_refs (fcn); // sanity check if (!rz_list_empty (refs)) { // iterate over all the references and remove these which aren't of type call @@ -2780,8 +2780,8 @@ RZ_API RzList *rz_core_anal_fcn_get_calls (RzCore *core, RzAnalFunction *fcn) { static int fcn_print_makestyle(RzCore *core, RzList *fcns, char mode) { RzListIter *refiter; RzListIter *fcniter; - RzAnalFunction *fcn; - RzAnalRef *refi; + RzAnalysisFunction *fcn; + RzAnalysisRef *refi; RzList *refs = NULL; PJ *pj = NULL; @@ -2793,9 +2793,9 @@ static int fcn_print_makestyle(RzCore *core, RzList *fcns, char mode) { // Iterate over all functions rz_list_foreach (fcns, fcniter, fcn) { // Get all refs for a function - refs = rz_core_anal_fcn_get_calls (core, fcn); + refs = rz_core_analysis_fcn_get_calls (core, fcn); // Uniquify the list by ref->addr - refs = rz_list_uniq (refs, (RzListComparator)RzAnalRef_cmp); + refs = rz_list_uniq (refs, (RzListComparator)RzAnalysisRef_cmp); // don't enter for functions with 0 refs if (!rz_list_empty (refs)) { @@ -2848,9 +2848,9 @@ static int fcn_print_makestyle(RzCore *core, RzList *fcns, char mode) { return 0; } -static int fcn_print_json(RzCore *core, RzAnalFunction *fcn, PJ *pj) { +static int fcn_print_json(RzCore *core, RzAnalysisFunction *fcn, PJ *pj) { RzListIter *iter; - RzAnalRef *refi; + RzAnalysisRef *refi; RzList *refs, *xrefs; if (!pj) { return -1; @@ -2858,24 +2858,24 @@ static int fcn_print_json(RzCore *core, RzAnalFunction *fcn, PJ *pj) { int ebbs = 0; pj_o (pj); pj_kn (pj, "offset", fcn->addr); - char *name = rz_core_anal_fcn_name (core, fcn); + char *name = rz_core_analysis_fcn_name (core, fcn); if (name) { pj_ks (pj, "name", name); } - pj_kn (pj, "size", rz_anal_function_linear_size (fcn)); - pj_ks (pj, "is-pure", rz_str_bool (rz_anal_function_purity (fcn))); - pj_kn (pj, "realsz", rz_anal_function_realsize (fcn)); + pj_kn (pj, "size", rz_analysis_function_linear_size (fcn)); + pj_ks (pj, "is-pure", rz_str_bool (rz_analysis_function_purity (fcn))); + pj_kn (pj, "realsz", rz_analysis_function_realsize (fcn)); pj_kb (pj, "noreturn", fcn->is_noreturn); pj_ki (pj, "stackframe", fcn->maxstack); if (fcn->cc) { pj_ks (pj, "calltype", fcn->cc); // calling conventions } - pj_ki (pj, "cost", rz_anal_function_cost (fcn)); // execution cost - pj_ki (pj, "cc", rz_anal_function_complexity (fcn)); // cyclic cost + pj_ki (pj, "cost", rz_analysis_function_cost (fcn)); // execution cost + pj_ki (pj, "cc", rz_analysis_function_complexity (fcn)); // cyclic cost pj_ki (pj, "bits", fcn->bits); - pj_ks (pj, "type", rz_anal_fcntype_tostring (fcn->type)); + pj_ks (pj, "type", rz_analysis_fcntype_tostring (fcn->type)); pj_ki (pj, "nbbs", rz_list_length (fcn->bbs)); - pj_ki (pj, "edges", rz_anal_function_count_edges (fcn, &ebbs)); + pj_ki (pj, "edges", rz_analysis_function_count_edges (fcn, &ebbs)); pj_ki (pj, "ebbs", ebbs); { char *sig = rz_core_cmd_strf (core, "afcf @ 0x%"PFMT64x, fcn->addr); @@ -2886,11 +2886,11 @@ static int fcn_print_json(RzCore *core, RzAnalFunction *fcn, PJ *pj) { } } - pj_kn (pj, "minbound", rz_anal_function_min_addr (fcn)); - pj_kn (pj, "maxbound", rz_anal_function_max_addr (fcn)); + pj_kn (pj, "minbound", rz_analysis_function_min_addr (fcn)); + pj_kn (pj, "maxbound", rz_analysis_function_max_addr (fcn)); int outdegree = 0; - refs = rz_anal_function_get_refs (fcn); + refs = rz_analysis_function_get_refs (fcn); if (!rz_list_empty (refs)) { pj_k (pj, "callrefs"); pj_a (pj); @@ -2902,7 +2902,7 @@ static int fcn_print_json(RzCore *core, RzAnalFunction *fcn, PJ *pj) { refi->type == RZ_ANAL_REF_TYPE_CALL) { pj_o (pj); pj_kn (pj, "addr", refi->addr); - pj_ks (pj, "type", rz_anal_xrefs_type_tostring (refi->type)); + pj_ks (pj, "type", rz_analysis_xrefs_type_tostring (refi->type)); pj_kn (pj, "at", refi->at); pj_end (pj); } @@ -2921,7 +2921,7 @@ static int fcn_print_json(RzCore *core, RzAnalFunction *fcn, PJ *pj) { rz_list_free (refs); int indegree = 0; - xrefs = rz_anal_function_get_xrefs (fcn); + xrefs = rz_analysis_function_get_xrefs (fcn); if (!rz_list_empty (xrefs)) { pj_k (pj, "codexrefs"); pj_a (pj); @@ -2931,7 +2931,7 @@ static int fcn_print_json(RzCore *core, RzAnalFunction *fcn, PJ *pj) { indegree++; pj_o (pj); pj_kn (pj, "addr", refi->addr); - pj_ks (pj, "type", rz_anal_xrefs_type_tostring (refi->type)); + pj_ks (pj, "type", rz_analysis_xrefs_type_tostring (refi->type)); pj_kn (pj, "at", refi->at); pj_end (pj); } @@ -2954,19 +2954,19 @@ static int fcn_print_json(RzCore *core, RzAnalFunction *fcn, PJ *pj) { pj_ki (pj, "outdegree", outdegree); if (fcn->type == RZ_ANAL_FCN_TYPE_FCN || fcn->type == RZ_ANAL_FCN_TYPE_SYM) { - pj_ki (pj, "nlocals", rz_anal_var_count (core->anal, fcn, 'b', 0) + - rz_anal_var_count (core->anal, fcn, 'r', 0) + - rz_anal_var_count (core->anal, fcn, 's', 0)); - pj_ki (pj, "nargs", rz_anal_var_count (core->anal, fcn, 'b', 1) + - rz_anal_var_count (core->anal, fcn, 'r', 1) + - rz_anal_var_count (core->anal, fcn, 's', 1)); + pj_ki (pj, "nlocals", rz_analysis_var_count (core->analysis, fcn, 'b', 0) + + rz_analysis_var_count (core->analysis, fcn, 'r', 0) + + rz_analysis_var_count (core->analysis, fcn, 's', 0)); + pj_ki (pj, "nargs", rz_analysis_var_count (core->analysis, fcn, 'b', 1) + + rz_analysis_var_count (core->analysis, fcn, 'r', 1) + + rz_analysis_var_count (core->analysis, fcn, 's', 1)); pj_k (pj, "bpvars"); - rz_anal_var_list_show (core->anal, fcn, 'b', 'j', pj); + rz_analysis_var_list_show (core->analysis, fcn, 'b', 'j', pj); pj_k (pj, "spvars"); - rz_anal_var_list_show (core->anal, fcn, 's', 'j', pj); + rz_analysis_var_list_show (core->analysis, fcn, 's', 'j', pj); pj_k (pj, "regvars"); - rz_anal_var_list_show (core->anal, fcn, 'r', 'j', pj); + rz_analysis_var_list_show (core->analysis, fcn, 'r', 'j', pj); pj_ks (pj, "difftype", fcn->diff->type == RZ_ANAL_DIFF_TYPE_MATCH?"match": fcn->diff->type == RZ_ANAL_DIFF_TYPE_UNMATCH?"unmatch":"new"); @@ -2984,7 +2984,7 @@ static int fcn_print_json(RzCore *core, RzAnalFunction *fcn, PJ *pj) { static int fcn_list_json(RzCore *core, RzList *fcns, bool quiet) { RzListIter *iter; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; PJ *pj = rz_core_pj_new (core); if (!pj) { return -1; @@ -3007,12 +3007,12 @@ static int fcn_list_verbose_json(RzCore *core, RzList *fcns) { return fcn_list_json (core, fcns, false); } -static int fcn_print_detail(RzCore *core, RzAnalFunction *fcn) { - const char *defaultCC = rz_anal_cc_default (core->anal); - char *name = rz_core_anal_fcn_name (core, fcn); - rz_cons_printf ("\"f %s %"PFMT64u" 0x%08"PFMT64x"\"\n", name, rz_anal_function_linear_size (fcn), fcn->addr); +static int fcn_print_detail(RzCore *core, RzAnalysisFunction *fcn) { + const char *defaultCC = rz_analysis_cc_default (core->analysis); + char *name = rz_core_analysis_fcn_name (core, fcn); + rz_cons_printf ("\"f %s %"PFMT64u" 0x%08"PFMT64x"\"\n", name, rz_analysis_function_linear_size (fcn), fcn->addr); rz_cons_printf ("\"af+ 0x%08"PFMT64x" %s %c %c\"\n", - fcn->addr, name, //rz_anal_fcn_size (fcn), name, + fcn->addr, name, //rz_analysis_fcn_size (fcn), name, fcn->type == RZ_ANAL_FCN_TYPE_LOC?'l': fcn->type == RZ_ANAL_FCN_TYPE_SYM?'s': fcn->type == RZ_ANAL_FCN_TYPE_IMP?'i':'f', @@ -3038,8 +3038,8 @@ static int fcn_print_detail(RzCore *core, RzAnalFunction *fcn) { } /* Show references */ RzListIter *refiter; - RzAnalRef *refi; - RzList *refs = rz_anal_function_get_refs (fcn); + RzAnalysisRef *refi; + RzList *refs = rz_analysis_function_get_refs (fcn); rz_list_foreach (refs, refiter, refi) { switch (refi->type) { case RZ_ANAL_REF_TYPE_CALL: @@ -3067,14 +3067,14 @@ static int fcn_print_detail(RzCore *core, RzAnalFunction *fcn) { return 0; } -static bool is_fcn_traced(RzDebugTrace *traced, RzAnalFunction *fcn) { +static bool is_fcn_traced(RzDebugTrace *traced, RzAnalysisFunction *fcn) { int tag = traced->tag; RzListIter *iter; RzDebugTracepoint *trace; rz_list_foreach (traced->traces, iter, trace) { if (!trace->tag || (tag & trace->tag)) { - if (rz_anal_function_contains (fcn, trace->addr)) { + if (rz_analysis_function_contains (fcn, trace->addr)) { rz_cons_printf ("\ntraced: %d\n", trace->times); return true; } @@ -3083,36 +3083,36 @@ static bool is_fcn_traced(RzDebugTrace *traced, RzAnalFunction *fcn) { return false; } -static int fcn_print_legacy(RzCore *core, RzAnalFunction *fcn) { +static int fcn_print_legacy(RzCore *core, RzAnalysisFunction *fcn) { RzListIter *iter; - RzAnalRef *refi; + RzAnalysisRef *refi; RzList *refs, *xrefs; int ebbs = 0; - char *name = rz_core_anal_fcn_name (core, fcn); + char *name = rz_core_analysis_fcn_name (core, fcn); rz_cons_printf ("#\noffset: 0x%08"PFMT64x"\nname: %s\nsize: %"PFMT64u, - fcn->addr, name, rz_anal_function_linear_size (fcn)); - rz_cons_printf ("\nis-pure: %s", rz_str_bool (rz_anal_function_purity (fcn))); - rz_cons_printf ("\nrealsz: %" PFMT64d, rz_anal_function_realsize (fcn)); + fcn->addr, name, rz_analysis_function_linear_size (fcn)); + rz_cons_printf ("\nis-pure: %s", rz_str_bool (rz_analysis_function_purity (fcn))); + rz_cons_printf ("\nrealsz: %" PFMT64d, rz_analysis_function_realsize (fcn)); rz_cons_printf ("\nstackframe: %d", fcn->maxstack); if (fcn->cc) { rz_cons_printf ("\ncall-convention: %s", fcn->cc); } - rz_cons_printf ("\ncyclomatic-cost: %d", rz_anal_function_cost (fcn)); - rz_cons_printf ("\ncyclomatic-complexity: %d", rz_anal_function_complexity (fcn)); + rz_cons_printf ("\ncyclomatic-cost: %d", rz_analysis_function_cost (fcn)); + rz_cons_printf ("\ncyclomatic-complexity: %d", rz_analysis_function_complexity (fcn)); rz_cons_printf ("\nbits: %d", fcn->bits); - rz_cons_printf ("\ntype: %s", rz_anal_fcntype_tostring (fcn->type)); + rz_cons_printf ("\ntype: %s", rz_analysis_fcntype_tostring (fcn->type)); if (fcn->type == RZ_ANAL_FCN_TYPE_FCN || fcn->type == RZ_ANAL_FCN_TYPE_SYM) { rz_cons_printf (" [%s]", fcn->diff->type == RZ_ANAL_DIFF_TYPE_MATCH?"MATCH": fcn->diff->type == RZ_ANAL_DIFF_TYPE_UNMATCH?"UNMATCH":"NEW"); } rz_cons_printf ("\nnum-bbs: %d", rz_list_length (fcn->bbs)); - rz_cons_printf ("\nedges: %d", rz_anal_function_count_edges (fcn, &ebbs)); + rz_cons_printf ("\nedges: %d", rz_analysis_function_count_edges (fcn, &ebbs)); rz_cons_printf ("\nend-bbs: %d", ebbs); rz_cons_printf ("\ncall-refs:"); int outdegree = 0; - refs = rz_anal_function_get_refs (fcn); + refs = rz_analysis_function_get_refs (fcn); rz_list_foreach (refs, iter, refi) { if (refi->type == RZ_ANAL_REF_TYPE_CALL) { outdegree++; @@ -3133,7 +3133,7 @@ static int fcn_print_legacy(RzCore *core, RzAnalFunction *fcn) { int indegree = 0; rz_cons_printf ("\ncode-xrefs:"); - xrefs = rz_anal_function_get_xrefs (fcn); + xrefs = rz_analysis_function_get_xrefs (fcn); rz_list_foreach (xrefs, iter, refi) { if (refi->type == RZ_ANAL_REF_TYPE_CODE || refi->type == RZ_ANAL_REF_TYPE_CALL) { indegree++; @@ -3153,17 +3153,17 @@ static int fcn_print_legacy(RzCore *core, RzAnalFunction *fcn) { rz_list_free (xrefs); if (fcn->type == RZ_ANAL_FCN_TYPE_FCN || fcn->type == RZ_ANAL_FCN_TYPE_SYM) { - int args_count = rz_anal_var_count (core->anal, fcn, 'b', 1); - args_count += rz_anal_var_count (core->anal, fcn, 's', 1); - args_count += rz_anal_var_count (core->anal, fcn, 'r', 1); - int var_count = rz_anal_var_count (core->anal, fcn, 'b', 0); - var_count += rz_anal_var_count (core->anal, fcn, 's', 0); - var_count += rz_anal_var_count (core->anal, fcn, 'r', 0); + int args_count = rz_analysis_var_count (core->analysis, fcn, 'b', 1); + args_count += rz_analysis_var_count (core->analysis, fcn, 's', 1); + args_count += rz_analysis_var_count (core->analysis, fcn, 'r', 1); + int var_count = rz_analysis_var_count (core->analysis, fcn, 'b', 0); + var_count += rz_analysis_var_count (core->analysis, fcn, 's', 0); + var_count += rz_analysis_var_count (core->analysis, fcn, 'r', 0); rz_cons_printf ("\nlocals: %d\nargs: %d\n", var_count, args_count); - rz_anal_var_list_show (core->anal, fcn, 'b', 0, NULL); - rz_anal_var_list_show (core->anal, fcn, 's', 0, NULL); - rz_anal_var_list_show (core->anal, fcn, 'r', 0, NULL); + rz_analysis_var_list_show (core->analysis, fcn, 'b', 0, NULL); + rz_analysis_var_list_show (core->analysis, fcn, 's', 0, NULL); + rz_analysis_var_list_show (core->analysis, fcn, 'r', 0, NULL); rz_cons_printf ("diff: type: %s", fcn->diff->type == RZ_ANAL_DIFF_TYPE_MATCH?"match": fcn->diff->type == RZ_ANAL_DIFF_TYPE_UNMATCH?"unmatch":"new"); @@ -3185,7 +3185,7 @@ static int fcn_print_legacy(RzCore *core, RzAnalFunction *fcn) { static int fcn_list_detail(RzCore *core, RzList *fcns) { RzListIter *iter; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; rz_list_foreach (fcns, iter, fcn) { fcn_print_detail (core, fcn); } @@ -3194,7 +3194,7 @@ static int fcn_list_detail(RzCore *core, RzList *fcns) { } static int fcn_list_table(RzCore *core, const char *q, int fmt) { - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; RzListIter *iter; RTable *t = rz_core_table (core); RTableColumnType *typeString = rz_table_type ("string"); @@ -3206,21 +3206,21 @@ static int fcn_list_table(RzCore *core, const char *q, int fmt) { rz_table_add_column (t, typeNumber, "xref", 0); rz_table_add_column (t, typeNumber, "calls", 0); rz_table_add_column (t, typeNumber, "cc", 0); - rz_list_foreach (core->anal->fcns, iter, fcn) { + rz_list_foreach (core->analysis->fcns, iter, fcn) { const char *fcnAddr = sdb_fmt ("0x%08"PFMT64x, fcn->addr); - const char *fcnSize = sdb_fmt ("%"PFMT64u, rz_anal_function_linear_size (fcn)); - const char *nbbs = sdb_fmt ("%d", rz_list_length (fcn->bbs)); // rz_anal_fcn_size (fcn)); - RzList *xrefs = rz_anal_function_get_xrefs (fcn); + const char *fcnSize = sdb_fmt ("%"PFMT64u, rz_analysis_function_linear_size (fcn)); + const char *nbbs = sdb_fmt ("%d", rz_list_length (fcn->bbs)); // rz_analysis_fcn_size (fcn)); + RzList *xrefs = rz_analysis_function_get_xrefs (fcn); char xref[128], ccstr[128]; snprintf (xref, sizeof (xref), "%d", rz_list_length (xrefs)); rz_list_free (xrefs); - RzList * calls = rz_core_anal_fcn_get_calls (core, fcn); + RzList * calls = rz_core_analysis_fcn_get_calls (core, fcn); // Uniquify the list by ref->addr - calls = rz_list_uniq (calls, (RzListComparator)RzAnalRef_cmp); + calls = rz_list_uniq (calls, (RzListComparator)RzAnalysisRef_cmp); const char *callstr = sdb_fmt ("%d", rz_list_length (calls)); rz_list_free (calls); - snprintf (ccstr, sizeof (ccstr), "%d", rz_anal_function_complexity (fcn)); + snprintf (ccstr, sizeof (ccstr), "%d", rz_analysis_function_complexity (fcn)); rz_table_add_row (t, fcnAddr, fcnSize, fcn->name, nbbs, xref, callstr, ccstr, NULL); } @@ -3238,7 +3238,7 @@ static int fcn_list_table(RzCore *core, const char *q, int fmt) { static int fcn_list_legacy(RzCore *core, RzList *fcns) { RzListIter *iter; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; rz_list_foreach (fcns, iter, fcn) { fcn_print_legacy (core, fcn); } @@ -3246,20 +3246,20 @@ static int fcn_list_legacy(RzCore *core, RzList *fcns) { return 0; } -RZ_API int rz_core_anal_fcn_list(RzCore *core, const char *input, const char *rad) { +RZ_API int rz_core_analysis_fcn_list(RzCore *core, const char *input, const char *rad) { char temp[64]; - rz_return_val_if_fail (core && core->anal, 0); - if (rz_list_empty (core->anal->fcns)) { + rz_return_val_if_fail (core && core->analysis, 0); + if (rz_list_empty (core->analysis->fcns)) { return 0; } if (*rad == '.') { - RzAnalFunction *fcn = rz_anal_get_function_at (core->anal, core->offset); + RzAnalysisFunction *fcn = rz_analysis_get_function_at (core->analysis, core->offset); __fcn_print_default (core, fcn, false); return 0; } if (rad && (*rad == 'l' || *rad == 'j')) { - fcnlist_gather_metadata (core->anal, core->anal->fcns); + fcnlist_gather_metadata (core->analysis, core->analysis->fcns); } const char *name = input; @@ -3274,9 +3274,9 @@ RZ_API int rz_core_anal_fcn_list(RzCore *core, const char *input, const char *ra return -1; } RzListIter *iter; - RzAnalFunction *fcn; - rz_list_foreach (core->anal->fcns, iter, fcn) { - if (!input || rz_anal_function_contains (fcn, addr) || (!strcmp (name, fcn->name))) { + RzAnalysisFunction *fcn; + rz_list_foreach (core->analysis->fcns, iter, fcn) { + if (!input || rz_analysis_function_contains (fcn, addr) || (!strcmp (name, fcn->name))) { rz_list_append (fcns, fcn); } } @@ -3289,7 +3289,7 @@ RZ_API int rz_core_anal_fcn_list(RzCore *core, const char *input, const char *ra } switch (*rad) { case '+': - rz_core_anal_fcn_list_size (core); + rz_core_analysis_fcn_list_size (core); break; case '=': { // afl= rz_list_sort (fcns, cmpaddr); @@ -3299,8 +3299,8 @@ RZ_API int rz_core_anal_fcn_list(RzCore *core, const char *input, const char *ra return -1; } ls_foreach (fcns, iter, fcn) { - RzInterval inter = {rz_anal_function_min_addr (fcn), rz_anal_function_linear_size (fcn) }; - RzListInfo *info = rz_listinfo_new (rz_core_anal_fcn_name (core, fcn), inter, inter, -1, sdb_itoa (fcn->bits, temp, 10)); + RzInterval inter = {rz_analysis_function_min_addr (fcn), rz_analysis_function_linear_size (fcn) }; + RzListInfo *info = rz_listinfo_new (rz_core_analysis_fcn_name (core, fcn), inter, inter, -1, sdb_itoa (fcn->bits, temp, 10)); if (!info) { break; } @@ -3366,19 +3366,19 @@ RZ_API int rz_core_anal_fcn_list(RzCore *core, const char *input, const char *ra return 0; } -static RzList *recurse_bb(RzCore *core, ut64 addr, RzAnalBlock *dest); +static RzList *recurse_bb(RzCore *core, ut64 addr, RzAnalysisBlock *dest); -static RzList *recurse(RzCore *core, RzAnalBlock *from, RzAnalBlock *dest) { +static RzList *recurse(RzCore *core, RzAnalysisBlock *from, RzAnalysisBlock *dest) { recurse_bb (core, from->jump, dest); recurse_bb (core, from->fail, dest); /* same for all calls */ - // TODO: RzAnalBlock must contain a linked list of calls + // TODO: RzAnalysisBlock must contain a linked list of calls return NULL; } -static RzList *recurse_bb(RzCore *core, ut64 addr, RzAnalBlock *dest) { - RzAnalBlock *bb = rz_anal_bb_from_offset (core->anal, addr); +static RzList *recurse_bb(RzCore *core, ut64 addr, RzAnalysisBlock *dest) { + RzAnalysisBlock *bb = rz_analysis_bb_from_offset (core->analysis, addr); if (bb == dest) { eprintf ("path found!"); return NULL; @@ -3392,11 +3392,11 @@ typedef struct { int count; RzPVector reg_set; bool argonly; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; RzCore *core; } BlockRecurseCtx; -static bool anal_block_on_exit(RzAnalBlock *bb, BlockRecurseCtx *ctx) { +static bool anal_block_on_exit(RzAnalysisBlock *bb, BlockRecurseCtx *ctx) { int *cur_regset = rz_pvector_pop (&ctx->reg_set); int *prev_regset = rz_pvector_at (&ctx->reg_set, rz_pvector_len (&ctx->reg_set) - 1); size_t i; @@ -3409,14 +3409,14 @@ static bool anal_block_on_exit(RzAnalBlock *bb, BlockRecurseCtx *ctx) { return true; } -static bool anal_block_cb(RzAnalBlock *bb, BlockRecurseCtx *ctx) { +static bool anal_block_cb(RzAnalysisBlock *bb, BlockRecurseCtx *ctx) { if (rz_cons_is_breaked ()) { return false; } if (bb->size < 1) { return true; } - if (bb->size > ctx->core->anal->opt.bb_max_size) { + if (bb->size > ctx->core->analysis->opt.bb_max_size) { return true; } int *parent_reg_set = rz_pvector_at (&ctx->reg_set, rz_pvector_len (&ctx->reg_set) - 1); @@ -3424,36 +3424,36 @@ static bool anal_block_cb(RzAnalBlock *bb, BlockRecurseCtx *ctx) { memcpy (reg_set, parent_reg_set, REG_SET_SIZE * sizeof (int)); rz_pvector_push (&ctx->reg_set, reg_set); RzCore *core = ctx->core; - RzAnalFunction *fcn = ctx->fcn; + RzAnalysisFunction *fcn = ctx->fcn; fcn->stack = bb->parent_stackptr; ut64 pos = bb->addr; while (pos < bb->addr + bb->size) { if (rz_cons_is_breaked ()) { break; } - RzAnalOp *op = rz_core_anal_op (core, pos, RZ_ANAL_OP_MASK_ESIL | RZ_ANAL_OP_MASK_VAL | RZ_ANAL_OP_MASK_HINT); + RzAnalysisOp *op = rz_core_analysis_op (core, pos, RZ_ANAL_OP_MASK_ESIL | RZ_ANAL_OP_MASK_VAL | RZ_ANAL_OP_MASK_HINT); if (!op) { //eprintf ("Cannot get op\n"); break; } - rz_anal_extract_rarg (core->anal, op, fcn, reg_set, &ctx->count); + rz_analysis_extract_rarg (core->analysis, op, fcn, reg_set, &ctx->count); if (!ctx->argonly) { if (op->stackop == RZ_ANAL_STACK_INC) { fcn->stack += op->stackptr; } else if (op->stackop == RZ_ANAL_STACK_RESET) { fcn->stack = 0; } - rz_anal_extract_vars (core->anal, fcn, op); + rz_analysis_extract_vars (core->analysis, fcn, op); } int opsize = op->size; int optype = op->type; - rz_anal_op_free (op); + rz_analysis_op_free (op); if (opsize < 1) { break; } if (optype == RZ_ANAL_OP_TYPE_CALL) { size_t i; - int max_count = fcn->cc ? rz_anal_cc_max_arg (core->anal, fcn->cc) : 0; + int max_count = fcn->cc ? rz_analysis_cc_max_arg (core->analysis, fcn->cc) : 0; for (i = 0; i < max_count; i++) { reg_set[i] = 2; } @@ -3464,9 +3464,9 @@ static bool anal_block_cb(RzAnalBlock *bb, BlockRecurseCtx *ctx) { } // TODO: move this logic into the main anal loop -RZ_API void rz_core_recover_vars(RzCore *core, RzAnalFunction *fcn, bool argonly) { - rz_return_if_fail (core && core->anal && fcn); - if (core->anal->opt.bb_max_size < 1) { +RZ_API void rz_core_recover_vars(RzCore *core, RzAnalysisFunction *fcn, bool argonly) { + rz_return_if_fail (core && core->analysis && fcn); + if (core->analysis->opt.bb_max_size < 1) { return; } BlockRecurseCtx ctx = { 0, {{ 0 }}, argonly, fcn, core }; @@ -3474,17 +3474,17 @@ RZ_API void rz_core_recover_vars(RzCore *core, RzAnalFunction *fcn, bool argonly int *reg_set = RZ_NEWS0 (int, REG_SET_SIZE); rz_pvector_push (&ctx.reg_set, reg_set); int saved_stack = fcn->stack; - RzAnalBlock *first_bb = rz_anal_get_block_at (fcn->anal, fcn->addr); - rz_anal_block_recurse_depth_first (first_bb, (RzAnalBlockCb)anal_block_cb, (RzAnalBlockCb)anal_block_on_exit, &ctx); + RzAnalysisBlock *first_bb = rz_analysis_get_block_at (fcn->analysis, fcn->addr); + rz_analysis_block_recurse_depth_first (first_bb, (RzAnalysisBlockCb)anal_block_cb, (RzAnalysisBlockCb)anal_block_on_exit, &ctx); rz_pvector_fini (&ctx.reg_set); fcn->stack = saved_stack; } static bool anal_path_exists(RzCore *core, ut64 from, ut64 to, RzList *bbs, int depth, HtUP *state, HtUP *avoid) { rz_return_val_if_fail (bbs, false); - RzAnalBlock *bb = rz_anal_bb_from_offset (core->anal, from); + RzAnalysisBlock *bb = rz_analysis_bb_from_offset (core->analysis, from); RzListIter *iter = NULL; - RzAnalRef *refi; + RzAnalysisRef *refi; if (depth < 1) { eprintf ("going too deep\n"); @@ -3498,7 +3498,7 @@ static bool anal_path_exists(RzCore *core, ut64 from, ut64 to, RzList *bbs, int ht_up_update (state, from, bb); // try to find the target in the current function - if (rz_anal_block_contains (bb, to) || + if (rz_analysis_block_contains (bb, to) || ((!ht_up_find (avoid, bb->jump, NULL) && !ht_up_find (state, bb->jump, NULL) && anal_path_exists (core, bb->jump, to, bbs, depth - 1, state, avoid))) || @@ -3510,15 +3510,15 @@ static bool anal_path_exists(RzCore *core, ut64 from, ut64 to, RzList *bbs, int } // find our current function - RzAnalFunction *cur_fcn = rz_anal_get_fcn_in (core->anal, from, 0); + RzAnalysisFunction *cur_fcn = rz_analysis_get_fcn_in (core->analysis, from, 0); // get call refs from current basic block and find a path from them if (cur_fcn) { - RzList *refs = rz_anal_function_get_refs (cur_fcn); + RzList *refs = rz_analysis_function_get_refs (cur_fcn); if (refs) { rz_list_foreach (refs, iter, refi) { if (refi->type == RZ_ANAL_REF_TYPE_CALL) { - if (rz_anal_block_contains (bb, refi->at)) { + if (rz_analysis_block_contains (bb, refi->at)) { if ((refi->at != refi->addr) && !ht_up_find (state, refi->addr, NULL) && anal_path_exists (core, refi->addr, to, bbs, depth - 1, state, avoid)) { rz_list_prepend (bbs, bb); rz_list_free (refs); @@ -3535,7 +3535,7 @@ static bool anal_path_exists(RzCore *core, ut64 from, ut64 to, RzList *bbs, int } static RzList *anal_graph_to(RzCore *core, ut64 addr, int depth, HtUP *avoid) { - RzAnalFunction *cur_fcn = rz_anal_get_fcn_in (core->anal, core->offset, 0); + RzAnalysisFunction *cur_fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, 0); RzList *list = rz_list_new (); HtUP *state = ht_up_new0 (); @@ -3552,10 +3552,10 @@ static RzList *anal_graph_to(RzCore *core, ut64 addr, int depth, HtUP *avoid) { } // backward search - RzList *xrefs = rz_anal_xrefs_get (core->anal, cur_fcn->addr); + RzList *xrefs = rz_analysis_xrefs_get (core->analysis, cur_fcn->addr); if (xrefs) { RzListIter *iter; - RzAnalRef *xref = NULL; + RzAnalysisRef *xref = NULL; rz_list_foreach (xrefs, iter, xref) { if (xref->type == RZ_ANAL_REF_TYPE_CALL) { ut64 offset = core->offset; @@ -3578,7 +3578,7 @@ static RzList *anal_graph_to(RzCore *core, ut64 addr, int depth, HtUP *avoid) { return NULL; } -RZ_API RzList* rz_core_anal_graph_to(RzCore *core, ut64 addr, int n) { +RZ_API RzList* rz_core_analysis_graph_to(RzCore *core, ut64 addr, int n) { int depth = rz_config_get_i (core->config, "anal.graph_depth"); RzList *path, *paths = rz_list_new (); HtUP *avoid = ht_up_new0 (); @@ -3587,7 +3587,7 @@ RZ_API RzList* rz_core_anal_graph_to(RzCore *core, ut64 addr, int n) { if (path) { rz_list_append (paths, path); if (rz_list_length (path) >= 2) { - RzAnalBlock *last = rz_list_get_n (path, rz_list_length (path) - 2); + RzAnalysisBlock *last = rz_list_get_n (path, rz_list_length (path) - 2); ht_up_update (avoid, last->addr, last); n--; continue; @@ -3600,7 +3600,7 @@ RZ_API RzList* rz_core_anal_graph_to(RzCore *core, ut64 addr, int n) { return paths; } -RZ_API int rz_core_anal_graph(RzCore *core, ut64 addr, int opts) { +RZ_API int rz_core_analysis_graph(RzCore *core, ut64 addr, int opts) { ut64 from = rz_config_get_i (core->config, "graph.from"); ut64 to = rz_config_get_i (core->config, "graph.to"); const char *font = rz_config_get (core->config, "graph.font"); @@ -3610,7 +3610,7 @@ RZ_API int rz_core_anal_graph(RzCore *core, ut64 addr, int opts) { int is_keva = opts & RZ_CORE_ANAL_KEYVALUE; int is_star = opts & RZ_CORE_ANAL_STAR; RzConfigHold *hc; - RzAnalFunction *fcni; + RzAnalysisFunction *fcni; RzListIter *iter; int nodes = 0; PJ *pj = NULL; @@ -3618,7 +3618,7 @@ RZ_API int rz_core_anal_graph(RzCore *core, ut64 addr, int opts) { if (!addr) { addr = core->offset; } - if (rz_list_empty (core->anal->fcns)) { + if (rz_list_empty (core->analysis->fcns)) { return false; } hc = rz_config_hold_new (core->config); @@ -3661,10 +3661,10 @@ RZ_API int rz_core_anal_graph(RzCore *core, ut64 addr, int opts) { } pj_a (pj); } - rz_list_foreach (core->anal->fcns, iter, fcni) { + rz_list_foreach (core->analysis->fcns, iter, fcni) { if (fcni->type & (RZ_ANAL_FCN_TYPE_SYM | RZ_ANAL_FCN_TYPE_FCN | RZ_ANAL_FCN_TYPE_LOC) && - (addr == UT64_MAX || rz_anal_get_fcn_in (core->anal, addr, 0) == fcni)) { + (addr == UT64_MAX || rz_analysis_get_fcn_in (core->analysis, addr, 0) == fcni)) { if (addr == UT64_MAX && (from != UT64_MAX && to != UT64_MAX)) { if (fcni->addr < from || fcni->addr > to) { continue; @@ -3678,7 +3678,7 @@ RZ_API int rz_core_anal_graph(RzCore *core, ut64 addr, int opts) { } if (!nodes) { if (!is_html && !is_json && !is_keva) { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, addr, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, addr, 0); if (is_star) { char *name = get_title(fcn ? fcn->addr: addr); rz_cons_printf ("agn %s;", name); @@ -3706,14 +3706,14 @@ static int core_anal_followptr(RzCore *core, int type, ut64 at, ut64 ptr, ut64 r return false; } if (ref == UT64_MAX || ptr == ref) { - const RzAnalRefType t = code? type? type: RZ_ANAL_REF_TYPE_CODE: RZ_ANAL_REF_TYPE_DATA; - rz_anal_xrefs_set (core->anal, at, ptr, t); + const RzAnalysisRefType t = code? type? type: RZ_ANAL_REF_TYPE_CODE: RZ_ANAL_REF_TYPE_DATA; + rz_analysis_xrefs_set (core->analysis, at, ptr, t); return true; } if (depth < 1) { return false; } - int wordsize = (int)(core->anal->bits / 8); + int wordsize = (int)(core->analysis->bits / 8); ut64 dataptr; if (!rz_io_read_i (core->io, ptr, &dataptr, wordsize, false)) { // eprintf ("core_anal_followptr: Cannot read word at destination\n"); @@ -3722,7 +3722,7 @@ static int core_anal_followptr(RzCore *core, int type, ut64 at, ut64 ptr, ut64 r return core_anal_followptr (core, type, at, dataptr, ref, code, depth - 1); } -static bool opiscall(RzCore *core, RzAnalOp *aop, ut64 addr, const ut8* buf, int len, int arch) { +static bool opiscall(RzCore *core, RzAnalysisOp *aop, ut64 addr, const ut8* buf, int len, int arch) { switch (arch) { case RZ_ARCH_ARM64: aop->size = 4; @@ -3734,14 +3734,14 @@ static bool opiscall(RzCore *core, RzAnalOp *aop, ut64 addr, const ut8* buf, int } //if is not bl do not analyze if (buf[3] == 0x94) { - if (rz_anal_op (core->anal, aop, addr, buf, len, RZ_ANAL_OP_MASK_BASIC)) { + if (rz_analysis_op (core->analysis, aop, addr, buf, len, RZ_ANAL_OP_MASK_BASIC)) { return true; } } break; default: aop->size = 1; - if (rz_anal_op (core->anal, aop, addr, buf, len, RZ_ANAL_OP_MASK_BASIC)) { + if (rz_analysis_op (core->analysis, aop, addr, buf, len, RZ_ANAL_OP_MASK_BASIC)) { switch (aop->type & RZ_ANAL_OP_TYPE_MASK) { case RZ_ANAL_OP_TYPE_CALL: case RZ_ANAL_OP_TYPE_CCALL: @@ -3755,14 +3755,14 @@ static bool opiscall(RzCore *core, RzAnalOp *aop, ut64 addr, const ut8* buf, int // TODO(maskray) RAddrInterval API #define OPSZ 8 -RZ_API int rz_core_anal_search(RzCore *core, ut64 from, ut64 to, ut64 ref, int mode) { +RZ_API int rz_core_analysis_search(RzCore *core, ut64 from, ut64 to, ut64 ref, int mode) { ut8 *buf = (ut8 *)malloc (core->blocksize); if (!buf) { return -1; } int ptrdepth = rz_config_get_i (core->config, "anal.ptrdepth"); int i, count = 0; - RzAnalOp op = RZ_EMPTY; + RzAnalysisOp op = RZ_EMPTY; ut64 at; char bckwrds, do_bckwrd_srch; int arch = -1; @@ -3825,18 +3825,18 @@ RZ_API int rz_core_anal_search(RzCore *core, ut64 from, ut64 to, ut64 ref, int m case 'w': case 'x': { - rz_anal_op (core->anal, &op, at + i, buf + i, core->blocksize - i, RZ_ANAL_OP_MASK_BASIC); + rz_analysis_op (core->analysis, &op, at + i, buf + i, core->blocksize - i, RZ_ANAL_OP_MASK_BASIC); int mask = mode=='r' ? 1 : mode == 'w' ? 2: mode == 'x' ? 4: 0; if (op.direction == mask) { i += op.size; } - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); continue; } break; default: - if (!rz_anal_op (core->anal, &op, at + i, buf + i, core->blocksize - i, RZ_ANAL_OP_MASK_BASIC)) { - rz_anal_op_fini (&op); + if (!rz_analysis_op (core->analysis, &op, at + i, buf + i, core->blocksize - i, RZ_ANAL_OP_MASK_BASIC)) { + rz_analysis_op_fini (&op); continue; } } @@ -3873,8 +3873,8 @@ RZ_API int rz_core_anal_search(RzCore *core, ut64 from, ut64 to, ut64 ref, int m break; default: { - if (!rz_anal_op (core->anal, &op, at + i, buf + i, core->blocksize - i, RZ_ANAL_OP_MASK_BASIC)) { - rz_anal_op_fini (&op); + if (!rz_analysis_op (core->analysis, &op, at + i, buf + i, core->blocksize - i, RZ_ANAL_OP_MASK_BASIC)) { + rz_analysis_op_fini (&op); continue; } } @@ -3888,7 +3888,7 @@ RZ_API int rz_core_anal_search(RzCore *core, ut64 from, ut64 to, ut64 ref, int m op.size = 1; } i += op.size - 1; - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); } if (bckwrds) { if (!do_bckwrd_srch) { @@ -3909,11 +3909,11 @@ RZ_API int rz_core_anal_search(RzCore *core, ut64 from, ut64 to, ut64 ref, int m } rz_cons_break_pop (); free (buf); - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); return count; } -static bool found_xref(RzCore *core, ut64 at, ut64 xref_to, RzAnalRefType type, int count, int rad, int cfg_debug, bool cfg_anal_strings) { +static bool found_xref(RzCore *core, ut64 at, ut64 xref_to, RzAnalysisRefType type, int count, int rad, int cfg_debug, bool cfg_anal_strings) { // Validate the reference. If virtual addressing is enabled, we // allow only references to virtual addresses in order to reduce // the number of false positives. In debugger mode, the reference @@ -3942,7 +3942,7 @@ static bool found_xref(RzCore *core, ut64 at, ut64 xref_to, RzAnalRefType type, rz_flag_space_pop (core->flags); free (str_flagname); if (len > 0) { - rz_meta_set (core->anal, RZ_META_TYPE_STRING, xref_to, + rz_meta_set (core->analysis, RZ_META_TYPE_STRING, xref_to, len, (const char *) str_string); } free (str_string); @@ -3950,7 +3950,7 @@ static bool found_xref(RzCore *core, ut64 at, ut64 xref_to, RzAnalRefType type, } // Add to SDB if (xref_to) { - rz_anal_xrefs_set (core->anal, at, xref_to, type); + rz_analysis_xrefs_set (core->analysis, at, xref_to, type); } } else if (rad == 'j') { // Output JSON @@ -3983,13 +3983,13 @@ static bool found_xref(RzCore *core, ut64 at, ut64 xref_to, RzAnalRefType type, return true; } -RZ_API int rz_core_anal_search_xrefs(RzCore *core, ut64 from, ut64 to, int rad) { +RZ_API int rz_core_analysis_search_xrefs(RzCore *core, ut64 from, ut64 to, int rad) { int cfg_debug = rz_config_get_i (core->config, "cfg.debug"); bool cfg_anal_strings = rz_config_get_i (core->config, "anal.strings"); ut64 at; int count = 0; const int bsz = 8096; - RzAnalOp op = { 0 }; + RzAnalysisOp op = { 0 }; if (from == to) { return -1; @@ -4037,7 +4037,7 @@ RZ_API int rz_core_anal_search_xrefs(RzCore *core, ut64 from, ut64 to, int rad) continue; } while (i < bsz && !rz_cons_is_breaked ()) { - ret = rz_anal_op (core->anal, &op, at + i, buf + i, bsz - i, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_HINT); + ret = rz_analysis_op (core->analysis, &op, at + i, buf + i, bsz - i, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_HINT); ret = ret > 0 ? ret : 1; i += ret; if (ret <= 0 || i > bsz) { @@ -4096,10 +4096,10 @@ RZ_API int rz_core_anal_search_xrefs(RzCore *core, ut64 from, ut64 to, int rad) default: break; } - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); } at += bsz; - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); } rz_cons_break_pop (); free (buf); @@ -4132,22 +4132,22 @@ static bool isSkippable(RzBinSymbol *s) { return false; } -RZ_API int rz_core_anal_all(RzCore *core) { +RZ_API int rz_core_analysis_all(RzCore *core) { RzList *list; RzListIter *iter; RzFlagItem *item; - RzAnalFunction *fcni; + RzAnalysisFunction *fcni; RzBinAddr *binmain; RzBinAddr *entry; RzBinSymbol *symbol; - int depth = core->anal->opt.depth; + int depth = core->analysis->opt.depth; bool anal_vars = rz_config_get_i (core->config, "anal.vars"); /* Analyze Functions */ /* Entries */ item = rz_flag_get (core->flags, "entry0"); if (item) { - rz_core_anal_fcn (core, item->offset, -1, RZ_ANAL_REF_TYPE_NULL, depth - 1); + rz_core_analysis_fcn (core, item->offset, -1, RZ_ANAL_REF_TYPE_NULL, depth - 1); rz_core_cmdf (core, "afn entry0 0x%08"PFMT64x, item->offset); } else { rz_core_cmd0 (core, "af"); @@ -4169,7 +4169,7 @@ RZ_API int rz_core_anal_all(RzCore *core) { if (isValidSymbol (symbol)) { ut64 addr = rz_bin_get_vaddr (core->bin, symbol->paddr, symbol->vaddr); - rz_core_anal_fcn (core, addr, -1, RZ_ANAL_REF_TYPE_NULL, depth - 1); + rz_core_analysis_fcn (core, addr, -1, RZ_ANAL_REF_TYPE_NULL, depth - 1); } } } @@ -4178,7 +4178,7 @@ RZ_API int rz_core_anal_all(RzCore *core) { if ((binmain = rz_bin_get_sym (core->bin, RZ_BIN_SYM_MAIN))) { if (binmain->paddr != UT64_MAX) { ut64 addr = rz_bin_get_vaddr (core->bin, binmain->paddr, binmain->vaddr); - rz_core_anal_fcn (core, addr, -1, RZ_ANAL_REF_TYPE_NULL, depth - 1); + rz_core_analysis_fcn (core, addr, -1, RZ_ANAL_REF_TYPE_NULL, depth - 1); } } rz_core_task_yield (&core->tasks); @@ -4188,13 +4188,13 @@ RZ_API int rz_core_anal_all(RzCore *core) { continue; } ut64 addr = rz_bin_get_vaddr (core->bin, entry->paddr, entry->vaddr); - rz_core_anal_fcn (core, addr, -1, RZ_ANAL_REF_TYPE_NULL, depth - 1); + rz_core_analysis_fcn (core, addr, -1, RZ_ANAL_REF_TYPE_NULL, depth - 1); } } rz_core_task_yield (&core->tasks); if (anal_vars) { /* Set fcn type to RZ_ANAL_FCN_TYPE_SYM for symbols */ - rz_list_foreach_prev (core->anal->fcns, iter, fcni) { + rz_list_foreach_prev (core->analysis->fcns, iter, fcni) { if (rz_cons_is_breaked ()) { break; } @@ -4208,8 +4208,8 @@ RZ_API int rz_core_anal_all(RzCore *core) { return true; } -RZ_API int rz_core_anal_data(RzCore *core, ut64 addr, int count, int depth, int wordsize) { - RzAnalData *d; +RZ_API int rz_core_analysis_data(RzCore *core, ut64 addr, int count, int depth, int wordsize) { + RzAnalysisData *d; ut64 dstaddr = 0LL; ut8 *buf = core->block; int len = core->blocksize; @@ -4235,11 +4235,11 @@ RZ_API int rz_core_anal_data(RzCore *core, ut64 addr, int count, int depth, int i = 0; continue; } - /* rz_anal_data requires null-terminated buffer according to coverity */ + /* rz_analysis_data requires null-terminated buffer according to coverity */ /* but it should not.. so this must be fixed in anal/data.c instead of */ /* null terminating here */ - d = rz_anal_data (core->anal, addr + i, buf + i, len - i, wordsize); - str = rz_anal_data_to_string (d, pal); + d = rz_analysis_data (core->analysis, addr + i, buf + i, len - i, wordsize); + str = rz_analysis_data_to_string (d, pal); rz_cons_println (str); if (d) { @@ -4248,7 +4248,7 @@ RZ_API int rz_core_anal_data(RzCore *core, ut64 addr, int count, int depth, int rz_cons_printf ("`- "); dstaddr = rz_mem_get_num (buf + i, word); if (depth > 0) { - rz_core_anal_data (core, dstaddr, 1, depth - 1, wordsize); + rz_core_analysis_data (core, dstaddr, 1, depth - 1, wordsize); } i += word; break; @@ -4264,7 +4264,7 @@ RZ_API int rz_core_anal_data(RzCore *core, ut64 addr, int count, int depth, int i += word; } free (str); - rz_anal_data_free (d); + rz_analysis_data_free (d); } free (buf); return true; @@ -4285,9 +4285,9 @@ static bool block_flags_stat(RzFlagItem *fi, void *user) { /* core analysis stats */ /* stats --- colorful bar */ -RZ_API RzCoreAnalStats* rz_core_anal_get_stats(RzCore *core, ut64 from, ut64 to, ut64 step) { - RzAnalFunction *F; - RzAnalBlock *B; +RZ_API RzCoreAnalStats* rz_core_analysis_get_stats(RzCore *core, ut64 from, ut64 to, ut64 step) { + RzAnalysisFunction *F; + RzAnalysisBlock *B; RzBinSymbol *S; RzListIter *iter, *iter2; RzCoreAnalStats *as = NULL; @@ -4322,13 +4322,13 @@ RZ_API RzCoreAnalStats* rz_core_anal_get_stats(RzCore *core, ut64 from, ut64 to, struct block_flags_stat_t u = { .step = step, .from = from, .as = as }; rz_flag_foreach_range (core->flags, from, to + 1, block_flags_stat, &u); // iter all functions - rz_list_foreach (core->anal->fcns, iter, F) { + rz_list_foreach (core->analysis->fcns, iter, F) { if (F->addr < from || F->addr > to) { continue; } piece = (F->addr - from) / step; as->block[piece].functions++; - ut64 last_piece = RZ_MIN ((F->addr + rz_anal_function_linear_size (F) - 1) / step, blocks - 1); + ut64 last_piece = RZ_MIN ((F->addr + rz_analysis_function_linear_size (F) - 1) / step, blocks - 1); for (; piece <= last_piece; piece++) { as->block[piece].in_functions++; } @@ -4349,12 +4349,12 @@ RZ_API RzCoreAnalStats* rz_core_anal_get_stats(RzCore *core, ut64 from, ut64 to, piece = (S->vaddr - from) / step; as->block[piece].symbols++; } - RzPVector *metas = to > from ? rz_meta_get_all_intersect (core->anal, from, to - from, RZ_META_TYPE_ANY) : NULL; + RzPVector *metas = to > from ? rz_meta_get_all_intersect (core->analysis, from, to - from, RZ_META_TYPE_ANY) : NULL; if (metas) { void **it; rz_pvector_foreach (metas, it) { RzIntervalNode *node = *it; - RzAnalMetaItem *mi = node->data; + RzAnalysisMetaItem *mi = node->data; if (node->start < from || node->end > to) { continue; } @@ -4375,27 +4375,27 @@ RZ_API RzCoreAnalStats* rz_core_anal_get_stats(RzCore *core, ut64 from, ut64 to, return as; } -RZ_API void rz_core_anal_stats_free(RzCoreAnalStats *s) { +RZ_API void rz_core_analysis_stats_free(RzCoreAnalStats *s) { if (s) { free (s->block); } free (s); } -RZ_API RzList* rz_core_anal_cycles(RzCore *core, int ccl) { +RZ_API RzList* rz_core_analysis_cycles(RzCore *core, int ccl) { ut64 addr = core->offset; int depth = 0; - RzAnalOp *op = NULL; - RzAnalCycleFrame *prev = NULL, *cf = NULL; - RzAnalCycleHook *ch; + RzAnalysisOp *op = NULL; + RzAnalysisCycleFrame *prev = NULL, *cf = NULL; + RzAnalysisCycleHook *ch; RzList *hooks = rz_list_new (); if (!hooks) { return NULL; } - cf = rz_anal_cycle_frame_new (); + cf = rz_analysis_cycle_frame_new (); rz_cons_break_push (NULL, NULL); while (cf && !rz_cons_is_breaked ()) { - if ((op = rz_core_anal_op (core, addr, RZ_ANAL_OP_MASK_BASIC)) && (op->cycles) && (ccl > 0)) { + if ((op = rz_core_analysis_op (core, addr, RZ_ANAL_OP_MASK_BASIC)) && (op->cycles) && (ccl > 0)) { rz_cons_clear_line (1); eprintf ("%i -- ", ccl); addr += op->size; @@ -4411,7 +4411,7 @@ RZ_API RzList* rz_core_anal_cycles(RzCore *core, int ccl) { case RZ_ANAL_OP_TYPE_ICALL: case RZ_ANAL_OP_TYPE_RCALL: case RZ_ANAL_OP_TYPE_IRCALL: - ch = RZ_NEW0 (RzAnalCycleHook); + ch = RZ_NEW0 (RzAnalysisCycleHook); ch->addr = op->addr; eprintf ("0x%08"PFMT64x" > ?\r", op->addr); ch->cycles = ccl; @@ -4424,7 +4424,7 @@ RZ_API RzList* rz_core_anal_cycles(RzCore *core, int ccl) { ccl = ch->cycles; free (ch); } else { - rz_anal_cycle_frame_free (cf); + rz_analysis_cycle_frame_free (cf); cf = prev; if (cf) { prev = cf->prev; @@ -4433,7 +4433,7 @@ RZ_API RzList* rz_core_anal_cycles(RzCore *core, int ccl) { } break; case RZ_ANAL_OP_TYPE_CJMP: - ch = RZ_NEW0 (RzAnalCycleHook); + ch = RZ_NEW0 (RzAnalysisCycleHook); ch->addr = addr; ch->cycles = ccl - op->failcycles; rz_list_push (cf->hooks, ch); @@ -4443,7 +4443,7 @@ RZ_API RzList* rz_core_anal_cycles(RzCore *core, int ccl) { break; case RZ_ANAL_OP_TYPE_UCJMP: case RZ_ANAL_OP_TYPE_UCCALL: - ch = RZ_NEW0 (RzAnalCycleHook); + ch = RZ_NEW0 (RzAnalysisCycleHook); ch->addr = op->addr; ch->cycles = ccl; rz_list_append (hooks, ch); @@ -4452,7 +4452,7 @@ RZ_API RzList* rz_core_anal_cycles(RzCore *core, int ccl) { eprintf ("0x%08"PFMT64x" > ?\r", op->addr); break; case RZ_ANAL_OP_TYPE_CCALL: - ch = RZ_NEW0 (RzAnalCycleHook); + ch = RZ_NEW0 (RzAnalysisCycleHook); ch->addr = addr; ch->cycles = ccl - op->failcycles; rz_list_push (cf->hooks, ch); @@ -4461,7 +4461,7 @@ RZ_API RzList* rz_core_anal_cycles(RzCore *core, int ccl) { if (op->addr != op->jump) { //no selfies cf->naddr = addr; prev = cf; - cf = rz_anal_cycle_frame_new (); + cf = rz_analysis_cycle_frame_new (); cf->prev = prev; } ccl -= op->cycles; @@ -4469,7 +4469,7 @@ RZ_API RzList* rz_core_anal_cycles(RzCore *core, int ccl) { loganal (op->addr, addr, depth - 1); break; case RZ_ANAL_OP_TYPE_RET: - ch = RZ_NEW0 (RzAnalCycleHook); + ch = RZ_NEW0 (RzAnalysisCycleHook); if (prev) { ch->addr = prev->naddr; ccl -= op->cycles; @@ -4490,7 +4490,7 @@ RZ_API RzList* rz_core_anal_cycles(RzCore *core, int ccl) { ccl = ch->cycles; free (ch); } else { - rz_anal_cycle_frame_free (cf); + rz_analysis_cycle_frame_free (cf); cf = prev; if (cf) { prev = cf->prev; @@ -4499,7 +4499,7 @@ RZ_API RzList* rz_core_anal_cycles(RzCore *core, int ccl) { } break; case RZ_ANAL_OP_TYPE_CRET: - ch = RZ_NEW0 (RzAnalCycleHook); + ch = RZ_NEW0 (RzAnalysisCycleHook); if (prev) { ch->addr = prev->naddr; ch->cycles = ccl - op->cycles; @@ -4519,9 +4519,9 @@ RZ_API RzList* rz_core_anal_cycles(RzCore *core, int ccl) { break; } } else { - ch = RZ_NEW0 (RzAnalCycleHook); + ch = RZ_NEW0 (RzAnalysisCycleHook); if (!ch) { - rz_anal_cycle_frame_free (cf); + rz_analysis_cycle_frame_free (cf); rz_list_free (hooks); return NULL; } @@ -4536,7 +4536,7 @@ RZ_API RzList* rz_core_anal_cycles(RzCore *core, int ccl) { ccl = ch->cycles; free (ch); } else { - rz_anal_cycle_frame_free (cf); + rz_analysis_cycle_frame_free (cf); cf = prev; if (cf) { prev = cf->prev; @@ -4544,7 +4544,7 @@ RZ_API RzList* rz_core_anal_cycles(RzCore *core, int ccl) { } } } - rz_anal_op_free (op); + rz_analysis_op_free (op); } if (rz_cons_is_breaked ()) { while (cf) { @@ -4554,7 +4554,7 @@ RZ_API RzList* rz_core_anal_cycles(RzCore *core, int ccl) { ch = rz_list_pop (cf->hooks); } prev = cf->prev; - rz_anal_cycle_frame_free (cf); + rz_analysis_cycle_frame_free (cf); cf = prev; } } @@ -4562,28 +4562,28 @@ RZ_API RzList* rz_core_anal_cycles(RzCore *core, int ccl) { return hooks; } -RZ_API void rz_core_anal_undefine(RzCore *core, ut64 off) { - RzAnalFunction *f = rz_anal_get_fcn_in (core->anal, off, -1); +RZ_API void rz_core_analysis_undefine(RzCore *core, ut64 off) { + RzAnalysisFunction *f = rz_analysis_get_fcn_in (core->analysis, off, -1); if (f) { if (!strncmp (f->name, "fcn.", 4)) { rz_flag_unset_name (core->flags, f->name); } - rz_meta_del (core->anal, RZ_META_TYPE_ANY, rz_anal_function_min_addr (f), rz_anal_function_linear_size (f)); + rz_meta_del (core->analysis, RZ_META_TYPE_ANY, rz_analysis_function_min_addr (f), rz_analysis_function_linear_size (f)); } - rz_anal_fcn_del_locs (core->anal, off); - rz_anal_fcn_del (core->anal, off); + rz_analysis_fcn_del_locs (core->analysis, off); + rz_analysis_fcn_del (core->analysis, off); } /* Join function at addr2 into function at addr */ // addr use to be core->offset -RZ_API void rz_core_anal_fcn_merge(RzCore *core, ut64 addr, ut64 addr2) { +RZ_API void rz_core_analysis_fcn_merge(RzCore *core, ut64 addr, ut64 addr2) { RzListIter *iter; ut64 min = 0; ut64 max = 0; int first = 1; - RzAnalBlock *bb; - RzAnalFunction *f1 = rz_anal_get_function_at (core->anal, addr); - RzAnalFunction *f2 = rz_anal_get_function_at (core->anal, addr2); + RzAnalysisBlock *bb; + RzAnalysisFunction *f1 = rz_analysis_get_function_at (core->analysis, addr); + RzAnalysisFunction *f2 = rz_analysis_get_function_at (core->analysis, addr2); if (!f1 || !f2) { eprintf ("Cannot find function\n"); return; @@ -4622,12 +4622,12 @@ RZ_API void rz_core_anal_fcn_merge(RzCore *core, ut64 addr, ut64 addr2) { max = bb->addr + bb->size; } } - rz_anal_function_add_block (f1, bb); + rz_analysis_function_add_block (f1, bb); } // TODO: import data/code/refs - rz_anal_function_delete (f2); + rz_analysis_function_delete (f2); // update size - rz_anal_function_relocate (f2, RZ_MIN (addr, addr2)); + rz_analysis_function_relocate (f2, RZ_MIN (addr, addr2)); } static bool esil_anal_stop = false; @@ -4642,17 +4642,17 @@ static void add_string_ref(RzCore *core, ut64 xref_from, ut64 xref_to) { return; } if (!xref_from || xref_from == UT64_MAX) { - xref_from = core->anal->esil->address; + xref_from = core->analysis->esil->address; } char *str_flagname = is_string_at (core, xref_to, &len); if (str_flagname) { - rz_anal_xrefs_set (core->anal, xref_from, xref_to, RZ_ANAL_REF_TYPE_DATA); + rz_analysis_xrefs_set (core->analysis, xref_from, xref_to, RZ_ANAL_REF_TYPE_DATA); rz_name_filter (str_flagname, -1); char *flagname = sdb_fmt ("str.%s", str_flagname); rz_flag_space_push (core->flags, RZ_FLAGS_FS_STRINGS); rz_flag_set (core->flags, flagname, xref_to, len); rz_flag_space_pop (core->flags); - rz_meta_set (core->anal, 's', xref_to, len, str_flagname); + rz_meta_set (core->analysis, 's', xref_to, len, str_flagname); free (str_flagname); } } @@ -4673,13 +4673,13 @@ static bool myvalid(RzIO *io, ut64 addr) { } typedef struct { - RzAnalOp *op; - RzAnalFunction *fcn; + RzAnalysisOp *op; + RzAnalysisFunction *fcn; const char *spname; ut64 initial_sp; } EsilBreakCtx; -static const char *reg_name_for_access(RzAnalOp* op, RzAnalVarAccessType type) { +static const char *reg_name_for_access(RzAnalysisOp* op, RzAnalysisVarAccessType type) { if (type == RZ_ANAL_VAR_ACCESS_TYPE_WRITE) { if (op->dst && op->dst->reg) { return op->dst->reg->name; @@ -4692,7 +4692,7 @@ static const char *reg_name_for_access(RzAnalOp* op, RzAnalVarAccessType type) { return NULL; } -static ut64 delta_for_access(RzAnalOp *op, RzAnalVarAccessType type) { +static ut64 delta_for_access(RzAnalysisOp *op, RzAnalysisVarAccessType type) { if (type == RZ_ANAL_VAR_ACCESS_TYPE_WRITE) { if (op->dst) { return op->dst->imm + op->dst->delta; @@ -4708,33 +4708,33 @@ static ut64 delta_for_access(RzAnalOp *op, RzAnalVarAccessType type) { return 0; } -static void handle_var_stack_access(RzAnalEsil *esil, ut64 addr, RzAnalVarAccessType type, int len) { +static void handle_var_stack_access(RzAnalysisEsil *esil, ut64 addr, RzAnalysisVarAccessType type, int len) { EsilBreakCtx *ctx = esil->user; const char *regname = reg_name_for_access (ctx->op, type); if (ctx->fcn && regname) { - ut64 spaddr = rz_reg_getv (esil->anal->reg, ctx->spname); + ut64 spaddr = rz_reg_getv (esil->analysis->reg, ctx->spname); if (addr >= spaddr && addr < ctx->initial_sp) { int stack_off = addr - ctx->initial_sp; - RzAnalVar *var = rz_anal_function_get_var (ctx->fcn, RZ_ANAL_VAR_KIND_SPV, stack_off); + RzAnalysisVar *var = rz_analysis_function_get_var (ctx->fcn, RZ_ANAL_VAR_KIND_SPV, stack_off); if (!var) { - var = rz_anal_function_get_var (ctx->fcn, RZ_ANAL_VAR_KIND_BPV, stack_off); + var = rz_analysis_function_get_var (ctx->fcn, RZ_ANAL_VAR_KIND_BPV, stack_off); } if (!var && stack_off >= -ctx->fcn->maxstack) { char *varname; - varname = ctx->fcn->anal->opt.varname_stack + varname = ctx->fcn->analysis->opt.varname_stack ? rz_str_newf ("var_%xh", RZ_ABS (stack_off)) - : rz_anal_function_autoname_var (ctx->fcn, RZ_ANAL_VAR_KIND_SPV, "var", delta_for_access (ctx->op, type)); - var = rz_anal_function_set_var (ctx->fcn, stack_off, RZ_ANAL_VAR_KIND_SPV, NULL, len, false, varname); + : rz_analysis_function_autoname_var (ctx->fcn, RZ_ANAL_VAR_KIND_SPV, "var", delta_for_access (ctx->op, type)); + var = rz_analysis_function_set_var (ctx->fcn, stack_off, RZ_ANAL_VAR_KIND_SPV, NULL, len, false, varname); free (varname); } if (var) { - rz_anal_var_set_access (var, regname, ctx->op->addr, type, delta_for_access (ctx->op, type)); + rz_analysis_var_set_access (var, regname, ctx->op->addr, type, delta_for_access (ctx->op, type)); } } } } -static int esilbreak_mem_write(RzAnalEsil *esil, ut64 addr, const ut8 *buf, int len) { +static int esilbreak_mem_write(RzAnalysisEsil *esil, ut64 addr, const ut8 *buf, int len) { handle_var_stack_access (esil, addr, RZ_ANAL_VAR_ACCESS_TYPE_WRITE, len); return 1; } @@ -4746,7 +4746,7 @@ static ut64 esilbreak_last_data = UT64_MAX; static ut64 ntarget = UT64_MAX; // TODO differentiate endian-aware mem_read with other reads; move ntarget handling to another function -static int esilbreak_mem_read(RzAnalEsil *esil, ut64 addr, ut8 *buf, int len) { +static int esilbreak_mem_read(RzAnalysisEsil *esil, ut64 addr, ut8 *buf, int len) { ut8 str[128]; if (addr != UT64_MAX) { esilbreak_last_read = addr; @@ -4757,13 +4757,13 @@ static int esilbreak_mem_read(RzAnalEsil *esil, ut64 addr, ut8 *buf, int len) { bool trace = true; switch (len) { case 2: - esilbreak_last_data = refptr = (ut64)rz_read_ble16 (buf, esil->anal->big_endian); + esilbreak_last_data = refptr = (ut64)rz_read_ble16 (buf, esil->analysis->big_endian); break; case 4: - esilbreak_last_data = refptr = (ut64)rz_read_ble32 (buf, esil->anal->big_endian); + esilbreak_last_data = refptr = (ut64)rz_read_ble32 (buf, esil->analysis->big_endian); break; case 8: - esilbreak_last_data = refptr = rz_read_ble64 (buf, esil->anal->big_endian); + esilbreak_last_data = refptr = rz_read_ble64 (buf, esil->analysis->big_endian); break; default: trace = false; @@ -4780,7 +4780,7 @@ static int esilbreak_mem_read(RzAnalEsil *esil, ut64 addr, ut8 *buf, int len) { str[0] = 0; validRef = false; } else { - rz_anal_xrefs_set (mycore->anal, esil->address, refptr, RZ_ANAL_REF_TYPE_DATA); + rz_analysis_xrefs_set (mycore->analysis, esil->address, refptr, RZ_ANAL_REF_TYPE_DATA); str[sizeof (str) - 1] = 0; add_string_ref (mycore, esil->address, refptr); esilbreak_last_data = UT64_MAX; @@ -4791,38 +4791,38 @@ static int esilbreak_mem_read(RzAnalEsil *esil, ut64 addr, ut8 *buf, int len) { /** resolve ptr */ if (ntarget == UT64_MAX || ntarget == addr || (ntarget == UT64_MAX && !validRef)) { - rz_anal_xrefs_set (mycore->anal, esil->address, addr, RZ_ANAL_REF_TYPE_DATA); + rz_analysis_xrefs_set (mycore->analysis, esil->address, addr, RZ_ANAL_REF_TYPE_DATA); } } return 0; // fallback } -static int esilbreak_reg_write(RzAnalEsil *esil, const char *name, ut64 *val) { +static int esilbreak_reg_write(RzAnalysisEsil *esil, const char *name, ut64 *val) { if (!esil) { return 0; } - RzAnal *anal = esil->anal; + RzAnalysis *analysis = esil->analysis; EsilBreakCtx *ctx = esil->user; - RzAnalOp *op = ctx->op; - RzCore *core = anal->coreb.core; - handle_var_stack_access (esil, *val, RZ_ANAL_VAR_ACCESS_TYPE_PTR, esil->anal->bits / 8); + RzAnalysisOp *op = ctx->op; + RzCore *core = analysis->coreb.core; + handle_var_stack_access (esil, *val, RZ_ANAL_VAR_ACCESS_TYPE_PTR, esil->analysis->bits / 8); //specific case to handle blx/bx cases in arm through emulation // XXX this thing creates a lot of false positives ut64 at = *val; - if (anal && anal->opt.armthumb) { - if (anal->cur && anal->cur->arch && anal->bits < 33 && - strstr (anal->cur->arch, "arm") && !strcmp (name, "pc") && op) { + if (analysis && analysis->opt.armthumb) { + if (analysis->cur && analysis->cur->arch && analysis->bits < 33 && + strstr (analysis->cur->arch, "arm") && !strcmp (name, "pc") && op) { switch (op->type) { case RZ_ANAL_OP_TYPE_UCALL: // BLX case RZ_ANAL_OP_TYPE_UJMP: // BX // maybe UJMP/UCALL is enough here if (!(*val & 1)) { - rz_anal_hint_set_bits (anal, *val, 32); + rz_analysis_hint_set_bits (analysis, *val, 32); } else { - ut64 snv = rz_reg_getv (anal->reg, "pc"); + ut64 snv = rz_reg_getv (analysis->reg, "pc"); if (snv != UT32_MAX && snv != UT64_MAX) { - if (rz_io_is_valid_offset (anal->iob.io, *val, 1)) { - rz_anal_hint_set_bits (anal, *val - 1, 16); + if (rz_io_is_valid_offset (analysis->iob.io, *val, 1)) { + rz_analysis_hint_set_bits (analysis, *val - 1, 16); } } } @@ -4833,21 +4833,21 @@ static int esilbreak_reg_write(RzAnalEsil *esil, const char *name, ut64 *val) { } } if (core->rasm->bits == 32 && strstr (core->rasm->cur->name, "arm")) { - if ((!(at & 1)) && rz_io_is_valid_offset (anal->iob.io, at, 0)) { // !core->anal->opt.noncode)) { - add_string_ref (anal->coreb.core, esil->address, at); + if ((!(at & 1)) && rz_io_is_valid_offset (analysis->iob.io, at, 0)) { // !core->analysis->opt.noncode)) { + add_string_ref (analysis->coreb.core, esil->address, at); } } return 0; } -static void getpcfromstack(RzCore *core, RzAnalEsil *esil) { +static void getpcfromstack(RzCore *core, RzAnalysisEsil *esil) { ut64 cur; ut64 addr; ut64 size; int idx; - RzAnalEsil esil_cpy; - RzAnalOp op = RZ_EMPTY; - RzAnalFunction *fcn = NULL; + RzAnalysisEsil esil_cpy; + RzAnalysisOp op = RZ_EMPTY; + RzAnalysisFunction *fcn = NULL; ut8 *buf = NULL; char *tmp_esil_str = NULL; int tmp_esil_str_len; @@ -4860,12 +4860,12 @@ static void getpcfromstack(RzCore *core, RzAnalEsil *esil) { memcpy (&esil_cpy, esil, sizeof (esil_cpy)); addr = cur = esil_cpy.cur; - fcn = rz_anal_get_fcn_in (core->anal, addr, 0); + fcn = rz_analysis_get_fcn_in (core->analysis, addr, 0); if (!fcn) { return; } - size = rz_anal_function_linear_size (fcn); + size = rz_analysis_function_linear_size (fcn); if (size <= 0) { return; } @@ -4880,7 +4880,7 @@ static void getpcfromstack(RzCore *core, RzAnalEsil *esil) { // TODO Hardcoding for 2 instructions (mov e_p,[esp];ret). More work needed idx = 0; - if (rz_anal_op (core->anal, &op, cur, buf + idx, size - idx, RZ_ANAL_OP_MASK_ESIL) <= 0 || + if (rz_analysis_op (core->analysis, &op, cur, buf + idx, size - idx, RZ_ANAL_OP_MASK_ESIL) <= 0 || op.size <= 0 || (op.type != RZ_ANAL_OP_TYPE_MOV && op.type != RZ_ANAL_OP_TYPE_CMOV)) { goto err_anal_op; @@ -4893,7 +4893,7 @@ static void getpcfromstack(RzCore *core, RzAnalEsil *esil) { } // Ugly code // This is a hack, since ESIL doesn't always preserve values pushed on the stack. That probably needs to be rectified - spname = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_SP); + spname = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_SP); if (!spname || !*spname) { goto err_anal_op; } @@ -4912,14 +4912,14 @@ static void getpcfromstack(RzCore *core, RzAnalEsil *esil) { snprintf (tmp_esil_str, tmp_esil_str_len - 1, "%20" PFMT64u "%s", esil_cpy.old, &esilstr[strlen (spname) + 4]); rz_str_trim (tmp_esil_str); idx += op.size; - rz_anal_esil_set_pc (&esil_cpy, cur); - rz_anal_esil_parse (&esil_cpy, tmp_esil_str); - rz_anal_esil_stack_free (&esil_cpy); + rz_analysis_esil_set_pc (&esil_cpy, cur); + rz_analysis_esil_parse (&esil_cpy, tmp_esil_str); + rz_analysis_esil_stack_free (&esil_cpy); free (tmp_esil_str); cur = addr + idx; - rz_anal_op_fini (&op); - if (rz_anal_op (core->anal, &op, cur, buf + idx, size - idx, RZ_ANAL_OP_MASK_ESIL) <= 0 || + rz_analysis_op_fini (&op); + if (rz_analysis_op (core->analysis, &op, cur, buf + idx, size - idx, RZ_ANAL_OP_MASK_ESIL) <= 0 || op.size <= 0 || (op.type != RZ_ANAL_OP_TYPE_RET && op.type != RZ_ANAL_OP_TYPE_CRET)) { goto err_anal_op; @@ -4927,29 +4927,29 @@ static void getpcfromstack(RzCore *core, RzAnalEsil *esil) { rz_asm_set_pc (core->rasm, cur); esilstr = RZ_STRBUF_SAFEGET (&op.esil); - rz_anal_esil_set_pc (&esil_cpy, cur); + rz_analysis_esil_set_pc (&esil_cpy, cur); if (!esilstr || !*esilstr) { goto err_anal_op; } - rz_anal_esil_parse (&esil_cpy, esilstr); - rz_anal_esil_stack_free (&esil_cpy); + rz_analysis_esil_parse (&esil_cpy, esilstr); + rz_analysis_esil_stack_free (&esil_cpy); memcpy (esil, &esil_cpy, sizeof (esil_cpy)); err_anal_op: - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); free (buf); } typedef struct { ut64 start_addr; ut64 end_addr; - RzAnalFunction *fcn; - RzAnalBlock *cur_bb; + RzAnalysisFunction *fcn; + RzAnalysisBlock *cur_bb; RzList *bbl, *path, *switch_path; } IterCtx; -static int find_bb(ut64 *addr, RzAnalBlock *bb) { +static int find_bb(ut64 *addr, RzAnalysisBlock *bb) { return *addr != bb->addr; } @@ -4961,15 +4961,15 @@ static inline bool get_next_i(IterCtx *ctx, size_t *next_i) { ctx->path = rz_list_new (); ctx->switch_path = rz_list_new (); ctx->bbl = rz_list_clone (ctx->fcn->bbs); - ctx->cur_bb = rz_anal_get_block_at (ctx->fcn->anal, ctx->fcn->addr); + ctx->cur_bb = rz_analysis_get_block_at (ctx->fcn->analysis, ctx->fcn->addr); rz_list_push (ctx->path, ctx->cur_bb); } - RzAnalBlock *bb = ctx->cur_bb; + RzAnalysisBlock *bb = ctx->cur_bb; if (cur_addr >= bb->addr + bb->size) { - rz_reg_arena_push (ctx->fcn->anal->reg); + rz_reg_arena_push (ctx->fcn->analysis->reg); RzListIter *bbit = NULL; if (bb->switch_op) { - RzAnalCaseOp *cop = rz_list_first (bb->switch_op->cases); + RzAnalysisCaseOp *cop = rz_list_first (bb->switch_op->cases); bbit = rz_list_find (ctx->bbl, &cop->jump, (RzListComparator)find_bb); if (bbit) { rz_list_push (ctx->switch_path, bb->switch_op->cases->head); @@ -4982,19 +4982,19 @@ static inline bool get_next_i(IterCtx *ctx, size_t *next_i) { } if (!bbit) { RzListIter *cop_it = rz_list_last (ctx->switch_path); - RzAnalBlock *prev_bb = NULL; + RzAnalysisBlock *prev_bb = NULL; do { - rz_reg_arena_pop (ctx->fcn->anal->reg); + rz_reg_arena_pop (ctx->fcn->analysis->reg); prev_bb = rz_list_pop (ctx->path); if (prev_bb->fail != UT64_MAX) { bbit = rz_list_find (ctx->bbl, &prev_bb->fail, (RzListComparator)find_bb); if (bbit) { - rz_reg_arena_push (ctx->fcn->anal->reg); + rz_reg_arena_push (ctx->fcn->analysis->reg); rz_list_push (ctx->path, prev_bb); } } if (!bbit && cop_it) { - RzAnalCaseOp *cop = cop_it->data; + RzAnalysisCaseOp *cop = cop_it->data; if (cop->jump == prev_bb->addr && cop_it->n) { cop = cop_it->n->data; rz_list_pop (ctx->switch_path); @@ -5026,14 +5026,14 @@ static inline bool get_next_i(IterCtx *ctx, size_t *next_i) { return true; } -RZ_API void rz_core_anal_esil(RzCore *core, const char *str, const char *target) { +RZ_API void rz_core_analysis_esil(RzCore *core, const char *str, const char *target) { bool cfg_anal_strings = rz_config_get_i (core->config, "anal.strings"); bool emu_lazy = rz_config_get_i (core->config, "emu.lazy"); bool gp_fixed = rz_config_get_i (core->config, "anal.gpfixed"); - RzAnalEsil *ESIL = core->anal->esil; + RzAnalysisEsil *ESIL = core->analysis->esil; ut64 refptr = 0LL; const char *pcname; - RzAnalOp op = RZ_EMPTY; + RzAnalysisOp op = RZ_EMPTY; ut8 *buf = NULL; bool end_address_set = false; int iend; @@ -5068,13 +5068,13 @@ RZ_API void rz_core_anal_esil(RzCore *core, const char *str, const char *target) ntarget = UT64_MAX; refptr = 0LL; } - RzAnalFunction *fcn = NULL; + RzAnalysisFunction *fcn = NULL; if (!strcmp (str, "f")) { - fcn = rz_anal_get_fcn_in (core->anal, core->offset, 0); + fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, 0); if (fcn) { - start = rz_anal_function_min_addr (fcn); + start = rz_analysis_function_min_addr (fcn); addr = fcn->addr; - end = rz_anal_function_max_addr (fcn); + end = rz_analysis_function_max_addr (fcn); end_address_set = true; } } @@ -5109,7 +5109,7 @@ RZ_API void rz_core_anal_esil(RzCore *core, const char *str, const char *target) rz_io_read_at (core->io, start, buf, iend + 1); if (!ESIL) { rz_core_cmd0 (core, "aei"); - ESIL = core->anal->esil; + ESIL = core->analysis->esil; if (!ESIL) { eprintf ("ESIL not initialized\n"); return; @@ -5119,8 +5119,8 @@ RZ_API void rz_core_anal_esil(RzCore *core, const char *str, const char *target) EsilBreakCtx ctx = { &op, fcn, - rz_reg_get_name (core->anal->reg, RZ_REG_NAME_SP), - rz_reg_getv (core->anal->reg, ctx.spname) + rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_SP), + rz_reg_getv (core->analysis->reg, ctx.spname) }; ESIL->cb.hook_reg_write = &esilbreak_reg_write; //this is necessary for the hook to read the id of analop @@ -5129,11 +5129,11 @@ RZ_API void rz_core_anal_esil(RzCore *core, const char *str, const char *target) ESIL->cb.hook_mem_write = &esilbreak_mem_write; if (fcn && fcn->reg_save_area) { - rz_reg_setv (core->anal->reg, ctx.spname, ctx.initial_sp - fcn->reg_save_area); + rz_reg_setv (core->analysis->reg, ctx.spname, ctx.initial_sp - fcn->reg_save_area); } //eprintf ("Analyzing ESIL refs from 0x%"PFMT64x" - 0x%"PFMT64x"\n", addr, end); // TODO: backup/restore register state before/after analysis - pcname = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_PC); + pcname = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_PC); if (!pcname || !*pcname) { eprintf ("Cannot find program counter register in the current profile.\n"); return; @@ -5142,8 +5142,8 @@ RZ_API void rz_core_anal_esil(RzCore *core, const char *str, const char *target) rz_cons_break_push (cccb, core); int arch = -1; - if (!strcmp (core->anal->cur->arch, "arm")) { - switch (core->anal->cur->bits) { + if (!strcmp (core->analysis->cur->arch, "arm")) { + switch (core->analysis->cur->bits) { case 64: arch = RZ_ARCH_ARM64; break; case 32: arch = RZ_ARCH_ARM32; break; case 16: arch = RZ_ARCH_THUMB; break; @@ -5153,16 +5153,16 @@ RZ_API void rz_core_anal_esil(RzCore *core, const char *str, const char *target) ut64 gp = rz_config_get_i (core->config, "anal.gp"); const char *gp_reg = NULL; - if (!strcmp (core->anal->cur->arch, "mips")) { + if (!strcmp (core->analysis->cur->arch, "mips")) { gp_reg = "gp"; arch = RZ_ARCH_MIPS; } - const char *sn = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_SN); + const char *sn = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_SN); if (!sn) { eprintf ("Warning: No SN reg alias for current architecture.\n"); } - rz_reg_arena_push (core->anal->reg); + rz_reg_arena_push (core->analysis->reg); IterCtx ictx = { start, end, fcn, NULL}; size_t i = addr - start; @@ -5175,11 +5175,11 @@ RZ_API void rz_core_anal_esil(RzCore *core, const char *str, const char *target) break; } { - RzPVector *list = rz_meta_get_all_in (core->anal, cur, RZ_META_TYPE_ANY); + RzPVector *list = rz_meta_get_all_in (core->analysis, cur, RZ_META_TYPE_ANY); void **it; rz_pvector_foreach (list, it) { RzIntervalNode *node = *it; - RzAnalMetaItem *meta = node->data; + RzAnalysisMetaItem *meta = node->data; switch (meta->type) { case RZ_META_TYPE_DATA: case RZ_META_TYPE_STRING: @@ -5196,20 +5196,20 @@ RZ_API void rz_core_anal_esil(RzCore *core, const char *str, const char *target) /* realign address if needed */ rz_core_seek_arch_bits (core, cur); - int opalign = core->anal->pcalign; + int opalign = core->analysis->pcalign; if (opalign > 0) { cur -= (cur % opalign); } - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); rz_asm_set_pc (core->rasm, cur); - if (!rz_anal_op (core->anal, &op, cur, buf + i, iend - i, RZ_ANAL_OP_MASK_ESIL | RZ_ANAL_OP_MASK_VAL | RZ_ANAL_OP_MASK_HINT)) { + if (!rz_analysis_op (core->analysis, &op, cur, buf + i, iend - i, RZ_ANAL_OP_MASK_ESIL | RZ_ANAL_OP_MASK_VAL | RZ_ANAL_OP_MASK_HINT)) { i += minopsize - 1; // XXX dupe in op.size below } // if (op.type & 0x80000000 || op.type == 0) { if (op.type == RZ_ANAL_OP_TYPE_ILL || op.type == RZ_ANAL_OP_TYPE_UNK) { // i += 2 - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); continue; } //we need to check again i because buf+i may goes beyond its boundaries @@ -5256,8 +5256,8 @@ RZ_API void rz_core_anal_esil(RzCore *core, const char *str, const char *target) } if (sn && op.type == RZ_ANAL_OP_TYPE_SWI) { rz_flag_space_set (core->flags, RZ_FLAGS_FS_SYSCALLS); - int snv = (arch == RZ_ARCH_THUMB)? op.val: (int)rz_reg_getv (core->anal->reg, sn); - RzSyscallItem *si = rz_syscall_get (core->anal->syscall, snv, -1); + int snv = (arch == RZ_ARCH_THUMB)? op.val: (int)rz_reg_getv (core->analysis->reg, sn); + RzSyscallItem *si = rz_syscall_get (core->analysis->syscall, snv, -1); if (si) { // eprintf ("0x%08"PFMT64x" SYSCALL %-4d %s\n", cur, snv, si->name); rz_flag_set_next (core->flags, sdb_fmt ("syscall.%s", si->name), cur, 1); @@ -5274,28 +5274,28 @@ RZ_API void rz_core_anal_esil(RzCore *core, const char *str, const char *target) if (!esilstr || !*esilstr) { continue; } - rz_anal_esil_set_pc (ESIL, cur); - rz_reg_setv (core->anal->reg, pcname, cur + op.size); + rz_analysis_esil_set_pc (ESIL, cur); + rz_reg_setv (core->analysis->reg, pcname, cur + op.size); if (gp_fixed && gp_reg) { - rz_reg_setv (core->anal->reg, gp_reg, gp); + rz_reg_setv (core->analysis->reg, gp_reg, gp); } - (void)rz_anal_esil_parse (ESIL, esilstr); + (void)rz_analysis_esil_parse (ESIL, esilstr); // looks like ^C is handled by esil_parse !!!! - //rz_anal_esil_dumpstack (ESIL); - //rz_anal_esil_stack_free (ESIL); + //rz_analysis_esil_dumpstack (ESIL); + //rz_analysis_esil_stack_free (ESIL); switch (op.type) { case RZ_ANAL_OP_TYPE_LEA: // arm64 - if (core->anal->cur && arch == RZ_ARCH_ARM64) { + if (core->analysis->cur && arch == RZ_ARCH_ARM64) { if (CHECKREF (ESIL->cur)) { - rz_anal_xrefs_set (core->anal, cur, ESIL->cur, RZ_ANAL_REF_TYPE_STRING); + rz_analysis_xrefs_set (core->analysis, cur, ESIL->cur, RZ_ANAL_REF_TYPE_STRING); } } else if ((target && op.ptr == ntarget) || !target) { if (CHECKREF (ESIL->cur)) { - if (op.ptr && rz_io_is_valid_offset (core->io, op.ptr, !core->anal->opt.noncode)) { - rz_anal_xrefs_set (core->anal, cur, op.ptr, RZ_ANAL_REF_TYPE_STRING); + if (op.ptr && rz_io_is_valid_offset (core->io, op.ptr, !core->analysis->opt.noncode)) { + rz_analysis_xrefs_set (core->analysis, cur, op.ptr, RZ_ANAL_REF_TYPE_STRING); } else { - rz_anal_xrefs_set (core->anal, cur, ESIL->cur, RZ_ANAL_REF_TYPE_STRING); + rz_analysis_xrefs_set (core->analysis, cur, ESIL->cur, RZ_ANAL_REF_TYPE_STRING); } } } @@ -5305,18 +5305,18 @@ RZ_API void rz_core_anal_esil(RzCore *core, const char *str, const char *target) break; case RZ_ANAL_OP_TYPE_ADD: /* TODO: test if this is valid for other archs too */ - if (core->anal->cur && archIsArm) { + if (core->analysis->cur && archIsArm) { /* This code is known to work on Thumb, ARM and ARM64 */ ut64 dst = ESIL->cur; if ((target && dst == ntarget) || !target) { if (CHECKREF (dst)) { - rz_anal_xrefs_set (core->anal, cur, dst, RZ_ANAL_REF_TYPE_DATA); + rz_analysis_xrefs_set (core->analysis, cur, dst, RZ_ANAL_REF_TYPE_DATA); } } if (cfg_anal_strings) { add_string_ref (core, op.addr, dst); } - } else if ((core->anal->bits == 32 && core->anal->cur && arch == RZ_ARCH_MIPS)) { + } else if ((core->analysis->bits == 32 && core->analysis->cur && arch == RZ_ARCH_MIPS)) { ut64 dst = ESIL->cur; if (!op.src[0] || !op.src[0]->reg || !op.src[0]->reg->name) { break; @@ -5332,19 +5332,19 @@ RZ_API void rz_core_anal_esil(RzCore *core, const char *str, const char *target) RzFlagItem *f; char *str; if (CHECKREF (dst) || CHECKREF (cur)) { - rz_anal_xrefs_set (core->anal, cur, dst, RZ_ANAL_REF_TYPE_DATA); + rz_analysis_xrefs_set (core->analysis, cur, dst, RZ_ANAL_REF_TYPE_DATA); if (cfg_anal_strings) { add_string_ref (core, op.addr, dst); } if ((f = rz_core_flag_get_by_spaces (core->flags, dst))) { - rz_meta_set_string (core->anal, RZ_META_TYPE_COMMENT, cur, f->name); + rz_meta_set_string (core->analysis, RZ_META_TYPE_COMMENT, cur, f->name); } else if ((str = is_string_at (mycore, dst, NULL))) { char *str2 = sdb_fmt ("esilref: '%s'", str); // HACK avoid format string inside string used later as format // string crashes disasm inside agf under some conditions. // https://github.com/rizinorg/rizin/issues/6937 rz_str_replace_char (str2, '%', '&'); - rz_meta_set_string (core->anal, RZ_META_TYPE_COMMENT, cur, str2); + rz_meta_set_string (core->analysis, RZ_META_TYPE_COMMENT, cur, str2); free (str); } } @@ -5357,7 +5357,7 @@ RZ_API void rz_core_anal_esil(RzCore *core, const char *str, const char *target) ut64 dst = esilbreak_last_read; if (dst != UT64_MAX && CHECKREF (dst)) { if (myvalid (mycore->io, dst)) { - rz_anal_xrefs_set (core->anal, cur, dst, RZ_ANAL_REF_TYPE_DATA); + rz_analysis_xrefs_set (core->analysis, cur, dst, RZ_ANAL_REF_TYPE_DATA); if (cfg_anal_strings) { add_string_ref (core, op.addr, dst); } @@ -5366,7 +5366,7 @@ RZ_API void rz_core_anal_esil(RzCore *core, const char *str, const char *target) dst = esilbreak_last_data; if (dst != UT64_MAX && CHECKREF (dst)) { if (myvalid (mycore->io, dst)) { - rz_anal_xrefs_set (core->anal, cur, dst, RZ_ANAL_REF_TYPE_DATA); + rz_analysis_xrefs_set (core->analysis, cur, dst, RZ_ANAL_REF_TYPE_DATA); if (cfg_anal_strings) { add_string_ref (core, op.addr, dst); } @@ -5379,7 +5379,7 @@ RZ_API void rz_core_anal_esil(RzCore *core, const char *str, const char *target) ut64 dst = op.jump; if (CHECKREF (dst)) { if (myvalid (core->io, dst)) { - rz_anal_xrefs_set (core->anal, cur, dst, RZ_ANAL_REF_TYPE_CODE); + rz_analysis_xrefs_set (core->analysis, cur, dst, RZ_ANAL_REF_TYPE_CODE); } } } @@ -5389,7 +5389,7 @@ RZ_API void rz_core_anal_esil(RzCore *core, const char *str, const char *target) ut64 dst = op.jump; if (CHECKREF (dst)) { if (myvalid (core->io, dst)) { - rz_anal_xrefs_set (core->anal, cur, dst, RZ_ANAL_REF_TYPE_CALL); + rz_analysis_xrefs_set (core->analysis, cur, dst, RZ_ANAL_REF_TYPE_CALL); } ESIL->old = cur + op.size; getpcfromstack (core, ESIL); @@ -5403,18 +5403,18 @@ RZ_API void rz_core_anal_esil(RzCore *core, const char *str, const char *target) case RZ_ANAL_OP_TYPE_IRCALL: case RZ_ANAL_OP_TYPE_MJMP: { - ut64 dst = core->anal->esil->jump_target; + ut64 dst = core->analysis->esil->jump_target; if (dst == 0 || dst == UT64_MAX) { - dst = rz_reg_getv (core->anal->reg, pcname); + dst = rz_reg_getv (core->analysis->reg, pcname); } if (CHECKREF (dst)) { if (myvalid (core->io, dst)) { - RzAnalRefType ref = + RzAnalysisRefType ref = (op.type & RZ_ANAL_OP_TYPE_MASK) == RZ_ANAL_OP_TYPE_UCALL ? RZ_ANAL_REF_TYPE_CALL : RZ_ANAL_REF_TYPE_CODE; - rz_anal_xrefs_set (core->anal, cur, dst, ref); - rz_core_anal_fcn (core, dst, UT64_MAX, RZ_ANAL_REF_TYPE_NULL, 1); + rz_analysis_xrefs_set (core->analysis, cur, dst, ref); + rz_core_analysis_fcn (core, dst, UT64_MAX, RZ_ANAL_REF_TYPE_NULL, 1); // analyze function here #if 0 if (op.type == RZ_ANAL_OP_TYPE_UCALL || op.type == RZ_ANAL_OP_TYPE_RCALL) { @@ -5428,7 +5428,7 @@ RZ_API void rz_core_anal_esil(RzCore *core, const char *str, const char *target) default: break; } - rz_anal_esil_stack_free (ESIL); + rz_analysis_esil_stack_free (ESIL); repeat:; } while (get_next_i (&ictx, &i)); free (buf); @@ -5436,10 +5436,10 @@ repeat:; ESIL->cb.hook_mem_write = NULL; ESIL->cb.hook_reg_write = NULL; ESIL->user = NULL; - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); rz_cons_break_pop (); // restore register - rz_reg_arena_pop (core->anal->reg); + rz_reg_arena_pop (core->analysis->reg); } static bool isValidAddress (RzCore *core, ut64 addr) { @@ -5491,8 +5491,8 @@ RZ_API int rz_core_search_value_in_range(RzCore *core, RzInterval search_itv, ut return -1; } bool maybeThumb = false; - if (align && core->anal->cur && core->anal->cur->arch) { - if (!strcmp (core->anal->cur->arch, "arm") && core->anal->bits != 64) { + if (align && core->analysis->cur && core->analysis->cur->arch) { + if (!strcmp (core->analysis->cur->arch, "arm") && core->analysis->bits != 64) { maybeThumb = true; } } @@ -5551,11 +5551,11 @@ RZ_API int rz_core_search_value_in_range(RzCore *core, RzInterval search_itv, ut } if (match && !vinfun) { if (vinfunr) { - if (rz_anal_get_fcn_in_bounds (core->anal, addr, RZ_ANAL_FCN_TYPE_NULL)) { + if (rz_analysis_get_fcn_in_bounds (core->analysis, addr, RZ_ANAL_FCN_TYPE_NULL)) { match = false; } } else { - if (rz_anal_get_fcn_in (core->anal, addr, RZ_ANAL_FCN_TYPE_NULL)) { + if (rz_analysis_get_fcn_in (core->analysis, addr, RZ_ANAL_FCN_TYPE_NULL)) { match = false; } } @@ -5594,10 +5594,10 @@ typedef struct { RzList *path; RzCore *core; ut64 from; - RzAnalBlock *fromBB; + RzAnalysisBlock *fromBB; ut64 to; - RzAnalBlock *toBB; - RzAnalBlock *cur; + RzAnalysisBlock *toBB; + RzAnalysisBlock *cur; bool followCalls; int followDepth; int count; // max number of results @@ -5605,7 +5605,7 @@ typedef struct { static bool printAnalPaths(RzCoreAnalPaths *p, PJ *pj) { RzListIter *iter; - RzAnalBlock *path; + RzAnalysisBlock *path; if (pj) { pj_a (pj); } else { @@ -5634,13 +5634,13 @@ static void analPathFollow(RzCoreAnalPaths *p, ut64 addr, PJ *pj) { return; } if (!dict_get (&p->visited, addr)) { - p->cur = rz_anal_bb_from_offset (p->core->anal, addr); + p->cur = rz_analysis_bb_from_offset (p->core->analysis, addr); analPaths (p, pj); } } static void analPaths(RzCoreAnalPaths *p, PJ *pj) { - RzAnalBlock *cur = p->cur; + RzAnalysisBlock *cur = p->cur; if (!cur) { // eprintf ("eof\n"); return; @@ -5659,7 +5659,7 @@ static void analPaths(RzCoreAnalPaths *p, PJ *pj) { return; } } else { - RzAnalBlock *c = cur; + RzAnalysisBlock *c = cur; ut64 j = cur->jump; ut64 f = cur->fail; analPathFollow (p, j, pj); @@ -5669,12 +5669,12 @@ static void analPaths(RzCoreAnalPaths *p, PJ *pj) { int i; for (i = 0; i < cur->op_pos_size; i++) { ut64 addr = cur->addr + cur->op_pos[i]; - RzAnalOp *op = rz_core_anal_op (p->core, addr, RZ_ANAL_OP_MASK_BASIC); + RzAnalysisOp *op = rz_core_analysis_op (p->core, addr, RZ_ANAL_OP_MASK_BASIC); if (op && op->type == RZ_ANAL_OP_TYPE_CALL) { analPathFollow (p, op->jump, pj); } cur = c; - rz_anal_op_free (op); + rz_analysis_op_free (op); } } } @@ -5685,9 +5685,9 @@ static void analPaths(RzCoreAnalPaths *p, PJ *pj) { } } -RZ_API void rz_core_anal_paths(RzCore *core, ut64 from, ut64 to, bool followCalls, int followDepth, bool is_json) { - RzAnalBlock *b0 = rz_anal_bb_from_offset (core->anal, from); - RzAnalBlock *b1 = rz_anal_bb_from_offset (core->anal, to); +RZ_API void rz_core_analysis_paths(RzCore *core, ut64 from, ut64 to, bool followCalls, int followDepth, bool is_json) { + RzAnalysisBlock *b0 = rz_analysis_bb_from_offset (core->analysis, from); + RzAnalysisBlock *b1 = rz_analysis_bb_from_offset (core->analysis, to); PJ *pj = NULL; if (!b0) { eprintf ("Cannot find basic block for 0x%08"PFMT64x"\n", from); @@ -5748,7 +5748,7 @@ static int __addrs_cmp(void *_a, void *_b) { return 0; } -RZ_API void rz_core_anal_inflags(RzCore *core, const char *glob) { +RZ_API void rz_core_analysis_inflags(RzCore *core, const char *glob) { RzList *addrs = rz_list_newf (free); RzListIter *iter; bool a2f = rz_config_get_i (core->config, "anal.a2f"); @@ -5780,7 +5780,7 @@ RZ_API void rz_core_anal_inflags(RzCore *core, const char *glob) { continue; } st64 sz = a1 - a0; - if (sz < 1 || sz > core->anal->opt.bb_max_size) { + if (sz < 1 || sz > core->analysis->opt.bb_max_size) { eprintf ("Warning: invalid flag range from 0x%08"PFMT64x" to 0x%08"PFMT64x"\n", a0, a1); continue; } @@ -5790,7 +5790,7 @@ RZ_API void rz_core_anal_inflags(RzCore *core, const char *glob) { rz_core_cmdf (core, "afb+ %s %s %d", addr, addr, (int)sz); } else { rz_core_cmdf (core, "aab@%s!%s-%s\n", addr, addr2, addr); - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, rz_num_math (core->num, addr), 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, rz_num_math (core->num, addr), 0); if (fcn) { eprintf ("%s %s %"PFMT64d" # %s\n", addr, "af", sz, fcn->name); } else { @@ -5799,7 +5799,7 @@ RZ_API void rz_core_anal_inflags(RzCore *core, const char *glob) { } else { rz_core_cmdf (core, "af@%s!%s-%s\n", addr, addr2, addr); } - fcn = rz_anal_get_fcn_in (core->anal, rz_num_math (core->num, addr), 0); + fcn = rz_analysis_get_fcn_in (core->analysis, rz_num_math (core->num, addr), 0); eprintf ("%s %s %.4"PFMT64d" # %s\n", addr, "aab", sz, fcn?fcn->name: ""); } } @@ -5809,17 +5809,17 @@ RZ_API void rz_core_anal_inflags(RzCore *core, const char *glob) { free (anal_in); } -static bool analyze_noreturn_function(RzCore *core, RzAnalFunction *f) { +static bool analyze_noreturn_function(RzCore *core, RzAnalysisFunction *f) { RzListIter *iter; - RzAnalBlock *bb; + RzAnalysisBlock *bb; rz_list_foreach (f->bbs, iter, bb) { - ut64 opaddr = rz_anal_bb_opaddr_i (bb, bb->ninstr - 1); + ut64 opaddr = rz_analysis_bb_opaddr_i (bb, bb->ninstr - 1); if (opaddr == UT64_MAX) { return false; } // get last opcode - RzAnalOp *op = rz_core_op_anal (core, opaddr, RZ_ANAL_OP_MASK_HINT); + RzAnalysisOp *op = rz_core_op_anal (core, opaddr, RZ_ANAL_OP_MASK_HINT); if (!op) { eprintf ("Cannot analyze opcode at 0x%08" PFMT64x "\n", opaddr); return false; @@ -5828,21 +5828,21 @@ static bool analyze_noreturn_function(RzCore *core, RzAnalFunction *f) { switch (op->type & RZ_ANAL_OP_TYPE_MASK) { case RZ_ANAL_OP_TYPE_ILL: case RZ_ANAL_OP_TYPE_RET: - rz_anal_op_free (op); + rz_analysis_op_free (op); return false; case RZ_ANAL_OP_TYPE_JMP: - if (!rz_anal_function_contains (f, op->jump)) { - rz_anal_op_free (op); + if (!rz_analysis_function_contains (f, op->jump)) { + rz_analysis_op_free (op); return false; } break; } - rz_anal_op_free (op); + rz_analysis_op_free (op); } return true; } -RZ_API void rz_core_anal_propagate_noreturn(RzCore *core, ut64 addr) { +RZ_API void rz_core_analysis_propagate_noreturn(RzCore *core, ut64 addr) { RzList *todo = rz_list_newf (free); if (!todo) { return; @@ -5854,9 +5854,9 @@ RZ_API void rz_core_anal_propagate_noreturn(RzCore *core, ut64 addr) { return; } - RzAnalFunction *request_fcn = NULL; + RzAnalysisFunction *request_fcn = NULL; if (addr != UT64_MAX) { - request_fcn = rz_anal_get_function_at (core->anal, addr); + request_fcn = rz_analysis_get_function_at (core->analysis, addr); if (!request_fcn) { rz_list_free (todo); ht_uu_free (done); @@ -5866,8 +5866,8 @@ RZ_API void rz_core_anal_propagate_noreturn(RzCore *core, ut64 addr) { // find known noreturn functions to propagate RzListIter *iter; - RzAnalFunction *f; - rz_list_foreach (core->anal->fcns, iter, f) { + RzAnalysisFunction *f; + rz_list_foreach (core->analysis->fcns, iter, f) { if (f->is_noreturn) { ut64 *n = ut64_new (f->addr); rz_list_append (todo, n); @@ -5881,37 +5881,37 @@ RZ_API void rz_core_anal_propagate_noreturn(RzCore *core, ut64 addr) { if (rz_cons_is_breaked ()) { break; } - RzList *xrefs = rz_anal_xrefs_get (core->anal, noret_addr); - RzAnalRef *xref; + RzList *xrefs = rz_analysis_xrefs_get (core->analysis, noret_addr); + RzAnalysisRef *xref; rz_list_foreach (xrefs, iter, xref) { - RzAnalOp *xrefop = rz_core_op_anal (core, xref->addr, RZ_ANAL_OP_MASK_ALL); + RzAnalysisOp *xrefop = rz_core_op_anal (core, xref->addr, RZ_ANAL_OP_MASK_ALL); if (!xrefop) { eprintf ("Cannot analyze opcode at 0x%08" PFMT64x "\n", xref->addr); continue; } ut64 call_addr = xref->addr; ut64 chop_addr = call_addr + xrefop->size; - rz_anal_op_free (xrefop); + rz_analysis_op_free (xrefop); if (xref->type != RZ_ANAL_REF_TYPE_CALL) { continue; } // Find the block that has an instruction at exactly the xref addr - RzList *blocks = rz_anal_get_blocks_in (core->anal, call_addr); + RzList *blocks = rz_analysis_get_blocks_in (core->analysis, call_addr); if (!blocks) { continue; } - RzAnalBlock *block = NULL; + RzAnalysisBlock *block = NULL; RzListIter *bit; - RzAnalBlock *block_cur; + RzAnalysisBlock *block_cur; rz_list_foreach (blocks, bit, block_cur) { - if (rz_anal_block_op_starts_at (block_cur, call_addr)) { + if (rz_analysis_block_op_starts_at (block_cur, call_addr)) { block = block_cur; break; } } if (block) { - rz_anal_block_ref (block); + rz_analysis_block_ref (block); } rz_list_free (blocks); if (!block) { @@ -5925,8 +5925,8 @@ RZ_API void rz_core_anal_propagate_noreturn(RzCore *core, ut64 addr) { goto kontinue; } } else { - // rz_anal_block_chop_noreturn() might free the block! - block = rz_anal_block_chop_noreturn (block, chop_addr); + // rz_analysis_block_chop_noreturn() might free the block! + block = rz_analysis_block_chop_noreturn (block, chop_addr); } RzListIter *fit; @@ -5934,7 +5934,7 @@ RZ_API void rz_core_anal_propagate_noreturn(RzCore *core, ut64 addr) { bool found = ht_uu_find (done, f->addr, NULL) != 0; if (f->addr && !found && analyze_noreturn_function (core, f)) { f->is_noreturn = true; - rz_anal_noreturn_add (core->anal, NULL, f->addr); + rz_analysis_noreturn_add (core->analysis, NULL, f->addr); ut64 *n = malloc (sizeof (ut64)); *n = f->addr; rz_list_append (todo, n); @@ -5943,7 +5943,7 @@ RZ_API void rz_core_anal_propagate_noreturn(RzCore *core, ut64 addr) { } kontinue: if (block) { - rz_anal_block_unref (block); + rz_analysis_block_unref (block); } rz_list_free (block_fcns); } @@ -5953,14 +5953,14 @@ kontinue: ht_uu_free (done); } -RZ_API void rz_core_anal_esil_graph(RzCore *core, const char *expr) { - RzAnalEsilDFG * edf = rz_anal_esil_dfg_expr(core->anal, NULL, expr); +RZ_API void rz_core_analysis_esil_graph(RzCore *core, const char *expr) { + RzAnalysisEsilDFG * edf = rz_analysis_esil_dfg_expr(core->analysis, NULL, expr); RzListIter *iter, *ator; RzGraphNode *node, *edon; RzStrBuf *buf = rz_strbuf_new (""); rz_cons_printf ("ag-\n"); rz_list_foreach (rz_graph_get_nodes (edf->flow), iter, node) { - const RzAnalEsilDFGNode *enode = (RzAnalEsilDFGNode *)node->data; + const RzAnalysisEsilDFGNode *enode = (RzAnalysisEsilDFGNode *)node->data; char *esc_str = rz_str_escape (rz_strbuf_get (enode->content)); rz_strbuf_set (buf, esc_str); if (enode->type == RZ_ANAL_ESIL_DFG_BLOCK_GENERATIVE) { @@ -5974,12 +5974,12 @@ RZ_API void rz_core_anal_esil_graph(RzCore *core, const char *expr) { rz_strbuf_free (buf); rz_list_foreach (rz_graph_get_nodes (edf->flow), iter, node) { - const RzAnalEsilDFGNode *enode = (RzAnalEsilDFGNode *)node->data; + const RzAnalysisEsilDFGNode *enode = (RzAnalysisEsilDFGNode *)node->data; rz_list_foreach (rz_graph_get_neighbours (edf->flow, node), ator, edon) { - const RzAnalEsilDFGNode *edone = (RzAnalEsilDFGNode *)edon->data; + const RzAnalysisEsilDFGNode *edone = (RzAnalysisEsilDFGNode *)edon->data; rz_cons_printf ("age %d %d\n", enode->idx, edone->idx); } } - rz_anal_esil_dfg_free (edf); + rz_analysis_esil_dfg_free (edf); } diff --git a/librz/core/carg.c b/librz/core/carg.c index a1794f6ab0..cdce71fc23 100644 --- a/librz/core/carg.c +++ b/librz/core/carg.c @@ -4,11 +4,11 @@ #define MAXSTRLEN 50 -static void set_fcn_args_info(RzAnalFuncArg *arg, RzAnal *anal, const char *fcn_name, const char *cc, int arg_num) { - if (!fcn_name || !arg || !anal) { +static void set_fcn_args_info(RzAnalysisFuncArg *arg, RzAnalysis *analysis, const char *fcn_name, const char *cc, int arg_num) { + if (!fcn_name || !arg || !analysis) { return; } - Sdb *TDB = anal->sdb_types; + Sdb *TDB = analysis->sdb_types; arg->name = rz_type_func_args_name (TDB, fcn_name, arg_num); arg->orig_c_type = rz_type_func_args_type (TDB, fcn_name, arg_num); if (!arg->name || !arg->orig_c_type) { @@ -24,23 +24,23 @@ static void set_fcn_args_info(RzAnalFuncArg *arg, RzAnal *anal, const char *fcn_ arg->fmt = sdb_const_get (TDB, query, 0); const char *t_query = sdb_fmt ("type.%s.size", arg->c_type); arg->size = sdb_num_get (TDB, t_query, 0) / 8; - arg->cc_source = rz_anal_cc_arg (anal, cc, arg_num); + arg->cc_source = rz_analysis_cc_arg (analysis, cc, arg_num); } -RZ_API char *resolve_fcn_name(RzAnal *anal, const char *func_name) { +RZ_API char *resolve_fcn_name(RzAnalysis *analysis, const char *func_name) { const char *str = func_name; const char *name = func_name; - if (rz_type_func_exist (anal->sdb_types, func_name)) { + if (rz_type_func_exist (analysis->sdb_types, func_name)) { return strdup (func_name); } while ((str = strchr (str, '.'))) { name = str + 1; str++; } - if (rz_type_func_exist (anal->sdb_types, name)) { + if (rz_type_func_exist (analysis->sdb_types, name)) { return strdup (name); } - return rz_type_func_guess (anal->sdb_types, (char*)func_name); + return rz_type_func_guess (analysis->sdb_types, (char*)func_name); } static ut64 get_buf_val(ut8 *buf, int endian, int width) { @@ -61,7 +61,7 @@ static void print_format_values(RzCore *core, const char *fmt, bool onstack, ut6 ut64 bval = src; int i; int endian = core->print->big_endian; - int width = (core->anal->bits == 64)? 8: 4; + int width = (core->analysis->bits == 64)? 8: 4; int bsize = RZ_MIN (64, core->blocksize); ut8 *buf = malloc (bsize); @@ -147,28 +147,28 @@ static void print_format_values(RzCore *core, const char *fmt, bool onstack, ut6 RZ_API void rz_core_print_func_args(RzCore *core) { RzListIter *iter; bool color = rz_config_get_i (core->config, "scr.color"); - if (!core->anal) { + if (!core->analysis) { return; } - if (!core->anal->reg) { + if (!core->analysis->reg) { return; } - const char *pc = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_PC); - ut64 cur_addr = rz_reg_getv (core->anal->reg, pc); - RzAnalOp *op = rz_core_anal_op (core, cur_addr, RZ_ANAL_OP_MASK_BASIC); + const char *pc = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_PC); + ut64 cur_addr = rz_reg_getv (core->analysis->reg, pc); + RzAnalysisOp *op = rz_core_analysis_op (core, cur_addr, RZ_ANAL_OP_MASK_BASIC); if (!op) { return; } if (op->type == RZ_ANAL_OP_TYPE_CALL) { - RzAnalFunction *fcn; - RzAnalFuncArg *arg; + RzAnalysisFunction *fcn; + RzAnalysisFuncArg *arg; bool onstack = false; const char *fcn_name = NULL; ut64 pcv = op->jump; if (pcv == UT64_MAX) { pcv = op->ptr; } - fcn = rz_anal_get_function_at (core->anal, pcv); + fcn = rz_analysis_get_function_at (core->analysis, pcv); if (fcn) { fcn_name = fcn->name; } else { @@ -205,10 +205,10 @@ RZ_API void rz_core_print_func_args(RzCore *core) { //} } } - rz_anal_op_fini (op); + rz_analysis_op_fini (op); } -static void rz_anal_fcn_arg_free(RzAnalFuncArg *arg) { +static void rz_analysis_fcn_arg_free(RzAnalysisFuncArg *arg) { if (!arg) { return; } @@ -216,47 +216,47 @@ static void rz_anal_fcn_arg_free(RzAnalFuncArg *arg) { free (arg); } -/* Returns a list of RzAnalFuncArg */ +/* Returns a list of RzAnalysisFuncArg */ RZ_API RzList *rz_core_get_func_args(RzCore *core, const char *fcn_name) { - if (!fcn_name || !core->anal) { + if (!fcn_name || !core->analysis) { return NULL; } - Sdb *TDB = core->anal->sdb_types; - RzList *list = rz_list_newf ((RzListFree)rz_anal_fcn_arg_free); - char *key = resolve_fcn_name (core->anal, fcn_name); + Sdb *TDB = core->analysis->sdb_types; + RzList *list = rz_list_newf ((RzListFree)rz_analysis_fcn_arg_free); + char *key = resolve_fcn_name (core->analysis, fcn_name); if (!key) { return NULL; } - const char *sp = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_SP); + const char *sp = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_SP); int nargs = rz_type_func_args_count (TDB, key); - if (!rz_anal_cc_func (core->anal, key)){ + if (!rz_analysis_cc_func (core->analysis, key)){ return NULL; } - char *cc = strdup (rz_anal_cc_func (core->anal, key)); - const char *src = rz_anal_cc_arg (core->anal, cc, 0); // src of first argument + char *cc = strdup (rz_analysis_cc_func (core->analysis, key)); + const char *src = rz_analysis_cc_arg (core->analysis, cc, 0); // src of first argument if (!cc) { // unsupported calling convention free (key); return NULL; } int i; - ut64 spv = rz_reg_getv (core->anal->reg, sp); - ut64 s_width = (core->anal->bits == 64)? 8: 4; + ut64 spv = rz_reg_getv (core->analysis->reg, sp); + ut64 s_width = (core->analysis->bits == 64)? 8: 4; if (src && !strcmp (src, "stack_rev")) { for (i = nargs - 1; i >= 0; i--) { - RzAnalFuncArg *arg = RZ_NEW0 (RzAnalFuncArg); - set_fcn_args_info (arg, core->anal, key, cc, i); + RzAnalysisFuncArg *arg = RZ_NEW0 (RzAnalysisFuncArg); + set_fcn_args_info (arg, core->analysis, key, cc, i); arg->src = spv; spv += arg->size? arg->size : s_width; rz_list_append (list, arg); } } else { for (i = 0; i < nargs; i++) { - RzAnalFuncArg *arg = RZ_NEW0 (RzAnalFuncArg); + RzAnalysisFuncArg *arg = RZ_NEW0 (RzAnalysisFuncArg); if (!arg) { return NULL; } - set_fcn_args_info (arg, core->anal, key, cc, i); + set_fcn_args_info (arg, core->analysis, key, cc, i); if (src && !strncmp (src, "stack", 5)) { arg->src = spv; if (!arg->size) { @@ -266,10 +266,10 @@ RZ_API RzList *rz_core_get_func_args(RzCore *core, const char *fcn_name) { } else { const char *cs = arg->cc_source; if (!cs) { - cs = rz_anal_cc_default (core->anal); + cs = rz_analysis_cc_default (core->analysis); } if (cs) { - arg->src = rz_reg_getv (core->anal->reg, cs); + arg->src = rz_reg_getv (core->analysis->reg, cs); } } rz_list_append (list, arg); diff --git a/librz/core/casm.c b/librz/core/casm.c index 2436cae047..4645b1872d 100644 --- a/librz/core/casm.c +++ b/librz/core/casm.c @@ -137,9 +137,9 @@ RZ_API RzList *rz_core_asm_strsearch(RzCore *core, const char *input, ut64 from, } rz_asm_set_pc (core->rasm, addr); if (mode == 'i') { - RzAnalOp analop = {0}; + RzAnalysisOp analop = {0}; ut64 len = RZ_MIN (15, core->blocksize - idx); - if (rz_anal_op (core->anal, &analop, addr, buf + idx, len, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_DISASM) < 1) { + if (rz_analysis_op (core->analysis, &analop, addr, buf + idx, len, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_DISASM) < 1) { idx ++; // TODO: honor mininstrsz continue; } @@ -173,18 +173,18 @@ RZ_API RzList *rz_core_asm_strsearch(RzCore *core, const char *input, ut64 from, rz_list_append (hits, hit); continue; } - rz_anal_op_fini (&analop); + rz_analysis_op_fini (&analop); idx ++; // TODO: honor mininstrsz continue; } else if (mode == 'e') { - RzAnalOp analop = {0}; - if (rz_anal_op (core->anal, &analop, addr, buf + idx, 15, RZ_ANAL_OP_MASK_ESIL) < 1) { + RzAnalysisOp analop = {0}; + if (rz_analysis_op (core->analysis, &analop, addr, buf + idx, 15, RZ_ANAL_OP_MASK_ESIL) < 1) { idx ++; // TODO: honor mininstrsz continue; } //opsz = analop.size; opst = strdup (rz_strbuf_get (&analop.esil)); - rz_anal_op_fini (&analop); + rz_analysis_op_fini (&analop); } else { if (!(len = rz_asm_disassemble ( core->rasm, &op, diff --git a/librz/core/cautocmpl.c b/librz/core/cautocmpl.c index 901fe212e9..892f946961 100644 --- a/librz/core/cautocmpl.c +++ b/librz/core/cautocmpl.c @@ -189,7 +189,7 @@ static void autocmplt_cmd_arg_num(RzCore *core, RzLineNSCompletionResult *res, c } static void autocmplt_cmd_arg_zign_space(RzCore *core, RzLineNSCompletionResult *res, const char *s, size_t len) { - RzSpaces *zs = &core->anal->zign_spaces; + RzSpaces *zs = &core->analysis->zign_spaces; RzSpace *space; RzSpaceIter it; @@ -206,9 +206,9 @@ static void autocmplt_cmd_arg_zign_space(RzCore *core, RzLineNSCompletionResult static void autocmplt_cmd_arg_fcn(RzCore *core, RzLineNSCompletionResult *res, const char *s, size_t len) { RzListIter *iter; - RzAnalFunction *fcn; - rz_list_foreach (core->anal->fcns, iter, fcn) { - char *name = rz_core_anal_fcn_name (core, fcn); + RzAnalysisFunction *fcn; + rz_list_foreach (core->analysis->fcns, iter, fcn) { + char *name = rz_core_analysis_fcn_name (core, fcn); if (!strncmp (name, s, len)) { rz_line_ns_completion_result_add (res, name); } diff --git a/librz/core/cbin.c b/librz/core/cbin.c index 1b23e1b939..e46c2ed5c4 100644 --- a/librz/core/cbin.c +++ b/librz/core/cbin.c @@ -196,14 +196,14 @@ RZ_API void rz_core_bin_export_info(RzCore *core, int mode) { } else if (IS_MODE_SET (mode)) { char *code = rz_str_newf ("%s;", v); char *error_msg = NULL; - char *out = rz_parse_c_string (core->anal, code, &error_msg); + char *out = rz_parse_c_string (core->analysis, code, &error_msg); free (code); if (error_msg) { eprintf ("%s", error_msg); free (error_msg); } if (out) { - rz_anal_save_parsed_type (core->anal, out); + rz_analysis_save_parsed_type (core->analysis, out); free (out); } } @@ -429,7 +429,7 @@ static void _print_strings(RzCore *r, RzList *list, int mode, int va) { if (rz_cons_is_breaked ()) { break; } - rz_meta_set (r->anal, RZ_META_TYPE_STRING, vaddr, string->size, string->string); + rz_meta_set (r->analysis, RZ_META_TYPE_STRING, vaddr, string->size, string->string); f_name = strdup (string->string); rz_name_filter (f_name, -1); if (r->bin->prefix) { @@ -685,11 +685,11 @@ static void sdb_concat_by_path(Sdb *s, const char *path) { sdb_free (db); } -RZ_API void rz_core_anal_type_init(RzCore *core) { - rz_return_if_fail (core && core->anal); +RZ_API void rz_core_analysis_type_init(RzCore *core) { + rz_return_if_fail (core && core->analysis); const char *dir_prefix = rz_config_get (core->config, "dir.prefix"); int bits = core->rasm->bits; - Sdb *types = core->anal->sdb_types; + Sdb *types = core->analysis->sdb_types; // make sure they are empty this is initializing sdb_reset (types); const char *anal_arch = rz_config_get (core->config, "anal.arch"); @@ -737,11 +737,11 @@ RZ_API void rz_core_anal_type_init(RzCore *core) { } } -RZ_API void rz_core_anal_cc_init(RzCore *core) { +RZ_API void rz_core_analysis_cc_init(RzCore *core) { const char *dir_prefix = rz_config_get (core->config, "dir.prefix"); const char *anal_arch = rz_config_get (core->config, "anal.arch"); - int bits = core->anal->bits; - Sdb *cc = core->anal->sdb_cc; + int bits = core->analysis->bits; + Sdb *cc = core->analysis->sdb_cc; char *dbpath = rz_str_newf (RZ_JOIN_3_PATHS ("%s", RZ_SDB_FCNSIGN, "cc-%s-%d.sdb"), dir_prefix, anal_arch, bits); @@ -764,16 +764,16 @@ RZ_API void rz_core_anal_cc_init(RzCore *core) { cc->path = strdup (dbhomepath); } // same as "tcc `arcc`" - char *s = rz_reg_profile_to_cc (core->anal->reg); + char *s = rz_reg_profile_to_cc (core->analysis->reg); if (s) { - if (!rz_anal_cc_set (core->anal, s)) { + if (!rz_analysis_cc_set (core->analysis, s)) { eprintf ("Warning: Invalid CC from reg profile.\n"); } free (s); } else { eprintf ("Warning: Cannot derive CC from reg profile.\n"); } - if (sdb_isempty (core->anal->sdb_cc)) { + if (sdb_isempty (core->analysis->sdb_cc)) { eprintf ("Warning: Missing calling conventions for '%s'. Deriving it from the regprofile.\n", anal_arch); } free (dbpath); @@ -831,14 +831,14 @@ static int bin_info(RzCore *r, int mode, ut64 laddr) { rz_config_set (r->config, "asm.bits", str); rz_config_set (r->config, "asm.dwarf", (RZ_BIN_DBG_STRIPPED & info->dbg_info) ? "false" : "true"); - v = rz_anal_archinfo (r->anal, RZ_ANAL_ARCHINFO_ALIGN); + v = rz_analysis_archinfo (r->analysis, RZ_ANAL_ARCHINFO_ALIGN); if (v != -1) { rz_config_set_i (r->config, "asm.pcalign", v); } } - rz_core_anal_type_init (r); - rz_core_anal_cc_init (r); - if (info->default_cc && rz_anal_cc_exist (r->anal, info->default_cc)) { + rz_core_analysis_type_init (r); + rz_core_analysis_cc_init (r); + if (info->default_cc && rz_analysis_cc_exist (r->analysis, info->default_cc)) { rz_core_cmdf (r, "k anal/cc/default.cc=%s", info->default_cc); } } else if (IS_MODE_SIMPLE (mode)) { @@ -849,15 +849,15 @@ static int bin_info(RzCore *r, int mode, ut64 laddr) { rz_cons_printf ("bits %d\n", info->bits); rz_cons_printf ("os %s\n", info->os); rz_cons_printf ("endian %s\n", info->big_endian? "big": "little"); - v = rz_anal_archinfo (r->anal, RZ_ANAL_ARCHINFO_MIN_OP_SIZE); + v = rz_analysis_archinfo (r->analysis, RZ_ANAL_ARCHINFO_MIN_OP_SIZE); if (v != -1) { rz_cons_printf ("minopsz %d\n", v); } - v = rz_anal_archinfo (r->anal, RZ_ANAL_ARCHINFO_MAX_OP_SIZE); + v = rz_analysis_archinfo (r->analysis, RZ_ANAL_ARCHINFO_MAX_OP_SIZE); if (v != -1) { rz_cons_printf ("maxopsz %d\n", v); } - v = rz_anal_archinfo (r->anal, RZ_ANAL_ARCHINFO_ALIGN); + v = rz_analysis_archinfo (r->analysis, RZ_ANAL_ARCHINFO_ALIGN); if (v != -1) { rz_cons_printf ("pcalign %d\n", v); } @@ -891,7 +891,7 @@ static int bin_info(RzCore *r, int mode, ut64 laddr) { if (info->default_cc) { rz_cons_printf ("k anal/cc/default.cc=%s", info->default_cc); } - v = rz_anal_archinfo (r->anal, RZ_ANAL_ARCHINFO_ALIGN); + v = rz_analysis_archinfo (r->analysis, RZ_ANAL_ARCHINFO_ALIGN); if (v != -1) { rz_cons_printf ("e asm.pcalign=%d\n", v); } @@ -943,11 +943,11 @@ static int bin_info(RzCore *r, int mode, ut64 laddr) { pair_bool ("linenum", RZ_BIN_DBG_LINENUMS & info->dbg_info, mode, false); pair_bool ("lsyms", RZ_BIN_DBG_SYMS & info->dbg_info, mode, false); pair_str ("machine", info->machine, mode, false); - v = rz_anal_archinfo (r->anal, RZ_ANAL_ARCHINFO_MAX_OP_SIZE); + v = rz_analysis_archinfo (r->analysis, RZ_ANAL_ARCHINFO_MAX_OP_SIZE); if (v != -1) { pair_int ("maxopsz", v, mode, false); } - v = rz_anal_archinfo (r->anal, RZ_ANAL_ARCHINFO_MIN_OP_SIZE); + v = rz_analysis_archinfo (r->analysis, RZ_ANAL_ARCHINFO_MIN_OP_SIZE); if (v != -1) { pair_int ("minopsz", v, mode, false); } @@ -957,7 +957,7 @@ static int bin_info(RzCore *r, int mode, ut64 laddr) { pair_bool ("overlay", info->pe_overlay, mode, false); } pair_str ("cc", info->default_cc, mode, false); - v = rz_anal_archinfo (r->anal, RZ_ANAL_ARCHINFO_ALIGN); + v = rz_analysis_archinfo (r->analysis, RZ_ANAL_ARCHINFO_ALIGN); if (v != -1) { pair_int ("pcalign", v, mode, false); } @@ -1040,7 +1040,7 @@ static int bin_info(RzCore *r, int mode, ut64 laddr) { const char *dir_prefix = rz_config_get (r->config, "dir.prefix"); char *spath = sdb_fmt ("%s/"RZ_SDB_FCNSIGN"/spec.sdb", dir_prefix); if (rz_file_exists (spath)) { - sdb_concat_by_path (r->anal->sdb_fmts, spath); + sdb_concat_by_path (r->analysis->sdb_fmts, spath); } return true; } @@ -1101,19 +1101,19 @@ static int bin_dwarf(RzCore *core, int mode) { RzBinDwarfDebugAbbrev *da = NULL; da = rz_bin_dwarf_parse_abbrev (core->bin, mode); RzBinDwarfDebugInfo *info = rz_bin_dwarf_parse_info (da, core->bin, mode); - HtUP /**/ *loc_table = rz_bin_dwarf_parse_loc (core->bin, core->anal->bits / 8); + HtUP /**/ *loc_table = rz_bin_dwarf_parse_loc (core->bin, core->analysis->bits / 8); // I suppose there is no reason the parse it for a printing purposes if (info && mode != RZ_MODE_PRINT) { /* Should we do this by default? */ - RzAnalDwarfContext ctx = { + RzAnalysisDwarfContext ctx = { .info = info, .loc = loc_table }; - rz_anal_dwarf_process_info (core->anal, &ctx); + rz_analysis_dwarf_process_info (core->analysis, &ctx); } if (loc_table) { if (mode == RZ_MODE_PRINT) { - rz_bin_dwarf_print_loc (loc_table, core->anal->bits / 8, rz_cons_printf); + rz_bin_dwarf_print_loc (loc_table, core->analysis->bits / 8, rz_cons_printf); } rz_bin_dwarf_free_loc (loc_table); } @@ -1180,7 +1180,7 @@ static int bin_dwarf(RzCore *core, int mode) { // rz_core_cmdf (core, "CL %s:%d 0x%08"PFMT64x, file, (int)row->line, row->address); #if 0 char *cmt = rz_str_newf ("%s:%d %s", file, (int)row->line, line? line: ""); - rz_meta_set_string (core->anal, RZ_META_TYPE_COMMENT, row->address, cmt); + rz_meta_set_string (core->analysis, RZ_META_TYPE_COMMENT, row->address, cmt); free (cmt); #endif } else if(IS_MODE_JSON(mode)) { @@ -1273,7 +1273,7 @@ RZ_API bool rz_core_pdb_info(RzCore *core, const char *file, int mode) { pdb.print_types (&pdb, pj, mode); pdb.print_gvars (&pdb, baddr, pj, mode); // Save compound types into SDB - rz_parse_pdb_types (core->anal, &pdb); + rz_parse_pdb_types (core->analysis, &pdb); pdb.finish_pdb_parse (&pdb); if (mode == 'j') { @@ -1423,7 +1423,7 @@ static int bin_entry(RzCore *r, int mode, ut64 laddr, int va, bool inifin) { } rz_flag_set (r->flags, str, at, 1); if (is_initfini (entry) && hvaddr != UT64_MAX) { - rz_meta_set (r->anal, RZ_META_TYPE_DATA, hvaddr, entry->bits / 8, NULL); + rz_meta_set (r->analysis, RZ_META_TYPE_DATA, hvaddr, entry->bits / 8, NULL); } } else if (IS_MODE_SIMPLE (mode)) { rz_cons_printf ("0x%08"PFMT64x"\n", at); @@ -1612,8 +1612,8 @@ static void set_bin_relocs(RzCore *r, RzBinReloc *reloc, ut64 addr, Sdb **db, ch } } } - rz_anal_hint_set_size (r->anal, reloc->vaddr, 4); - rz_meta_set (r->anal, RZ_META_TYPE_DATA, reloc->vaddr, 4, NULL); + rz_analysis_hint_set_size (r->analysis, reloc->vaddr, 4); + rz_meta_set (r->analysis, RZ_META_TYPE_DATA, reloc->vaddr, 4, NULL); } char flagname[RZ_FLAG_NAME_SIZE]; @@ -1665,7 +1665,7 @@ static void add_metadata(RzCore *r, RzBinReloc *reloc, ut64 addr, int mode) { return; } if (IS_MODE_SET (mode)) { - rz_meta_set (r->anal, RZ_META_TYPE_DATA, reloc->vaddr, cdsz, NULL); + rz_meta_set (r->analysis, RZ_META_TYPE_DATA, reloc->vaddr, cdsz, NULL); } else if (IS_MODE_RAD (mode)) { rz_cons_printf ("Cd %d @ 0x%08" PFMT64x "\n", cdsz, addr); } @@ -2021,7 +2021,7 @@ static int bin_imports(RzCore *r, int mode, int va, const char *name) { // TODO(eddyb) symbols that are imports. // Add a dword/qword for PE imports if (libname && strstr (libname, ".dll") && cdsz) { - rz_meta_set (r->anal, RZ_META_TYPE_DATA, addr, cdsz, NULL); + rz_meta_set (r->analysis, RZ_META_TYPE_DATA, addr, cdsz, NULL); } } else if (IS_MODE_SIMPLE (mode)) { rz_cons_printf ("%s%s%s\n", @@ -2208,11 +2208,11 @@ static ut64 compute_addr(RzBin *bin, ut64 paddr, ut64 vaddr, int va) { static void handle_arm_special_symbol(RzCore *core, RzBinSymbol *symbol, int va) { ut64 addr = compute_addr (core->bin, symbol->paddr, symbol->vaddr, va); if (!strcmp (symbol->name, "$a")) { - rz_anal_hint_set_bits (core->anal, addr, 32); + rz_analysis_hint_set_bits (core->analysis, addr, 32); } else if (!strcmp (symbol->name, "$x")) { - rz_anal_hint_set_bits (core->anal, addr, 64); + rz_analysis_hint_set_bits (core->analysis, addr, 64); } else if (!strcmp (symbol->name, "$t")) { - rz_anal_hint_set_bits (core->anal, addr, 16); + rz_analysis_hint_set_bits (core->analysis, addr, 16); } else if (!strcmp (symbol->name, "$d")) { // TODO: we could add data meta type at addr, but sometimes $d // is in the middle of the code and it would make the code less @@ -2239,7 +2239,7 @@ static void handle_arm_hint(RzCore *core, RzBinInfo *info, ut64 paddr, ut64 vadd force_bits = 32; } if (force_bits) { - rz_anal_hint_set_bits (core->anal, addr, force_bits); + rz_analysis_hint_set_bits (core->analysis, addr, force_bits); } } @@ -2286,7 +2286,7 @@ static int bin_symbols(RzCore *r, int mode, ut64 laddr, int va, ut64 at, const c const char *lang = bin_demangle ? rz_config_get (r->config, "bin.lang") : NULL; RzList *symbols = rz_bin_get_symbols (r->bin); - rz_spaces_push (&r->anal->meta_spaces, "bin"); + rz_spaces_push (&r->analysis->meta_spaces, "bin"); if (IS_MODE_JSON (mode) && !printHere) { pj_a (pj); @@ -2391,7 +2391,7 @@ static int bin_symbols(RzCore *r, int mode, ut64 laddr, int va, ut64 at, const c } if (sn.demname) { ut64 size = symbol->size? symbol->size: 1; - rz_meta_set (r->anal, RZ_META_TYPE_COMMENT, + rz_meta_set (r->analysis, RZ_META_TYPE_COMMENT, addr, size, sn.demname); } rz_flag_space_pop (r->flags); @@ -2531,7 +2531,7 @@ next: } pj_free (pj); - rz_spaces_pop (&r->anal->meta_spaces); + rz_spaces_pop (&r->analysis->meta_spaces); rz_table_free (table); return true; } @@ -2945,7 +2945,7 @@ static int bin_sections(RzCore *r, int mode, ut64 laddr, int va, ut64 at, const str = rz_str_newf ("[%02d] %s %s size %" PFMT64d" named %s%s%s", i, perms, type, size, pfx? pfx: "", pfx? ".": "", section->name); - rz_meta_set (r->anal, RZ_META_TYPE_COMMENT, addr, 1, str); + rz_meta_set (r->analysis, RZ_META_TYPE_COMMENT, addr, 1, str); RZ_FREE (str); } if (section->add) { @@ -4318,7 +4318,7 @@ RZ_API int rz_core_bin_update_arch_bits(RzCore *r) { binfile = rz_bin_cur (r->bin); name = binfile ? binfile->file : NULL; if (binfile && binfile->curxtr) { - rz_anal_hint_clear (r->anal); + rz_analysis_hint_clear (r->analysis); } return rz_core_bin_set_arch_bits (r, name, arch, bits); } diff --git a/librz/core/cconfig.c b/librz/core/cconfig.c index b85f85ece5..e3b5a99315 100644 --- a/librz/core/cconfig.c +++ b/librz/core/cconfig.c @@ -50,11 +50,11 @@ static void print_node_options(RzConfigNode *node) { } } -static int compareName(const RzAnalFunction *a, const RzAnalFunction *b) { +static int compareName(const RzAnalysisFunction *a, const RzAnalysisFunction *b) { return (a && b && a->name && b->name ? strcmp (a->name, b->name) : 0); } -static int compareNameLen(const RzAnalFunction *a, const RzAnalFunction *b) { +static int compareNameLen(const RzAnalysisFunction *a, const RzAnalysisFunction *b) { size_t la, lb; if (!a || !b || !a->name || !b->name) { return 0; @@ -64,27 +64,27 @@ static int compareNameLen(const RzAnalFunction *a, const RzAnalFunction *b) { return (la > lb) - (la < lb); } -static int compareAddress(const RzAnalFunction *a, const RzAnalFunction *b) { +static int compareAddress(const RzAnalysisFunction *a, const RzAnalysisFunction *b) { return (a && b && a->addr && b->addr ? (a->addr > b->addr) - (a->addr < b->addr) : 0); } -static int compareType(const RzAnalFunction *a, const RzAnalFunction *b) { +static int compareType(const RzAnalysisFunction *a, const RzAnalysisFunction *b) { return (a && b && a->diff->type && b->diff->type ? (a->diff->type > b->diff->type) - (a->diff->type < b->diff->type) : 0); } -static int compareSize(const RzAnalFunction *a, const RzAnalFunction *b) { +static int compareSize(const RzAnalysisFunction *a, const RzAnalysisFunction *b) { ut64 sa, sb; // return a && b && a->_size < b->_size; if (!a || !b) { return 0; } - sa = rz_anal_function_realsize (a); - sb = rz_anal_function_realsize (b); + sa = rz_analysis_function_realsize (a); + sb = rz_analysis_function_realsize (b); return (sa > sb) - (sa < sb); } -static int compareDist(const RzAnalFunction *a, const RzAnalFunction *b) { +static int compareDist(const RzAnalysisFunction *a, const RzAnalysisFunction *b) { return (a && b && a->diff->dist && b->diff->dist ? (a->diff->dist > b->diff->dist) - (a->diff->dist < b->diff->dist) : 0); } @@ -95,17 +95,17 @@ static bool cb_diff_sort(void *_core, void *_node) { RzCore *core = _core; if (column && strcmp (column, "?")) { if (!strcmp (column, "name")) { - core->anal->columnSort = (RzListComparator)compareName; + core->analysis->columnSort = (RzListComparator)compareName; } else if (!strcmp (column, "namelen")) { - core->anal->columnSort = (RzListComparator)compareNameLen; + core->analysis->columnSort = (RzListComparator)compareNameLen; } else if (!strcmp (column, "addr")) { - core->anal->columnSort = (RzListComparator)compareAddress; + core->analysis->columnSort = (RzListComparator)compareAddress; } else if (!strcmp (column, "type")) { - core->anal->columnSort = (RzListComparator)compareType; + core->analysis->columnSort = (RzListComparator)compareType; } else if (!strcmp (column, "size")) { - core->anal->columnSort = (RzListComparator)compareSize; + core->analysis->columnSort = (RzListComparator)compareSize; } else if (!strcmp (column, "dist")) { - core->anal->columnSort = (RzListComparator)compareDist; + core->analysis->columnSort = (RzListComparator)compareDist; } else { goto fail; } @@ -118,9 +118,9 @@ fail: static const char *has_esil(RzCore *core, const char *name) { RzListIter *iter; - RzAnalPlugin *h; - rz_return_val_if_fail (core && core->anal && name, NULL); - rz_list_foreach (core->anal->plugins, iter, h) { + RzAnalysisPlugin *h; + rz_return_val_if_fail (core && core->analysis && name, NULL); + rz_list_foreach (core->analysis->plugins, iter, h) { if (h->name && !strcmp (name, h->name)) { return h->esil? "Ae": "A_"; } @@ -229,76 +229,76 @@ static bool cb_debug_hitinfo(void *user, void *data) { static bool cb_anal_jmpretpoline(void *user, void *data) { RzCore *core = (RzCore*) user; RzConfigNode *node = (RzConfigNode*) data; - core->anal->opt.retpoline = node->i_value; + core->analysis->opt.retpoline = node->i_value; return true; } static bool cb_anal_jmptailcall(void *user, void *data) { RzCore *core = (RzCore*) user; RzConfigNode *node = (RzConfigNode*) data; - core->anal->opt.tailcall = node->i_value; + core->analysis->opt.tailcall = node->i_value; return true; } static bool cb_analarmthumb(void *user, void *data) { RzCore *core = (RzCore*) user; RzConfigNode *node = (RzConfigNode*) data; - core->anal->opt.armthumb = node->i_value; + core->analysis->opt.armthumb = node->i_value; return true; } static bool cb_analdepth(void *user, void *data) { RzCore *core = (RzCore*) user; RzConfigNode *node = (RzConfigNode*) data; - core->anal->opt.depth = node->i_value; + core->analysis->opt.depth = node->i_value; return true; } static bool cb_analgraphdepth(void *user, void *data) { RzCore *core = (RzCore *)user; RzConfigNode *node = (RzConfigNode *)data; - core->anal->opt.graph_depth = node->i_value; + core->analysis->opt.graph_depth = node->i_value; return true; } static bool cb_analafterjmp(void *user, void *data) { RzCore *core = (RzCore*) user; RzConfigNode *node = (RzConfigNode*) data; - core->anal->opt.afterjmp = node->i_value; + core->analysis->opt.afterjmp = node->i_value; return true; } static bool cb_anal_delay(void *user, void *data) { RzCore *core = (RzCore*) user; RzConfigNode *node = (RzConfigNode*) data; - core->anal->opt.delay = node->i_value; + core->analysis->opt.delay = node->i_value; return true; } static bool cb_anal_endsize(void *user, void *data) { RzCore *core = (RzCore*) user; RzConfigNode *node = (RzConfigNode*) data; - core->anal->opt.endsize = node->i_value; + core->analysis->opt.endsize = node->i_value; return true; } static bool cb_analvars(void *user, void *data) { RzCore *core = (RzCore*) user; RzConfigNode *node = (RzConfigNode*) data; - core->anal->opt.vars = node->i_value; + core->analysis->opt.vars = node->i_value; return true; } static bool cb_analvars_stackname(void *user, void *data) { RzCore *core = (RzCore *)user; RzConfigNode *node = (RzConfigNode *)data; - core->anal->opt.varname_stack = node->i_value; + core->analysis->opt.varname_stack = node->i_value; return true; } static bool cb_anal_nonull(void *user, void *data) { RzCore *core = (RzCore*) user; RzConfigNode *node = (RzConfigNode*) data; - core->anal->opt.nonull = node->i_value; + core->analysis->opt.nonull = node->i_value; return true; } @@ -314,51 +314,51 @@ static bool cb_analstrings(void *user, void *data) { static bool cb_anal_ignbithints(void *user, void *data) { RzCore *core = (RzCore*) user; RzConfigNode *node = (RzConfigNode*) data; - core->anal->opt.ignbithints = node->i_value; + core->analysis->opt.ignbithints = node->i_value; return true; } static bool cb_analsleep(void *user, void *data) { RzCore *core = (RzCore*) user; RzConfigNode *node = (RzConfigNode*) data; - core->anal->sleep = node->i_value; + core->analysis->sleep = node->i_value; return true; } static bool cb_analmaxrefs(void *user, void *data) { RzCore *core = (RzCore*) user; RzConfigNode *node = (RzConfigNode*) data; - core->anal->maxreflines = node->i_value; + core->analysis->maxreflines = node->i_value; return true; } static bool cb_analnorevisit(void *user, void *data) { RzCore *core = (RzCore*) user; RzConfigNode *node = (RzConfigNode*) data; - core->anal->opt.norevisit = node->i_value; + core->analysis->opt.norevisit = node->i_value; return true; } static bool cb_analnopskip(void *user, void *data) { RzCore *core = (RzCore*) user; RzConfigNode *node = (RzConfigNode*) data; - core->anal->opt.nopskip = node->i_value; + core->analysis->opt.nopskip = node->i_value; return true; } static bool cb_analhpskip(void *user, void *data) { RzCore *core = (RzCore*) user; RzConfigNode *node = (RzConfigNode*) data; - core->anal->opt.hpskip = node->i_value; + core->analysis->opt.hpskip = node->i_value; return true; } static void update_analarch_options(RzCore *core, RzConfigNode *node) { - RzAnalPlugin *h; + RzAnalysisPlugin *h; RzListIter *it; - if (core && core->anal && node) { + if (core && core->analysis && node) { rz_list_purge (node->options); - rz_list_foreach (core->anal->plugins, it, h) { + rz_list_foreach (core->analysis->plugins, it, h) { SETOPTIONS (node, h->name, NULL); } } @@ -373,7 +373,7 @@ static bool cb_analarch(void *user, void *data) { return false; } if (*node->value) { - if (rz_anal_use (core->anal, node->value)) { + if (rz_analysis_use (core->analysis, node->value)) { return true; } const char *aa = rz_config_get (core->config, "asm.arch"); @@ -390,10 +390,10 @@ static bool cb_analarch(void *user, void *data) { static bool cb_analcpu(void *user, void *data) { RzCore *core = (RzCore *) user; RzConfigNode *node = (RzConfigNode *) data; - rz_anal_set_cpu (core->anal, node->value); + rz_analysis_set_cpu (core->analysis, node->value); /* set pcalign */ { - int v = rz_anal_archinfo (core->anal, RZ_ANAL_ARCHINFO_ALIGN); + int v = rz_analysis_archinfo (core->analysis, RZ_ANAL_ARCHINFO_ALIGN); rz_config_set_i (core->config, "asm.pcalign", (v != -1)? v: 0); } return true; @@ -402,14 +402,14 @@ static bool cb_analcpu(void *user, void *data) { static bool cb_analrecont(void *user, void *data) { RzCore *core = (RzCore*) user; RzConfigNode *node = (RzConfigNode*) data; - core->anal->opt.recont = node->i_value; + core->analysis->opt.recont = node->i_value; return true; } static bool cb_analijmp(void *user, void *data) { RzCore *core = (RzCore*) user; RzConfigNode *node = (RzConfigNode*) data; - core->anal->opt.ijmp = node->i_value; + core->analysis->opt.ijmp = node->i_value; return true; } @@ -567,8 +567,8 @@ static bool cb_asmarch(void *user, void *data) { return false; } asmos = rz_config_get (core->config, "asm.os"); - if (core && core->anal && core->anal->bits) { - bits = core->anal->bits; + if (core && core->analysis && core->analysis->bits) { + bits = core->analysis->bits; } if (node->value[0] == '?') { update_asmarch_options (core, node); @@ -621,8 +621,8 @@ static bool cb_asmarch(void *user, void *data) { } snprintf (asmparser, sizeof (asmparser), "%s.pseudo", node->value); rz_config_set (core->config, "asm.parser", asmparser); - if (core->rasm->cur && core->anal && - !(core->rasm->cur->bits & core->anal->bits)) { + if (core->rasm->cur && core->analysis && + !(core->rasm->cur->bits & core->analysis->bits)) { rz_config_set_i (core->config, "asm.bits", bits); } @@ -643,9 +643,9 @@ static bool cb_asmarch(void *user, void *data) { } } // set pcalign - if (core->anal) { + if (core->analysis) { const char *asmcpu = rz_config_get (core->config, "asm.cpu"); - if (!rz_syscall_setup (core->anal->syscall, node->value, core->anal->bits, asmcpu, asmos)) { + if (!rz_syscall_setup (core->analysis->syscall, node->value, core->analysis->bits, asmcpu, asmos)) { //eprintf ("asm.arch: Cannot setup syscall '%s/%s' from '%s'\n", // node->value, asmos, RZ_LIBDIR"/rizin/"RZ_VERSION"/syscall"); } @@ -672,7 +672,7 @@ static bool cb_asmarch(void *user, void *data) { update_asmcpu_options (core, asmcpu); } { - int v = rz_anal_archinfo (core->anal, RZ_ANAL_ARCHINFO_ALIGN); + int v = rz_analysis_archinfo (core->analysis, RZ_ANAL_ARCHINFO_ALIGN); if (v != -1) { rz_config_set_i (core->config, "asm.pcalign", v); } else { @@ -684,10 +684,10 @@ static bool cb_asmarch(void *user, void *data) { // changing anal.arch sets types db // so ressetting is redundant and may lead to bugs // 1 case this is usefull is when sdb_types is null - if (!core->anal || !core->anal->sdb_types) { - rz_core_anal_type_init (core); + if (!core->analysis || !core->analysis->sdb_types) { + rz_core_analysis_type_init (core); } - rz_core_anal_cc_init (core); + rz_core_analysis_cc_init (core); return true; } @@ -725,7 +725,7 @@ static bool cb_asmbits(void *user, void *data) { int bits = node->i_value; #if 0 // TODO: pretty good optimization, but breaks many tests when arch is different i think - if (bits == core->rasm->bits && bits == core->anal->bits && bits == core->dbg->bits) { + if (bits == core->rasm->bits && bits == core->analysis->bits && bits == core->dbg->bits) { // early optimization return true; } @@ -740,14 +740,14 @@ static bool cb_asmbits(void *user, void *data) { } // else { eprintf ("Cannot set bits %d to '%s'\n", bits, h->name); } } - if (!rz_anal_set_bits (core->anal, bits)) { + if (!rz_analysis_set_bits (core->analysis, bits)) { eprintf ("asm.arch: Cannot setup '%d' bits analysis engine\n", bits); ret = false; } core->print->bits = bits; } - if (core->dbg && core->anal && core->anal->cur) { - rz_debug_set_arch (core->dbg, core->anal->cur->arch, bits); + if (core->dbg && core->analysis && core->analysis->cur) { + rz_debug_set_arch (core->dbg, core->analysis->cur->arch, bits); bool load_from_debug = rz_config_get_i (core->config, "cfg.debug"); if (load_from_debug) { if (core->dbg->h && core->dbg->h->reg_profile) { @@ -761,29 +761,29 @@ static bool cb_asmbits(void *user, void *data) { #endif char *rp = core->dbg->h->reg_profile (core->dbg); rz_reg_set_profile_string (core->dbg->reg, rp); - rz_reg_set_profile_string (core->anal->reg, rp); + rz_reg_set_profile_string (core->analysis->reg, rp); free (rp); } } else { - (void)rz_anal_set_reg_profile (core->anal); + (void)rz_analysis_set_reg_profile (core->analysis); } } - rz_core_anal_cc_init (core); + rz_core_analysis_cc_init (core); const char *asmos = rz_config_get (core->config, "asm.os"); const char *asmarch = rz_config_get (core->config, "asm.arch"); const char *asmcpu = rz_config_get (core->config, "asm.cpu"); - if (core->anal) { - if (!rz_syscall_setup (core->anal->syscall, asmarch, bits, asmcpu, asmos)) { + if (core->analysis) { + if (!rz_syscall_setup (core->analysis->syscall, asmarch, bits, asmcpu, asmos)) { //eprintf ("asm.arch: Cannot setup syscall '%s/%s' from '%s'\n", // node->value, asmos, RZ_LIBDIR"/rizin/"RZ_VERSION"/syscall"); } - __setsegoff (core->config, asmarch, core->anal->bits); + __setsegoff (core->config, asmarch, core->analysis->bits); if (core->dbg) { - rz_bp_use (core->dbg->bp, asmarch, core->anal->bits); + rz_bp_use (core->dbg->bp, asmarch, core->analysis->bits); rz_config_set_i (core->config, "dbg.bpsize", rz_bp_size (core->dbg->bp)); } /* set pcalign */ - int v = rz_anal_archinfo (core->anal, RZ_ANAL_ARCHINFO_ALIGN); + int v = rz_analysis_archinfo (core->analysis, RZ_ANAL_ARCHINFO_ALIGN); rz_config_set_i (core->config, "asm.pcalign", (v != -1)? v: 0); } return ret; @@ -833,7 +833,7 @@ static bool cb_asmfeatures(void *user, void *data) { static bool cb_asmlineswidth(void *user, void *data) { RzCore *core = (RzCore *) user; RzConfigNode *node = (RzConfigNode *) data; - core->anal->lineswidth = node->i_value; + core->analysis->lineswidth = node->i_value; return true; } @@ -918,7 +918,7 @@ static bool cb_asm_pcalign(void *user, void *data) { align = 0; } core->rasm->pcalign = align; - core->anal->pcalign = align; + core->analysis->pcalign = align; return true; } @@ -938,11 +938,11 @@ static bool cb_asmos(void *user, void *data) { asmarch = rz_config_node_get (core->config, "asm.arch"); if (asmarch) { const char *asmcpu = rz_config_get (core->config, "asm.cpu"); - rz_syscall_setup (core->anal->syscall, asmarch->value, core->anal->bits, asmcpu, node->value); + rz_syscall_setup (core->analysis->syscall, asmarch->value, core->analysis->bits, asmcpu, node->value); __setsegoff (core->config, asmarch->value, asmbits); } - rz_anal_set_os (core->anal, node->value); - rz_core_anal_cc_init (core); + rz_analysis_set_os (core->analysis, node->value); + rz_core_analysis_cc_init (core); return true; } @@ -1148,8 +1148,8 @@ static bool cb_asmsyntax(void *user, void *data) { static bool cb_dirzigns(void *user, void *data) { RzCore *core = (RzCore*) user; RzConfigNode *node = (RzConfigNode*) data; - free (core->anal->zign_path); - core->anal->zign_path = strdup (node->value); + free (core->analysis->zign_path); + core->analysis->zign_path = strdup (node->value); return true; } @@ -1159,7 +1159,7 @@ static bool cb_bigendian(void *user, void *data) { // Try to set endian based on preference, restrict by RzAsmPlugin bool isbig = rz_asm_set_big_endian (core->rasm, node->i_value); // Set anal endianness the same as asm - rz_anal_set_big_endian (core->anal, isbig); + rz_analysis_set_big_endian (core->analysis, isbig); // the big endian should also be assigned to dbg->bp->endian if (core->dbg && core->dbg->bp) { core->dbg->bp->endian = isbig; @@ -1535,8 +1535,8 @@ static bool cb_gotolimit(void *user, void *data) { eprintf ("Cannot change gotolimit\n"); return false; } - if (core->anal->esil) { - core->anal->esil_goto_limit = node->i_value; + if (core->analysis->esil) { + core->analysis->esil_goto_limit = node->i_value; } return true; } @@ -1544,8 +1544,8 @@ static bool cb_gotolimit(void *user, void *data) { static bool cb_esilverbose (void *user, void *data) { RzCore *core = (RzCore *) user; RzConfigNode *node = (RzConfigNode*) data; - if (core->anal->esil) { - core->anal->esil->verbose = node->i_value; + if (core->analysis->esil) { + core->analysis->esil->verbose = node->i_value; } return true; } @@ -1771,9 +1771,9 @@ static bool cb_iopcachewrite(void *user, void *data) { return true; } -RZ_API bool rz_core_esil_cmd(RzAnalEsil *esil, const char *cmd, ut64 a1, ut64 a2) { +RZ_API bool rz_core_esil_cmd(RzAnalysisEsil *esil, const char *cmd, ut64 a1, ut64 a2) { if (cmd && *cmd) { - RzCore *core = esil->anal->user; + RzCore *core = esil->analysis->user; rz_core_cmdf (core, "%s %"PFMT64d" %" PFMT64d, cmd, a1, a2); return core->num->value; } @@ -1783,10 +1783,10 @@ RZ_API bool rz_core_esil_cmd(RzAnalEsil *esil, const char *cmd, ut64 a1, ut64 a2 static bool cb_cmd_esil_ioer(void *user, void *data) { RzCore *core = (RzCore *) user; RzConfigNode *node = (RzConfigNode *) data; - if (core && core->anal && core->anal->esil) { - core->anal->esil->cmd = rz_core_esil_cmd; - free (core->anal->esil->cmd_ioer); - core->anal->esil->cmd_ioer = strdup (node->value); + if (core && core->analysis && core->analysis->esil) { + core->analysis->esil->cmd = rz_core_esil_cmd; + free (core->analysis->esil->cmd_ioer); + core->analysis->esil->cmd_ioer = strdup (node->value); } return true; } @@ -1794,10 +1794,10 @@ static bool cb_cmd_esil_ioer(void *user, void *data) { static bool cb_cmd_esil_todo(void *user, void *data) { RzCore *core = (RzCore *) user; RzConfigNode *node = (RzConfigNode *) data; - if (core && core->anal && core->anal->esil) { - core->anal->esil->cmd = rz_core_esil_cmd; - free (core->anal->esil->cmd_todo); - core->anal->esil->cmd_todo = strdup (node->value); + if (core && core->analysis && core->analysis->esil) { + core->analysis->esil->cmd = rz_core_esil_cmd; + free (core->analysis->esil->cmd_todo); + core->analysis->esil->cmd_todo = strdup (node->value); } return true; } @@ -1805,10 +1805,10 @@ static bool cb_cmd_esil_todo(void *user, void *data) { static bool cb_cmd_esil_intr(void *user, void *data) { RzCore *core = (RzCore *) user; RzConfigNode *node = (RzConfigNode *) data; - if (core && core->anal && core->anal->esil) { - core->anal->esil->cmd = rz_core_esil_cmd; - free (core->anal->esil->cmd_intr); - core->anal->esil->cmd_intr = strdup (node->value); + if (core && core->analysis && core->analysis->esil) { + core->analysis->esil->cmd = rz_core_esil_cmd; + free (core->analysis->esil->cmd_intr); + core->analysis->esil->cmd_intr = strdup (node->value); } return true; } @@ -1816,10 +1816,10 @@ static bool cb_cmd_esil_intr(void *user, void *data) { static bool cb_mdevrange(void *user, void *data) { RzCore *core = (RzCore *) user; RzConfigNode *node = (RzConfigNode *) data; - if (core && core->anal && core->anal->esil) { - core->anal->esil->cmd = rz_core_esil_cmd; - free (core->anal->esil->mdev_range); - core->anal->esil->mdev_range = strdup (node->value); + if (core && core->analysis && core->analysis->esil) { + core->analysis->esil->cmd = rz_core_esil_cmd; + free (core->analysis->esil->mdev_range); + core->analysis->esil->mdev_range = strdup (node->value); } return true; } @@ -1827,10 +1827,10 @@ static bool cb_mdevrange(void *user, void *data) { static bool cb_cmd_esil_step(void *user, void *data) { RzCore *core = (RzCore *) user; RzConfigNode *node = (RzConfigNode *) data; - if (core && core->anal && core->anal->esil) { - core->anal->esil->cmd = rz_core_esil_cmd; - free (core->anal->esil->cmd_step); - core->anal->esil->cmd_step = strdup (node->value); + if (core && core->analysis && core->analysis->esil) { + core->analysis->esil->cmd = rz_core_esil_cmd; + free (core->analysis->esil->cmd_step); + core->analysis->esil->cmd_step = strdup (node->value); } return true; } @@ -1838,10 +1838,10 @@ static bool cb_cmd_esil_step(void *user, void *data) { static bool cb_cmd_esil_step_out(void *user, void *data) { RzCore *core = (RzCore *) user; RzConfigNode *node = (RzConfigNode *) data; - if (core && core->anal && core->anal->esil) { - core->anal->esil->cmd = rz_core_esil_cmd; - free (core->anal->esil->cmd_step_out); - core->anal->esil->cmd_step_out = strdup (node->value); + if (core && core->analysis && core->analysis->esil) { + core->analysis->esil->cmd = rz_core_esil_cmd; + free (core->analysis->esil->cmd_step_out); + core->analysis->esil->cmd_step_out = strdup (node->value); } return true; } @@ -1849,10 +1849,10 @@ static bool cb_cmd_esil_step_out(void *user, void *data) { static bool cb_cmd_esil_mdev(void *user, void *data) { RzCore *core = (RzCore *) user; RzConfigNode *node = (RzConfigNode *) data; - if (core && core->anal && core->anal->esil) { - core->anal->esil->cmd = rz_core_esil_cmd; - free (core->anal->esil->cmd_mdev); - core->anal->esil->cmd_mdev = strdup (node->value); + if (core && core->analysis && core->analysis->esil) { + core->analysis->esil->cmd = rz_core_esil_cmd; + free (core->analysis->esil->cmd_mdev); + core->analysis->esil->cmd_mdev = strdup (node->value); } return true; } @@ -1860,9 +1860,9 @@ static bool cb_cmd_esil_mdev(void *user, void *data) { static bool cb_cmd_esil_trap(void *user, void *data) { RzCore *core = (RzCore *) user; RzConfigNode *node = (RzConfigNode *) data; - if (core && core->anal && core->anal->esil) { - core->anal->esil->cmd = rz_core_esil_cmd; - core->anal->esil->cmd_trap = strdup (node->value); + if (core && core->analysis && core->analysis->esil) { + core->analysis->esil->cmd = rz_core_esil_cmd; + core->analysis->esil->cmd_trap = strdup (node->value); } return true; } @@ -2214,8 +2214,8 @@ static bool cb_graphformat(void *user, void *data) { static bool cb_exectrap(void *user, void *data) { RzConfigNode *node = (RzConfigNode *) data; RzCore *core = (RzCore*) user; - if (core->anal && core->anal->esil) { - core->anal->esil->exectrap = node->i_value; + if (core->analysis && core->analysis->esil) { + core->analysis->esil->exectrap = node->i_value; } return true; } @@ -2223,8 +2223,8 @@ static bool cb_exectrap(void *user, void *data) { static bool cb_iotrap(void *user, void *data) { RzConfigNode *node = (RzConfigNode *) data; RzCore *core = (RzCore*) user; - if (core->anal && core->anal->esil) { - core->anal->esil->iotrap = node->i_value; + if (core->analysis && core->analysis->esil) { + core->analysis->esil->iotrap = node->i_value; } return true; } @@ -2311,7 +2311,7 @@ static bool cb_seggrn(void *user, void *data) { RzCore *core = (RzCore *) user; RzConfigNode *node = (RzConfigNode *) data; core->rasm->seggrn = node->i_value; - core->anal->seggrn = node->i_value; + core->analysis->seggrn = node->i_value; core->print->seggrn = node->i_value; return true; } @@ -2403,7 +2403,7 @@ static bool cb_zoombyte(void *user, void *data) { static bool cb_analverbose(void *user, void *data) { RzCore *core = (RzCore *) user; RzConfigNode *node = (RzConfigNode *) data; - core->anal->verbose = node->i_value; + core->analysis->verbose = node->i_value; return true; } @@ -2555,7 +2555,7 @@ static bool cb_searchin(void *user, void *data) { } // Set anal.noncode if exec bit set in anal.in if (rz_str_startswith (node->name, "anal")) { - core->anal->opt.noncode = (strchr (node->value, 'x') == NULL); + core->analysis->opt.noncode = (strchr (node->value, 'x') == NULL); } return true; } @@ -2572,21 +2572,21 @@ static bool cb_dirpfx(RzCore *core, RzConfigNode *node) { } static bool cb_anal_roregs(RzCore *core, RzConfigNode *node) { - if (core && core->anal && core->anal->reg) { - rz_list_free (core->anal->reg->roregs); - core->anal->reg->roregs = rz_str_split_duplist (node->value, ",", true); + if (core && core->analysis && core->analysis->reg) { + rz_list_free (core->analysis->reg->roregs); + core->analysis->reg->roregs = rz_str_split_duplist (node->value, ",", true); } return true; } static bool cb_anal_gp(RzCore *core, RzConfigNode *node) { - core->anal->gp = node->i_value; + core->analysis->gp = node->i_value; return true; } static bool cb_anal_from(RzCore *core, RzConfigNode *node) { if (rz_config_get_i (core->config, "anal.limits")) { - rz_anal_set_limits (core->anal, + rz_analysis_set_limits (core->analysis, rz_config_get_i (core->config, "anal.from"), rz_config_get_i (core->config, "anal.to")); } @@ -2596,102 +2596,102 @@ static bool cb_anal_from(RzCore *core, RzConfigNode *node) { static bool cb_anal_limits(void *user, RzConfigNode *node) { RzCore *core = (RzCore*)user; if (node->i_value) { - rz_anal_set_limits (core->anal, + rz_analysis_set_limits (core->analysis, rz_config_get_i (core->config, "anal.from"), rz_config_get_i (core->config, "anal.to")); } else { - rz_anal_unset_limits (core->anal); + rz_analysis_unset_limits (core->analysis); } return 1; } static bool cb_anal_rnr(void *user, RzConfigNode *node) { RzCore *core = (RzCore*)user; - core->anal->recursive_noreturn = node->i_value; + core->analysis->recursive_noreturn = node->i_value; return 1; } static bool cb_anal_jmptbl(void *user, void *data) { RzCore *core = (RzCore*) user; RzConfigNode *node = (RzConfigNode*) data; - core->anal->opt.jmptbl = node->i_value; + core->analysis->opt.jmptbl = node->i_value; return true; } static bool cb_anal_cjmpref(void *user, void *data) { RzCore *core = (RzCore*) user; RzConfigNode *node = (RzConfigNode*) data; - core->anal->opt.cjmpref = node->i_value; + core->analysis->opt.cjmpref = node->i_value; return true; } static bool cb_anal_jmpref(void *user, void *data) { RzCore *core = (RzCore*) user; RzConfigNode *node = (RzConfigNode*) data; - core->anal->opt.jmpref = node->i_value; + core->analysis->opt.jmpref = node->i_value; return true; } static bool cb_anal_jmpabove(void *user, void *data) { RzCore *core = (RzCore*) user; RzConfigNode *node = (RzConfigNode*) data; - core->anal->opt.jmpabove = node->i_value; + core->analysis->opt.jmpabove = node->i_value; return true; } static bool cb_anal_loads(void *user, void *data) { RzCore *core = (RzCore*) user; RzConfigNode *node = (RzConfigNode*) data; - core->anal->opt.loads = node->i_value; + core->analysis->opt.loads = node->i_value; return true; } static bool cb_anal_followdatarefs(void *user, void *data) { RzCore *core = (RzCore*) user; RzConfigNode *node = (RzConfigNode*) data; - core->anal->opt.followdatarefs = node->i_value; + core->analysis->opt.followdatarefs = node->i_value; return true; } static bool cb_anal_jmpmid(void *user, void *data) { RzCore *core = (RzCore*) user; RzConfigNode *node = (RzConfigNode*) data; - core->anal->opt.jmpmid = node->i_value; + core->analysis->opt.jmpmid = node->i_value; return true; } static bool cb_anal_searchstringrefs(void *user, void *data) { RzCore *core = (RzCore*) user; RzConfigNode *node = (RzConfigNode*) data; - core->anal->opt.searchstringrefs = node->i_value; + core->analysis->opt.searchstringrefs = node->i_value; return true; } static bool cb_anal_pushret(void *user, void *data) { RzCore *core = (RzCore*) user; RzConfigNode *node = (RzConfigNode*) data; - core->anal->opt.pushret = node->i_value; + core->analysis->opt.pushret = node->i_value; return true; } static bool cb_anal_brokenrefs(void *user, void *data) { RzCore *core = (RzCore*) user; RzConfigNode *node = (RzConfigNode*) data; - core->anal->opt.followbrokenfcnsrefs = node->i_value; + core->analysis->opt.followbrokenfcnsrefs = node->i_value; return true; } static bool cb_anal_trycatch(void *user, void *data) { RzCore *core = (RzCore*) user; RzConfigNode *node = (RzConfigNode*) data; - core->anal->opt.trycatch = node->i_value; + core->analysis->opt.trycatch = node->i_value; return true; } static bool cb_anal_bb_max_size(void *user, void *data) { RzCore *core = (RzCore*) user; RzConfigNode *node = (RzConfigNode*) data; - core->anal->opt.bb_max_size = node->i_value; + core->analysis->opt.bb_max_size = node->i_value; return true; } @@ -2706,10 +2706,10 @@ static bool cb_anal_cpp_abi(void *user, void *data) { if (*node->value) { if (strcmp (node->value, "itanium") == 0) { - core->anal->cpp_abi = RZ_ANAL_CPP_ABI_ITANIUM; + core->analysis->cpp_abi = RZ_ANAL_CPP_ABI_ITANIUM; return true; } else if (strcmp (node->value, "msvc") == 0) { - core->anal->cpp_abi = RZ_ANAL_CPP_ABI_MSVC; + core->analysis->cpp_abi = RZ_ANAL_CPP_ABI_MSVC; return true; } eprintf ("anal.cpp.abi: cannot find '%s'\n", node->value); @@ -2887,7 +2887,7 @@ RZ_API int rz_core_config_init(RzCore *core) { /* anal */ SETBPREF ("anal.detectwrites", "false", "Automatically reanalyze function after a write"); SETPREF ("anal.fcnprefix", "fcn", "Prefix new function names with this"); - SETCB ("anal.verbose", "false", &cb_analverbose, "Show RzAnal warnings when analyzing code"); + SETCB ("anal.verbose", "false", &cb_analverbose, "Show RzAnalysis warnings when analyzing code"); SETBPREF ("anal.a2f", "false", "Use the new WIP analysis algorithm (core/p/a2f), anal.depth ignored atm"); SETCB ("anal.roregs", "gp,zero", (RzConfigCallback)&cb_anal_roregs, "Comma separated list of register names to be readonly"); SETICB ("anal.gp", 0, (RzConfigCallback)&cb_anal_gp, "Set the value of the GP register (MIPS)"); @@ -2987,7 +2987,7 @@ RZ_API int rz_core_config_init(RzCore *core) { SETBPREF ("esil.prestep", "true", "Step before esil evaluation in `de` commands"); SETPREF ("esil.fillstack", "", "Initialize ESIL stack with (random, debrujn, sequence, zeros, ...)"); SETICB ("esil.verbose", 0, &cb_esilverbose, "Show ESIL verbose level (0, 1, 2)"); - SETICB ("esil.gotolimit", core->anal->esil_goto_limit, &cb_gotolimit, "Maximum number of gotos per ESIL expression"); + SETICB ("esil.gotolimit", core->analysis->esil_goto_limit, &cb_gotolimit, "Maximum number of gotos per ESIL expression"); SETICB ("esil.stack.depth", 256, &cb_esilstackdepth, "Number of elements that can be pushed on the esilstack"); SETI ("esil.stack.size", 0xf0000, "Set stack size in ESIL VM"); SETI ("esil.stack.addr", 0x100000, "Set stack address in ESIL VM"); diff --git a/librz/core/cfile.c b/librz/core/cfile.c index c85d4c639e..2bde4db0ff 100644 --- a/librz/core/cfile.c +++ b/librz/core/cfile.c @@ -20,7 +20,7 @@ static void loadGP(RzCore *core) { rz_config_set (core->config, "anal.roregs", "zero"); rz_core_cmd0 (core, "10aes@entry0"); rz_config_set (core->config, "anal.roregs", "zero,gp"); - gp = rz_reg_getv (core->anal->reg, "gp"); + gp = rz_reg_getv (core->analysis->reg, "gp"); } // eprintf ("[mips] gp: 0x%08"PFMT64x"\n", gp); rz_config_set_i (core->config, "anal.gp", gp); @@ -190,7 +190,7 @@ RZ_API int rz_core_file_reopen(RzCore *core, const char *args, int perm, int loa loadGP (core); } // update anal io bind - rz_io_bind (core->io, &(core->anal->iob)); + rz_io_bind (core->io, &(core->analysis->iob)); if (core->file && core->file->fd >= 0) { rz_core_cmd0 (core, "o-!"); } @@ -439,7 +439,7 @@ static int rz_core_file_do_load_for_io_plugin(RzCore *r, ut64 baseaddr, ut64 loa } binfile = rz_bin_cur (r->bin); if (rz_core_bin_set_env (r, binfile)) { - if (!r->anal->sdb_cc->path) { + if (!r->analysis->sdb_cc->path) { RZ_LOG_WARN ("No calling convention defined for this file, analysis may be inaccurate.\n"); } } @@ -786,23 +786,23 @@ RZ_API bool rz_core_bin_load(RzCore *r, const char *filenameuri, ut64 baddr) { rz_bin_info_free (inf); } if (binfile->o->regstate) { - if (rz_reg_arena_set_bytes (r->anal->reg, binfile->o->regstate)) { + if (rz_reg_arena_set_bytes (r->analysis->reg, binfile->o->regstate)) { eprintf ("Setting up coredump: Problem while setting the registers\n"); } else { eprintf ("Setting up coredump: Registers have been set\n"); - const char *regname = rz_reg_get_name (r->anal->reg, RZ_REG_NAME_SP); + const char *regname = rz_reg_get_name (r->analysis->reg, RZ_REG_NAME_SP); if (regname) { - RzRegItem *reg = rz_reg_get (r->anal->reg, regname, -1); + RzRegItem *reg = rz_reg_get (r->analysis->reg, regname, -1); if (reg) { - sp_addr = rz_reg_get_value (r->anal->reg, reg); + sp_addr = rz_reg_get_value (r->analysis->reg, reg); stack_map = rz_io_map_get (r->io, sp_addr); } } - regname = rz_reg_get_name (r->anal->reg, RZ_REG_NAME_PC); + regname = rz_reg_get_name (r->analysis->reg, RZ_REG_NAME_PC); if (regname) { - RzRegItem *reg = rz_reg_get (r->anal->reg, regname, -1); + RzRegItem *reg = rz_reg_get (r->analysis->reg, regname, -1); if (reg) { - ut64 seek = rz_reg_get_value (r->anal->reg, reg); + ut64 seek = rz_reg_get_value (r->analysis->reg, reg); rz_core_seek (r, seek, true); } } diff --git a/librz/core/cio.c b/librz/core/cio.c index 916a0204bb..d2953fe576 100644 --- a/librz/core/cio.c +++ b/librz/core/cio.c @@ -343,12 +343,12 @@ RZ_API void rz_core_arch_bits_at(RzCore *core, ut64 addr, RZ_OUT RZ_NULLABLE int } } } - //if we found bits related with anal hints pick it up + //if we found bits related with analysis hints pick it up if (bits && !bitsval && !core->fixedbits) { - bitsval = rz_anal_hint_bits_at (core->anal, addr, NULL); + bitsval = rz_analysis_hint_bits_at (core->analysis, addr, NULL); } if (arch && !archval && !core->fixedarch) { - archval = rz_anal_hint_arch_at (core->anal, addr, NULL); + archval = rz_analysis_hint_arch_at (core->analysis, addr, NULL); } if (bits && bitsval) { *bits = bitsval; diff --git a/librz/core/citem.c b/librz/core/citem.c index 264ae2f10c..bdbe057bfc 100644 --- a/librz/core/citem.c +++ b/librz/core/citem.c @@ -12,7 +12,7 @@ RZ_API RzCoreItem *rz_core_item_at (RzCore *core, ut64 addr) { if (map->perm & RZ_PERM_X) { // if theres a meta consider it data ut64 size; - RzAnalMetaItem *item = rz_meta_get_at (core->anal, addr, RZ_META_TYPE_ANY, &size); + RzAnalysisMetaItem *item = rz_meta_get_at (core->analysis, addr, RZ_META_TYPE_ANY, &size); if (item) { switch (item->type) { case RZ_META_TYPE_DATA: @@ -40,7 +40,7 @@ RZ_API RzCoreItem *rz_core_item_at (RzCore *core, ut64 addr) { } } } - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, addr, 1); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, addr, 1); if (fcn) { ci->fcnname = strdup (fcn->name); } @@ -50,7 +50,7 @@ RZ_API RzCoreItem *rz_core_item_at (RzCore *core, ut64 addr) { ci->sectname = strdup (sec->name); } if (!ci->data) { - RzAnalOp* op = rz_core_anal_op (core, addr, RZ_ANAL_OP_MASK_ESIL | RZ_ANAL_OP_MASK_HINT); + RzAnalysisOp* op = rz_core_analysis_op (core, addr, RZ_ANAL_OP_MASK_ESIL | RZ_ANAL_OP_MASK_HINT); if (op) { if (!ci->data) { if (op->mnemonic) { @@ -61,7 +61,7 @@ RZ_API RzCoreItem *rz_core_item_at (RzCore *core, ut64 addr) { } } ci->size = op->size; - rz_anal_op_free (op); + rz_analysis_op_free (op); } } char *cmt = rz_core_cmd_strf (core, "CC.@0x%08"PFMT64x, addr); diff --git a/librz/core/cmd.c b/librz/core/cmd.c index 4ed29d0930..763f2550e2 100644 --- a/librz/core/cmd.c +++ b/librz/core/cmd.c @@ -16,7 +16,7 @@ #define INTERACTIVE_MAX_REP 1024 #include -#include +#include #include #include #include @@ -84,7 +84,7 @@ static RzCmdDescriptor *cmd_descriptor(const char *cmd, const char *help[]) { static int rz_core_cmd_subst_i(RzCore *core, char *cmd, char* colon, bool *tmpseek); static int bb_cmpaddr(const void *_a, const void *_b) { - const RzAnalBlock *a = _a, *b = _b; + const RzAnalysisBlock *a = _a, *b = _b; return a->addr > b->addr ? 1 : (a->addr < b->addr ? -1 : 0); } @@ -741,10 +741,10 @@ RZ_API bool rz_core_run_script(RzCore *core, const char *file) { ret = true; } else if (rz_file_is_c (file)) { const char *dir = rz_config_get (core->config, "dir.types"); - char *out = rz_parse_c_file (core->anal, file, dir, NULL); + char *out = rz_parse_c_file (core->analysis, file, dir, NULL); if (out) { rz_cons_strcat (out); - sdb_query_lines (core->anal->sdb_types, out); + sdb_query_lines (core->analysis->sdb_types, out); free (out); } ret = out != NULL; @@ -1453,7 +1453,7 @@ static int cmd_rebase(RzCore *core, const char *input) { rz_core_cmd0 (core, ".iM*"); rz_core_cmd0 (core, ".ii*"); rz_core_cmd0 (core, ".iz*"); - // TODO: rz_anal_move :?? + // TODO: rz_analysis_move :?? // TODO: differentiate analysis by map ranges (associated with files or memory maps) return 0; } @@ -3075,7 +3075,7 @@ repeat_arroba: case 'B': // "@B:#" // seek to the last instruction in current bb { int index = (int)rz_num_math (core->num, ptr + 2); - RzAnalBlock *bb = rz_anal_bb_from_offset (core->anal, core->offset); + RzAnalysisBlock *bb = rz_analysis_bb_from_offset (core->analysis, core->offset); if (bb) { // handle negative indices if (index < 0) { @@ -3083,7 +3083,7 @@ repeat_arroba: } if (index >= 0 && index < bb->ninstr) { - ut16 inst_off = rz_anal_bb_offset_inst (bb, index); + ut16 inst_off = rz_analysis_bb_offset_inst (bb, index); rz_core_seek (core, bb->addr + inst_off, true); cmd_tmpseek = core->tmpseek = true; } else { @@ -3573,8 +3573,8 @@ RZ_API int rz_core_cmd_foreach3(RzCore *core, const char *cmd, char *each) { // case 'C': { char *glob = filter ? rz_str_trim_dup (filter): NULL; RzIntervalTreeIter it; - RzAnalMetaItem *meta; - rz_interval_tree_foreach (&core->anal->meta, it, meta) { + RzAnalysisMetaItem *meta; + rz_interval_tree_foreach (&core->analysis->meta, it, meta) { if (meta->type != RZ_META_TYPE_COMMENT) { continue; } @@ -3643,7 +3643,7 @@ RZ_API int rz_core_cmd_foreach3(RzCore *core, const char *cmd, char *each) { // } RzList *list = rz_list_newf (free); rz_list_foreach (head, iter, item) { - if (item->size != core->anal->bits) { + if (item->size != core->analysis->bits) { continue; } if (item->type != i) { @@ -3797,8 +3797,8 @@ RZ_API int rz_core_cmd_foreach3(RzCore *core, const char *cmd, char *each) { // { ut64 obs = core->blocksize; ut64 offorig = core->offset; - RzAnalFunction *fcn; - list = core->anal->fcns; + RzAnalysisFunction *fcn; + list = core->analysis->fcns; rz_cons_break_push (NULL, NULL); rz_list_foreach (list, iter, fcn) { if (rz_cons_is_breaked ()) { @@ -3806,7 +3806,7 @@ RZ_API int rz_core_cmd_foreach3(RzCore *core, const char *cmd, char *each) { // } if (!filter || rz_str_glob (fcn->name, filter)) { rz_core_seek (core, fcn->addr, true); - rz_core_block_size (core, rz_anal_function_linear_size (fcn)); + rz_core_block_size (core, rz_analysis_function_linear_size (fcn)); rz_core_cmd0 (core, cmd); } } @@ -3817,12 +3817,12 @@ RZ_API int rz_core_cmd_foreach3(RzCore *core, const char *cmd, char *each) { // break; case 'b': { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, 0); ut64 offorig = core->offset; ut64 obs = core->blocksize; if (fcn) { RzListIter *iter; - RzAnalBlock *bb; + RzAnalysisBlock *bb; rz_list_foreach (fcn->bbs, iter, bb) { rz_core_seek (core, bb->addr, true); rz_core_block_size (core, bb->size); @@ -3925,8 +3925,8 @@ RZ_API int rz_core_cmd_foreach(RzCore *core, const char *cmd, char *each) { case 'b': // "@@b" - function basic blocks { RzListIter *iter; - RzAnalBlock *bb; - RzAnalFunction *fcn = rz_anal_get_function_at (core->anal, core->offset); + RzAnalysisBlock *bb; + RzAnalysisFunction *fcn = rz_analysis_get_function_at (core->analysis, core->offset); int bs = core->blocksize; if (fcn) { rz_list_sort (fcn->bbs, bb_cmp); @@ -3971,9 +3971,9 @@ RZ_API int rz_core_cmd_foreach(RzCore *core, const char *cmd, char *each) { case 'i': // "@@i" - function instructions { RzListIter *iter; - RzAnalBlock *bb; + RzAnalysisBlock *bb; int i; - RzAnalFunction *fcn = rz_anal_get_function_at (core->anal, core->offset); + RzAnalysisFunction *fcn = rz_analysis_get_function_at (core->analysis, core->offset); if (fcn) { rz_list_sort (fcn->bbs, bb_cmp); rz_list_foreach (fcn->bbs, iter, bb) { @@ -3992,10 +3992,10 @@ RZ_API int rz_core_cmd_foreach(RzCore *core, const char *cmd, char *each) { break; case 'f': // "@@f" if (each[1] == ':') { - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; RzListIter *iter; - if (core->anal) { - rz_list_foreach (core->anal->fcns, iter, fcn) { + if (core->analysis) { + rz_list_foreach (core->analysis->fcns, iter, fcn) { if (each[2] && strstr (fcn->name, each + 2)) { rz_core_seek (core, fcn->addr, true); rz_core_cmd (core, cmd, 0); @@ -4007,11 +4007,11 @@ RZ_API int rz_core_cmd_foreach(RzCore *core, const char *cmd, char *each) { } goto out_finish; } else { - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; RzListIter *iter; - if (core->anal) { + if (core->analysis) { RzConsGrep grep = core->cons->context->grep; - rz_list_foreach (core->anal->fcns, iter, fcn) { + rz_list_foreach (core->analysis->fcns, iter, fcn) { char *buf; rz_core_seek (core, fcn->addr, true); rz_cons_push (); @@ -5000,7 +5000,7 @@ DEFINE_HANDLE_TS_FCN_AND_SYMBOL(tmp_nthi_command) { ut64 orig_offset = state->core->offset; int index = rz_num_math (core->num, arg_str); - RzAnalBlock *bb = rz_anal_bb_from_offset (core->anal, core->offset); + RzAnalysisBlock *bb = rz_analysis_bb_from_offset (core->analysis, core->offset); if (bb) { // handle negative indices if (index < 0) { @@ -5008,7 +5008,7 @@ DEFINE_HANDLE_TS_FCN_AND_SYMBOL(tmp_nthi_command) { } if (index >= 0 && index < bb->ninstr) { - ut16 inst_off = rz_anal_bb_offset_inst (bb, index); + ut16 inst_off = rz_analysis_bb_offset_inst (bb, index); rz_core_seek (core, bb->addr + inst_off, true); } else { eprintf ("The current basic block has just %d instructions\n", bb->ninstr); @@ -5416,19 +5416,19 @@ DEFINE_HANDLE_TS_FCN_AND_SYMBOL(iter_instrs_command) { RzCmdStatus res = RZ_CMD_STATUS_OK; ut64 orig_offset = core->offset; int bs = core->blocksize; - RzList *bbl = rz_anal_get_blocks_in (core->anal, core->offset); + RzList *bbl = rz_analysis_get_blocks_in (core->analysis, core->offset); if (!bbl) { eprintf ("No basic block contains current address\n"); return RZ_CMD_STATUS_INVALID; } - RzAnalBlock *bb = rz_list_get_top (bbl); - rz_anal_block_ref (bb); + RzAnalysisBlock *bb = rz_list_get_top (bbl); + rz_analysis_block_ref (bb); rz_list_free (bbl); int i; for (i = 0; i < bb->ninstr; i++) { - ut64 i_addr = rz_anal_bb_opaddr_i (bb, i); - int sz = rz_anal_bb_size_i (bb, i); + ut64 i_addr = rz_analysis_bb_opaddr_i (bb, i); + int sz = rz_analysis_bb_size_i (bb, i); rz_core_block_size (core, sz); rz_core_seek (core, i_addr, true); RzCmdStatus cmd_res = handle_ts_command_tmpseek (state, command); @@ -5437,7 +5437,7 @@ DEFINE_HANDLE_TS_FCN_AND_SYMBOL(iter_instrs_command) { break; } } - rz_anal_block_unref (bb); + rz_analysis_block_unref (bb); err: rz_core_block_size (core, bs); @@ -5498,7 +5498,7 @@ DEFINE_HANDLE_TS_FCN_AND_SYMBOL(iter_hit_command) { DEFINE_HANDLE_TS_FCN_AND_SYMBOL(iter_bbs_command) { RzCore *core = state->core; TSNode command = ts_node_named_child (node, 0); - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, 0); ut64 offorig = core->offset; ut64 obs = core->blocksize; if (!fcn) { @@ -5506,7 +5506,7 @@ DEFINE_HANDLE_TS_FCN_AND_SYMBOL(iter_bbs_command) { } RzListIter *iter; - RzAnalBlock *bb; + RzAnalysisBlock *bb; RzCmdStatus ret = RZ_CMD_STATUS_OK; rz_list_foreach (fcn->bbs, iter, bb) { rz_core_seek (core, bb->addr, true); @@ -5598,8 +5598,8 @@ DEFINE_HANDLE_TS_FCN_AND_SYMBOL(iter_comment_command) { ut64 off = core->offset; RzCmdStatus res = RZ_CMD_STATUS_OK; RzIntervalTreeIter it; - RzAnalMetaItem *meta; - rz_interval_tree_foreach (&core->anal->meta, it, meta) { + RzAnalysisMetaItem *meta; + rz_interval_tree_foreach (&core->analysis->meta, it, meta) { if (meta->type != RZ_META_TYPE_COMMENT) { continue; } @@ -5667,7 +5667,7 @@ DEFINE_HANDLE_TS_FCN_AND_SYMBOL(iter_register_command) { RzList *list = rz_list_newf (free); RzListIter *iter; rz_list_foreach (head, iter, item) { - if (item->size != core->anal->bits) { + if (item->size != core->analysis->bits) { continue; } if (item->type != i) { @@ -5836,8 +5836,8 @@ DEFINE_HANDLE_TS_FCN_AND_SYMBOL(iter_function_command) { } ut64 obs = core->blocksize; ut64 offorig = core->offset; - RzAnalFunction *fcn; - RzList *list = core->anal->fcns; + RzAnalysisFunction *fcn; + RzList *list = core->analysis->fcns; RzListIter *iter; RzCmdStatus res = RZ_CMD_STATUS_OK; rz_cons_break_push (NULL, NULL); @@ -5847,7 +5847,7 @@ DEFINE_HANDLE_TS_FCN_AND_SYMBOL(iter_function_command) { } if (!filter || rz_str_glob (fcn->name, filter)) { rz_core_seek (core, fcn->addr, true); - rz_core_block_size (core, rz_anal_function_linear_size (fcn)); + rz_core_block_size (core, rz_analysis_function_linear_size (fcn)); RzCmdStatus cmd_res = handle_ts_command_tmpseek (state, command); UPDATE_CMD_STATUS_RES (res, cmd_res, err); } diff --git a/librz/core/cmd_anal.c b/librz/core/cmd_anal.c index 006019c030..c72e9b5d86 100644 --- a/librz/core/cmd_anal.c +++ b/librz/core/cmd_anal.c @@ -25,7 +25,7 @@ static const char *help_msg_a[] = { "ah", "[?]", "analysis hints (force opcode size, ...)", "ai", " [addr]", "address information (show perms, stack, heap, ...)", "aj", "", "same as a* but in json (aflj)", - "aL", "", "list all asm/anal plugins (e asm.arch=?)", + "aL", "", "list all asm/analysis plugins (e asm.arch=?)", "an", " [name] [@addr]", "show/rename/create whatever flag/function is used at addr", "ao", "[?] [len]", "analyze Opcodes (or emulate it)", "aO", "[?] [len]", "Analyze N instructions in M bytes", @@ -120,7 +120,7 @@ static const char *help_msg_abt[] = { }; static const char *help_msg_ac[] = { - "Usage:", "ac", "anal classes commands", + "Usage:", "ac", "analysis classes commands", "acl[j*]", "", "list all classes", "acll[j]", " (class_name)", "list all or single class detailed", "ac", " [class name]", "add class", @@ -753,25 +753,25 @@ static const char *help_msg_axt[]= { }; static int cmpname (const void *_a, const void *_b) { - const RzAnalFunction *a = _a, *b = _b; + const RzAnalysisFunction *a = _a, *b = _b; return (int)strcmp (a->name, b->name); } static int cmpsize (const void *a, const void *b) { - ut64 sa = (int) rz_anal_function_linear_size ((RzAnalFunction *) a); - ut64 sb = (int) rz_anal_function_linear_size ((RzAnalFunction *) b); + ut64 sa = (int) rz_analysis_function_linear_size ((RzAnalysisFunction *) a); + ut64 sb = (int) rz_analysis_function_linear_size ((RzAnalysisFunction *) b); return (sa > sb)? -1: (sa < sb)? 1 : 0; } static int cmpbbs (const void *_a, const void *_b) { - const RzAnalFunction *a = _a, *b = _b; + const RzAnalysisFunction *a = _a, *b = _b; int la = (int)rz_list_length (a->bbs); int lb = (int)rz_list_length (b->bbs); return (la > lb)? -1: (la < lb)? 1 : 0; } static int cmpaddr (const void *_a, const void *_b) { - const RzAnalFunction *a = _a, *b = _b; + const RzAnalysisFunction *a = _a, *b = _b; return (a->addr > b->addr)? 1: (a->addr addr)? -1: 0; } @@ -817,11 +817,11 @@ static bool anal_is_bad_call(RzCore *core, ut64 from, ut64 to, ut64 addr, ut8 *b #endif // function argument types and names into anal/types -static void __add_vars_sdb(RzCore *core, RzAnalFunction *fcn) { - RzAnalFcnVarsCache cache; - rz_anal_fcn_vars_cache_init (core->anal, &cache, fcn); +static void __add_vars_sdb(RzCore *core, RzAnalysisFunction *fcn) { + RzAnalysisFcnVarsCache cache; + rz_analysis_fcn_vars_cache_init (core->analysis, &cache, fcn); RzListIter *iter; - RzAnalVar *var; + RzAnalysisVar *var; int arg_count = 0; RzList *all_vars = cache.rvars; @@ -838,7 +838,7 @@ static void __add_vars_sdb(RzCore *core, RzAnalFunction *fcn) { !rz_strbuf_setf (&value, "%s,%s", var->type, var->name)) { goto exit; } - sdb_set (core->anal->sdb_types, rz_strbuf_get (&key), rz_strbuf_get (&value), 0); + sdb_set (core->analysis->sdb_types, rz_strbuf_get (&key), rz_strbuf_get (&value), 0); arg_count++; } } @@ -847,17 +847,17 @@ static void __add_vars_sdb(RzCore *core, RzAnalFunction *fcn) { !rz_strbuf_setf (&value, "%d", arg_count)) { goto exit; } - sdb_set (core->anal->sdb_types, rz_strbuf_get (&key), rz_strbuf_get (&value), 0); + sdb_set (core->analysis->sdb_types, rz_strbuf_get (&key), rz_strbuf_get (&value), 0); } exit: rz_strbuf_fini (&key); rz_strbuf_fini (&value); - rz_anal_fcn_vars_cache_fini (&cache); + rz_analysis_fcn_vars_cache_fini (&cache); } static bool cmd_anal_aaft(RzCore *core) { RzListIter *it; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; ut64 seek; const char *io_cache_key = "io.pcache.write"; bool io_cache = rz_config_get_i (core->config, io_cache_key); @@ -870,33 +870,33 @@ static bool cmd_anal_aaft(RzCore *core) { rz_config_set_i (core->config, io_cache_key, true); } seek = core->offset; - rz_reg_arena_push (core->anal->reg); - rz_reg_arena_zero (core->anal->reg); + rz_reg_arena_push (core->analysis->reg); + rz_reg_arena_zero (core->analysis->reg); rz_core_cmd0 (core, "aei;aeim"); - ut8 *saved_arena = rz_reg_arena_peek (core->anal->reg); + ut8 *saved_arena = rz_reg_arena_peek (core->analysis->reg); // Iterating Reverse so that we get function in top-bottom call order - rz_list_foreach_prev (core->anal->fcns, it, fcn) { + rz_list_foreach_prev (core->analysis->fcns, it, fcn) { int ret = rz_core_seek (core, fcn->addr, true); if (!ret) { continue; } - rz_reg_arena_poke (core->anal->reg, saved_arena); - rz_anal_esil_set_pc (core->anal->esil, fcn->addr); - rz_core_anal_type_match (core, fcn); + rz_reg_arena_poke (core->analysis->reg, saved_arena); + rz_analysis_esil_set_pc (core->analysis->esil, fcn->addr); + rz_core_analysis_type_match (core, fcn); if (rz_cons_is_breaked ()) { break; } __add_vars_sdb (core, fcn); } rz_core_seek (core, seek, true); - rz_reg_arena_pop (core->anal->reg); + rz_reg_arena_pop (core->analysis->reg); rz_config_set_i (core->config, io_cache_key, io_cache); free (saved_arena); return true; } static void type_cmd(RzCore *core, const char *input) { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, -1); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, -1); if (!fcn && *input != '?') { eprintf ("cant find function here\n"); return; @@ -906,8 +906,8 @@ static void type_cmd(RzCore *core, const char *input) { switch (*input) { case '\0': // "aft" seek = core->offset; - rz_anal_esil_set_pc (core->anal->esil, fcn? fcn->addr: core->offset); - rz_core_anal_type_match (core, fcn); + rz_analysis_esil_set_pc (core->analysis->esil, fcn? fcn->addr: core->offset); + rz_core_analysis_type_match (core, fcn); rz_core_seek (core, seek, true); break; case '?': @@ -946,11 +946,11 @@ static void find_refs(RzCore *core, const char *glob) { /* set flags for every function */ static void flag_every_function(RzCore *core) { RzListIter *iter; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; rz_flag_space_push (core->flags, RZ_FLAGS_FS_FUNCTIONS); - rz_list_foreach (core->anal->fcns, iter, fcn) { + rz_list_foreach (core->analysis->fcns, iter, fcn) { rz_flag_set (core->flags, fcn->name, - fcn->addr, rz_anal_function_size_from_entry (fcn)); + fcn->addr, rz_analysis_function_size_from_entry (fcn)); } rz_flag_space_pop (core->flags); } @@ -974,8 +974,8 @@ static void var_help(RzCore *core, char ch) { } } -static void var_accesses_list(RzAnalFunction *fcn, RzAnalVar *var, PJ *pj, int access_type, const char *name) { - RzAnalVarAccess *acc; +static void var_accesses_list(RzAnalysisFunction *fcn, RzAnalysisVar *var, PJ *pj, int access_type, const char *name) { + RzAnalysisVarAccess *acc; bool first = true; if (pj) { pj_o (pj); @@ -1004,15 +1004,15 @@ static void var_accesses_list(RzAnalFunction *fcn, RzAnalVar *var, PJ *pj, int a } } -static void list_vars(RzCore *core, RzAnalFunction *fcn, PJ *pj, int type, const char *name) { - RzAnalVar *var = NULL; +static void list_vars(RzCore *core, RzAnalysisFunction *fcn, PJ *pj, int type, const char *name) { + RzAnalysisVar *var = NULL; RzListIter *iter; - RzList *list = rz_anal_var_all_list (core->anal, fcn); + RzList *list = rz_analysis_var_all_list (core->analysis, fcn); if (type == '=') { ut64 oaddr = core->offset; rz_list_foreach (list, iter, var) { rz_cons_printf ("* %s\n", var->name); - RzAnalVarAccess *acc; + RzAnalysisVarAccess *acc; rz_vector_foreach (&var->accesses, acc) { if (!(acc->type & RZ_ANAL_VAR_ACCESS_TYPE_READ)) { continue; @@ -1034,7 +1034,7 @@ static void list_vars(RzCore *core, RzAnalFunction *fcn, PJ *pj, int type, const return; } if (type == '*') { - const char *bp = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_BP); + const char *bp = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_BP); rz_cons_printf ("f-fcnvar*\n"); rz_list_foreach (list, iter, var) { rz_cons_printf ("f fcnvar.%s @ %s%s%d\n", var->name, bp, @@ -1050,7 +1050,7 @@ static void list_vars(RzCore *core, RzAnalFunction *fcn, PJ *pj, int type, const pj_a (pj); } if (name && *name) { - var = rz_anal_function_get_var_byname (fcn, name); + var = rz_analysis_function_get_var_byname (fcn, name); if (var) { var_accesses_list (fcn, var, pj, access_type, var->name); } @@ -1064,10 +1064,10 @@ static void list_vars(RzCore *core, RzAnalFunction *fcn, PJ *pj, int type, const } } -static void cmd_afvx(RzCore *core, RzAnalFunction *fcn, bool json) { +static void cmd_afvx(RzCore *core, RzAnalysisFunction *fcn, bool json) { rz_return_if_fail (core); if (!fcn) { - fcn = rz_anal_get_fcn_in (core->anal, core->offset, RZ_ANAL_FCN_TYPE_ANY); + fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, RZ_ANAL_FCN_TYPE_ANY); } if (fcn) { PJ *pj = NULL; @@ -1097,7 +1097,7 @@ static void cmd_afvx(RzCore *core, RzAnalFunction *fcn, bool json) { static int cmd_an(RzCore *core, bool use_json, const char *name) { int ret = 0; ut64 off = core->offset; - RzAnalOp op; + RzAnalysisOp op; PJ *pj = NULL; ut64 tgt_addr = UT64_MAX; @@ -1106,14 +1106,14 @@ static int cmd_an(RzCore *core, bool use_json, const char *name) { pj_a (pj); } - rz_anal_op (core->anal, &op, off, + rz_analysis_op (core->analysis, &op, off, core->block + off - core->offset, 32, RZ_ANAL_OP_MASK_BASIC); - RzAnalVar *var = rz_anal_get_used_function_var (core->anal, op.addr); + RzAnalysisVar *var = rz_analysis_get_used_function_var (core->analysis, op.addr); tgt_addr = op.jump != UT64_MAX? op.jump: op.ptr; if (var) { if (name) { - ret = rz_anal_var_rename (var, name, true) + ret = rz_analysis_var_rename (var, name, true) ? 0 : -1; } else if (use_json) { @@ -1126,11 +1126,11 @@ static int cmd_an(RzCore *core, bool use_json, const char *name) { rz_cons_println (var->name); } } else if (tgt_addr != UT64_MAX) { - RzAnalFunction *fcn = rz_anal_get_function_at (core->anal, tgt_addr); + RzAnalysisFunction *fcn = rz_analysis_get_function_at (core->analysis, tgt_addr); RzFlagItem *f = rz_flag_get_i (core->flags, tgt_addr); if (fcn) { if (name) { - ret = rz_anal_function_rename (fcn, name)? 0: -1; + ret = rz_analysis_function_rename (fcn, name)? 0: -1; } else if (!use_json) { rz_cons_println (fcn->name); } else { @@ -1184,28 +1184,28 @@ static int cmd_an(RzCore *core, bool use_json, const char *name) { pj_free (pj); } - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); return ret; } // EBP BASED static int delta_cmp(const void *a, const void *b) { - const RzAnalVar *va = a; - const RzAnalVar *vb = b; + const RzAnalysisVar *va = a; + const RzAnalysisVar *vb = b; return vb->delta - va->delta; } static int delta_cmp2(const void *a, const void *b) { - const RzAnalVar *va = a; - const RzAnalVar *vb = b; + const RzAnalysisVar *va = a; + const RzAnalysisVar *vb = b; return va->delta - vb->delta; } static void __cmd_afvf(RzCore *core, const char *input) { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, -1); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, -1); RzListIter *iter; - RzAnalVar *p; - RzList *list = rz_anal_var_all_list (core->anal, fcn); + RzAnalysisVar *p; + RzList *list = rz_analysis_var_all_list (core->analysis, fcn); rz_list_sort (list, delta_cmp2); rz_list_foreach (list, iter, p) { if (p->isarg || p->delta > 0) { @@ -1230,7 +1230,7 @@ static void __cmd_afvf(RzCore *core, const char *input) { static int var_cmd(RzCore *core, const char *str) { int delta, type = *str, res = true; - RzAnalVar *v1; + RzAnalysisVar *v1; if (!str[0]) { // "afv" rz_core_cmd0 (core, "afvs"); @@ -1255,7 +1255,7 @@ static int var_cmd(RzCore *core, const char *str) { } char *p = strdup (str); char *ostr = p; - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, -1); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, -1); /* Variable access CFvs = set fun var */ switch (str[0]) { case '-': // "afv-" @@ -1297,7 +1297,7 @@ static int var_cmd(RzCore *core, const char *str) { } case 'a': // "afva" if (fcn) { - rz_anal_function_delete_all_vars (fcn); + rz_analysis_function_delete_all_vars (fcn); rz_core_recover_vars (core, fcn, false); free (p); return true; @@ -1307,21 +1307,21 @@ static int var_cmd(RzCore *core, const char *str) { } case 'n': if (str[1]) { // "afvn" - RzAnalOp *op = rz_core_anal_op (core, core->offset, RZ_ANAL_OP_MASK_BASIC); + RzAnalysisOp *op = rz_core_analysis_op (core, core->offset, RZ_ANAL_OP_MASK_BASIC); const char *new_name = rz_str_trim_head_ro (strchr (ostr, ' ')); if (!new_name) { - rz_anal_op_free (op); + rz_analysis_op_free (op); free (ostr); return false; } char *old_name = strchr (new_name, ' '); if (!old_name) { - RzAnalVar *var = op ? rz_anal_get_used_function_var (core->anal, op->addr) : NULL; + RzAnalysisVar *var = op ? rz_analysis_get_used_function_var (core->analysis, op->addr) : NULL; if (var) { old_name = var->name; } else { eprintf ("Cannot find var @ 0x%08"PFMT64x"\n", core->offset); - rz_anal_op_free (op); + rz_analysis_op_free (op); free (ostr); return false; } @@ -1330,24 +1330,24 @@ static int var_cmd(RzCore *core, const char *str) { rz_str_trim (old_name); } if (fcn) { - v1 = rz_anal_function_get_var_byname (fcn, old_name); + v1 = rz_analysis_function_get_var_byname (fcn, old_name); if (v1) { - rz_anal_var_rename (v1, new_name, true); + rz_analysis_var_rename (v1, new_name, true); } else { eprintf ("Cant find var by name\n"); } } else { eprintf ("afv: Cannot find function in 0x%08"PFMT64x"\n", core->offset); - rz_anal_op_free (op); + rz_analysis_op_free (op); free (ostr); return false; } - rz_anal_op_free (op); + rz_analysis_op_free (op); free (ostr); } else { RzListIter *iter; - RzAnalVar *v; - RzList *list = rz_anal_var_all_list (core->anal, fcn); + RzAnalysisVar *v; + RzList *list = rz_analysis_var_all_list (core->analysis, fcn); rz_list_foreach (list, iter, v) { rz_cons_printf ("%s\n", v->name); } @@ -1364,17 +1364,17 @@ static int var_cmd(RzCore *core, const char *str) { return false; } rz_str_trim (p); - v1 = rz_anal_function_get_var_byname (fcn, p); + v1 = rz_analysis_function_get_var_byname (fcn, p); if (!v1) { free (ostr); return false; } - rz_anal_var_display (core->anal, v1); + rz_analysis_var_display (core->analysis, v1); free (ostr); } else { RzListIter *iter; - RzAnalVar *p; - RzList *list = rz_anal_var_all_list (core->anal, fcn); + RzAnalysisVar *p; + RzList *list = rz_analysis_var_all_list (core->analysis, fcn); rz_list_foreach (list, iter, p) { char *a = rz_core_cmd_strf (core, ".afvd %s", p->name); if ((a && !*a) || !a) { @@ -1404,13 +1404,13 @@ static int var_cmd(RzCore *core, const char *str) { return false; } *type++ = 0; - v1 = rz_anal_function_get_var_byname (fcn, p); + v1 = rz_analysis_function_get_var_byname (fcn, p); if (!v1) { eprintf ("Cant find get by name %s\n", p); free (ostr); return false; } - rz_anal_var_set_type (v1, type); + rz_analysis_var_set_type (v1, type); free (ostr); return true; } else { @@ -1421,20 +1421,20 @@ static int var_cmd(RzCore *core, const char *str) { switch (str[1]) { // afv[bsr] case '\0': case '*': // "afv[bsr]*" - rz_anal_var_list_show (core->anal, fcn, type, str[1], NULL); + rz_analysis_var_list_show (core->analysis, fcn, type, str[1], NULL); break; case 'j': { // "afv[bsr]j" PJ *pj = pj_new (); if (!pj) { return -1; } - rz_anal_var_list_show (core->anal, fcn, type, str[1], pj); + rz_analysis_var_list_show (core->analysis, fcn, type, str[1], pj); rz_cons_println (pj_string (pj)); pj_free (pj); } break; case '.': // "afv[bsr]." - rz_anal_var_list_show (core->anal, fcn, core->offset, 0, NULL); + rz_analysis_var_list_show (core->analysis, fcn, core->offset, 0, NULL); break; case '-': // "afv[bsr]-" if (!fcn) { @@ -1442,20 +1442,20 @@ static int var_cmd(RzCore *core, const char *str) { return false; } if (str[2] == '*') { - rz_anal_function_delete_vars_by_kind (fcn, type); + rz_analysis_function_delete_vars_by_kind (fcn, type); } else { - RzAnalVar *var = NULL; + RzAnalysisVar *var = NULL; if (IS_DIGIT (str[2])) { - var = rz_anal_function_get_var (fcn, type, (int)rz_num_math (core->num, str + 1)); + var = rz_analysis_function_get_var (fcn, type, (int)rz_num_math (core->num, str + 1)); } else { char *name = rz_str_trim_dup (str + 2); if (name) { - var = rz_anal_function_get_var_byname (fcn, name); + var = rz_analysis_function_get_var_byname (fcn, name); rz_free (name); } } if (var) { - rz_anal_var_delete (var); + rz_analysis_var_delete (var); } } break; @@ -1480,7 +1480,7 @@ static int var_cmd(RzCore *core, const char *str) { if ((vaddr = strchr (p , ' '))) { addr = rz_num_math (core->num, vaddr); } - RzAnalVar *var = rz_anal_function_get_var (fcn, str[0], idx); + RzAnalysisVar *var = rz_analysis_function_get_var (fcn, str[0], idx); if (!var) { eprintf ("Cannot find variable with delta %d\n", idx); res = false; @@ -1488,10 +1488,10 @@ static int var_cmd(RzCore *core, const char *str) { } int rw = (str[1] == 'g') ? RZ_ANAL_VAR_ACCESS_TYPE_READ : RZ_ANAL_VAR_ACCESS_TYPE_WRITE; int ptr = *var->type == 's' ? idx - fcn->maxstack : idx; - RzAnalOp *op = rz_core_anal_op (core, addr, 0); + RzAnalysisOp *op = rz_core_analysis_op (core, addr, 0); const char *ireg = op ? op->ireg : NULL; - rz_anal_var_set_access (var, ireg, addr, rw, ptr); - rz_anal_op_free (op); + rz_analysis_var_set_access (var, ireg, addr, rw, ptr); + rz_analysis_op_free (op); } else { eprintf ("Missing argument\n"); } @@ -1519,7 +1519,7 @@ static int var_cmd(RzCore *core, const char *str) { rz_str_trim_head (name); if (type == 'r') { //registers - RzRegItem *i = rz_reg_get (core->anal->reg, p, -1); + RzRegItem *i = rz_reg_get (core->analysis->reg, p, -1); if (!i) { eprintf ("Register not found"); break; @@ -1545,7 +1545,7 @@ static int var_cmd(RzCore *core, const char *str) { } else if (type == 's' && delta > fcn->maxstack) { isarg = true; } - rz_anal_function_set_var (fcn, delta, type, vartype, size, isarg, name); + rz_analysis_function_set_var (fcn, delta, type, vartype, size, isarg, name); } break; } @@ -1599,20 +1599,20 @@ RZ_API char *cmd_syscall_dostr(RzCore *core, st64 n, ut64 addr) { int i; char str[64]; st64 N = n; - int defVector = rz_syscall_get_swi (core->anal->syscall); + int defVector = rz_syscall_get_swi (core->analysis->syscall); if (defVector > 0) { n = -1; } if (n == -1 || defVector > 0) { n = (int)rz_debug_reg_get (core->dbg, "oeax"); if (!n || n == -1) { - const char *a0 = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_SN); + const char *a0 = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_SN); n = (a0 == NULL)? -1: (int)rz_debug_reg_get (core->dbg, a0); } } - RzSyscallItem *item = rz_syscall_get (core->anal->syscall, n, defVector); + RzSyscallItem *item = rz_syscall_get (core->analysis->syscall, n, defVector); if (!item) { - item = rz_syscall_get (core->anal->syscall, N, -1); + item = rz_syscall_get (core->analysis->syscall, N, -1); } if (!item) { return rz_str_newf ("%s = unknown ()", syscallNumber (n)); @@ -1670,13 +1670,13 @@ RZ_API char *cmd_syscall_dostr(RzCore *core, st64 n, ut64 addr) { return rz_str_appendf (res, ")"); } -static int mw(RzAnalEsil *esil, ut64 addr, const ut8 *buf, int len) { +static int mw(RzAnalysisEsil *esil, ut64 addr, const ut8 *buf, int len) { int *ec = (int*)esil->user; *ec += (len * 2); return 1; } -static int mr(RzAnalEsil *esil, ut64 addr, ut8 *buf, int len) { +static int mr(RzAnalysisEsil *esil, ut64 addr, ut8 *buf, int len) { int *ec = (int*)esil->user; *ec += len; return 1; @@ -1687,13 +1687,13 @@ static int esil_cost(RzCore *core, ut64 addr, const char *expr) { return 0; } int ec = 0; - RzAnalEsil *e = rz_anal_esil_new (256, 0, 0); - rz_anal_esil_setup (e, core->anal, false, false, false); + RzAnalysisEsil *e = rz_analysis_esil_new (256, 0, 0); + rz_analysis_esil_setup (e, core->analysis, false, false, false); e->user = &ec; e->cb.mem_read = mr; e->cb.mem_write = mw; - rz_anal_esil_parse (e, expr); - rz_anal_esil_free (e); + rz_analysis_esil_parse (e, expr); + rz_analysis_esil_free (e); return ec; } @@ -1717,10 +1717,10 @@ static void core_anal_bytes(RzCore *core, const ut8 *buf, int len, int nops, int const char *color = ""; const char *esilstr; const char *opexstr; - RzAnalHint *hint; - RzAnalEsil *esil = NULL; + RzAnalysisHint *hint; + RzAnalysisEsil *esil = NULL; RzAsmOp asmop; - RzAnalOp op = {0}; + RzAnalysisOp op = {0}; ut64 addr; PJ *pj = NULL; unsigned int addrsize = rz_config_get_i (core->config, "esil.addr.size"); @@ -1740,19 +1740,19 @@ static void core_anal_bytes(RzCore *core, const ut8 *buf, int len, int nops, int } break; case 'r': // Setup for ESIL to REIL conversion - esil = rz_anal_esil_new (stacksize, iotrap, addrsize); + esil = rz_analysis_esil_new (stacksize, iotrap, addrsize); if (!esil) { return; } - rz_anal_esil_to_reil_setup (esil, core->anal, romem, stats); - rz_anal_esil_set_pc (esil, core->offset); + rz_analysis_esil_to_reil_setup (esil, core->analysis, romem, stats); + rz_analysis_esil_set_pc (esil, core->offset); break; } for (i = idx = ret = 0; idx < len && (!nops || (nops && i < nops)); i++, idx += ret) { addr = core->offset + idx; rz_asm_set_pc (core->rasm, addr); - hint = rz_anal_hint_get (core->anal, addr); - ret = rz_anal_op (core->anal, &op, addr, buf + idx, len - idx, + hint = rz_analysis_hint_get (core->analysis, addr); + ret = rz_analysis_op (core->analysis, &op, addr, buf + idx, len - idx, RZ_ANAL_OP_MASK_ESIL | RZ_ANAL_OP_MASK_OPEX | RZ_ANAL_OP_MASK_HINT); (void)rz_asm_disassemble (core->rasm, &asmop, buf + idx, len - idx); esilstr = RZ_STRBUF_SAFEGET (&op.esil); @@ -1830,7 +1830,7 @@ static void core_anal_bytes(RzCore *core, const ut8 *buf, int len, int nops, int rz_str_ncpy (strsub, rz_asm_op_get_asm (&asmop), sizeof (strsub) -1 ); } { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, addr, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, addr, 0); if (fcn) { rz_parse_subvar (core->parser, fcn, addr, asmop.size, strsub, strsub, sizeof (strsub)); @@ -1861,7 +1861,7 @@ static void core_anal_bytes(RzCore *core, const ut8 *buf, int len, int nops, int } pj_ks (pj, "mnemonic", mnem); { - ut8 *mask = rz_anal_mask (core->anal, len - idx, buf + idx, core->offset + idx); + ut8 *mask = rz_analysis_mask (core->analysis, len - idx, buf + idx, core->offset + idx); char *maskstr = rz_hex_bin2strdup (mask, size); pj_ks (pj, "mask", maskstr); free (mask); @@ -1909,9 +1909,9 @@ static void core_anal_bytes(RzCore *core, const ut8 *buf, int len, int nops, int pj_kn (pj, "ptr", op.ptr); } pj_ki (pj, "size", size); - pj_ks (pj, "type", rz_anal_optype_to_string (op.type)); + pj_ks (pj, "type", rz_analysis_optype_to_string (op.type)); { - const char *datatype = rz_anal_datatype_to_string (op.datatype); + const char *datatype = rz_analysis_datatype_to_string (op.datatype); if (datatype) { pj_ks (pj, "datatype", datatype); } @@ -1934,17 +1934,17 @@ static void core_anal_bytes(RzCore *core, const ut8 *buf, int len, int nops, int pj_ki (pj, "cycles", op.cycles); pj_ki (pj, "failcycles", op.failcycles); pj_ki (pj, "delay", op.delay); - const char *p1 = rz_anal_stackop_tostring (op.stackop); + const char *p1 = rz_analysis_stackop_tostring (op.stackop); if (strcmp (p1, "null")) { pj_ks (pj, "stack", p1); } pj_kn (pj, "stackptr", op.stackptr); const char *arg = (op.type & RZ_ANAL_OP_TYPE_COND) - ? rz_anal_cond_tostring (op.cond): NULL; + ? rz_analysis_cond_tostring (op.cond): NULL; if (arg) { pj_ks (pj, "cond", arg); } - pj_ks (pj, "family", rz_anal_op_family_to_string (op.family)); + pj_ks (pj, "family", rz_analysis_op_family_to_string (op.family)); pj_end (pj); } else if (fmt == 'r') { if (RZ_STR_ISNOTEMPTY (esilstr)) { @@ -1953,9 +1953,9 @@ static void core_anal_bytes(RzCore *core, const ut8 *buf, int len, int nops, int } else { rz_cons_printf ("0x%" PFMT64x "\n", core->offset + idx); } - rz_anal_esil_parse (esil, esilstr); - rz_anal_esil_dumpstack (esil); - rz_anal_esil_stack_free (esil); + rz_analysis_esil_parse (esil, esilstr); + rz_analysis_esil_dumpstack (esil); + rz_analysis_esil_stack_free (esil); } } else { char disasm[128] = { 0 }; @@ -1987,7 +1987,7 @@ static void core_anal_bytes(RzCore *core, const ut8 *buf, int len, int nops, int rz_str_ncpy (disasm, rz_asm_op_get_asm (&asmop), sizeof (disasm) - 1); } { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, addr, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, addr, 0); if (fcn) { rz_parse_subvar (core->parser, fcn, addr, asmop.size, disasm, disasm, sizeof (disasm)); @@ -2021,7 +2021,7 @@ static void core_anal_bytes(RzCore *core, const ut8 *buf, int len, int nops, int free (opname); } { - ut8 *mask = rz_anal_mask (core->anal, len - idx, buf + idx, core->offset + idx); + ut8 *mask = rz_analysis_mask (core->analysis, len - idx, buf + idx, core->offset + idx); char *maskstr = rz_hex_bin2strdup (mask, size); printline ("mask", "%s\n", maskstr); free (mask); @@ -2061,8 +2061,8 @@ static void core_anal_bytes(RzCore *core, const ut8 *buf, int len, int nops, int } printline ("size", "%d\n", size); printline ("sign", "%s\n", rz_str_bool (op.sign)); - printline ("type", "%s\n", rz_anal_optype_to_string (op.type)); - const char *datatype = rz_anal_datatype_to_string (op.datatype); + printline ("type", "%s\n", rz_analysis_optype_to_string (op.type)); + const char *datatype = rz_analysis_datatype_to_string (op.datatype); if (datatype) { printline ("datatype", "%s\n", datatype); } @@ -2110,14 +2110,14 @@ static void core_anal_bytes(RzCore *core, const ut8 *buf, int len, int nops, int printline ("delay", "%d\n", op.delay); } { - const char *arg = (op.type & RZ_ANAL_OP_TYPE_COND)? rz_anal_cond_tostring (op.cond): NULL; + const char *arg = (op.type & RZ_ANAL_OP_TYPE_COND)? rz_analysis_cond_tostring (op.cond): NULL; if (arg) { printline ("cond", "%s\n", arg); } } - printline ("family", "%s\n", rz_anal_op_family_to_string (op.family)); + printline ("family", "%s\n", rz_analysis_op_family_to_string (op.family)); if (op.stackop != RZ_ANAL_STACK_NULL) { - printline ("stackop", "%s\n", rz_anal_stackop_tostring (op.stackop)); + printline ("stackop", "%s\n", rz_analysis_stackop_tostring (op.stackop)); } if (op.stackptr) { printline ("stackptr", "%"PFMT64u"\n", op.stackptr); @@ -2126,10 +2126,10 @@ static void core_anal_bytes(RzCore *core, const ut8 *buf, int len, int nops, int //rz_cons_printf ("false: 0x%08"PFMT64x"\n", core->offset+idx); //free (hint); free (mnem); - rz_anal_hint_free (hint); - rz_anal_op_fini (&op); + rz_analysis_hint_free (hint); + rz_analysis_op_fini (&op); } - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); if (fmt == 's') { rz_cons_printf ("%d\n", totalsize); } else if (fmt == 'j') { @@ -2137,27 +2137,27 @@ static void core_anal_bytes(RzCore *core, const ut8 *buf, int len, int nops, int rz_cons_println (pj_string (pj)); pj_free (pj); } - rz_anal_esil_free (esil); + rz_analysis_esil_free (esil); } static int bb_cmp(const void *a, const void *b) { - const RzAnalBlock *ba = a; - const RzAnalBlock *bb = b; + const RzAnalysisBlock *ba = a; + const RzAnalysisBlock *bb = b; return ba->addr - bb->addr; } static int casecmp(const void* _a, const void * _b) { - const RzAnalCaseOp* a = _a; - const RzAnalCaseOp* b = _b; + const RzAnalysisCaseOp* a = _a; + const RzAnalysisCaseOp* b = _b; return a->addr != b->addr; } -static ut64 __opaddr(RzAnalBlock *b, ut64 addr) { +static ut64 __opaddr(RzAnalysisBlock *b, ut64 addr) { int i; if (addr >= b->addr && addr < (b->addr + b->size)) { for (i = 0; i < b->ninstr; i++) { - ut64 aa = b->addr + rz_anal_bb_offset_inst (b, i); - ut64 ab = b->addr + rz_anal_bb_offset_inst (b, i + 1); + ut64 aa = b->addr + rz_analysis_bb_offset_inst (b, i); + ut64 ab = b->addr + rz_analysis_bb_offset_inst (b, i + 1); if (addr >= aa && addr < ab) { return aa; } @@ -2166,14 +2166,14 @@ static ut64 __opaddr(RzAnalBlock *b, ut64 addr) { return UT64_MAX; } -static RzList *get_xrefs(RzAnalBlock *block) { +static RzList *get_xrefs(RzAnalysisBlock *block) { RzListIter *iter; - RzAnalRef *ref; + RzAnalysisRef *ref; RzList *list = NULL; size_t i; for (i = 0; i < block->ninstr; i++) { ut64 ia = block->addr + block->op_pos[i]; - RzList *xrefs = rz_anal_xrefs_get (block->anal, ia); + RzList *xrefs = rz_analysis_xrefs_get (block->analysis, ia); rz_list_foreach (xrefs, iter, ref) { if (!list) { list = rz_list_newf (free); @@ -2185,7 +2185,7 @@ static RzList *get_xrefs(RzAnalBlock *block) { } static char *fcnjoin(RzList *list) { - RzAnalFunction *n; + RzAnalysisFunction *n; RzListIter *iter; RzStrBuf buf; rz_strbuf_init (&buf); @@ -2210,15 +2210,15 @@ static char *ut64join(RzList *list) { return s; } -static RzList *get_calls(RzAnalBlock *block) { +static RzList *get_calls(RzAnalysisBlock *block) { RzList *list = NULL; - RzAnalOp op; + RzAnalysisOp op; ut8 *data = malloc (block->size); if (data) { - block->anal->iob.read_at (block->anal->iob.io, block->addr, data, block->size); + block->analysis->iob.read_at (block->analysis->iob.io, block->addr, data, block->size); size_t i; for (i = 0; i < block->size; i++) { - int ret = rz_anal_op (block->anal, &op, block->addr + i, data + i, block->size - i, RZ_ANAL_OP_MASK_HINT); + int ret = rz_analysis_op (block->analysis, &op, block->addr + i, data + i, block->size - i, RZ_ANAL_OP_MASK_HINT); if (ret < 1) { continue; } @@ -2228,7 +2228,7 @@ static RzList *get_calls(RzAnalBlock *block) { } rz_list_push (list, ut64_new (op.jump)); } - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); if (op.size > 0) { i += op.size - 1; } @@ -2243,7 +2243,7 @@ static void anal_bb_list(RzCore *core, const char *input) { PJ *pj = NULL; RTable *table = NULL; RBIter iter; - RzAnalBlock *block; + RzAnalysisBlock *block; if (mode == 'j') { pj = pj_new (); pj_o (pj); @@ -2263,7 +2263,7 @@ static void anal_bb_list(RzCore *core, const char *input) { rz_table_add_column (table, s, "xrefs", 0); } - rz_rbtree_foreach (core->anal->bb_tree, iter, block, RzAnalBlock, _rb) { + rz_rbtree_foreach (core->analysis->bb_tree, iter, block, RzAnalysisBlock, _rb) { RzList *xrefs = get_xrefs (block); RzList *calls = get_calls (block); switch (mode) { @@ -2301,7 +2301,7 @@ static void anal_bb_list(RzCore *core, const char *input) { } pj_ka (pj, "fcns"); RzListIter *iter2; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; rz_list_foreach (block->fcns, iter2, fcn) { pj_n (pj, fcn->addr); } @@ -2363,7 +2363,7 @@ static void anal_bb_list(RzCore *core, const char *input) { } if (block->fcns) { RzListIter *iter2; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; rz_list_foreach (block->fcns, iter2, fcn) { rz_cons_printf (" .u 0x%" PFMT64x, fcn->addr); } @@ -2393,7 +2393,7 @@ static void anal_bb_list(RzCore *core, const char *input) { static bool anal_fcn_list_bb(RzCore *core, const char *input, bool one) { RzDebugTracepoint *tp = NULL; RzListIter *iter; - RzAnalBlock *b; + RzAnalysisBlock *b; int mode = 0; ut64 addr, bbaddr = UT64_MAX; PJ *pj = NULL; @@ -2429,7 +2429,7 @@ static bool anal_fcn_list_bb(RzCore *core, const char *input, bool one) { } pj_a (pj); } - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, addr, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, addr, 0); if (!fcn) { if (mode == 'j') { pj_end (pj); @@ -2485,7 +2485,7 @@ static bool anal_fcn_list_bb(RzCore *core, const char *input, bool one) { break; case 'r': if (b->jump == UT64_MAX) { - ut64 retaddr = rz_anal_bb_opaddr_i (b, b->ninstr - 1); + ut64 retaddr = rz_analysis_bb_opaddr_i (b, b->ninstr - 1); if (retaddr == UT64_MAX) { break; } @@ -2510,7 +2510,7 @@ static bool anal_fcn_list_bb(RzCore *core, const char *input, bool one) { //rz_cons_printf ("%" PFMT64u "%s", b->addr, iter->n? ",": ""); { RzListIter *iter2; - RzAnalBlock *b2; + RzAnalysisBlock *b2; int inputs = 0; int outputs = 0; rz_list_foreach (fcn->bbs, iter2, b2) { @@ -2546,7 +2546,7 @@ static bool anal_fcn_list_bb(RzCore *core, const char *input, bool one) { pj_a (pj); { RzListIter *case_op_iter; - RzAnalCaseOp *case_op; + RzAnalysisCaseOp *case_op; rz_list_foreach (b->switch_op->cases, case_op_iter, case_op) { pj_o (pj); pj_kn (pj, "addr", case_op->addr); @@ -2574,7 +2574,7 @@ static bool anal_fcn_list_bb(RzCore *core, const char *input, bool one) { case 'i': { RzListIter *iter2; - RzAnalBlock *b2; + RzAnalysisBlock *b2; int inputs = 0; int outputs = 0; rz_list_foreach (fcn->bbs, iter2, b2) { @@ -2623,7 +2623,7 @@ static bool anal_fcn_list_bb(RzCore *core, const char *input, bool one) { rz_cons_printf (" f 0x%08" PFMT64x, b->fail); } if (b->switch_op) { - RzAnalCaseOp *cop; + RzAnalysisCaseOp *cop; RzListIter *iter; RzList *unique_cases = rz_list_uniq (b->switch_op->cases, casecmp); rz_list_foreach (unique_cases, iter, cop) { @@ -2661,9 +2661,9 @@ static bool anal_bb_edge (RzCore *core, const char *input) { *sp++ = 0; ut64 switch_addr = rz_num_math (core->num, arg); ut64 case_addr = rz_num_math (core->num, sp); - RzList *blocks = rz_anal_get_blocks_in (core->anal, switch_addr); + RzList *blocks = rz_analysis_get_blocks_in (core->analysis, switch_addr); if (blocks && !rz_list_empty (blocks)) { - rz_anal_block_add_switch_case (rz_list_first (blocks), switch_addr, 0, case_addr); + rz_analysis_block_add_switch_case (rz_list_first (blocks), switch_addr, 0, case_addr); ret = true; } rz_list_free (blocks); @@ -2677,18 +2677,18 @@ static bool anal_fcn_del_bb(RzCore *core, const char *input) { if (!addr) { addr = core->offset; } - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, addr, -1); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, addr, -1); if (fcn) { if (!strcmp (input, "*")) { while (!rz_list_empty (fcn->bbs)) { - rz_anal_function_remove_block (fcn, rz_list_first (fcn->bbs)); + rz_analysis_function_remove_block (fcn, rz_list_first (fcn->bbs)); } } else { - RzAnalBlock *b; + RzAnalysisBlock *b; RzListIter *iter; rz_list_foreach (fcn->bbs, iter, b) { if (b->addr == addr) { - rz_anal_function_remove_block (fcn, b); + rz_analysis_function_remove_block (fcn, b); return true; } } @@ -2708,8 +2708,8 @@ static int anal_fcn_add_bb(RzCore *core, const char *input) { ut64 size = 0LL; ut64 jump = UT64_MAX; ut64 fail = UT64_MAX; - RzAnalFunction *fcn = NULL; - RzAnalDiff *diff = NULL; + RzAnalysisFunction *fcn = NULL; + RzAnalysisDiff *diff = NULL; while (*input == ' ') input++; ptr = strdup (input); @@ -2717,8 +2717,8 @@ static int anal_fcn_add_bb(RzCore *core, const char *input) { switch (rz_str_word_set0 (ptr)) { case 6: ptr2 = rz_str_word_get0 (ptr, 6); - if (!(diff = rz_anal_diff_new ())) { - eprintf ("error: Cannot init RzAnalDiff\n"); + if (!(diff = rz_analysis_diff_new ())) { + eprintf ("error: Cannot init RzAnalysisDiff\n"); free (ptr); return false; } @@ -2738,10 +2738,10 @@ static int anal_fcn_add_bb(RzCore *core, const char *input) { case 1: // get fcnaddr fcnaddr = rz_num_math (core->num, rz_str_word_get0 (ptr, 0)); } - fcn = rz_anal_get_function_at (core->anal, fcnaddr); + fcn = rz_analysis_get_function_at (core->analysis, fcnaddr); if (fcn) { - if (!rz_anal_fcn_add_bb (core->anal, fcn, addr, size, jump, fail, diff)) - //if (!rz_anal_fcn_add_bb_raw (core->anal, fcn, addr, size, jump, fail, type, diff)) + if (!rz_analysis_fcn_add_bb (core->analysis, fcn, addr, size, jump, fail, diff)) + //if (!rz_analysis_fcn_add_bb_raw (core->analysis, fcn, addr, size, jump, fail, type, diff)) { eprintf ("afb+: Cannot add basic block at 0x%08"PFMT64x"\n", addr); } @@ -2749,19 +2749,19 @@ static int anal_fcn_add_bb(RzCore *core, const char *input) { eprintf ("afb+ Cannot find function at 0x%" PFMT64x " from 0x%08"PFMT64x" -> 0x%08"PFMT64x"\n", fcnaddr, addr, jump); } - rz_anal_diff_free (diff); + rz_analysis_diff_free (diff); free (ptr); return true; } -static void rz_core_anal_nofunclist (RzCore *core, const char *input) { +static void rz_core_analysis_nofunclist (RzCore *core, const char *input) { int minlen = (int)(input[0]==' ') ? rz_num_math (core->num, input + 1): 16; ut64 code_size = rz_num_get (core->num, "$SS"); ut64 base_addr = rz_num_get (core->num, "$S"); ut64 chunk_size, chunk_offset, i; RzListIter *iter, *iter2; - RzAnalFunction *fcn; - RzAnalBlock *b; + RzAnalysisFunction *fcn; + RzAnalysisBlock *b; char* bitmap; int counter; @@ -2777,7 +2777,7 @@ static void rz_core_anal_nofunclist (RzCore *core, const char *input) { } // for each function - rz_list_foreach (core->anal->fcns, iter, fcn) { + rz_list_foreach (core->analysis->fcns, iter, fcn) { // for each basic block in the function rz_list_foreach (fcn->bbs, iter2, b) { // if it is not withing range, continue @@ -2800,7 +2800,7 @@ static void rz_core_anal_nofunclist (RzCore *core, const char *input) { if (bitmap[i]){ // We only print a region is its size is bigger than 15 bytes if (chunk_size >= minlen){ - fcn = rz_anal_get_fcn_in (core->anal, base_addr+chunk_offset, RZ_ANAL_FCN_TYPE_FCN | RZ_ANAL_FCN_TYPE_SYM); + fcn = rz_analysis_get_fcn_in (core->analysis, base_addr+chunk_offset, RZ_ANAL_FCN_TYPE_FCN | RZ_ANAL_FCN_TYPE_SYM); if (fcn) { rz_cons_printf ("0x%08" PFMT64x " %6" PFMT64u " %s\n", base_addr+chunk_offset, chunk_size, fcn->name); @@ -2816,7 +2816,7 @@ static void rz_core_anal_nofunclist (RzCore *core, const char *input) { chunk_size+=1; } if (chunk_size >= 16) { - fcn = rz_anal_get_fcn_in (core->anal, base_addr+chunk_offset, RZ_ANAL_FCN_TYPE_FCN | RZ_ANAL_FCN_TYPE_SYM); + fcn = rz_analysis_get_fcn_in (core->analysis, base_addr+chunk_offset, RZ_ANAL_FCN_TYPE_FCN | RZ_ANAL_FCN_TYPE_SYM); if (fcn) { rz_cons_printf ("0x%08"PFMT64x" %6" PFMT64u " %s\n", base_addr+chunk_offset, chunk_size, fcn->name); } else { @@ -2826,14 +2826,14 @@ static void rz_core_anal_nofunclist (RzCore *core, const char *input) { free(bitmap); } -static void rz_core_anal_fmap (RzCore *core, const char *input) { +static void rz_core_analysis_fmap (RzCore *core, const char *input) { int show_color = rz_config_get_i (core->config, "scr.color"); int cols = rz_config_get_i (core->config, "hex.cols") * 4; ut64 code_size = rz_num_get (core->num, "$SS"); ut64 base_addr = rz_num_get (core->num, "$S"); RzListIter *iter, *iter2; - RzAnalFunction *fcn; - RzAnalBlock *b; + RzAnalysisFunction *fcn; + RzAnalysisBlock *b; char* bitmap; int assigned; ut64 i; @@ -2847,7 +2847,7 @@ static void rz_core_anal_fmap (RzCore *core, const char *input) { } // for each function - rz_list_foreach (core->anal->fcns, iter, fcn) { + rz_list_foreach (core->analysis->fcns, iter, fcn) { // for each basic block in the function rz_list_foreach (fcn->bbs, iter2, b) { // if it is not within range, continue @@ -2906,19 +2906,19 @@ static char * getFunctionName (RzCore *core, ut64 off, const char *name, bool pr fcnpfx = rz_config_get (core->config, "anal.fcnprefix"); } } - if (rz_reg_get (core->anal->reg, name, -1)) { + if (rz_reg_get (core->analysis->reg, name, -1)) { return rz_str_newf ("%s.%08"PFMT64x, "fcn", off); } return strdup (name); // rz_str_newf ("%s%s%s", fcnpfx, *fcnpfx? ".": "", name); } -/* TODO: move into rz_anal_function_rename (); */ +/* TODO: move into rz_analysis_function_rename (); */ static bool __setFunctionName(RzCore *core, ut64 addr, const char *_name, bool prefix) { rz_return_val_if_fail (core && _name, false); _name = rz_str_trim_head_ro (_name); char *name = getFunctionName (core, addr, _name, prefix); - // RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, addr, RZ_ANAL_FCN_TYPE_ANY); - RzAnalFunction *fcn = rz_anal_get_function_at (core->anal, addr); + // RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, addr, RZ_ANAL_FCN_TYPE_ANY); + RzAnalysisFunction *fcn = rz_analysis_get_function_at (core->analysis, addr); if (fcn) { RzFlagItem *flag = rz_flag_get (core->flags, fcn->name); if (flag && flag->space && strcmp (flag->space->name, RZ_FLAGS_FS_FUNCTIONS) == 0) { @@ -2927,12 +2927,12 @@ static bool __setFunctionName(RzCore *core, ut64 addr, const char *_name, bool p } else { // No flag or not specific to the function, create a new one. rz_flag_space_push (core->flags, RZ_FLAGS_FS_FUNCTIONS); - rz_flag_set (core->flags, name, fcn->addr, rz_anal_function_size_from_entry (fcn)); + rz_flag_set (core->flags, name, fcn->addr, rz_analysis_function_size_from_entry (fcn)); rz_flag_space_pop (core->flags); } - rz_anal_function_rename (fcn, name); - if (core->anal->cb.on_fcn_rename) { - core->anal->cb.on_fcn_rename (core->anal, core->anal->user, fcn, name); + rz_analysis_function_rename (fcn, name); + if (core->analysis->cb.on_fcn_rename) { + core->analysis->cb.on_fcn_rename (core->analysis, core->analysis->user, fcn, name); } free (name); return true; @@ -2943,19 +2943,19 @@ static bool __setFunctionName(RzCore *core, ut64 addr, const char *_name, bool p static void afCc(RzCore *core, const char *input) { ut64 addr; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; if (*input == ' ') { addr = rz_num_math (core->num, input); } else { addr = core->offset; } if (addr == 0LL) { - fcn = rz_anal_get_function_byname (core->anal, input + 3); + fcn = rz_analysis_get_function_byname (core->analysis, input + 3); } else { - fcn = rz_anal_get_fcn_in (core->anal, addr, RZ_ANAL_FCN_TYPE_NULL); + fcn = rz_analysis_get_fcn_in (core->analysis, addr, RZ_ANAL_FCN_TYPE_NULL); } if (fcn) { - ut32 totalCycles = rz_anal_function_cost (fcn); + ut32 totalCycles = rz_analysis_function_cost (fcn); // FIXME: This defeats the purpose of the function, but afC is used in project files. // cf. canal.c rz_cons_printf ("%d\n", totalCycles); @@ -2969,13 +2969,13 @@ static void cmd_anal_fcn_sig(RzCore *core, const char *input) { char *p = strchr (input, ' '); char *fcn_name = p ? rz_str_trim_dup (p): NULL; RzListIter *iter; - RzAnalFuncArg *arg; + RzAnalysisFuncArg *arg; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; if (fcn_name) { - fcn = rz_anal_get_function_byname (core->anal, fcn_name); + fcn = rz_analysis_get_function_byname (core->analysis, fcn_name); } else { - fcn = rz_anal_get_fcn_in (core->anal, core->offset, 0); + fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, 0); if (fcn) { fcn_name = fcn->name; } @@ -2993,12 +2993,12 @@ static void cmd_anal_fcn_sig(RzCore *core, const char *input) { char *key = NULL; if (fcn_name) { - key = resolve_fcn_name (core->anal, fcn_name); + key = resolve_fcn_name (core->analysis, fcn_name); } if (key) { - const char *fcn_type = rz_type_func_ret (core->anal->sdb_types, key); - int nargs = rz_type_func_args_count (core->anal->sdb_types, key); + const char *fcn_type = rz_type_func_ret (core->analysis->sdb_types, key); + int nargs = rz_type_func_args_count (core->analysis->sdb_types, key); if (fcn_type) { pj_o (j); pj_ks (j, "name", rz_str_get (key)); @@ -3027,10 +3027,10 @@ static void cmd_anal_fcn_sig(RzCore *core, const char *input) { pj_k (j, "args"); pj_a (j); - RzAnalFcnVarsCache cache; - rz_anal_fcn_vars_cache_init (core->anal, &cache, fcn); + RzAnalysisFcnVarsCache cache; + rz_analysis_fcn_vars_cache_init (core->analysis, &cache, fcn); int nargs = 0; - RzAnalVar *var; + RzAnalysisVar *var; rz_list_foreach (cache.rvars, iter, var) { nargs++; pj_o (j); @@ -3058,7 +3058,7 @@ static void cmd_anal_fcn_sig(RzCore *core, const char *input) { pj_ks (j, "type", var->type); pj_end (j); } - rz_anal_fcn_vars_cache_fini (&cache); + rz_analysis_fcn_vars_cache_fini (&cache); pj_end (j); pj_ki (j, "count", nargs); @@ -3071,7 +3071,7 @@ static void cmd_anal_fcn_sig(RzCore *core, const char *input) { } pj_free (j); } else { - char *sig = rz_anal_fcn_format_sig (core->anal, fcn, fcn_name, NULL, NULL, NULL); + char *sig = rz_analysis_fcn_format_sig (core->analysis, fcn, fcn_name, NULL, NULL, NULL); if (sig) { rz_cons_printf ("%s\n", sig); free (sig); @@ -3080,15 +3080,15 @@ static void cmd_anal_fcn_sig(RzCore *core, const char *input) { } static void __updateStats(RzCore *core, Sdb *db, ut64 addr, int statsMode) { - RzAnalOp *op = rz_core_anal_op (core, addr, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_HINT | RZ_ANAL_OP_MASK_DISASM); + RzAnalysisOp *op = rz_core_analysis_op (core, addr, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_HINT | RZ_ANAL_OP_MASK_DISASM); if (!op) { return; } if (statsMode == 'f') { - const char *family = rz_anal_op_family_to_string (op->family); + const char *family = rz_analysis_op_family_to_string (op->family); sdb_num_inc (db, family, 1, 0); } else if (statsMode == 'o') { - const char *type = rz_anal_optype_to_string (op->type); + const char *type = rz_analysis_optype_to_string (op->type); sdb_num_inc (db, type, 1, 0); } else { char *mnem = strdup (op->mnemonic); @@ -3101,7 +3101,7 @@ static void __updateStats(RzCore *core, Sdb *db, ut64 addr, int statsMode) { } //sdb_set (db, family, "1", 0); //rz_cons_printf ("0x%08"PFMT64x" %s\n", addr, family); - rz_anal_op_free (op); + rz_analysis_op_free (op); // rz_core_cmdf (core, "pd 1 @ 0x%08"PFMT64x"\n", addr); } @@ -3129,13 +3129,13 @@ static Sdb *__core_cmd_anal_fcn_stats (RzCore *core, const char *input) { break; } - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, -1); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, -1); if (!fcn) { eprintf ("Cannot find any function at 0x%08"PFMT64x"\n", core->offset); return NULL; } Sdb *db = sdb_new0 (); - RzAnalBlock *bb; + RzAnalysisBlock *bb; RzListIter *iter; rz_list_foreach (fcn->bbs, iter, bb) { int i; @@ -3187,7 +3187,7 @@ static Sdb *__core_cmd_anal_fcn_stats (RzCore *core, const char *input) { } static void __core_cmd_anal_fcn_allstats(RzCore *core, const char *input) { - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; SdbKv *kv; RzListIter *iter; SdbListIter *it; @@ -3197,7 +3197,7 @@ static void __core_cmd_anal_fcn_allstats(RzCore *core, const char *input) { bool isJson = strchr (input, 'j') != NULL; char *inp = rz_str_newf ("*%s", input); - rz_list_foreach (core->anal->fcns, iter, fcn) { + rz_list_foreach (core->analysis->fcns, iter, fcn) { rz_core_seek (core, fcn->addr, true); Sdb *db = __core_cmd_anal_fcn_stats (core, inp); sdb_num_set (db, ".addr", fcn->addr, 0); @@ -3252,7 +3252,7 @@ static void __core_cmd_anal_fcn_allstats(RzCore *core, const char *input) { RzList *items = rz_list_newf (free); ut64 fcnAddr = sdb_num_get (db, ".addr", 0); - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, fcnAddr, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, fcnAddr, 0); rz_list_append (items, fcn?strdup (fcn->name):strdup ("")); rz_list_append (items, fcn?rz_str_newf ("0x%08"PFMT64x, fcnAddr): strdup ("0")); int cols = rz_list_length (t->cols); @@ -3280,9 +3280,9 @@ static void __core_cmd_anal_fcn_allstats(RzCore *core, const char *input) { static void cmd_afsj(RzCore *core, const char *arg) { ut64 a = rz_num_math (core->num, arg); const ut64 addr = a? a: core->offset; - RzAnalFunction *f = rz_anal_get_fcn_in (core->anal, addr, -1); + RzAnalysisFunction *f = rz_analysis_get_fcn_in (core->analysis, addr, -1); if (f) { - char *s = rz_anal_function_get_json (f); + char *s = rz_analysis_function_get_json (f); rz_cons_printf ("%s\n", s); free (s); } else { @@ -3298,33 +3298,33 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { case '-': // "af-" if (!input[2]) { cmd_anal_fcn (core, "f-$$"); - rz_core_anal_undefine (core, core->offset); + rz_core_analysis_undefine (core, core->offset); } else if (!strcmp (input + 2, "*")) { - RzAnalFunction *f; + RzAnalysisFunction *f; RzListIter *iter; - rz_list_foreach (core->anal->fcns, iter, f) { - rz_anal_del_jmprefs (core->anal, f); + rz_list_foreach (core->analysis->fcns, iter, f) { + rz_analysis_del_jmprefs (core->analysis, f); } - rz_list_purge (core->anal->fcns); + rz_list_purge (core->analysis->fcns); } else { ut64 addr = input[2] ? rz_num_math (core->num, input + 2) : core->offset; - rz_core_anal_undefine (core, addr); - rz_anal_fcn_del_locs (core->anal, addr); - rz_anal_fcn_del (core->anal, addr); + rz_core_analysis_undefine (core, addr); + rz_analysis_fcn_del_locs (core->analysis, addr); + rz_analysis_fcn_del (core->analysis, addr); } break; case 'j': // "afj" { - RzList *blocks = rz_anal_get_blocks_in (core->anal, core->offset); - RzAnalBlock *block = rz_list_first (blocks); + RzList *blocks = rz_analysis_get_blocks_in (core->analysis, core->offset); + RzAnalysisBlock *block = rz_list_first (blocks); if (block && !rz_list_empty (block->fcns)) { char *args = strdup (input + 2); RzList *argv = rz_str_split_list (args, " ", 0); ut64 table = rz_num_math (core->num, rz_list_get_n (argv, 0)); ut64 elements = rz_num_math (core->num, rz_list_get_n (argv, 1)); - rz_anal_jmptbl (core->anal, rz_list_first (block->fcns), block, core->offset, table, elements, UT64_MAX); + rz_analysis_jmptbl (core->analysis, rz_list_first (block->fcns), block, core->offset, table, elements, UT64_MAX); } else { eprintf ("No function defined here\n"); } @@ -3351,7 +3351,7 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { } else { addr = core->offset; } - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, addr, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, addr, 0); if (input[2] == 'j') { // afdj PJ *pj = pj_new (); if (!pj) { @@ -3401,15 +3401,15 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { rz_config_set_i (core->config, "anal.to", addr_end); rz_config_set (core->config, "anal.limits", "true"); - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, addr, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, addr, 0); if (fcn) { - rz_anal_function_resize (fcn, addr_end - addr); + rz_analysis_function_resize (fcn, addr_end - addr); } - rz_core_anal_fcn (core, addr, UT64_MAX, + rz_core_analysis_fcn (core, addr, UT64_MAX, RZ_ANAL_REF_TYPE_NULL, depth); - fcn = rz_anal_get_fcn_in (core->anal, addr, 0); + fcn = rz_analysis_get_fcn_in (core->analysis, addr, 0); if (fcn) { - rz_anal_function_resize (fcn, addr_end - addr); + rz_analysis_function_resize (fcn, addr_end - addr); } rz_config_set_i (core->config, "anal.from", a); rz_config_set_i (core->config, "anal.to", b); @@ -3427,14 +3427,14 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { int n = rz_str_word_set0 (ptr); const char *name = NULL; ut64 addr = UT64_MAX; - RzAnalDiff *diff = NULL; + RzAnalysisDiff *diff = NULL; int type = RZ_ANAL_FCN_TYPE_FCN; if (n > 1) { switch (n) { case 4: ptr2 = rz_str_word_get0 (ptr, 3); - if (!(diff = rz_anal_diff_new ())) { - eprintf ("error: Cannot init RzAnalDiff\n"); + if (!(diff = rz_analysis_diff_new ())) { + eprintf ("error: Cannot init RzAnalysisDiff\n"); free (ptr); return false; } @@ -3459,12 +3459,12 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { case 1: addr = rz_num_math (core->num, rz_str_word_get0 (ptr, 0)); } - RzAnalFunction *fcn = rz_anal_create_function (core->anal, name, addr, type, diff); + RzAnalysisFunction *fcn = rz_analysis_create_function (core->analysis, name, addr, type, diff); if (!fcn) { eprintf ("Cannot add function (duplicated)\n"); } } - rz_anal_diff_free (diff); + rz_analysis_diff_free (diff); free (ptr); } break; @@ -3475,7 +3475,7 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { break; case 'j': { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, RZ_ANAL_FCN_TYPE_NULL); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, RZ_ANAL_FCN_TYPE_NULL); PJ *pj = pj_new (); if (!pj) { return false; @@ -3491,7 +3491,7 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { break; case '\0': { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, RZ_ANAL_FCN_TYPE_NULL); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, RZ_ANAL_FCN_TYPE_NULL); if (fcn) { rz_cons_printf ("0x%08" PFMT64x "\n", fcn->addr); } @@ -3501,8 +3501,8 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { { ut64 addr = core->offset; RzListIter *iter; - RzList *list = rz_anal_get_functions_in (core->anal, addr); - RzAnalFunction *fcn; + RzList *list = rz_analysis_get_functions_in (core->analysis, addr); + RzAnalysisFunction *fcn; rz_list_foreach (list, iter, fcn) { rz_cons_printf ("= 0x%08" PFMT64x "\n", fcn->addr); } @@ -3511,12 +3511,12 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { break; case ' ': { - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; ut64 addr = rz_num_math (core->num, input + 3); if (addr == 0LL) { - fcn = rz_anal_get_function_byname (core->anal, input + 3); + fcn = rz_analysis_get_function_byname (core->analysis, input + 3); } else { - fcn = rz_anal_get_fcn_in (core->anal, addr, RZ_ANAL_FCN_TYPE_NULL); + fcn = rz_analysis_get_fcn_in (core->analysis, addr, RZ_ANAL_FCN_TYPE_NULL); } if (fcn) { rz_cons_printf ("0x%08" PFMT64x "\n", fcn->addr); @@ -3536,7 +3536,7 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { if (input[3] == ' ') { addr = rz_num_math (core->num, input + 3); } - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, addr, RZ_ANAL_FCN_TYPE_NULL); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, addr, RZ_ANAL_FCN_TYPE_NULL); if (fcn) { rz_cons_printf ("%s\n", fcn->name); } @@ -3552,13 +3552,13 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { /* fallthrough */ case 'i': // "afii" if (input[3] == '-') { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, RZ_ANAL_FCN_TYPE_NULL); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, RZ_ANAL_FCN_TYPE_NULL); if (fcn) { rz_list_free (fcn->imports); fcn->imports = NULL; } } else if (input[3] == ' ') { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, RZ_ANAL_FCN_TYPE_NULL); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, RZ_ANAL_FCN_TYPE_NULL); if (fcn) { if (!fcn->imports) { fcn->imports = rz_list_newf ((RzListFree)free); @@ -3568,7 +3568,7 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { eprintf ("No function found\n"); } } else { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, RZ_ANAL_FCN_TYPE_NULL); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, RZ_ANAL_FCN_TYPE_NULL); if (fcn && fcn->imports) { char *imp; RzListIter *iter; @@ -3587,19 +3587,19 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { break; case 'j': // "afij" case '*': // "afi*" - rz_core_anal_fcn_list (core, input + 3, input + 2); + rz_core_analysis_fcn_list (core, input + 3, input + 2); break; case 'p': // "afip" { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, RZ_ANAL_FCN_TYPE_NULL); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, RZ_ANAL_FCN_TYPE_NULL); if (fcn) { - rz_cons_printf ("is-pure: %s\n", rz_str_bool (rz_anal_function_purity (fcn))); + rz_cons_printf ("is-pure: %s\n", rz_str_bool (rz_analysis_function_purity (fcn))); } } break; default: i = 1; - rz_core_anal_fcn_list (core, input + 2, &i); + rz_core_analysis_fcn_list (core, input + 2, &i); break; } break; @@ -3614,24 +3614,24 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { rz_core_cmd_help (core, help_msg_afls); break; case 'a': // "aflsa" - core->anal->fcns->sorted = false; - rz_list_sort (core->anal->fcns, cmpaddr); + core->analysis->fcns->sorted = false; + rz_list_sort (core->analysis->fcns, cmpaddr); break; case 'b': // "aflsb" - core->anal->fcns->sorted = false; - rz_list_sort (core->anal->fcns, cmpbbs); + core->analysis->fcns->sorted = false; + rz_list_sort (core->analysis->fcns, cmpbbs); break; case 's': // "aflss" - core->anal->fcns->sorted = false; - rz_list_sort (core->anal->fcns, cmpsize); + core->analysis->fcns->sorted = false; + rz_list_sort (core->analysis->fcns, cmpsize); break; case 'n': // "aflsn" - core->anal->fcns->sorted = false; - rz_list_sort (core->anal->fcns, cmpname); + core->analysis->fcns->sorted = false; + rz_list_sort (core->analysis->fcns, cmpname); break; default: - core->anal->fcns->sorted = false; - rz_list_sort (core->anal->fcns, cmpaddr); + core->analysis->fcns->sorted = false; + rz_list_sort (core->analysis->fcns, cmpaddr); break; } break; @@ -3651,13 +3651,13 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { case '=': // "afl=" case '*': // "afl*" case '.': // "afl*" - rz_core_anal_fcn_list (core, NULL, input + 2); + rz_core_analysis_fcn_list (core, NULL, input + 2); break; case 'c': // "aflc" - rz_cons_printf ("%d\n", rz_list_length (core->anal->fcns)); + rz_cons_printf ("%d\n", rz_list_length (core->analysis->fcns)); break; default: // "afl " - rz_core_anal_fcn_list (core, NULL, "o"); + rz_core_analysis_fcn_list (core, NULL, "o"); break; } break; @@ -3674,10 +3674,10 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { break; } case 'r': { // "afsr" - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, -1); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, -1); if (fcn) { char *type = rz_str_newf ("type.%s", input + 4); - if (sdb_exists (core->anal->sdb_types, type)) { + if (sdb_exists (core->analysis->sdb_types, type)) { char *query = rz_str_newf ("anal/types/func.%s.ret=%s", fcn->name, input + 4); sdb_querys (core->sdb, NULL, 0, query); free (query); @@ -3697,9 +3697,9 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { case 0: case ' ': { // "afs" ut64 addr = core->offset; - RzAnalFunction *f; + RzAnalysisFunction *f; const char *arg = rz_str_trim_head_ro (input + 2); - if ((f = rz_anal_get_fcn_in (core->anal, addr, RZ_ANAL_FCN_TYPE_NULL))) { + if ((f = rz_analysis_get_fcn_in (core->analysis, addr, RZ_ANAL_FCN_TYPE_NULL))) { if (arg && *arg) { // parse function signature here char *fcnstr = rz_str_newf ("%s;", arg), *fcnstr_copy = strdup (fcnstr); @@ -3709,18 +3709,18 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { const char *ls = rz_str_lchr (fcnname_aux, ' '); fcnname = strdup (ls? ls: fcnname_aux); if (fcnname) { - // TODO: move this into rz_anal_str_to_fcn() + // TODO: move this into rz_analysis_str_to_fcn() if (strcmp (f->name, fcnname)) { (void)__setFunctionName (core, addr, fcnname, false); - f = rz_anal_get_fcn_in (core->anal, addr, -1); + f = rz_analysis_get_fcn_in (core->analysis, addr, -1); } - rz_anal_str_to_fcn (core->anal, f, fcnstr); + rz_analysis_str_to_fcn (core->analysis, f, fcnstr); } free (fcnname); free (fcnstr_copy); free (fcnstr); } else { - char *str = rz_anal_function_get_signature (f); + char *str = rz_analysis_function_get_signature (f); if (str) { rz_cons_println (str); free (str); @@ -3738,10 +3738,10 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { } break; case 'm': // "afm" - merge two functions - rz_core_anal_fcn_merge (core, core->offset, rz_num_math (core->num, input + 2)); + rz_core_analysis_fcn_merge (core, core->offset, rz_num_math (core->num, input + 2)); break; case 'M': // "afM" - print functions map - rz_core_anal_fmap (core, input + 1); + rz_core_analysis_fmap (core, input + 1); break; case 'v': // "afv" var_cmd (core, input + 2); @@ -3751,16 +3751,16 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { break; case 'C': // "afC" if (input[2] == 'c') { - RzAnalFunction *fcn; - if ((fcn = rz_anal_get_fcn_in (core->anal, core->offset, 0)) != NULL) { - rz_cons_printf ("%i\n", rz_anal_function_complexity (fcn)); + RzAnalysisFunction *fcn; + if ((fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, 0)) != NULL) { + rz_cons_printf ("%i\n", rz_analysis_function_complexity (fcn)); } else { eprintf ("Error: Cannot find function at 0x08%" PFMT64x "\n", core->offset); } } else if (input[2] == 'l') { - RzAnalFunction *fcn; - if ((fcn = rz_anal_get_fcn_in (core->anal, core->offset, 0)) != NULL) { - rz_cons_printf ("%d\n", rz_anal_function_loops (fcn)); + RzAnalysisFunction *fcn; + if ((fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, 0)) != NULL) { + rz_cons_printf ("%d\n", rz_analysis_function_loops (fcn)); } else { eprintf ("Error: Cannot find function at 0x08%" PFMT64x "\n", core->offset); } @@ -3771,9 +3771,9 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { } break; case 'c':{ // "afc" - RzAnalFunction *fcn = NULL; + RzAnalysisFunction *fcn = NULL; if (!input[2] || input[2] == ' ' || input[2] == 'r' || input[2] == 'a') { - fcn = rz_anal_get_fcn_in (core->anal, core->offset, 0); + fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, 0); if (!fcn) { eprintf ("afc: Cannot find function here\n"); break; @@ -3787,12 +3787,12 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { char *argument = strdup (input + 3); char *cc = argument; rz_str_trim (cc); - if (!rz_anal_cc_exist (core->anal, cc)) { + if (!rz_analysis_cc_exist (core->analysis, cc)) { const char *asmOs = rz_config_get (core->config, "asm.os"); eprintf ("afc: Unknown calling convention '%s' for '%s'\n" "See afcl for available types\n", cc, asmOs); } else { - fcn->cc = rz_str_constpool_get (&core->anal->constpool, cc); + fcn->cc = rz_str_constpool_get (&core->analysis->constpool, cc); } free (argument); break; @@ -3803,7 +3803,7 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { char *cc = argument; rz_str_trim (cc); rz_core_cmdf (core, "k anal/cc/default.cc=%s", cc); - rz_anal_set_reg_profile (core->anal); + rz_analysis_set_reg_profile (core->analysis); free (argument); } else { rz_core_cmd0 (core, "k anal/cc/default.cc"); @@ -3819,13 +3819,13 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { rz_core_cmd0 (core, "k anal/cc/*"); break; case 'l': // "afcl" list all function Calling conventions. - sdb_foreach (core->anal->sdb_cc, cc_print, NULL); + sdb_foreach (core->analysis->sdb_cc, cc_print, NULL); break; case 'o': { // "afco" char *dbpath = rz_str_trim_dup (input + 3); if (rz_file_exists (dbpath)) { Sdb *db = sdb_new (0, dbpath, 0); - sdb_merge (core->anal->sdb_cc, db); + sdb_merge (core->analysis->sdb_cc, db); sdb_close (db); sdb_free (db); } @@ -3838,7 +3838,7 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { bool json = input[3] == 'j'; char *cmd = rz_str_newf ("cc.%s.ret", fcn->cc); - const char *regname = sdb_const_get (core->anal->sdb_cc, cmd, 0); + const char *regname = sdb_const_get (core->analysis->sdb_cc, cmd, 0); if (regname) { if (json) { rz_strbuf_appendf (json_buf, "\"ret\":\"%s\"", regname); @@ -3851,7 +3851,7 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { bool isFirst = true; for (i = 0; i < RZ_ANAL_CC_MAXARG; i++) { cmd = rz_str_newf ("cc.%s.arg%d", fcn->cc, i); - regname = sdb_const_get (core->anal->sdb_cc, cmd, 0); + regname = sdb_const_get (core->analysis->sdb_cc, cmd, 0); if (regname) { if (json) { if (isFirst) { @@ -3871,7 +3871,7 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { } cmd = rz_str_newf ("cc.%s.self", fcn->cc); - regname = sdb_const_get (core->anal->sdb_cc, cmd, 0); + regname = sdb_const_get (core->analysis->sdb_cc, cmd, 0); if (regname) { if (json) { rz_strbuf_appendf (json_buf, ",\"self\":\"%s\"", regname); @@ -3881,7 +3881,7 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { } free (cmd); cmd = rz_str_newf ("cc.%s.error", fcn->cc); - regname = sdb_const_get (core->anal->sdb_cc, cmd, 0); + regname = sdb_const_get (core->analysis->sdb_cc, cmd, 0); if (regname) { if (json) { rz_strbuf_appendf (json_buf, ",\"error\":\"%s\"", regname); @@ -3923,11 +3923,11 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { break; case 'B': // "afB" // set function bits if (input[2] == ' ') { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, 0); if (fcn) { int bits = atoi (input + 3); - rz_anal_hint_set_bits (core->anal, rz_anal_function_min_addr (fcn), bits); - rz_anal_hint_set_bits (core->anal, rz_anal_function_max_addr (fcn), core->anal->bits); + rz_analysis_hint_set_bits (core->analysis, rz_analysis_function_min_addr (fcn), bits); + rz_analysis_hint_set_bits (core->analysis, rz_analysis_function_max_addr (fcn), core->analysis->bits); fcn->bits = bits; } else { eprintf ("afB: Cannot find function to set bits at 0x%08"PFMT64x"\n", core->offset); @@ -3946,9 +3946,9 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { break; case 'F': // "afbF" { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, RZ_ANAL_FCN_TYPE_NULL); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, RZ_ANAL_FCN_TYPE_NULL); if (fcn) { - RzAnalBlock *bb = rz_anal_fcn_bbget_in (core->anal, fcn, core->offset); + RzAnalysisBlock *bb = rz_analysis_fcn_bbget_in (core->analysis, fcn, core->offset); if (bb) { if (input[3]) { int n = atoi (input + 3); @@ -3991,10 +3991,10 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { ptr = strchr (ptr + 1, ' '); if (ptr) { color = rz_num_math (core->num, ptr + 1); - RzAnalOp *op = rz_core_op_anal (core, addr, RZ_ANAL_OP_MASK_ALL); + RzAnalysisOp *op = rz_core_op_anal (core, addr, RZ_ANAL_OP_MASK_ALL); if (op) { - rz_anal_colorize_bb (core->anal, addr, color); - rz_anal_op_free (op); + rz_analysis_colorize_bb (core->analysis, addr, color); + rz_analysis_op_free (op); } else { eprintf ("Cannot analyze opcode at 0x%08" PFMT64x "\n", addr); } @@ -4012,14 +4012,14 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { switch (input[2]) { case 's': // "afns" if (input[3] == 'j') { // "afnsj" - free (rz_core_anal_fcn_autoname (core, core->offset, 1, input[3])); + free (rz_core_analysis_fcn_autoname (core, core->offset, 1, input[3])); } else { - free (rz_core_anal_fcn_autoname (core, core->offset, 1, 0)); + free (rz_core_analysis_fcn_autoname (core, core->offset, 1, 0)); } break; case 'a': // "afna" { - char *name = rz_core_anal_fcn_autoname (core, core->offset, 0, 0); + char *name = rz_core_analysis_fcn_autoname (core, core->offset, 0, 0); if (name) { rz_cons_printf ("afn %s 0x%08" PFMT64x "\n", name, core->offset); free (name); @@ -4029,7 +4029,7 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { case '.': // "afn." case 0: // "afn" { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, -1); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, -1); if (fcn) { rz_cons_printf ("%s\n", fcn->name); } @@ -4067,7 +4067,7 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { break; case 'S': // afS" { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, -1); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, -1); if (fcn) { fcn->maxstack = rz_num_math (core->num, input + 3); //fcn->stack = fcn->maxstack; @@ -4078,18 +4078,18 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { /* this is undocumented and probably have no uses. plz discuss */ case 'e': // "afe" { - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; ut64 off = core->offset; char *p, *name = strdup ((input[2]&&input[3])? input + 3: ""); if ((p = strchr (name, ' '))) { *p = 0; off = rz_num_math (core->num, p + 1); } - fcn = rz_anal_get_fcn_in (core->anal, off, RZ_ANAL_FCN_TYPE_FCN | RZ_ANAL_FCN_TYPE_SYM); + fcn = rz_analysis_get_fcn_in (core->analysis, off, RZ_ANAL_FCN_TYPE_FCN | RZ_ANAL_FCN_TYPE_SYM); if (fcn) { - RzAnalBlock *b; + RzAnalysisBlock *b; RzListIter *iter; - RzAnalRef *r; + RzAnalysisRef *r; rz_list_foreach (fcn->refs, iter, r) { rz_cons_printf ("0x%08" PFMT64x " -%c 0x%08" PFMT64x "\n", r->at, r->type, r->addr); } @@ -4124,16 +4124,16 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { // list xrefs from current address { ut64 addr = input[2]==' '? rz_num_math (core->num, input + 2): core->offset; - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, addr, RZ_ANAL_FCN_TYPE_NULL); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, addr, RZ_ANAL_FCN_TYPE_NULL); if (fcn) { ut64 oaddr = core->offset; - RzAnalRef *ref; + RzAnalysisRef *ref; RzListIter *iter; - RzList *refs = rz_anal_function_get_refs (fcn); + RzList *refs = rz_analysis_function_get_refs (fcn); rz_list_foreach (refs, iter, ref) { if (input[2] == 'j') { pj_o (pj); - pj_ks (pj, "type", rz_anal_ref_type_tostring (ref->type)); + pj_ks (pj, "type", rz_analysis_ref_type_tostring (ref->type)); pj_kn (pj, "from", ref->at); pj_kn (pj, "to", ref->addr); pj_end (pj); @@ -4185,7 +4185,7 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { case 'F': // "afF" { int val = input[2] && rz_num_math (core->num, input + 2); - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, RZ_ANAL_FCN_TYPE_NULL); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, RZ_ANAL_FCN_TYPE_NULL); if (fcn) { fcn->folded = input[2]? val: !fcn->folded; } @@ -4201,7 +4201,7 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { char *uaddr = NULL, *name = NULL; int depth = rz_config_get_i (core->config, "anal.depth"); bool analyze_recursively = rz_config_get_i (core->config, "anal.calls"); - RzAnalFunction *fcn = NULL; + RzAnalysisFunction *fcn = NULL; ut64 addr = core->offset; if (input[1] == 'r') { input++; @@ -4219,27 +4219,27 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { // depth = 1; // or 1? // disable hasnext } - //rz_core_anal_undefine (core, core->offset); - rz_core_anal_fcn (core, addr, UT64_MAX, RZ_ANAL_REF_TYPE_NULL, depth); - fcn = rz_anal_get_fcn_in (core->anal, addr, 0); + //rz_core_analysis_undefine (core, core->offset); + rz_core_analysis_fcn (core, addr, UT64_MAX, RZ_ANAL_REF_TYPE_NULL, depth); + fcn = rz_analysis_get_fcn_in (core->analysis, addr, 0); if (fcn) { /* ensure we use a proper name */ __setFunctionName (core, addr, fcn->name, false); - if (core->anal->opt.vars) { + if (core->analysis->opt.vars) { rz_core_recover_vars (core, fcn, true); } __add_vars_sdb (core, fcn); } else { - if (core->anal->verbose) { + if (core->analysis->verbose) { eprintf ("Warning: Unable to analyze function at 0x%08"PFMT64x"\n", addr); } } if (analyze_recursively) { - fcn = rz_anal_get_fcn_in (core->anal, addr, 0); /// XXX wrong in case of nopskip + fcn = rz_analysis_get_fcn_in (core->analysis, addr, 0); /// XXX wrong in case of nopskip if (fcn) { - RzAnalRef *ref; + RzAnalysisRef *ref; RzListIter *iter; - RzList *refs = rz_anal_function_get_refs (fcn); + RzList *refs = rz_analysis_function_get_refs (fcn); rz_list_foreach (refs, iter, ref) { if (ref->addr == UT64_MAX) { //eprintf ("Warning: ignore 0x%08"PFMT64x" call 0x%08"PFMT64x"\n", ref->at, ref->addr); @@ -4249,36 +4249,36 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { /* only follow code/call references */ continue; } - if (!rz_io_is_valid_offset (core->io, ref->addr, !core->anal->opt.noncode)) { + if (!rz_io_is_valid_offset (core->io, ref->addr, !core->analysis->opt.noncode)) { continue; } - rz_core_anal_fcn (core, ref->addr, fcn->addr, RZ_ANAL_REF_TYPE_CALL, depth); + rz_core_analysis_fcn (core, ref->addr, fcn->addr, RZ_ANAL_REF_TYPE_CALL, depth); /* use recursivity here */ #if 1 - RzAnalFunction *f = rz_anal_get_function_at (core->anal, ref->addr); + RzAnalysisFunction *f = rz_analysis_get_function_at (core->analysis, ref->addr); if (f) { RzListIter *iter; - RzAnalRef *ref; - RzList *refs1 = rz_anal_function_get_refs (f); + RzAnalysisRef *ref; + RzList *refs1 = rz_analysis_function_get_refs (f); rz_list_foreach (refs1, iter, ref) { - if (!rz_io_is_valid_offset (core->io, ref->addr, !core->anal->opt.noncode)) { + if (!rz_io_is_valid_offset (core->io, ref->addr, !core->analysis->opt.noncode)) { continue; } if (ref->type != 'c' && ref->type != 'C') { continue; } - rz_core_anal_fcn (core, ref->addr, f->addr, RZ_ANAL_REF_TYPE_CALL, depth); + rz_core_analysis_fcn (core, ref->addr, f->addr, RZ_ANAL_REF_TYPE_CALL, depth); // recursively follow fcn->refs again and again } rz_list_free (refs1); } else { - f = rz_anal_get_fcn_in (core->anal, fcn->addr, 0); + f = rz_analysis_get_fcn_in (core->analysis, fcn->addr, 0); if (f) { /* cut function */ - rz_anal_function_resize (f, addr - fcn->addr); - rz_core_anal_fcn (core, ref->addr, fcn->addr, + rz_analysis_function_resize (f, addr - fcn->addr); + rz_core_analysis_fcn (core, ref->addr, fcn->addr, RZ_ANAL_REF_TYPE_CALL, depth); - f = rz_anal_get_function_at (core->anal, fcn->addr); + f = rz_analysis_get_function_at (core->analysis, fcn->addr); } if (!f) { eprintf ("af: Cannot find function at 0x%08" PFMT64x "\n", fcn->addr); @@ -4287,7 +4287,7 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { #endif } rz_list_free (refs); - if (core->anal->opt.vars) { + if (core->analysis->opt.vars) { rz_core_recover_vars (core, fcn, true); } } @@ -4298,13 +4298,13 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { } free (name); } - rz_core_anal_propagate_noreturn (core, addr); + rz_core_analysis_propagate_noreturn (core, addr); #if 0 // XXX THIS IS VERY SLOW - if (core->anal->opt.vars) { + if (core->analysis->opt.vars) { RzListIter *iter; - RzAnalFunction *fcni = NULL; - rz_list_foreach (core->anal->fcns, iter, fcni) { + RzAnalysisFunction *fcni = NULL; + rz_list_foreach (core->analysis->fcns, iter, fcni) { if (rz_cons_is_breaked ()) { break; } @@ -4325,7 +4325,7 @@ static int cmd_anal_fcn(RzCore *core, const char *input) { // size: 0: bits; -1: any; >0: exact size static void __anal_reg_list(RzCore *core, int type, int bits, char mode) { if (mode == 'i') { - rz_core_debug_ri (core, core->anal->reg, 0); + rz_core_debug_ri (core, core->analysis->reg, 0); return; } RzReg *hack = core->dbg->reg; @@ -4339,21 +4339,21 @@ static void __anal_reg_list(RzCore *core, int type, int bits, char mode) { use_color = NULL; } if (bits < 0) { - // TODO Change the `size` argument of rz_debug_reg_list to use -1 for any and 0 for anal->bits + // TODO Change the `size` argument of rz_debug_reg_list to use -1 for any and 0 for analysis->bits bits = 0; } else if (!bits) { - bits = core->anal->bits; + bits = core->analysis->bits; } int mode2 = mode; - if (core->anal) { - core->dbg->reg = core->anal->reg; - if (core->anal->cur && core->anal->cur->arch) { + if (core->analysis) { + core->dbg->reg = core->analysis->reg; + if (core->analysis->cur && core->analysis->cur->arch) { /* workaround for thumb */ - if (!strcmp (core->anal->cur->arch, "arm") && bits == 16) { + if (!strcmp (core->analysis->cur->arch, "arm") && bits == 16) { bits = 32; } /* workaround for 6502 */ - if (!strcmp (core->anal->cur->arch, "6502") && bits == 8) { + if (!strcmp (core->analysis->cur->arch, "6502") && bits == 8) { mode2 = mode == 'j' ? 'J' : mode; if (mode == 'j') { rz_cons_printf ("{"); @@ -4363,7 +4363,7 @@ static void __anal_reg_list(RzCore *core, int type, int bits, char mode) { rz_cons_printf (","); } } - if (!strcmp (core->anal->cur->arch, "avr") && bits == 8) { + if (!strcmp (core->analysis->cur->arch, "avr") && bits == 8) { mode2 = mode == 'j' ? 'J' : mode; if (mode == 'j') { rz_cons_printf ("{"); @@ -4378,9 +4378,9 @@ static void __anal_reg_list(RzCore *core, int type, int bits, char mode) { if (mode == '=') { int pcbits = 0; - const char *pcname = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_PC); + const char *pcname = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_PC); if (pcname) { - RzRegItem *reg = rz_reg_get (core->anal->reg, pcname, 0); + RzRegItem *reg = rz_reg_get (core->analysis->reg, pcname, 0); if (reg && bits != reg->size) { pcbits = reg->size; } @@ -4400,17 +4400,17 @@ static void __anal_reg_list(RzCore *core, int type, int bits, char mode) { void cmd_anal_reg(RzCore *core, const char *str) { if (0) { /* enable this block when dr and ar use the same code but just using - core->dbg->reg or core->anal->reg and removing all the debugger + core->dbg->reg or core->analysis->reg and removing all the debugger dependent code */ RzReg *reg = core->dbg->reg; - core->dbg->reg = core->anal->reg; + core->dbg->reg = core->analysis->reg; cmd_debug_reg (core, str); core->dbg->reg = reg; return; } int size = 0, i, type = RZ_REG_TYPE_GPR; - int bits = (core->anal->bits & RZ_SYS_BITS_64)? 64: 32; + int bits = (core->analysis->bits & RZ_SYS_BITS_64)? 64: 32; int use_colors = rz_config_get_i (core->config, "scr.color"); RzRegItem *r; const char *use_color; @@ -4428,7 +4428,7 @@ void cmd_anal_reg(RzCore *core, const char *str) { case 'l': // "arl" { const bool use_json = str[1] == 'j'; - RzRegSet *rs = rz_reg_regset_get (core->anal->reg, RZ_REG_TYPE_GPR); + RzRegSet *rs = rz_reg_regset_get (core->analysis->reg, RZ_REG_TYPE_GPR); if (rs) { RzRegItem *r; RzListIter *iter; @@ -4450,18 +4450,18 @@ void cmd_anal_reg(RzCore *core, const char *str) { } } break; case ',': // "ar," - __tableRegList (core, core->anal->reg, str + 1); + __tableRegList (core, core->analysis->reg, str + 1); break; case '0': // "ar0" - rz_reg_arena_zero (core->anal->reg); + rz_reg_arena_zero (core->analysis->reg); break; case 'A': // "arA" { int nargs = 4; - RzReg *reg = core->anal->reg; + RzReg *reg = core->analysis->reg; for (i = 0; i < nargs; i++) { const char *name = rz_reg_get_name (reg, rz_reg_get_name_idx (sdb_fmt ("A%d", i))); - ut64 off = rz_reg_getv (core->anal->reg, name); + ut64 off = rz_reg_getv (core->analysis->reg, name); rz_cons_printf ("0x%08"PFMT64x" ", off); // XXX very ugly hack char *s = rz_core_cmd_strf (core, "pxr 32 @ 0x%08"PFMT64x, off); @@ -4478,8 +4478,8 @@ void cmd_anal_reg(RzCore *core, const char *str) { } break; case 'C': // "arC" - if (core->anal->reg->reg_profile_cmt) { - rz_cons_println (core->anal->reg->reg_profile_cmt); + if (core->analysis->reg->reg_profile_cmt) { + rz_cons_println (core->analysis->reg->reg_profile_cmt); } break; case 'w': // "arw" @@ -4489,7 +4489,7 @@ void cmd_anal_reg(RzCore *core, const char *str) { break; } case ' ': - rz_reg_arena_set_bytes (core->anal->reg, str + 1); + rz_reg_arena_set_bytes (core->analysis->reg, str + 1); break; default: rz_core_cmd_help (core, help_msg_arw); @@ -4502,20 +4502,20 @@ void cmd_anal_reg(RzCore *core, const char *str) { rz_core_cmd_help (core, help_msg_ara); break; case 's': // "aras" - rz_reg_arena_swap (core->anal->reg, false); + rz_reg_arena_swap (core->analysis->reg, false); break; case '+': // "ara+" - rz_reg_arena_push (core->anal->reg); + rz_reg_arena_push (core->analysis->reg); break; case '-': // "ara-" - rz_reg_arena_pop (core->anal->reg); + rz_reg_arena_pop (core->analysis->reg); break; default: { int i, j; RzRegArena *a; RzListIter *iter; for (i = 0; i < RZ_REG_TYPE_LAST; i++) { - RzRegSet *rs = &core->anal->reg->regset[i]; + RzRegSet *rs = &core->analysis->reg->regset[i]; j = 0; rz_list_foreach (rs->pool, iter, a) { rz_cons_printf ("%s %p %d %d %s %d\n", @@ -4529,7 +4529,7 @@ void cmd_anal_reg(RzCore *core, const char *str) { break; case '?': // "ar?" if (str[1]) { - ut64 off = rz_reg_getv (core->anal->reg, str + 1); + ut64 off = rz_reg_getv (core->analysis->reg, str + 1); rz_cons_printf ("0x%08" PFMT64x "\n", off); } else { rz_core_cmd_help (core, help_msg_ar); @@ -4538,16 +4538,16 @@ void cmd_anal_reg(RzCore *core, const char *str) { case 'r': // "arr" switch (str[1]) { case 'j': // "arrj" - rz_core_debug_rr (core, core->anal->reg, 'j'); + rz_core_debug_rr (core, core->analysis->reg, 'j'); break; default: - rz_core_debug_rr (core, core->anal->reg, 0); + rz_core_debug_rr (core, core->analysis->reg, 0); break; } break; case 'S': { // "arS" int sz; - ut8 *buf = rz_reg_get_bytes (core->anal->reg, RZ_REG_TYPE_GPR, &sz); + ut8 *buf = rz_reg_get_bytes (core->analysis->reg, RZ_REG_TYPE_GPR, &sz); rz_cons_printf ("%d\n", sz); free (buf); } break; @@ -4573,7 +4573,7 @@ void cmd_anal_reg(RzCore *core, const char *str) { case 'c': // "arc" // TODO: set flag values with drc zf=1 if (str[1] == 'c') { // "arcc" - char *s = rz_reg_profile_to_cc (core->anal->reg); + char *s = rz_reg_profile_to_cc (core->analysis->reg); if (s) { rz_cons_printf ("%s\n", s); free (s); @@ -4792,14 +4792,14 @@ static ut64 initializeEsil(RzCore *core) { int stacksize = rz_config_get_i (core->config, "esil.stack.depth"); int noNULL = rz_config_get_i (core->config, "esil.noNULL"); unsigned int addrsize = rz_config_get_i (core->config, "esil.addr.size"); - if (!(core->anal->esil = rz_anal_esil_new (stacksize, iotrap, addrsize))) { + if (!(core->analysis->esil = rz_analysis_esil_new (stacksize, iotrap, addrsize))) { return UT64_MAX; } ut64 addr; - RzAnalEsil *esil = core->anal->esil; + RzAnalysisEsil *esil = core->analysis->esil; esil->verbose = rz_config_get_i (core->config, "esil.verbose"); esil->cmd = rz_core_esil_cmd; - rz_anal_esil_setup (esil, core->anal, romem, stats, noNULL); // setup io + rz_analysis_esil_setup (esil, core->analysis, romem, stats, noNULL); // setup io { const char *cmd_esil_step = rz_config_get (core->config, "cmd.esil.step"); if (cmd_esil_step && *cmd_esil_step) { @@ -4841,9 +4841,9 @@ RZ_API int rz_core_esil_step(RzCore *core, ut64 until_addr, const char *until_ex int tail_return_value = 0; int ret; ut8 code[32]; - RzAnalOp op = {0}; - RzAnalEsil *esil = core->anal->esil; - const char *name = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_PC); + RzAnalysisOp op = {0}; + RzAnalysisEsil *esil = core->analysis->esil; + const char *name = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_PC); ut64 addr; bool breakoninvalid = rz_config_get_i (core->config, "esil.breakoninvalid"); int esiltimeout = rz_config_get_i (core->config, "esil.timeout"); @@ -4869,13 +4869,13 @@ repeat: } if (!esil) { addr = initializeEsil (core); - esil = core->anal->esil; + esil = core->analysis->esil; if (!esil) { return_tail (0); } } else { esil->trap = 0; - addr = rz_reg_getv (core->anal->reg, name); + addr = rz_reg_getv (core->analysis->reg, name); //eprintf ("PC=0x%"PFMT64x"\n", (ut64)addr); } if (prev_addr) { @@ -4891,7 +4891,7 @@ repeat: } rz_asm_set_pc (core->rasm, addr); // run esil pin command here - const char *pincmd = rz_anal_pin_call (core->anal, addr); + const char *pincmd = rz_analysis_pin_call (core->analysis, addr); if (pincmd) { rz_core_cmd0 (core, pincmd); ut64 pc = rz_debug_reg_get (core->dbg, "PC"); @@ -4899,7 +4899,7 @@ repeat: return_tail (1); } } - int dataAlign = rz_anal_archinfo (esil->anal, RZ_ANAL_ARCHINFO_DATA_ALIGN); + int dataAlign = rz_analysis_archinfo (esil->analysis, RZ_ANAL_ARCHINFO_DATA_ALIGN); if (dataAlign > 1) { if (addr % dataAlign) { if (esil->cmd && esil->cmd_trap) { @@ -4913,10 +4913,10 @@ repeat: } (void) rz_io_read_at_mapped (core->io, addr, code, sizeof (code)); // TODO: sometimes this is dupe - ret = rz_anal_op (core->anal, &op, addr, code, sizeof (code), RZ_ANAL_OP_MASK_ESIL | RZ_ANAL_OP_MASK_HINT); + ret = rz_analysis_op (core->analysis, &op, addr, code, sizeof (code), RZ_ANAL_OP_MASK_ESIL | RZ_ANAL_OP_MASK_HINT); // if type is JMP then we execute the next N instructions - // update the esil pointer because RzAnal.op() can change it - esil = core->anal->esil; + // update the esil pointer because RzAnalysis.op() can change it + esil = core->analysis->esil; if (op.size < 1 || ret < 1) { if (esil->cmd && esil->cmd_trap) { esil->cmd (esil, esil->cmd_trap, addr, RZ_ANAL_TRAP_INVALID); @@ -4942,7 +4942,7 @@ repeat: if (addr == until_addr) { return_tail (0); } else { - rz_reg_setv (core->anal->reg, "PC", op.addr + op.size); + rz_reg_setv (core->analysis->reg, "PC", op.addr + op.size); rz_reg_setv (core->dbg->reg, "PC", op.addr + op.size); } return 1; @@ -4950,7 +4950,7 @@ repeat: } if (rz_config_get_i (core->config, "cfg.r2wars")) { // this is x86 and r2wars specific, shouldnt hurt outside x86 - ut64 vECX = rz_reg_getv (core->anal->reg, "ecx"); + ut64 vECX = rz_reg_getv (core->analysis->reg, "ecx"); if (op.prefix & RZ_ANAL_OP_PREFIX_REP && vECX > 1) { char *tmp = strstr (op.esil.ptr, ",ecx,?{,5,GOTO,}"); if (tmp) { @@ -4958,25 +4958,25 @@ repeat: } op.esil.len -= 16; } else { - rz_reg_setv (core->anal->reg, name, addr + op.size); + rz_reg_setv (core->analysis->reg, name, addr + op.size); } } else { - rz_reg_setv (core->anal->reg, name, addr + op.size); + rz_reg_setv (core->analysis->reg, name, addr + op.size); } if (ret) { - rz_anal_esil_set_pc (esil, addr); + rz_analysis_esil_set_pc (esil, addr); const char *e = RZ_STRBUF_SAFEGET (&op.esil); if (core->dbg->trace->enabled) { RzReg *reg = core->dbg->reg; - core->dbg->reg = core->anal->reg; + core->dbg->reg = core->analysis->reg; rz_debug_trace_op (core->dbg, &op); core->dbg->reg = reg; } else if (RZ_STR_ISNOTEMPTY (e)) { - rz_anal_esil_parse (esil, e); - if (core->anal->cur && core->anal->cur->esil_post_loop) { - core->anal->cur->esil_post_loop (esil, &op); + rz_analysis_esil_parse (esil, e); + if (core->analysis->cur && core->analysis->cur->esil_post_loop) { + core->analysis->cur->esil_post_loop (esil, &op); } - rz_anal_esil_stack_free (esil); + rz_analysis_esil_stack_free (esil); } bool isNextFall = false; if (op.type == RZ_ANAL_OP_TYPE_CJMP) { @@ -4990,12 +4990,12 @@ repeat: if (op.delay && !isNextFall) { ut8 code2[32]; ut64 naddr = addr + op.size; - RzAnalOp op2 = {0}; + RzAnalysisOp op2 = {0}; // emulate only 1 instruction - rz_anal_esil_set_pc (esil, naddr); + rz_analysis_esil_set_pc (esil, naddr); (void)rz_io_read_at (core->io, naddr, code2, sizeof (code2)); // TODO: sometimes this is dupe - ret = rz_anal_op (core->anal, &op2, naddr, code2, sizeof (code2), RZ_ANAL_OP_MASK_ESIL | RZ_ANAL_OP_MASK_HINT); + ret = rz_analysis_op (core->analysis, &op2, naddr, code2, sizeof (code2), RZ_ANAL_OP_MASK_ESIL | RZ_ANAL_OP_MASK_HINT); if (ret > 0) { switch (op2.type) { case RZ_ANAL_OP_TYPE_CJMP: @@ -5011,22 +5011,22 @@ repeat: } const char *e = RZ_STRBUF_SAFEGET (&op2.esil); if (RZ_STR_ISNOTEMPTY (e)) { - rz_anal_esil_parse (esil, e); + rz_analysis_esil_parse (esil, e); } } else { eprintf ("Invalid instruction at 0x%08"PFMT64x"\n", naddr); } - rz_anal_op_fini (&op2); + rz_analysis_op_fini (&op2); } tail_return_value = 1; } // esil->verbose ? - // eprintf ("REPE 0x%llx %s => 0x%llx\n", addr, RZ_STRBUF_SAFEGET (&op.esil), rz_reg_getv (core->anal->reg, "PC")); + // eprintf ("REPE 0x%llx %s => 0x%llx\n", addr, RZ_STRBUF_SAFEGET (&op.esil), rz_reg_getv (core->analysis->reg, "PC")); - ut64 pc = rz_reg_getv (core->anal->reg, name); - if (core->anal->pcalign > 0) { - pc -= (pc % core->anal->pcalign); - rz_reg_setv (core->anal->reg, name, pc); + ut64 pc = rz_reg_getv (core->analysis->reg, name); + if (core->analysis->pcalign > 0) { + pc -= (pc % core->analysis->pcalign); + rz_reg_setv (core->analysis->reg, name, pc); rz_reg_setv (core->dbg->reg, name, pc); } @@ -5051,14 +5051,14 @@ repeat: } // check esil if (esil && esil->trap) { - if (core->anal->esil->verbose) { + if (core->analysis->esil->verbose) { eprintf ("TRAP\n"); } return_tail (0); } if (until_expr) { - if (rz_anal_esil_condition (core->anal->esil, until_expr)) { - if (core->anal->esil->verbose) { + if (rz_analysis_esil_condition (core->analysis->esil, until_expr)) { + if (core->analysis->esil->verbose) { eprintf ("ESIL BREAK!\n"); } return_tail (0); @@ -5066,16 +5066,16 @@ repeat: goto repeat; } tail_return: - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); rz_cons_break_pop (); return tail_return_value; } RZ_API int rz_core_esil_step_back(RzCore *core) { - rz_return_val_if_fail (core->anal->esil && core->anal->esil->trace, -1); - RzAnalEsil *esil = core->anal->esil; + rz_return_val_if_fail (core->analysis->esil && core->analysis->esil->trace, -1); + RzAnalysisEsil *esil = core->analysis->esil; if (esil->trace->idx > 0) { - rz_anal_esil_trace_restore (esil, esil->trace->idx - 1); + rz_analysis_esil_trace_restore (esil, esil->trace->idx - 1); return 1; } return -1; @@ -5088,7 +5088,7 @@ static void cmd_address_info(RzCore *core, const char *addrstr, int fmt) { } else { addr = rz_num_math (core->num, addrstr); } - type = rz_core_anal_address (core, addr); + type = rz_core_analysis_address (core, addr); switch (fmt) { case 'j': { PJ *pj = pj_new (); @@ -5168,19 +5168,19 @@ static void cmd_anal_info(RzCore *core, const char *input) { if (input[1] == ' ') { char *s = rz_str_trim_dup (input + 1); if (s) { - rz_anal_add_import (core->anal, s); + rz_analysis_add_import (core->analysis, s); free (s); } } else if (input[1] == '-') { - rz_anal_purge_imports (core->anal); + rz_analysis_purge_imports (core->analysis); } else { eprintf ("Usagae: aii [namespace] # see afii - imports\n"); } } else { - if (core->anal->imports) { + if (core->analysis->imports) { char *imp; RzListIter *iter; - rz_list_foreach (core->anal->imports, iter, imp) { + rz_list_foreach (core->analysis->imports, iter, imp) { rz_cons_printf ("%s\n", imp); } } @@ -5225,7 +5225,7 @@ static void initialize_stack (RzCore *core, ut64 addr, ut64 size) { } static void cmd_esil_mem(RzCore *core, const char *input) { - RzAnalEsil *esil = core->anal->esil; + RzAnalysisEsil *esil = core->analysis->esil; RzIOMap *stack_map; ut64 curoff = core->offset; const char *patt = ""; @@ -5245,11 +5245,11 @@ static void cmd_esil_mem(RzCore *core, const char *input) { int noNULL = rz_config_get_i (core->config, "esil.noNULL"); int verbose = rz_config_get_i (core->config, "esil.verbose"); unsigned int addrsize = rz_config_get_i (core->config, "esil.addr.size"); - if (!(esil = rz_anal_esil_new (stacksize, iotrap, addrsize))) { + if (!(esil = rz_analysis_esil_new (stacksize, iotrap, addrsize))) { return; } - rz_anal_esil_setup (esil, core->anal, romem, stats, noNULL); // setup io - core->anal->esil = esil; + rz_analysis_esil_setup (esil, core->analysis, romem, stats, noNULL); // setup io + core->analysis->esil = esil; esil->verbose = verbose; { const char *s = rz_config_get (core->config, "cmd.esil.intr"); @@ -5407,30 +5407,30 @@ static ut64 opc = UT64_MAX; static ut8 *regstate = NULL; static void esil_init (RzCore *core) { - const char *pc = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_PC); + const char *pc = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_PC); int noNULL = rz_config_get_i (core->config, "esil.noNULL"); - opc = rz_reg_getv (core->anal->reg, pc); + opc = rz_reg_getv (core->analysis->reg, pc); if (!opc || opc==UT64_MAX) { opc = core->offset; } - if (!core->anal->esil) { + if (!core->analysis->esil) { int iotrap = rz_config_get_i (core->config, "esil.iotrap"); ut64 stackSize = rz_config_get_i (core->config, "esil.stack.size"); unsigned int addrsize = rz_config_get_i (core->config, "esil.addr.size"); - if (!(core->anal->esil = rz_anal_esil_new (stackSize, iotrap, addrsize))) { + if (!(core->analysis->esil = rz_analysis_esil_new (stackSize, iotrap, addrsize))) { RZ_FREE (regstate); return; } - rz_anal_esil_setup (core->anal->esil, core->anal, 0, 0, noNULL); + rz_analysis_esil_setup (core->analysis->esil, core->analysis, 0, 0, noNULL); } free (regstate); - regstate = rz_reg_arena_peek (core->anal->reg); + regstate = rz_reg_arena_peek (core->analysis->reg); } static void esil_fini(RzCore *core) { - const char *pc = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_PC); - rz_reg_arena_poke (core->anal->reg, regstate); - rz_reg_setv (core->anal->reg, pc, opc); + const char *pc = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_PC); + rz_reg_arena_poke (core->analysis->reg, regstate); + rz_reg_setv (core->analysis->reg, pc, opc); RZ_FREE (regstate); } #endif @@ -5478,7 +5478,7 @@ typedef struct { int size; } AeaMemItem; -static int mymemwrite(RzAnalEsil *esil, ut64 addr, const ut8 *buf, int len) { +static int mymemwrite(RzAnalysisEsil *esil, ut64 addr, const ut8 *buf, int len) { RzListIter *iter; AeaMemItem *n; rz_list_foreach (mymemxsw, iter, n) { @@ -5486,7 +5486,7 @@ static int mymemwrite(RzAnalEsil *esil, ut64 addr, const ut8 *buf, int len) { return len; } } - if (!rz_io_is_valid_offset (esil->anal->iob.io, addr, 0)) { + if (!rz_io_is_valid_offset (esil->analysis->iob.io, addr, 0)) { return false; } n = RZ_NEW (AeaMemItem); @@ -5498,7 +5498,7 @@ static int mymemwrite(RzAnalEsil *esil, ut64 addr, const ut8 *buf, int len) { return len; } -static int mymemread(RzAnalEsil *esil, ut64 addr, ut8 *buf, int len) { +static int mymemread(RzAnalysisEsil *esil, ut64 addr, ut8 *buf, int len) { RzListIter *iter; AeaMemItem *n; rz_list_foreach (mymemxsr, iter, n) { @@ -5506,7 +5506,7 @@ static int mymemread(RzAnalEsil *esil, ut64 addr, ut8 *buf, int len) { return len; } } - if (!rz_io_is_valid_offset (esil->anal->iob.io, addr, 0)) { + if (!rz_io_is_valid_offset (esil->analysis->iob.io, addr, 0)) { return false; } n = RZ_NEW (AeaMemItem); @@ -5518,7 +5518,7 @@ static int mymemread(RzAnalEsil *esil, ut64 addr, ut8 *buf, int len) { return len; } -static int myregwrite(RzAnalEsil *esil, const char *name, ut64 *val) { +static int myregwrite(RzAnalysisEsil *esil, const char *name, ut64 *val) { AeaStats *stats = esil->user; if (oldregread && !strcmp (name, oldregread)) { rz_list_pop (stats->regread); @@ -5540,7 +5540,7 @@ static int myregwrite(RzAnalEsil *esil, const char *name, ut64 *val) { return 0; } -static int myregread(RzAnalEsil *esil, const char *name, ut64 *val, int *len) { +static int myregread(RzAnalysisEsil *esil, const char *name, ut64 *val, int *len) { AeaStats *stats = esil->user; if (!IS_DIGIT (*name)) { if (!contains (stats->inputregs, name)) { @@ -5611,19 +5611,19 @@ static void showmem_json (RzList *list, PJ *pj) { } static bool cmd_aea(RzCore* core, int mode, ut64 addr, int length) { - RzAnalEsil *esil; + RzAnalysisEsil *esil; int ptr, ops, ops_end = 0, len, buf_sz, maxopsize; ut64 addr_end; AeaStats stats; const char *esilstr; - RzAnalOp aop = RZ_EMPTY; + RzAnalysisOp aop = RZ_EMPTY; ut8 *buf; RzList* regnow; PJ *pj = NULL; if (!core) { return false; } - maxopsize = rz_anal_archinfo (core->anal, RZ_ANAL_ARCHINFO_MAX_OP_SIZE); + maxopsize = rz_analysis_archinfo (core->analysis, RZ_ANAL_ARCHINFO_MAX_OP_SIZE); if (maxopsize < 1) { maxopsize = 16; } @@ -5650,16 +5650,16 @@ static bool cmd_aea(RzCore* core, int mode, ut64 addr, int length) { aea_stats_init (&stats); //esil_init (core); - //esil = core->anal->esil; - rz_reg_arena_push (core->anal->reg); + //esil = core->analysis->esil; + rz_reg_arena_push (core->analysis->reg); int stacksize = rz_config_get_i (core->config, "esil.stack.depth"); bool iotrap = rz_config_get_i (core->config, "esil.iotrap"); int romem = rz_config_get_i (core->config, "esil.romem"); int stats1 = rz_config_get_i (core->config, "esil.stats"); int noNULL = rz_config_get_i (core->config, "esil.noNULL"); unsigned int addrsize = rz_config_get_i (core->config, "esil.addr.size"); - esil = rz_anal_esil_new (stacksize, iotrap, addrsize); - rz_anal_esil_setup (esil, core->anal, romem, stats1, noNULL); // setup io + esil = rz_analysis_esil_new (stacksize, iotrap, addrsize); + rz_analysis_esil_setup (esil, core->analysis, romem, stats1, noNULL); // setup io # define hasNext(x) (x&1) ? (addrcb.hook_mem_read = mymemread; esil->nowrite = true; for (ops = ptr = 0; ptr < buf_sz && hasNext (mode); ops++, ptr += len) { - len = rz_anal_op (core->anal, &aop, addr + ptr, buf + ptr, buf_sz - ptr, RZ_ANAL_OP_MASK_ESIL | RZ_ANAL_OP_MASK_HINT); + len = rz_analysis_op (core->analysis, &aop, addr + ptr, buf + ptr, buf_sz - ptr, RZ_ANAL_OP_MASK_ESIL | RZ_ANAL_OP_MASK_HINT); esilstr = RZ_STRBUF_SAFEGET (&aop.esil); if (RZ_STR_ISNOTEMPTY (esilstr)) { if (len < 1) { @@ -5687,17 +5687,17 @@ static bool cmd_aea(RzCore* core, int mode, ut64 addr, int length) { } } } - rz_anal_esil_parse (esil, esilstr); - rz_anal_esil_stack_free (esil); + rz_analysis_esil_parse (esil, esilstr); + rz_analysis_esil_stack_free (esil); } - rz_anal_op_fini (&aop); + rz_analysis_op_fini (&aop); } esil->nowrite = false; esil->cb.hook_reg_write = NULL; esil->cb.hook_reg_read = NULL; //esil_fini (core); - rz_anal_esil_free (esil); - rz_reg_arena_pop (core->anal->reg); + rz_analysis_esil_free (esil); + rz_reg_arena_pop (core->analysis->reg); regnow = rz_list_newf (free); { RzListIter *iter; @@ -5811,12 +5811,12 @@ static bool cmd_aea(RzCore* core, int mode, ut64 addr, int length) { } static void cmd_aespc(RzCore *core, ut64 addr, ut64 until_addr, int off) { - RzAnalEsil *esil = core->anal->esil; + RzAnalysisEsil *esil = core->analysis->esil; int i, j = 0; ut8 *buf; - RzAnalOp aop = {0}; + RzAnalysisOp aop = {0}; int ret , bsize = RZ_MAX (4096, core->blocksize); - const int mininstrsz = rz_anal_archinfo (core->anal, RZ_ANAL_ARCHINFO_MIN_OP_SIZE); + const int mininstrsz = rz_analysis_archinfo (core->analysis, RZ_ANAL_ARCHINFO_MIN_OP_SIZE); const int minopcode = RZ_MAX (1, mininstrsz); const char *pc = rz_reg_get_name (core->dbg->reg, RZ_REG_NAME_PC); int stacksize = rz_config_get_i (core->config, "esil.stack.depth"); @@ -5826,10 +5826,10 @@ static void cmd_aespc(RzCore *core, ut64 addr, ut64 until_addr, int off) { // eprintf (" aesB %llx %llx %d\n", addr, until_addr, off); // 0x%08llx %d %s\n", aop.addr, ret, aop.mnemonic); if (!esil) { eprintf ("Warning: cmd_espc: creating new esil instance\n"); - if (!(esil = rz_anal_esil_new (stacksize, iotrap, addrsize))) { + if (!(esil = rz_analysis_esil_new (stacksize, iotrap, addrsize))) { return; } - core->anal->esil = esil; + core->analysis->esil = esil; } buf = malloc (bsize); if (!buf) { @@ -5840,7 +5840,7 @@ static void cmd_aespc(RzCore *core, ut64 addr, ut64 until_addr, int off) { if (addr == -1) { addr = rz_reg_getv (core->dbg->reg, pc); } - (void)rz_anal_esil_setup (core->anal->esil, core->anal, 0, 0, 0); // int romem, int stats, int nonull) { + (void)rz_analysis_esil_setup (core->analysis->esil, core->analysis, 0, 0, 0); // int romem, int stats, int nonull) { ut64 cursp = rz_reg_getv (core->dbg->reg, "SP"); ut64 oldoff = core->offset; const ut64 flags = RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_HINT | RZ_ANAL_OP_MASK_ESIL | RZ_ANAL_OP_MASK_DISASM; @@ -5858,7 +5858,7 @@ static void cmd_aespc(RzCore *core, ut64 addr, ut64 until_addr, int off) { if (addr == until_addr) { break; } - ret = rz_anal_op (core->anal, &aop, addr, buf + i, bsize - i, flags); + ret = rz_analysis_op (core->analysis, &aop, addr, buf + i, bsize - i, flags); if (ret < 1) { eprintf ("Failed analysis at 0x%08"PFMT64x"\n", addr); break; @@ -5867,12 +5867,12 @@ static void cmd_aespc(RzCore *core, ut64 addr, ut64 until_addr, int off) { if (aop.type == RZ_ANAL_OP_TYPE_CALL) { // nothing } else { - rz_reg_setv (core->anal->reg, "PC", aop.addr + aop.size); + rz_reg_setv (core->analysis->reg, "PC", aop.addr + aop.size); rz_reg_setv (core->dbg->reg, "PC", aop.addr + aop.size); const char *e = RZ_STRBUF_SAFEGET (&aop.esil); if (e && *e) { // eprintf (" 0x%08llx %d %s\n", aop.addr, ret, aop.mnemonic); - (void)rz_anal_esil_parse (esil, e); + (void)rz_analysis_esil_parse (esil, e); } } int inc = (core->search->align > 0)? core->search->align - 1: ret - 1; @@ -5881,7 +5881,7 @@ static void cmd_aespc(RzCore *core, ut64 addr, ut64 until_addr, int off) { } i += inc; addr += ret; // aop.size; - rz_anal_op_fini (&aop); + rz_analysis_op_fini (&aop); } rz_core_seek (core, oldoff, true); rz_reg_setv (core->dbg->reg, "SP", cursp); @@ -5889,15 +5889,15 @@ static void cmd_aespc(RzCore *core, ut64 addr, ut64 until_addr, int off) { static const char _handler_no_name[] = ""; static int _aeli_iter(dictkv* kv, void* ud) { - RzAnalEsilInterrupt* interrupt = kv->u; + RzAnalysisEsilInterrupt* interrupt = kv->u; rz_cons_printf ("%3" PFMT64x ": %s\n", kv->k, interrupt->handler->name ? interrupt->handler->name : _handler_no_name); return 0; } -static void rz_anal_aefa(RzCore *core, const char *arg) { +static void rz_analysis_aefa(RzCore *core, const char *arg) { ut64 to = rz_num_math (core->num, arg); ut64 at, from = core->offset; - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, to, -1); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, to, -1); if (!from || from == UT64_MAX) { if (fcn) { from = fcn->addr; @@ -5930,13 +5930,13 @@ static void rz_anal_aefa(RzCore *core, const char *arg) { rz_core_cmd0 (core, "arA"); #if 0 // get results - const char *fcn_type = rz_type_func_ret (core->anal->sdb_types, fcn->name); - const char *key = resolve_fcn_name (core->anal, fcn->name); + const char *fcn_type = rz_type_func_ret (core->analysis->sdb_types, fcn->name); + const char *key = resolve_fcn_name (core->analysis, fcn->name); RzList *list = rz_core_get_func_args (core, key); if (!rz_list_empty (list)) { eprintf ("HAS signature\n"); } - int i, nargs = 3; // rz_type_func_args_count (core->anal->sdb_types, fcn->name); + int i, nargs = 3; // rz_type_func_args_count (core->analysis->sdb_types, fcn->name); if (nargs > 0) { int i; eprintf ("NARGS %d (%s)\n", nargs, key); @@ -5957,16 +5957,16 @@ static void __core_anal_appcall(RzCore *core, const char *input) { int i = 0; rz_list_foreach (args, iter, arg) { const char *alias = sdb_fmt ("A%d", i); - rz_reg_setv (core->anal->reg, alias, rz_num_math (core->num, arg)); + rz_reg_setv (core->analysis->reg, alias, rz_num_math (core->num, arg)); i++; } - ut64 sp = rz_reg_getv (core->anal->reg, "SP"); - rz_reg_setv (core->anal->reg, "SP", 0); + ut64 sp = rz_reg_getv (core->analysis->reg, "SP"); + rz_reg_setv (core->analysis->reg, "SP", 0); - rz_reg_setv (core->anal->reg, "PC", core->offset); + rz_reg_setv (core->analysis->reg, "PC", core->offset); rz_core_cmd0 (core, "aesu 0"); - rz_reg_setv (core->anal->reg, "SP", sp); + rz_reg_setv (core->analysis->reg, "SP", sp); free (inp); // rz_reg_arena_pop (core->dbg->reg); @@ -5974,19 +5974,19 @@ static void __core_anal_appcall(RzCore *core, const char *input) { static void __anal_esil_function(RzCore *core, ut64 addr) { RzListIter *iter; - RzAnalBlock *bb; - if (!core->anal->esil) { + RzAnalysisBlock *bb; + if (!core->analysis->esil) { rz_core_cmd0 (core, "aeim"); - // core->anal->esil = rz_anal_esil_new (stacksize, 0, addrsize); + // core->analysis->esil = rz_analysis_esil_new (stacksize, 0, addrsize); } - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, addr, RZ_ANAL_FCN_TYPE_FCN | RZ_ANAL_FCN_TYPE_SYM); if (fcn) { // emulate every instruction in the function recursively across all the basic blocks rz_list_foreach (fcn->bbs, iter, bb) { ut64 pc = bb->addr; ut64 end = bb->addr + bb->size; - RzAnalOp op; + RzAnalysisOp op; int ret, bbs = end - pc; if (bbs < 1 || bbs > 0xfffff || pc >= end) { eprintf ("Invalid block size\n"); @@ -6003,7 +6003,7 @@ static void __anal_esil_function(RzCore *core, ut64 addr) { while (pc < end) { left = RZ_MIN (end - pc, 32); // rz_asm_set_pc (core->rasm, pc); - ret = rz_anal_op (core->anal, &op, pc, buf + pc - bb->addr, left, RZ_ANAL_OP_MASK_HINT | RZ_ANAL_OP_MASK_ESIL); // read overflow + ret = rz_analysis_op (core->analysis, &op, pc, buf + pc - bb->addr, left, RZ_ANAL_OP_MASK_HINT | RZ_ANAL_OP_MASK_ESIL); // read overflow opskip = false; switch (op.type) { case RZ_ANAL_OP_TYPE_CALL: @@ -6013,27 +6013,27 @@ static void __anal_esil_function(RzCore *core, ut64 addr) { } if (ret) { if (opskip) { - rz_reg_set_value_by_role (core->anal->reg, RZ_REG_NAME_PC, pc); - rz_anal_esil_parse (core->anal->esil, RZ_STRBUF_SAFEGET (&op.esil)); - rz_anal_esil_dumpstack (core->anal->esil); - rz_anal_esil_stack_free (core->anal->esil); + rz_reg_set_value_by_role (core->analysis->reg, RZ_REG_NAME_PC, pc); + rz_analysis_esil_parse (core->analysis->esil, RZ_STRBUF_SAFEGET (&op.esil)); + rz_analysis_esil_dumpstack (core->analysis->esil); + rz_analysis_esil_stack_free (core->analysis->esil); } pc += op.size; } else { pc += 4; // XXX } - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); } free (buf); } } else { eprintf ("Cannot find function at 0x%08" PFMT64x "\n", addr); } - rz_anal_esil_free (core->anal->esil); + rz_analysis_esil_free (core->analysis->esil); } static void cmd_anal_esil(RzCore *core, const char *input) { - RzAnalEsil *esil = core->anal->esil; + RzAnalysisEsil *esil = core->analysis->esil; ut64 addr = core->offset; ut64 adr ; char *n, *n1; @@ -6047,7 +6047,7 @@ static void cmd_anal_esil(RzCore *core, const char *input) { unsigned int addrsize = rz_config_get_i (core->config, "esil.addr.size"); const char *until_expr = NULL; - RzAnalOp *op = NULL; + RzAnalysisOp *op = NULL; switch (input[0]) { case 'p': // "aep" @@ -6062,16 +6062,16 @@ static void cmd_anal_esil(RzCore *core, const char *input) { } break; case 0: - rz_anal_pin_list (core->anal); + rz_analysis_pin_list (core->analysis); break; case '-': if (input[2]) { addr = rz_num_math (core->num, input + 2); } - rz_anal_pin_unset (core->anal, addr); + rz_analysis_pin_unset (core->analysis, addr); break; case ' ': - rz_anal_pin (core->anal, addr, input + 2); + rz_analysis_pin (core->analysis, addr, input + 2); break; default: rz_core_cmd_help (core, help_msg_aep); @@ -6084,23 +6084,23 @@ static void cmd_anal_esil(RzCore *core, const char *input) { break; case '*': // XXX: this is wip, not working atm - if (core->anal->esil) { - rz_cons_printf ("trap: %d\n", core->anal->esil->trap); - rz_cons_printf ("trap-code: %d\n", core->anal->esil->trap_code); + if (core->analysis->esil) { + rz_cons_printf ("trap: %d\n", core->analysis->esil->trap); + rz_cons_printf ("trap-code: %d\n", core->analysis->esil->trap_code); } else { eprintf ("esil vm not initialized. run `aei`\n"); } break; case ' ': - //rz_anal_esil_eval (core->anal, input+1); - if (!esil && !(core->anal->esil = esil = rz_anal_esil_new (stacksize, iotrap, addrsize))) { + //rz_analysis_esil_eval (core->analysis, input+1); + if (!esil && !(core->analysis->esil = esil = rz_analysis_esil_new (stacksize, iotrap, addrsize))) { return; } - rz_anal_esil_setup (esil, core->anal, romem, stats, noNULL); // setup io - rz_anal_esil_set_pc (esil, core->offset); - rz_anal_esil_parse (esil, input + 1); - rz_anal_esil_dumpstack (esil); - rz_anal_esil_stack_free (esil); + rz_analysis_esil_setup (esil, core->analysis, romem, stats, noNULL); // setup io + rz_analysis_esil_set_pc (esil, core->offset); + rz_analysis_esil_parse (esil, input + 1); + rz_analysis_esil_dumpstack (esil); + rz_analysis_esil_stack_free (esil); break; case 's': // "aes" // "aes" "aeso" "aesu" "aesue" @@ -6116,16 +6116,16 @@ static void cmd_anal_esil(RzCore *core, const char *input) { case 'l': // "aesl" { ut64 pc = rz_debug_reg_get (core->dbg, "PC"); - RzAnalOp *op = rz_core_anal_op (core, pc, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_HINT); + RzAnalysisOp *op = rz_core_analysis_op (core, pc, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_HINT); // TODO: honor hint if (!op) { break; } rz_core_esil_step (core, UT64_MAX, NULL, NULL, false); rz_debug_reg_set (core->dbg, "PC", pc + op->size); - rz_anal_esil_set_pc (esil, pc + op->size); + rz_analysis_esil_set_pc (esil, pc + op->size); rz_core_cmd0 (core, ".ar*"); - rz_anal_op_free (op); + rz_analysis_op_free (op); } break; case 'b': // "aesb" if (!rz_core_esil_step_back (core)) { @@ -6201,13 +6201,13 @@ static void cmd_anal_esil(RzCore *core, const char *input) { rz_core_cmd0 (core, ".ar*"); } else if (!input[2] || input[2] == ' ') { // "aeso [addr]" // step over - op = rz_core_anal_op (core, rz_reg_getv (core->anal->reg, - rz_reg_get_name (core->anal->reg, RZ_REG_NAME_PC)), RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_HINT); + op = rz_core_analysis_op (core, rz_reg_getv (core->analysis->reg, + rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_PC)), RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_HINT); if (op && op->type == RZ_ANAL_OP_TYPE_CALL) { until_addr = op->addr + op->size; } rz_core_esil_step (core, until_addr, until_expr, NULL, false); - rz_anal_op_free (op); + rz_analysis_op_free (op); rz_core_cmd0 (core, ".ar*"); } else { eprintf ("Usage: aesou [addr] # step over until given address\n"); @@ -6250,14 +6250,14 @@ static void cmd_anal_esil(RzCore *core, const char *input) { if (input[1] == '?') { // "aec?" rz_core_cmd_help (core, help_msg_aec); } else if (input[1] == 's') { // "aecs" - const char *pc = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_PC); + const char *pc = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_PC); for (;;) { if (!rz_core_esil_step (core, UT64_MAX, NULL, NULL, false)) { break; } rz_core_cmd0 (core, ".ar*"); addr = rz_num_get (core->num, pc); - op = rz_core_anal_op (core, addr, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_HINT); + op = rz_core_analysis_op (core, addr, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_HINT); if (!op) { break; } @@ -6268,25 +6268,25 @@ static void cmd_anal_esil(RzCore *core, const char *input) { eprintf ("trap at 0x%08" PFMT64x "\n", addr); break; } - rz_anal_op_free (op); + rz_analysis_op_free (op); op = NULL; - if (core->anal->esil->trap || core->anal->esil->trap_code) { + if (core->analysis->esil->trap || core->analysis->esil->trap_code) { break; } } if (op) { - rz_anal_op_free (op); + rz_analysis_op_free (op); op = NULL; } } else if (input[1] == 'c') { // "aecc" - const char *pc = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_PC); + const char *pc = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_PC); for (;;) { if (!rz_core_esil_step (core, UT64_MAX, NULL, NULL, false)) { break; } rz_core_cmd0 (core, ".ar*"); addr = rz_num_get (core->num, pc); - op = rz_core_anal_op (core, addr, RZ_ANAL_OP_MASK_BASIC); + op = rz_core_analysis_op (core, addr, RZ_ANAL_OP_MASK_BASIC); if (!op) { break; } @@ -6294,14 +6294,14 @@ static void cmd_anal_esil(RzCore *core, const char *input) { eprintf ("call at 0x%08" PFMT64x "\n", addr); break; } - rz_anal_op_free (op); + rz_analysis_op_free (op); op = NULL; - if (core->anal->esil->trap || core->anal->esil->trap_code) { + if (core->analysis->esil->trap || core->analysis->esil->trap_code) { break; } } if (op) { - rz_anal_op_free (op); + rz_analysis_op_free (op); } } else { // "aec" -> continue until ^C @@ -6334,22 +6334,22 @@ static void cmd_anal_esil(RzCore *core, const char *input) { if (esil) { sdb_reset (esil->stats); } - rz_anal_esil_free (esil); - core->anal->esil = NULL; + rz_analysis_esil_free (esil); + core->analysis->esil = NULL; break; case 0: //lolololol - rz_anal_esil_free (esil); + rz_analysis_esil_free (esil); // reinitialize { - const char *pc = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_PC); - if (pc && rz_reg_getv (core->anal->reg, pc) == 0LL) { + const char *pc = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_PC); + if (pc && rz_reg_getv (core->analysis->reg, pc) == 0LL) { rz_core_cmd0 (core, "ar PC=$$"); } } - if (!(esil = core->anal->esil = rz_anal_esil_new (stacksize, iotrap, addrsize))) { + if (!(esil = core->analysis->esil = rz_analysis_esil_new (stacksize, iotrap, addrsize))) { return; } - rz_anal_esil_setup (esil, core->anal, romem, stats, noNULL); // setup io + rz_analysis_esil_setup (esil, core->analysis, romem, stats, noNULL); // setup io esil->verbose = (int)rz_config_get_i (core->config, "esil.verbose"); /* restore user settings for interrupt handling */ { @@ -6393,7 +6393,7 @@ static void cmd_anal_esil(RzCore *core, const char *input) { case 'i': // aeli interrupts switch (input[2]) { case ' ': // "aeli" with arguments - if (!rz_anal_esil_load_interrupts_from_lib (esil, input + 3)) { + if (!rz_analysis_esil_load_interrupts_from_lib (esil, input + 3)) { eprintf ("Failed to load interrupts from '%s'.", input + 3); } break; @@ -6404,8 +6404,8 @@ static void cmd_anal_esil(RzCore *core, const char *input) { break; case 'r': // "aelir" if (esil && esil->interrupts) { - RzAnalEsilInterrupt* interrupt = dict_getu (esil->interrupts, rz_num_math (core->num, input + 3)); - rz_anal_esil_interrupt_free (esil, interrupt); + RzAnalysisEsilInterrupt* interrupt = dict_getu (esil->interrupts, rz_num_math (core->num, input + 3)); + rz_analysis_esil_interrupt_free (esil, interrupt); } break; } @@ -6421,13 +6421,13 @@ static void cmd_anal_esil(RzCore *core, const char *input) { } else if (!input[1]) { rz_core_cmd0 (core, ".aeg*;agg"); } else if (input[1] == ' ') { - rz_core_anal_esil_graph (core, input + 2); + rz_core_analysis_esil_graph (core, input + 2); } else if (input[1] == '*') { - RzAnalOp *aop = rz_core_anal_op (core, core->offset, RZ_ANAL_OP_MASK_ESIL); + RzAnalysisOp *aop = rz_core_analysis_op (core, core->offset, RZ_ANAL_OP_MASK_ESIL); if (aop) { const char *esilstr = rz_strbuf_get (&aop->esil); if (RZ_STR_ISNOTEMPTY (esilstr)) { - rz_core_anal_esil_graph (core, esilstr); + rz_core_analysis_esil_graph (core, esilstr); } } } else { @@ -6443,25 +6443,25 @@ static void cmd_anal_esil(RzCore *core, const char *input) { break; case 'f': // "aef" if (input[1] == 'a') { // "aefa" - rz_anal_aefa (core, rz_str_trim_head_ro (input + 2)); + rz_analysis_aefa (core, rz_str_trim_head_ro (input + 2)); } else { // This should be aefb -> because its emulating all the bbs - // anal ESIL to REIL. + // convert ESIL to REIL. __anal_esil_function (core, core->offset); } break; case 't': // "aet" switch (input[1]) { case 'r': // "aetr" { - // anal ESIL to REIL. - RzAnalEsil *esil = rz_anal_esil_new (stacksize, iotrap, addrsize); + // convert ESIL to REIL. + RzAnalysisEsil *esil = rz_analysis_esil_new (stacksize, iotrap, addrsize); if (!esil) { return; } - rz_anal_esil_to_reil_setup (esil, core->anal, romem, stats); - rz_anal_esil_set_pc (esil, core->offset); - rz_anal_esil_parse (esil, input + 2); - rz_anal_esil_dumpstack (esil); - rz_anal_esil_free (esil); + rz_analysis_esil_to_reil_setup (esil, core->analysis, romem, stats); + rz_analysis_esil_set_pc (esil, core->offset); + rz_analysis_esil_parse (esil, input + 2); + rz_analysis_esil_dumpstack (esil); + rz_analysis_esil_free (esil); break; } case 's': // "aets" @@ -6475,7 +6475,7 @@ static void cmd_anal_esil(RzCore *core, const char *input) { eprintf ("ESIL trace already started\n"); break; } - esil->trace = rz_anal_esil_trace_new (esil); + esil->trace = rz_analysis_esil_trace_new (esil); if (!esil->trace) { break; } @@ -6490,7 +6490,7 @@ static void cmd_anal_esil(RzCore *core, const char *input) { eprintf ("No ESIL trace started\n"); break; } - rz_anal_esil_trace_free (esil->trace); + rz_analysis_esil_trace_free (esil->trace); esil->trace = NULL; rz_config_set_i (core->config, "dbg.trace", false); break; @@ -6518,9 +6518,9 @@ static void cmd_anal_esil(RzCore *core, const char *input) { } else if (input[1] == '*') { cmd_aea (core, 1 + (1<<5), core->offset, rz_num_math (core->num, input+2)); } else if (input[1] == 'f') { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, -1); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, -1); if (fcn) { - cmd_aea (core, 1, rz_anal_function_min_addr (fcn), rz_anal_function_linear_size (fcn)); + cmd_aea (core, 1, rz_analysis_function_min_addr (fcn), rz_analysis_function_linear_size (fcn)); } } else { cmd_aea (core, 1, core->offset, (int)rz_num_math (core->num, input+2)); @@ -6528,9 +6528,9 @@ static void cmd_anal_esil(RzCore *core, const char *input) { break; case 'a': // "aea" { - RzReg *reg = core->anal->reg; + RzReg *reg = core->analysis->reg; ut64 pc = rz_reg_getv (reg, "PC"); - RzAnalOp *op = rz_core_anal_op (core, pc, 0); + RzAnalysisOp *op = rz_core_analysis_op (core, pc, 0); if (!op) { break; } @@ -6552,8 +6552,8 @@ static void cmd_anal_esil(RzCore *core, const char *input) { bool json = input[2] == 'j'; int a = json? 3: 2; ut64 addr = (input[a] == ' ')? rz_num_math (core->num, input + a): core->offset; - RzList *l = rz_anal_get_blocks_in (core->anal, addr); - RzAnalBlock *b; + RzList *l = rz_analysis_get_blocks_in (core->analysis, addr); + RzAnalysisBlock *b; RzListIter *iter; rz_list_foreach (l, iter, b) { int mode = json? (1<<4): 1; @@ -6561,21 +6561,21 @@ static void cmd_anal_esil(RzCore *core, const char *input) { break; } } else if (input[1] == 'f') { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, -1); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, -1); // "aeafj" if (fcn) { switch (input[2]) { case 'j': // "aeafj" - cmd_aea (core, 1<<4, rz_anal_function_min_addr (fcn), rz_anal_function_linear_size (fcn)); + cmd_aea (core, 1<<4, rz_analysis_function_min_addr (fcn), rz_analysis_function_linear_size (fcn)); break; default: - cmd_aea (core, 1, rz_anal_function_min_addr (fcn), rz_anal_function_linear_size (fcn)); + cmd_aea (core, 1, rz_analysis_function_min_addr (fcn), rz_analysis_function_linear_size (fcn)); break; } break; } } else if (input[1] == 'b') { // "aeab" - RzAnalBlock *bb = rz_anal_bb_from_offset (core->anal, core->offset); + RzAnalysisBlock *bb = rz_analysis_bb_from_offset (core->analysis, core->offset); if (bb) { switch (input[2]) { case 'j': // "aeabj" @@ -6604,9 +6604,9 @@ static void cmd_anal_esil(RzCore *core, const char *input) { break; } - RzAnalOp aop = RZ_EMPTY; + RzAnalysisOp aop = RZ_EMPTY; bufsz = rz_hex_str2bin (hex, (ut8*)hex); - ret = rz_anal_op (core->anal, &aop, core->offset, + ret = rz_analysis_op (core->analysis, &aop, core->offset, (const ut8*)hex, bufsz, RZ_ANAL_OP_MASK_ESIL); if (ret>0) { const char *str = RZ_STRBUF_SAFEGET (&aop.esil); @@ -6614,7 +6614,7 @@ static void cmd_anal_esil(RzCore *core, const char *input) { cmd_anal_esil (core, str2); free (str2); } - rz_anal_op_fini (&aop); + rz_analysis_op_fini (&aop); break; } case '?': // "ae?" @@ -6719,7 +6719,7 @@ static void cmd_anal_opcode(RzCore *core, const char *input) { { RzList *hooks; RzListIter *iter; - RzAnalCycleHook *hook; + RzAnalysisCycleHook *hook; char *instr_tmp = NULL; int ccl = input[1]? rz_num_math (core->num, &input[2]): 0; //get cycles to look for int cr = rz_config_get_i (core->config, "asm.cmt.right"); @@ -6732,7 +6732,7 @@ static void cmd_anal_opcode(RzCore *core, const char *input) { rz_config_set_i (core->config, "asm.lines", false); rz_config_set_i (core->config, "asm.xrefs", false); - hooks = rz_core_anal_cycles (core, ccl); //analyse + hooks = rz_core_analysis_cycles (core, ccl); //analysisyse rz_cons_clear_line (1); rz_list_foreach (hooks, iter, hook) { instr_tmp = rz_core_disassemble_instr (core, hook->addr, 1); @@ -6769,7 +6769,7 @@ static void cmd_anal_opcode(RzCore *core, const char *input) { } break; case '*': - rz_core_anal_hint_list (core->anal, input[0]); + rz_core_analysis_hint_list (core->analysis, input[0]); break; case 0: case ' ': { @@ -6792,14 +6792,14 @@ static void cmd_anal_opcode(RzCore *core, const char *input) { break; case 'f': { - RzAnalOp aop = RZ_EMPTY; + RzAnalysisOp aop = RZ_EMPTY; ut8 data[32]; rz_io_read_at (core->io, core->offset, data, sizeof (data)); - int ret = rz_anal_op (core->anal, &aop, core->offset, data, sizeof (data), RZ_ANAL_OP_MASK_ESIL); + int ret = rz_analysis_op (core->analysis, &aop, core->offset, data, sizeof (data), RZ_ANAL_OP_MASK_ESIL); if (ret > 0) { const char *arg = input + 2; const char *expr = RZ_STRBUF_SAFEGET (&aop.esil); - RzStrBuf *b = rz_anal_esil_dfg_filter_expr (core->anal, expr, arg); + RzStrBuf *b = rz_analysis_esil_dfg_filter_expr (core->analysis, expr, arg); if (b) { char *s = rz_strbuf_drain (b); rz_cons_printf ("%s\n", s); @@ -6825,7 +6825,7 @@ static void cmd_anal_jumps(RzCore *core, const char *input) { static void cmd_anal_aftertraps(RzCore *core, const char *input) { int bufi, minop = 1; // 4 ut8 *buf; - RzAnalOp op = {0}; + RzAnalysisOp op = {0}; ut64 addr, addr_end; ut64 len = rz_num_math (core->num, input); if (len > 0xffffff) { @@ -6886,7 +6886,7 @@ static void cmd_anal_aftertraps(RzCore *core, const char *input) { if (!bufi) { rz_io_read_at (core->io, addr, buf, 4096); } - if (rz_anal_op (core->anal, &op, addr, buf + bufi, 4096 - bufi, RZ_ANAL_OP_MASK_BASIC)) { + if (rz_analysis_op (core->analysis, &op, addr, buf + bufi, 4096 - bufi, RZ_ANAL_OP_MASK_BASIC)) { if (op.size < 1) { // XXX must be +4 on arm/mips/.. like we do in disasm.c op.size = minop; @@ -6910,7 +6910,7 @@ static void cmd_anal_aftertraps(RzCore *core, const char *input) { } addr += (op.size > 0)? op.size : 1; bufi += (op.size > 0)? op.size : 1; - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); } rz_cons_break_pop (); free (buf); @@ -6954,7 +6954,7 @@ ctrl_c: } static void _anal_calls(RzCore *core, ut64 addr, ut64 addr_end, bool printCommands, bool importsOnly) { - RzAnalOp op; + RzAnalysisOp op; int depth = rz_config_get_i (core->config, "anal.depth"); const int addrbytes = core->io->addrbytes; const int bsz = 4096; @@ -6974,7 +6974,7 @@ static void _anal_calls(RzCore *core, ut64 addr, ut64 addr_end, bool printComman return; } memset (block1, -1, bsz); - int minop = rz_anal_archinfo (core->anal, RZ_ANAL_ARCHINFO_MIN_OP_SIZE); + int minop = rz_analysis_archinfo (core->analysis, RZ_ANAL_ARCHINFO_MIN_OP_SIZE); if (minop < 1) { minop = 1; } @@ -6993,15 +6993,15 @@ static void _anal_calls(RzCore *core, ut64 addr, ut64 addr_end, bool printComman addr += bsz; continue; } - RzAnalHint *hint = rz_anal_hint_get (core->anal, addr); + RzAnalysisHint *hint = rz_analysis_hint_get (core->analysis, addr); if (hint && hint->bits) { setBits = hint->bits; } - rz_anal_hint_free (hint); + rz_analysis_hint_free (hint); if (setBits != core->rasm->bits) { rz_config_set_i (core->config, "asm.bits", setBits); } - if (rz_anal_op (core->anal, &op, addr, buf + bufi, bsz - bufi, 0) > 0) { + if (rz_analysis_op (core->analysis, &op, addr, buf + bufi, bsz - bufi, 0) > 0) { if (op.size < 1) { op.size = minop; } @@ -7025,9 +7025,9 @@ static void _anal_calls(RzCore *core, ut64 addr, ut64 addr_end, bool printComman if (isValidCall) { #if JAYRO_03 if (!anal_is_bad_call (core, from, to, addr, buf, bufi)) { - fcn = rz_anal_get_fcn_in (core->anal, op.jump, RZ_ANAL_FCN_TYPE_ROOT); + fcn = rz_analysis_get_fcn_in (core->analysis, op.jump, RZ_ANAL_FCN_TYPE_ROOT); if (!fcn) { - rz_core_anal_fcn (core, op.jump, addr, RZ_ANAL_REF_TYPE_CALL, depth); + rz_core_analysis_fcn (core, op.jump, addr, RZ_ANAL_REF_TYPE_CALL, depth); } } #else @@ -7036,9 +7036,9 @@ static void _anal_calls(RzCore *core, ut64 addr, ut64 addr_end, bool printComman rz_cons_printf ("af @ 0x%08" PFMT64x"\n", op.jump); } else { // add xref here - rz_anal_xrefs_set (core->anal, addr, op.jump, RZ_ANAL_REF_TYPE_CALL); + rz_analysis_xrefs_set (core->analysis, addr, op.jump, RZ_ANAL_REF_TYPE_CALL); if (rz_io_is_valid_offset (core->io, op.jump, 1)) { - rz_core_anal_fcn (core, op.jump, addr, RZ_ANAL_REF_TYPE_CALL, depth); + rz_core_analysis_fcn (core, op.jump, addr, RZ_ANAL_REF_TYPE_CALL, depth); } } #endif @@ -7052,7 +7052,7 @@ static void _anal_calls(RzCore *core, ut64 addr, ut64 addr_end, bool printComman } addr += op.size; bufi += addrbytes * op.size; - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); } rz_cons_break_pop (); free (buf); @@ -7137,13 +7137,13 @@ static void cmd_anal_syscall(RzCore *core, const char *input) { if (input[1] == 'a') { if (input[2] == ' ') { if (!isalpha ((ut8)input[3]) && (n = rz_num_math (num, input + 3)) >= 0 ) { - si = rz_syscall_get (core->anal->syscall, n, -1); + si = rz_syscall_get (core->analysis->syscall, n, -1); if (si) { rz_cons_printf (".equ SYS_%s %s\n", si->name, syscallNumber (n)); } else eprintf ("Unknown syscall number\n"); } else { - n = rz_syscall_get_num (core->anal->syscall, input + 3); + n = rz_syscall_get_num (core->analysis->syscall, input + 3); if (n != -1) { rz_cons_printf (".equ SYS_%s %s\n", input + 3, syscallNumber (n)); } else { @@ -7151,7 +7151,7 @@ static void cmd_anal_syscall(RzCore *core, const char *input) { } } } else { - list = rz_syscall_list (core->anal->syscall); + list = rz_syscall_list (core->analysis->syscall); rz_list_foreach (list, iter, si) { rz_cons_printf (".equ SYS_%s %s\n", si->name, syscallNumber (si->num)); @@ -7161,13 +7161,13 @@ static void cmd_anal_syscall(RzCore *core, const char *input) { } else { if (input[1] == ' ') { if (!isalpha ((ut8)input[2]) && (n = rz_num_math (num, input + 2)) >= 0 ) { - si = rz_syscall_get (core->anal->syscall, n, -1); + si = rz_syscall_get (core->analysis->syscall, n, -1); if (si) { rz_cons_printf ("#define SYS_%s %s\n", si->name, syscallNumber (n)); } else eprintf ("Unknown syscall number\n"); } else { - n = rz_syscall_get_num (core->anal->syscall, input + 2); + n = rz_syscall_get_num (core->analysis->syscall, input + 2); if (n != -1) { rz_cons_printf ("#define SYS_%s %s\n", input + 2, syscallNumber (n)); } else { @@ -7175,7 +7175,7 @@ static void cmd_anal_syscall(RzCore *core, const char *input) { } } } else { - list = rz_syscall_list (core->anal->syscall); + list = rz_syscall_list (core->analysis->syscall); rz_list_foreach (list, iter, si) { rz_cons_printf ("#define SYS_%s %s\n", si->name, syscallNumber (si->num)); @@ -7185,17 +7185,17 @@ static void cmd_anal_syscall(RzCore *core, const char *input) { } break; case 'k': // "ask" - cmd_sdbk (core->anal->syscall->db, input + 1); + cmd_sdbk (core->analysis->syscall->db, input + 1); break; case 'l': // "asl" if (input[1] == ' ') { if (!isalpha ((ut8)input[2]) && (n = rz_num_math (num, input + 2)) >= 0 ) { - si = rz_syscall_get (core->anal->syscall, n, -1); + si = rz_syscall_get (core->analysis->syscall, n, -1); if (si) rz_cons_println (si->name); else eprintf ("Unknown syscall number\n"); } else { - n = rz_syscall_get_num (core->anal->syscall, input + 2); + n = rz_syscall_get_num (core->analysis->syscall, input + 2); if (n != -1) { rz_cons_printf ("%s\n", syscallNumber (n)); } else { @@ -7203,7 +7203,7 @@ static void cmd_anal_syscall(RzCore *core, const char *input) { } } } else { - list = rz_syscall_list (core->anal->syscall); + list = rz_syscall_list (core->analysis->syscall); rz_list_foreach (list, iter, si) { rz_cons_printf ("%s = 0x%02x.%s\n", si->name, si->swi, syscallNumber (si->num)); @@ -7214,7 +7214,7 @@ static void cmd_anal_syscall(RzCore *core, const char *input) { case 'j': // "asj" pj = pj_new (); pj_a (pj); - list = rz_syscall_list (core->anal->syscall); + list = rz_syscall_list (core->analysis->syscall); rz_list_foreach (list, iter, si) { pj_o (pj); pj_ks (pj, "name", si->name); @@ -7234,7 +7234,7 @@ static void cmd_anal_syscall(RzCore *core, const char *input) { case ' ': { const char *sn = rz_str_trim_head_ro (input + 1); - st64 num = rz_syscall_get_num (core->anal->syscall, sn); + st64 num = rz_syscall_get_num (core->analysis->syscall, sn); if (num < 1) { num = (int)rz_num_get (core->num, sn); } @@ -7251,7 +7251,7 @@ static void cmd_anal_syscall(RzCore *core, const char *input) { static void anal_axg(RzCore *core, const char *input, int level, Sdb *db, int opts, PJ* pj) { char arg[32], pre[128]; RzListIter *iter; - RzAnalRef *ref; + RzAnalysisRef *ref; ut64 addr = core->offset; bool is_json = opts & RZ_CORE_ANAL_JSON; bool is_rz = opts & RZ_CORE_ANAL_GRAPHBODY; @@ -7269,10 +7269,10 @@ static void anal_axg(RzCore *core, const char *input, int level, Sdb *db, int op memset (pre, ' ', sizeof (pre)); strcpy (pre + spaces, "- "); - RzList *xrefs = rz_anal_xrefs_get (core->anal, addr); + RzList *xrefs = rz_analysis_xrefs_get (core->analysis, addr); bool open_object = false; if (!rz_list_empty (xrefs)) { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, addr, -1); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, addr, -1); if (fcn) { if (is_rz) { rz_cons_printf ("agn 0x%08"PFMT64x" %s\n", fcn->addr, fcn->name); @@ -7313,7 +7313,7 @@ static void anal_axg(RzCore *core, const char *input, int level, Sdb *db, int op } } rz_list_foreach (xrefs, iter, ref) { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, ref->addr, -1); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, ref->addr, -1); if (fcn) { if (is_rz) { rz_cons_printf ("agn 0x%08"PFMT64x" %s\n", fcn->addr, fcn->name); @@ -7406,7 +7406,7 @@ static void anal_axg(RzCore *core, const char *input, int level, Sdb *db, int op } static void cmd_anal_ucall_ref (RzCore *core, ut64 addr) { - RzAnalFunction * fcn = rz_anal_get_function_at (core->anal, addr); + RzAnalysisFunction * fcn = rz_analysis_get_function_at (core->analysis, addr); if (fcn) { rz_cons_printf (" ; %s", fcn->name); } else { @@ -7417,15 +7417,15 @@ static void cmd_anal_ucall_ref (RzCore *core, ut64 addr) { static char *get_op_ireg(void *user, ut64 addr) { RzCore *core = (RzCore *)user; char *res = NULL; - RzAnalOp *op = rz_core_anal_op (core, addr, 0); + RzAnalysisOp *op = rz_core_analysis_op (core, addr, 0); if (op && op->ireg) { res = strdup (op->ireg); } - rz_anal_op_free (op); + rz_analysis_op_free (op); return res; } -static char *get_buf_asm(RzCore *core, ut64 from, ut64 addr, RzAnalFunction *fcn, bool color) { +static char *get_buf_asm(RzCore *core, ut64 from, ut64 addr, RzAnalysisFunction *fcn, bool color) { int has_color = core->print->flags & RZ_PRINT_FLAGS_COLOR; char str[512]; const int size = 12; @@ -7447,16 +7447,16 @@ static char *get_buf_asm(RzCore *core, ut64 from, ut64 addr, RzAnalFunction *fcn char *ba = malloc (ba_len); strcpy (ba, rz_strbuf_get (&asmop.buf_asm)); if (asm_subvar) { - core->parser->get_ptr_at = rz_anal_function_get_var_stackptr_at; - core->parser->get_reg_at = rz_anal_function_get_var_reg_at; + core->parser->get_ptr_at = rz_analysis_function_get_var_stackptr_at; + core->parser->get_reg_at = rz_analysis_function_get_var_reg_at; core->parser->get_op_ireg = get_op_ireg; rz_parse_subvar (core->parser, fcn, addr, asmop.size, ba, ba, sizeof (asmop.buf_asm)); } - RzAnalHint *hint = rz_anal_hint_get (core->anal, addr); + RzAnalysisHint *hint = rz_analysis_hint_get (core->analysis, addr); rz_parse_filter (core->parser, addr, core->flags, hint, ba, str, sizeof (str), core->print->big_endian); - rz_anal_hint_free (hint); + rz_analysis_hint_free (hint); rz_asm_op_set_asm (&asmop, ba); free (ba); if (color && has_color) { @@ -7477,12 +7477,12 @@ static bool cmd_anal_refs(RzCore *core, const char *input) { case '-': { // "ax-" RzList *list; RzListIter *iter; - RzAnalRef *ref; + RzAnalysisRef *ref; char *cp_inp = strdup (input + 1); char *ptr = cp_inp; rz_str_trim_head (ptr); if (!strcmp (ptr, "*")) { // "ax-*" - rz_anal_xrefs_init (core->anal); + rz_analysis_xrefs_init (core->analysis); } else { int n = rz_str_word_set0 (ptr); ut64 from = UT64_MAX, to = UT64_MAX; @@ -7497,14 +7497,14 @@ static bool cmd_anal_refs(RzCore *core, const char *input) { to = core->offset; break; } - list = rz_anal_xrefs_get (core->anal, to); + list = rz_analysis_xrefs_get (core->analysis, to); if (list) { rz_list_foreach (list, iter, ref) { if (from != UT64_MAX && from == ref->addr) { - rz_anal_xref_del (core->anal, ref->addr, ref->at); + rz_analysis_xref_del (core->analysis, ref->addr, ref->at); } if (from == UT64_MAX) { - rz_anal_xref_del (core->anal, ref->addr, ref->at); + rz_analysis_xref_del (core->analysis, ref->addr, ref->at); } } } @@ -7532,7 +7532,7 @@ static bool cmd_anal_refs(RzCore *core, const char *input) { case 'j': // "axj" case 'q': // "axq" case '*': // "ax*" - rz_anal_xrefs_list (core->anal, input[0]); + rz_analysis_xrefs_list (core->analysis, input[0]); break; case '.': { // "ax." char *tInput = strdup (input); @@ -7548,7 +7548,7 @@ static bool cmd_anal_refs(RzCore *core, const char *input) { } break; case 'm': { // "axm" RzList *list; - RzAnalRef *ref; + RzAnalysisRef *ref; RzListIter *iter; char *ptr = strdup (rz_str_trim_head_ro (input + 1)); int n = rz_str_word_set0 (ptr); @@ -7566,10 +7566,10 @@ static bool cmd_anal_refs(RzCore *core, const char *input) { return false; } //get all xrefs pointing to addr - list = rz_anal_xrefs_get (core->anal, addr); + list = rz_analysis_xrefs_get (core->analysis, addr); rz_list_foreach (list, iter, ref) { - rz_cons_printf ("0x%"PFMT64x" %s\n", ref->addr, rz_anal_xrefs_type_tostring (ref->type)); - rz_anal_xrefs_set (core->anal, ref->addr, at, ref->type); + rz_cons_printf ("0x%"PFMT64x" %s\n", ref->addr, rz_analysis_xrefs_type_tostring (ref->type)); + rz_analysis_xrefs_set (core->analysis, ref->addr, at, ref->type); } rz_list_free (list); free (ptr); @@ -7583,8 +7583,8 @@ static bool cmd_anal_refs(RzCore *core, const char *input) { break; } RzList *list = NULL; - RzAnalFunction *fcn; - RzAnalRef *ref; + RzAnalysisFunction *fcn; + RzAnalysisRef *ref; RzListIter *iter; char *space = strchr (input, ' '); if (space) { @@ -7592,7 +7592,7 @@ static bool cmd_anal_refs(RzCore *core, const char *input) { } else { addr = core->offset; } - list = rz_anal_xrefs_get (core->anal, addr); + list = rz_analysis_xrefs_get (core->analysis, addr); if (list) { if (input[1] == 'q') { // "axtq" rz_list_foreach (list, iter, ref) { @@ -7605,11 +7605,11 @@ static bool cmd_anal_refs(RzCore *core, const char *input) { } pj_a (pj); rz_list_foreach (list, iter, ref) { - fcn = rz_anal_get_fcn_in (core->anal, ref->addr, 0); + fcn = rz_analysis_get_fcn_in (core->analysis, ref->addr, 0); char *str = get_buf_asm (core, addr, ref->addr, fcn, false); pj_o (pj); pj_kn (pj, "from", ref->addr); - pj_ks (pj, "type", rz_anal_xrefs_type_tostring (ref->type)); + pj_ks (pj, "type", rz_analysis_xrefs_type_tostring (ref->type)); pj_ks (pj, "opcode", str); if (fcn) { pj_kn (pj, "fcn_addr", fcn->addr); @@ -7640,7 +7640,7 @@ static bool cmd_anal_refs(RzCore *core, const char *input) { } } } - char *refname = core->anal->coreb.getNameDelta (core, ref->at); + char *refname = core->analysis->coreb.getNameDelta (core, ref->at); if (refname) { rz_str_replace_ch (refname, ' ', 0, true); pj_ks (pj, "refname", refname); @@ -7664,7 +7664,7 @@ static bool cmd_anal_refs(RzCore *core, const char *input) { free (str); } if (input[2] != '*') { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, addr, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, addr, 0); rz_cons_printf ("agn 0x%" PFMT64x " \"%s\"\n", addr, fcn?fcn->name: "$$"); } rz_list_foreach (list, iter, ref) { @@ -7676,11 +7676,11 @@ static bool cmd_anal_refs(RzCore *core, const char *input) { rz_cons_printf ("CCa 0x%" PFMT64x " \"XREF type %d at 0x%" PFMT64x"%s\n", ref->addr, ref->type, addr, iter->n? ",": ""); } else { // axt - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; rz_list_foreach (list, iter, ref) { - fcn = rz_anal_get_fcn_in (core->anal, ref->addr, 0); + fcn = rz_analysis_get_fcn_in (core->analysis, ref->addr, 0); char *buf_asm = get_buf_asm (core, addr, ref->addr, fcn, true); - const char *comment = rz_meta_get_string (core->anal, RZ_META_TYPE_COMMENT, ref->addr); + const char *comment = rz_meta_get_string (core->analysis, RZ_META_TYPE_COMMENT, ref->addr); char *print_comment = NULL; const char *nl = comment ? strchr (comment, '\n') : NULL; if (nl) { // display only until the first newline @@ -7691,7 +7691,7 @@ static bool cmd_anal_refs(RzCore *core, const char *input) { : rz_str_newf ("%s", fcn ? fcn->name : "(nofunc)"); free (print_comment); rz_cons_printf ("%s 0x%" PFMT64x " [%s] %s\n", - buf_fcn, ref->addr, rz_anal_xrefs_type_tostring (ref->type), buf_asm); + buf_fcn, ref->addr, rz_analysis_xrefs_type_tostring (ref->type), buf_asm); free (buf_asm); free (buf_fcn); } @@ -7712,30 +7712,30 @@ static bool cmd_anal_refs(RzCore *core, const char *input) { } break; case 'f': if (input[1] == 'f') { // "axff" - RzAnalFunction * fcn = rz_anal_get_fcn_in (core->anal, addr, 0); + RzAnalysisFunction * fcn = rz_analysis_get_fcn_in (core->analysis, addr, 0); RzListIter *iter; PJ *pj = NULL; - RzAnalRef *refi; + RzAnalysisRef *refi; if (input[2] == 'j') { // "axffj" // start a new JSON object pj = pj_new (); pj_a (pj); } if (fcn) { - RzList *refs = rz_anal_function_get_refs (fcn); + RzList *refs = rz_analysis_function_get_refs (fcn); rz_list_foreach (refs, iter, refi) { RzFlagItem *f = rz_flag_get_at (core->flags, refi->addr, true); const char *name = f ? f->name: ""; if (pj) { pj_o (pj); - pj_ks (pj, "type", rz_anal_xrefs_type_tostring(refi->type)); + pj_ks (pj, "type", rz_analysis_xrefs_type_tostring(refi->type)); pj_kn (pj, "at", refi->at); pj_kn (pj, "ref", refi->addr); pj_ks (pj, "name", name); pj_end (pj); } else { rz_cons_printf ("%s 0x%08"PFMT64x" 0x%08"PFMT64x" %s\n", - rz_anal_xrefs_type_tostring(refi->type), refi->at, refi->addr, name); + rz_analysis_xrefs_type_tostring(refi->type), refi->at, refi->addr, name); } } if (pj) { @@ -7749,7 +7749,7 @@ static bool cmd_anal_refs(RzCore *core, const char *input) { } else { // "axf" RzAsmOp asmop; RzList *list, *list_ = NULL; - RzAnalRef *ref; + RzAnalysisRef *ref; RzListIter *iter; char *space = strchr (input, ' '); if (space) { @@ -7757,14 +7757,14 @@ static bool cmd_anal_refs(RzCore *core, const char *input) { } else { addr = core->offset; } - RzAnalFunction * fcn = rz_anal_get_fcn_in (core->anal, addr, 0); + RzAnalysisFunction * fcn = rz_analysis_get_fcn_in (core->analysis, addr, 0); if (input[1] == '.') { // "axf." - list = list_ = rz_anal_xrefs_get_from (core->anal, addr); + list = list_ = rz_analysis_xrefs_get_from (core->analysis, addr); if (!list) { - list = rz_anal_function_get_refs (fcn); + list = rz_analysis_function_get_refs (fcn); } } else { - list = rz_anal_refs_get (core->anal, addr); + list = rz_analysis_refs_get (core->analysis, addr); } if (list) { @@ -7779,7 +7779,7 @@ static bool cmd_anal_refs(RzCore *core, const char *input) { } pj_a (pj); rz_list_foreach (list, iter, ref) { - // TODO: Use rz_core_anal_op(DISASM) instead of all those 4 lines + // TODO: Use rz_core_analysis_op(DISASM) instead of all those 4 lines ut8 buf[16]; rz_io_read_at (core->io, ref->addr, buf, sizeof (buf)); rz_asm_set_pc (core->rasm, ref->addr); @@ -7787,7 +7787,7 @@ static bool cmd_anal_refs(RzCore *core, const char *input) { pj_o (pj); pj_kn (pj, "from", ref->at); pj_kn (pj, "to", ref->addr); - pj_ks (pj, "type", rz_anal_xrefs_type_tostring (ref->type)); + pj_ks (pj, "type", rz_analysis_xrefs_type_tostring (ref->type)); pj_ks (pj, "opcode", rz_asm_op_get_asm (&asmop)); pj_end (pj); } @@ -7814,10 +7814,10 @@ static bool cmd_anal_refs(RzCore *core, const char *input) { rz_io_read_at (core->io, ref->addr, buf, sizeof (buf)); rz_asm_set_pc (core->rasm, ref->addr); rz_asm_disassemble (core->rasm, &asmop, buf, sizeof(buf)); - RzAnalHint *hint = rz_anal_hint_get (core->anal, ref->addr); + RzAnalysisHint *hint = rz_analysis_hint_get (core->analysis, ref->addr); rz_parse_filter (core->parser, ref->addr, core->flags, hint, rz_asm_op_get_asm (&asmop), str, sizeof (str), core->print->big_endian); - rz_anal_hint_free (hint); + rz_analysis_hint_free (hint); if (has_color) { desc = desc_to_free = rz_print_colorize_opcode (core->print, str, core->cons->context->pal.reg, core->cons->context->pal.num, false, fcn ? fcn->addr : 0); @@ -7829,8 +7829,8 @@ static bool cmd_anal_refs(RzCore *core, const char *input) { ref->type ? ref->type : ' ', ref->addr, desc); if (ref->type == RZ_ANAL_REF_TYPE_CALL) { - RzAnalOp aop; - rz_anal_op (core->anal, &aop, ref->addr, buf, sizeof(buf), RZ_ANAL_OP_MASK_BASIC); + RzAnalysisOp aop; + rz_analysis_op (core->analysis, &aop, ref->addr, buf, sizeof(buf), RZ_ANAL_OP_MASK_BASIC); if (aop.type == RZ_ANAL_OP_TYPE_UCALL) { cmd_anal_ucall_ref (core, ref->addr); } @@ -7860,7 +7860,7 @@ static bool cmd_anal_refs(RzCore *core, const char *input) { int n = rz_str_word_set0 (ptr); ut64 at = core->offset; ut64 addr = UT64_MAX; - RzAnalRefType reftype = rz_anal_xrefs_type (input[0]); + RzAnalysisRefType reftype = rz_analysis_xrefs_type (input[0]); switch (n) { case 2: // get at at = rz_num_math (core->num, rz_str_word_get0 (ptr, 1)); @@ -7872,7 +7872,7 @@ static bool cmd_anal_refs(RzCore *core, const char *input) { free (ptr); return false; } - rz_anal_xrefs_set (core->anal, at, addr, reftype); + rz_analysis_xrefs_set (core->analysis, at, addr, reftype); free (ptr); } break; @@ -7889,23 +7889,23 @@ static void cmd_anal_hint(RzCore *core, const char *input) { case '?': if (input[1]) { ut64 addr = rz_num_math (core->num, input + 1); - rz_core_anal_hint_print (core->anal, addr, 0); + rz_core_analysis_hint_print (core->analysis, addr, 0); } else { rz_core_cmd_help (core, help_msg_ah); } break; case '.': // "ah." - rz_core_anal_hint_print (core->anal, core->offset, 0); + rz_core_analysis_hint_print (core->analysis, core->offset, 0); break; case 'a': // "aha" set arch if (input[1] == ' ') { char *ptr = strdup (input + 2); rz_str_word_set0 (ptr); const char *arch = rz_str_word_get0 (ptr, 0); - rz_anal_hint_set_arch (core->anal, core->offset, !arch || strcmp (arch, "0") == 0 ? NULL : arch); + rz_analysis_hint_set_arch (core->analysis, core->offset, !arch || strcmp (arch, "0") == 0 ? NULL : arch); free (ptr); } else if (input[1] == '-') { - rz_anal_hint_unset_arch (core->anal, core->offset); + rz_analysis_hint_unset_arch (core->analysis, core->offset); } else { eprintf ("Missing argument\n"); } @@ -7913,8 +7913,8 @@ static void cmd_anal_hint(RzCore *core, const char *input) { case 'o': // "aho" if (input[1] == ' ') { const char *arg = rz_str_trim_head_ro (input + 1); - int type = rz_anal_optype_from_string (arg); - rz_anal_hint_set_type (core->anal, core->offset, type); + int type = rz_analysis_optype_from_string (arg); + rz_analysis_hint_set_type (core->analysis, core->offset, type); } else { eprintf ("Usage: aho [type] # can be mov, jmp, call, ...\n"); } @@ -7928,10 +7928,10 @@ static void cmd_anal_hint(RzCore *core, const char *input) { rz_num_math (core->num, rz_str_word_get0 (ptr, 1)); } bits = rz_num_math (core->num, rz_str_word_get0 (ptr, 0)); - rz_anal_hint_set_bits (core->anal, core->offset, bits); + rz_analysis_hint_set_bits (core->analysis, core->offset, bits); free (ptr); } else if (input[1] == '-') { - rz_anal_hint_unset_bits (core->anal, core->offset); + rz_analysis_hint_unset_bits (core->analysis, core->offset); } else { eprintf ("Missing argument\n"); } @@ -7940,10 +7940,10 @@ static void cmd_anal_hint(RzCore *core, const char *input) { if (input[1] == '?') { rz_core_cmd_help (core, help_msg_ahi); } else if (isdigit (input[1])) { - rz_anal_hint_set_nword (core->anal, core->offset, input[1] - '0'); + rz_analysis_hint_set_nword (core->analysis, core->offset, input[1] - '0'); input++; } else if (input[1] == '-') { // "ahi-" - rz_anal_hint_set_immbase (core->anal, core->offset, 0); + rz_analysis_hint_set_immbase (core->analysis, core->offset, 0); } if (input[1] == ' ') { // You can either specify immbase with letters, or numbers @@ -7961,79 +7961,79 @@ static void cmd_anal_hint(RzCore *core, const char *input) { (input[2] == 'S') ? 80 : // syscall (int) rz_num_math (core->num, input + 1); } - rz_anal_hint_set_immbase (core->anal, core->offset, base); + rz_analysis_hint_set_immbase (core->analysis, core->offset, base); } else if (input[1] != '?' && input[1] != '-') { eprintf ("|ERROR| Usage: ahi \n"); } break; case 'h': // "ahh" if (input[1] == '-') { - rz_anal_hint_unset_high (core->anal, core->offset); + rz_analysis_hint_unset_high (core->analysis, core->offset); } else if (input[1] == ' ') { - rz_anal_hint_set_high (core->anal, rz_num_math (core->num, input + 1)); + rz_analysis_hint_set_high (core->analysis, rz_num_math (core->num, input + 1)); } else { - rz_anal_hint_set_high (core->anal, core->offset); + rz_analysis_hint_set_high (core->analysis, core->offset); } break; case 'c': // "ahc" if (input[1] == ' ') { - rz_anal_hint_set_jump ( - core->anal, core->offset, + rz_analysis_hint_set_jump ( + core->analysis, core->offset, rz_num_math (core->num, input + 1)); } else if (input[1] == '-') { - rz_anal_hint_unset_jump (core->anal, core->offset); + rz_analysis_hint_unset_jump (core->analysis, core->offset); } break; case 'f': // "ahf" if (input[1] == ' ') { - rz_anal_hint_set_fail ( - core->anal, core->offset, + rz_analysis_hint_set_fail ( + core->analysis, core->offset, rz_num_math (core->num, input + 1)); } else if (input[1] == '-') { - rz_anal_hint_unset_fail (core->anal, core->offset); + rz_analysis_hint_unset_fail (core->analysis, core->offset); } break; case 'F': // "ahF" set stackframe size if (input[1] == ' ') { - rz_anal_hint_set_stackframe ( - core->anal, core->offset, + rz_analysis_hint_set_stackframe ( + core->analysis, core->offset, rz_num_math (core->num, input + 1)); } else if (input[1] == '-') { - rz_anal_hint_unset_stackframe (core->anal, core->offset); + rz_analysis_hint_unset_stackframe (core->analysis, core->offset); } break; case 's': // "ahs" set size (opcode length) if (input[1] == ' ') { - rz_anal_hint_set_size (core->anal, core->offset, atoi (input + 1)); + rz_analysis_hint_set_size (core->analysis, core->offset, atoi (input + 1)); } else if (input[1] == '-') { - rz_anal_hint_unset_size (core->anal, core->offset); + rz_analysis_hint_unset_size (core->analysis, core->offset); } else { eprintf ("Usage: ahs 16\n"); } break; case 'S': // "ahS" set asm.syntax if (input[1] == ' ') { - rz_anal_hint_set_syntax (core->anal, core->offset, input + 2); + rz_analysis_hint_set_syntax (core->analysis, core->offset, input + 2); } else if (input[1] == '-') { - rz_anal_hint_unset_syntax (core->anal, core->offset); + rz_analysis_hint_unset_syntax (core->analysis, core->offset); } else { eprintf ("Usage: ahS att\n"); } break; case 'd': // "ahd" set opcode string if (input[1] == ' ') { - rz_anal_hint_set_opcode (core->anal, core->offset, input + 2); + rz_analysis_hint_set_opcode (core->analysis, core->offset, input + 2); } else if (input[1] == '-') { - rz_anal_hint_unset_opcode (core->anal, core->offset); + rz_analysis_hint_unset_opcode (core->analysis, core->offset); } else { eprintf ("Usage: ahd popall\n"); } break; case 'e': // "ahe" set ESIL string if (input[1] == ' ') { - rz_anal_hint_set_esil (core->anal, core->offset, input + 2); + rz_analysis_hint_set_esil (core->analysis, core->offset, input + 2); } else if (input[1] == '-') { - rz_anal_hint_unset_esil (core->anal, core->offset); + rz_analysis_hint_unset_esil (core->analysis, core->offset); } else { eprintf ("Usage: ahe r0,pc,=\n"); } @@ -8041,24 +8041,24 @@ static void cmd_anal_hint(RzCore *core, const char *input) { #if 0 case 'e': // set endian if (input[1] == ' ') { - rz_anal_hint_set_opcode (core->anal, core->offset, atoi (input + 1)); + rz_analysis_hint_set_opcode (core->analysis, core->offset, atoi (input + 1)); } else if (input[1] == '-') { - rz_anal_hint_unset_opcode (core->anal, core->offset); + rz_analysis_hint_unset_opcode (core->analysis, core->offset); } break; #endif case 'p': // "ahp" if (input[1] == ' ') { - rz_anal_hint_set_pointer (core->anal, core->offset, rz_num_math (core->num, input + 1)); + rz_analysis_hint_set_pointer (core->analysis, core->offset, rz_num_math (core->num, input + 1)); } else if (input[1] == '-') { // "ahp-" - rz_anal_hint_unset_pointer (core->anal, core->offset); + rz_analysis_hint_unset_pointer (core->analysis, core->offset); } break; case 'r': // "ahr" if (input[1] == ' ') { - rz_anal_hint_set_ret (core->anal, core->offset, rz_num_math (core->num, input + 1)); + rz_analysis_hint_set_ret (core->analysis, core->offset, rz_num_math (core->num, input + 1)); } else if (input[1] == '-') { // "ahr-" - rz_anal_hint_unset_ret (core->anal, core->offset); + rz_analysis_hint_unset_ret (core->analysis, core->offset); } case '*': // "ah*" case 'j': // "ahj" @@ -8067,25 +8067,25 @@ static void cmd_anal_hint(RzCore *core, const char *input) { char *ptr = strdup (rz_str_trim_head_ro (input + 2)); rz_str_word_set0 (ptr); ut64 addr = rz_num_math (core->num, rz_str_word_get0 (ptr, 0)); - rz_core_anal_hint_print (core->anal, addr, input[0]); + rz_core_analysis_hint_print (core->analysis, addr, input[0]); free (ptr); } else { - rz_core_anal_hint_list (core->anal, input[0]); + rz_core_analysis_hint_list (core->analysis, input[0]); } break; case 'v': // "ahv" if (input[1] == ' ') { - rz_anal_hint_set_val ( - core->anal, core->offset, + rz_analysis_hint_set_val ( + core->analysis, core->offset, rz_num_math (core->num, input + 1)); } else if (input[1] == '-') { - rz_anal_hint_unset_val (core->anal, core->offset); + rz_analysis_hint_unset_val (core->analysis, core->offset); } break; case '-': // "ah-" if (input[1]) { if (input[1] == '*') { - rz_anal_hint_clear (core->anal); + rz_analysis_hint_clear (core->analysis); } else { char *ptr = strdup (rz_str_trim_head_ro (input + 1)); ut64 addr; @@ -8100,11 +8100,11 @@ static void cmd_anal_hint(RzCore *core, const char *input) { } else { addr = core->offset; } - rz_anal_hint_del (core->anal, addr, size); + rz_analysis_hint_del (core->analysis, addr, size); free (ptr); } } else { - rz_anal_hint_clear (core->anal); + rz_analysis_hint_clear (core->analysis); } break; case 't': // "aht" switch (input[1]) { @@ -8113,7 +8113,7 @@ static void cmd_anal_hint(RzCore *core, const char *input) { rz_str_trim (off); int toff = rz_num_math (NULL, off); if (toff) { - RzList *typeoffs = rz_type_get_by_offset (core->anal->sdb_types, toff); + RzList *typeoffs = rz_type_get_by_offset (core->analysis->sdb_types, toff); RzListIter *iter; char *ty; rz_list_foreach (typeoffs, iter, ty) { @@ -8125,7 +8125,7 @@ static void cmd_anal_hint(RzCore *core, const char *input) { break; } case ' ': { - // rz_anal_hint_set_opcode (core->anal, core->offset, input + 2); + // rz_analysis_hint_set_opcode (core->analysis, core->offset, input + 2); const char *off = NULL; char *type = strdup (rz_str_trim_head_ro (input + 2)); char *idx = strchr (type, ' '); @@ -8153,12 +8153,12 @@ static void cmd_anal_hint(RzCore *core, const char *input) { } rz_str_trim (type); RzAsmOp asmop; - RzAnalOp op = { 0 }; + RzAnalysisOp op = { 0 }; ut8 code[128] = { 0 }; (void)rz_io_read_at (core->io, core->offset, code, sizeof (code)); rz_asm_set_pc (core->rasm, addr); (void)rz_asm_disassemble (core->rasm, &asmop, code, core->blocksize); - int ret = rz_anal_op (core->anal, &op, core->offset, code, core->blocksize, RZ_ANAL_OP_MASK_VAL); + int ret = rz_analysis_op (core->analysis, &op, core->offset, code, core->blocksize, RZ_ANAL_OP_MASK_VAL); if (ret >= 0) { // HACK: Just convert only the first imm seen for (i = 0; i < 3; i++) { @@ -8182,15 +8182,15 @@ static void cmd_anal_hint(RzCore *core, const char *input) { offimm += rz_num_math (NULL, off); } // TODO: Allow to select from multiple choices - RzList *otypes = rz_type_get_by_offset (core->anal->sdb_types, offimm); + RzList *otypes = rz_type_get_by_offset (core->analysis->sdb_types, offimm); RzListIter *iter; char *otype = NULL; rz_list_foreach (otypes, iter, otype) { // TODO: I don't think we should silently error, it is confusing if (!strcmp (type, otype)) { //eprintf ("Adding type offset %s\n", type); - rz_type_link_offset (core->anal->sdb_types, type, addr); - rz_anal_hint_set_offset (core->anal, addr, otype); + rz_type_link_offset (core->analysis->sdb_types, type, addr); + rz_analysis_hint_set_offset (core->analysis, addr, otype); break; } } @@ -8200,7 +8200,7 @@ static void cmd_anal_hint(RzCore *core, const char *input) { rz_list_free (otypes); } } - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); free (type); } break; case '?': @@ -8735,13 +8735,13 @@ static void cmd_anal_graph(RzCore *core, const char *input) { rz_core_visual_graph (core, NULL, NULL, false); break; case ' ':{ // "agf " - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, 0); rz_core_visual_graph (core, NULL, fcn, false); break; } case 'v': // "agfv" eprintf ("\rRendering graph...\n"); - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, RZ_ANAL_FCN_TYPE_ROOT); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, RZ_ANAL_FCN_TYPE_ROOT); if (fcn) { rz_core_visual_graph (core, NULL, fcn, 1); } @@ -8751,22 +8751,22 @@ static void cmd_anal_graph(RzCore *core, const char *input) { case 't': { // "agft" - tiny graph int e = rz_config_get_i (core->config, "graph.edges"); rz_config_set_i (core->config, "graph.edges", 0); - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, 0); rz_core_visual_graph (core, NULL, fcn, 2); rz_config_set_i (core->config, "graph.edges", e); break; } case 'd': // "agfd" if (input[2] == 'm') { - rz_core_anal_graph (core, rz_num_math (core->num, input + 3), + rz_core_analysis_graph (core, rz_num_math (core->num, input + 3), RZ_CORE_ANAL_GRAPHLINES); } else { - rz_core_anal_graph (core, rz_num_math (core->num, input + 2), + rz_core_analysis_graph (core, rz_num_math (core->num, input + 2), RZ_CORE_ANAL_GRAPHBODY); } break; case 'j': // "agfj" - rz_core_anal_graph (core, rz_num_math (core->num, input + 2), RZ_CORE_ANAL_JSON); + rz_core_analysis_graph (core, rz_num_math (core->num, input + 2), RZ_CORE_ANAL_JSON); break; case 'J': { // "agfJ" // Honor asm.graph=false in json as well @@ -8774,14 +8774,14 @@ static void cmd_anal_graph(RzCore *core, const char *input) { rz_config_hold_i (hc, "asm.offset", NULL); const bool o_graph_offset = rz_config_get_i (core->config, "graph.offset"); rz_config_set_i (core->config, "asm.offset", o_graph_offset); - rz_core_anal_graph (core, rz_num_math (core->num, input + 2), + rz_core_analysis_graph (core, rz_num_math (core->num, input + 2), RZ_CORE_ANAL_JSON | RZ_CORE_ANAL_JSON_FORMAT_DISASM); rz_config_hold_restore (hc); rz_config_hold_free (hc); break; } case 'g':{ // "agfg" - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, 0); rz_core_print_bb_gml (core, fcn); break; } @@ -8790,7 +8790,7 @@ static void cmd_anal_graph(RzCore *core, const char *input) { break; } case '*':{// "agf*" - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, 0); rz_core_print_bb_custom (core, fcn); break; } @@ -8821,7 +8821,7 @@ static void cmd_anal_graph(RzCore *core, const char *input) { rz_core_agraph_print (core, -1, input + 1); break; case 's': // "ags" - rz_core_anal_graph (core, rz_num_math (core->num, input + 1), 0); + rz_core_analysis_graph (core, rz_num_math (core->num, input + 1), 0); break; case 'C': // "agC" switch (input[1]) { @@ -8839,16 +8839,16 @@ static void cmd_anal_graph(RzCore *core, const char *input) { } case 'J': case 'j': - rz_core_anal_callgraph (core, UT64_MAX, RZ_GRAPH_FORMAT_JSON); + rz_core_analysis_callgraph (core, UT64_MAX, RZ_GRAPH_FORMAT_JSON); break; case 'g': - rz_core_anal_callgraph (core, UT64_MAX, RZ_GRAPH_FORMAT_GML); + rz_core_analysis_callgraph (core, UT64_MAX, RZ_GRAPH_FORMAT_GML); break; case 'd': - rz_core_anal_callgraph (core, UT64_MAX, RZ_GRAPH_FORMAT_DOT); + rz_core_analysis_callgraph (core, UT64_MAX, RZ_GRAPH_FORMAT_DOT); break; case '*': - rz_core_anal_callgraph (core, UT64_MAX, RZ_GRAPH_FORMAT_CMD); + rz_core_analysis_callgraph (core, UT64_MAX, RZ_GRAPH_FORMAT_CMD); break; default: eprintf ("Usage: see ag?\n"); @@ -8858,7 +8858,7 @@ static void cmd_anal_graph(RzCore *core, const char *input) { case 'r': // "agr" references graph switch (input[1]) { case '*': { - rz_core_anal_coderefs (core, core->offset); + rz_core_analysis_coderefs (core, core->offset); } break; default: { @@ -8876,10 +8876,10 @@ static void cmd_anal_graph(RzCore *core, const char *input) { ut64 from = rz_config_get_i (core->config, "graph.from"); ut64 to = rz_config_get_i (core->config, "graph.to"); RzListIter *it; - RzAnalFunction *fcn; - rz_list_foreach (core->anal->fcns, it, fcn) { + RzAnalysisFunction *fcn; + rz_list_foreach (core->analysis->fcns, it, fcn) { if ((from == UT64_MAX && to == UT64_MAX) || RZ_BETWEEN (from, fcn->addr, to)) { - rz_core_anal_coderefs (core, fcn->addr); + rz_core_analysis_coderefs (core, fcn->addr); } } break; @@ -8894,7 +8894,7 @@ static void cmd_anal_graph(RzCore *core, const char *input) { } break; case 'x': {// "agx" cross refs - RzGraph *graph = rz_core_anal_codexrefs (core, core->offset); + RzGraph *graph = rz_core_analysis_codexrefs (core, core->offset); if (!graph) { eprintf ("Couldn't create graph"); break; @@ -8904,7 +8904,7 @@ static void cmd_anal_graph(RzCore *core, const char *input) { break; } case 'i': { // "agi" import graph - RzGraph *graph = rz_core_anal_importxrefs (core); + RzGraph *graph = rz_core_analysis_importxrefs (core); if (!graph) { eprintf ("Couldn't create graph"); break; @@ -8931,20 +8931,20 @@ static void cmd_anal_graph(RzCore *core, const char *input) { core->graph->is_callgraph = false; break; case 'g': { - rz_core_anal_callgraph (core, core->offset, RZ_GRAPH_FORMAT_GMLFCN); + rz_core_analysis_callgraph (core, core->offset, RZ_GRAPH_FORMAT_GMLFCN); break; } case 'd': { - rz_core_anal_callgraph (core, core->offset, RZ_GRAPH_FORMAT_DOT); + rz_core_analysis_callgraph (core, core->offset, RZ_GRAPH_FORMAT_DOT); break; } case 'J': case 'j': { - rz_core_anal_callgraph (core, core->offset, RZ_GRAPH_FORMAT_JSON); + rz_core_analysis_callgraph (core, core->offset, RZ_GRAPH_FORMAT_JSON); break; } case '*': { - rz_core_anal_callgraph (core, core->offset, RZ_GRAPH_FORMAT_CMD); + rz_core_analysis_callgraph (core, core->offset, RZ_GRAPH_FORMAT_CMD); break; } default: @@ -8962,12 +8962,12 @@ static void cmd_anal_graph(RzCore *core, const char *input) { rz_core_cmdf (core, "agfk%s", input + 1); break; case 'l': // "agl" - rz_core_anal_graph (core, rz_num_math (core->num, input + 1), RZ_CORE_ANAL_GRAPHLINES); + rz_core_analysis_graph (core, rz_num_math (core->num, input + 1), RZ_CORE_ANAL_GRAPHLINES); break; case 'a': // "aga" switch (input[1]) { case '*': { - rz_core_anal_datarefs (core, core->offset); + rz_core_analysis_datarefs (core, core->offset); break; } default: @@ -8982,10 +8982,10 @@ static void cmd_anal_graph(RzCore *core, const char *input) { ut64 from = rz_config_get_i (core->config, "graph.from"); ut64 to = rz_config_get_i (core->config, "graph.to"); RzListIter *it; - RzAnalFunction *fcn; - rz_list_foreach (core->anal->fcns, it, fcn) { + RzAnalysisFunction *fcn; + rz_list_foreach (core->analysis->fcns, it, fcn) { if ((from == UT64_MAX && to == UT64_MAX) || RZ_BETWEEN (from, fcn->addr, to)) { - rz_core_anal_datarefs (core, fcn->addr); + rz_core_analysis_datarefs (core, fcn->addr); } } break; @@ -9002,19 +9002,19 @@ static void cmd_anal_graph(RzCore *core, const char *input) { case 'j': { ut64 addr = input[2] ? rz_num_math (core->num, input + 2) : core->offset; rz_core_gdiff_fcn (core, addr, core->offset); - rz_core_anal_graph (core, addr, diff_opt | RZ_CORE_ANAL_JSON); + rz_core_analysis_graph (core, addr, diff_opt | RZ_CORE_ANAL_JSON); break; } case 'J': { ut64 addr = input[2] ? rz_num_math (core->num, input + 2) : core->offset; rz_core_gdiff_fcn (core, addr, core->offset); - rz_core_anal_graph (core, addr, diff_opt | RZ_CORE_ANAL_JSON | RZ_CORE_ANAL_JSON_FORMAT_DISASM); + rz_core_analysis_graph (core, addr, diff_opt | RZ_CORE_ANAL_JSON | RZ_CORE_ANAL_JSON_FORMAT_DISASM); break; } case '*': { ut64 addr = input[2] ? rz_num_math (core->num, input + 2) : core->offset; rz_core_gdiff_fcn (core, addr, core->offset); - rz_core_anal_graph (core, addr, diff_opt | RZ_CORE_ANAL_STAR); + rz_core_analysis_graph (core, addr, diff_opt | RZ_CORE_ANAL_STAR); break; } case ' ': @@ -9030,7 +9030,7 @@ static void cmd_anal_graph(RzCore *core, const char *input) { case 'd': { ut64 addr = input[2]? rz_num_math (core->num, input + 2): core->offset; rz_core_gdiff_fcn (core, addr, core->offset); - rz_core_anal_graph (core, addr, diff_opt); + rz_core_analysis_graph (core, addr, diff_opt); break; } case 'w': { @@ -9060,7 +9060,7 @@ static void cmd_anal_graph(RzCore *core, const char *input) { } } -RZ_API int rz_core_anal_refs(RzCore *core, const char *input) { +RZ_API int rz_core_analysis_refs(RzCore *core, const char *input) { int cfg_debug = rz_config_get_i (core->config, "cfg.debug"); ut64 from, to; int rad; @@ -9112,7 +9112,7 @@ RZ_API int rz_core_anal_refs(RzCore *core, const char *input) { if (rad == 'j') { rz_cons_printf ("%s\"mapid\":\"%d\",\"refs\":{", nth? ",": "", map->id); } - rz_core_anal_search_xrefs (core, from, to, rad); + rz_core_analysis_search_xrefs (core, from, to, rad); if (rad == 'j') { rz_cons_printf ("}"); } @@ -9146,7 +9146,7 @@ RZ_API int rz_core_anal_refs(RzCore *core, const char *input) { if (rad == 'j') { rz_cons_printf ("{"); } - bool res = rz_core_anal_search_xrefs (core, from, to, rad); + bool res = rz_core_analysis_search_xrefs (core, from, to, rad); if (rad == 'j') { rz_cons_printf ("}\n"); } @@ -9157,16 +9157,16 @@ static const char *oldstr = NULL; static int compute_coverage(RzCore *core) { RzListIter *iter; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; int cov = 0; - cov += rz_meta_get_size(core->anal, RZ_META_TYPE_DATA); - rz_list_foreach (core->anal->fcns, iter, fcn) { + cov += rz_meta_get_size(core->analysis, RZ_META_TYPE_DATA); + rz_list_foreach (core->analysis->fcns, iter, fcn) { void **it; rz_pvector_foreach (&core->io->maps, it) { RzIOMap *map = *it; if (map->perm & RZ_PERM_X) { ut64 section_end = map->itv.addr + map->itv.size; - ut64 s = rz_anal_function_realsize (fcn); + ut64 s = rz_analysis_function_realsize (fcn); if (fcn->addr >= map->itv.addr && (fcn->addr + s) < section_end) { cov += s; } @@ -9190,11 +9190,11 @@ static int compute_code (RzCore* core) { static int compute_calls(RzCore *core) { RzListIter *iter; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; RzList *xrefs; int cov = 0; - rz_list_foreach (core->anal->fcns, iter, fcn) { - xrefs = rz_anal_function_get_xrefs (fcn); + rz_list_foreach (core->analysis->fcns, iter, fcn) { + xrefs = rz_analysis_function_get_xrefs (fcn); if (xrefs) { cov += rz_list_length (xrefs); rz_list_free (xrefs); @@ -9204,15 +9204,15 @@ static int compute_calls(RzCore *core) { return cov; } -static void rz_core_anal_info (RzCore *core, const char *input) { - int fcns = rz_list_length (core->anal->fcns); +static void rz_core_analysis_info (RzCore *core, const char *input) { + int fcns = rz_list_length (core->analysis->fcns); int strs = rz_flag_count (core->flags, "str.*"); int syms = rz_flag_count (core->flags, "sym.*"); int imps = rz_flag_count (core->flags, "sym.imp.*"); int code = compute_code (core); int covr = compute_coverage (core); int call = compute_calls (core); - int xrfs = rz_anal_xrefs_count (core->anal); + int xrfs = rz_analysis_xrefs_count (core->analysis); int cvpc = (code > 0)? (covr * 100.0 / code): 0; if (*input == 'j') { PJ *pj = pj_new (); @@ -9247,12 +9247,12 @@ static void rz_core_anal_info (RzCore *core, const char *input) { static void cmd_anal_aad(RzCore *core, const char *input) { RzListIter *iter; - RzAnalRef *ref; + RzAnalysisRef *ref; RzList *list = rz_list_newf (NULL); - rz_anal_xrefs_from (core->anal, list, "xref", RZ_ANAL_REF_TYPE_DATA, UT64_MAX); + rz_analysis_xrefs_from (core->analysis, list, "xref", RZ_ANAL_REF_TYPE_DATA, UT64_MAX); rz_list_foreach (list, iter, ref) { if (rz_io_is_valid_offset (core->io, ref->addr, false)) { - rz_core_anal_fcn (core, ref->at, ref->addr, RZ_ANAL_REF_TYPE_NULL, 1); + rz_core_analysis_fcn (core, ref->at, ref->addr, RZ_ANAL_REF_TYPE_NULL, 1); } } rz_list_free (list); @@ -9268,7 +9268,7 @@ static bool archIsThumbable(RzCore *core) { static void _CbInRangeAav(RzCore *core, ut64 from, ut64 to, int vsize, int count, void *user) { bool asterisk = user != NULL; - int arch_align = rz_anal_archinfo (core->anal, RZ_ANAL_ARCHINFO_ALIGN); + int arch_align = rz_analysis_archinfo (core->analysis, RZ_ANAL_ARCHINFO_ALIGN); bool vinfun = rz_config_get_i (core->config, "anal.vinfun"); int searchAlign = rz_config_get_i (core->config, "search.align"); int align = (searchAlign > 0)? searchAlign: arch_align; @@ -9283,13 +9283,13 @@ static void _CbInRangeAav(RzCore *core, ut64 from, ut64 to, int vsize, int count if (!itsFine) { return; } - if (core->anal->verbose) { + if (core->analysis->verbose) { eprintf ("Warning: aav: false positive in 0x%08"PFMT64x"\n", from); } } } if (!vinfun) { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, from, -1); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, from, -1); if (fcn) { return; } @@ -9299,8 +9299,8 @@ static void _CbInRangeAav(RzCore *core, ut64 from, ut64 to, int vsize, int count rz_cons_printf ("Cd %d @ 0x%"PFMT64x "\n", vsize, from); rz_cons_printf ("f+ aav.0x%08"PFMT64x "= 0x%08"PFMT64x, to, to); } else { - rz_anal_xrefs_set (core->anal, from, to, RZ_ANAL_REF_TYPE_NULL); - // rz_meta_set (core->anal, 'd', from, from + vsize, NULL); + rz_analysis_xrefs_set (core->analysis, from, to, RZ_ANAL_REF_TYPE_NULL); + // rz_meta_set (core->analysis, 'd', from, from + vsize, NULL); rz_core_cmdf (core, "Cd %d @ 0x%"PFMT64x "\n", vsize, from); if (!rz_flag_get_at (core->flags, to, false)) { char *name = rz_str_newf ("aav.0x%08"PFMT64x, to); @@ -9319,7 +9319,7 @@ static void cmd_anal_aav(RzCore *core, const char *input) { char *tmp = strdup (analin); bool asterisk = strchr (input, '*'); bool is_debug = rz_config_get_i (core->config, "cfg.debug"); - int archAlign = rz_anal_archinfo (core->anal, RZ_ANAL_ARCHINFO_ALIGN); + int archAlign = rz_analysis_archinfo (core->analysis, RZ_ANAL_ARCHINFO_ALIGN); seti ("search.align", archAlign); rz_config_set (core->config, "anal.in", "io.maps.x"); oldstr = rz_print_rowlog (core->print, "Finding xrefs in noncode section with anal.in=io.maps"); @@ -9411,9 +9411,9 @@ static void cmd_anal_abt(RzCore *core, const char *input) { return; } ut64 addr = rz_num_math (core->num, p + 1); - RzList *paths = rz_core_anal_graph_to (core, addr, n); + RzList *paths = rz_core_analysis_graph_to (core, addr, n); if (paths) { - RzAnalBlock *bb; + RzAnalysisBlock *bb; RzList *path; RzListIter *pathi; RzListIter *bbi; @@ -9444,11 +9444,11 @@ static void cmd_anal_abt(RzCore *core, const char *input) { break; case 'j': { ut64 addr = rz_num_math (core->num, input + 1); - RzAnalBlock *block = rz_anal_get_block_at (core->anal, core->offset); + RzAnalysisBlock *block = rz_analysis_get_block_at (core->analysis, core->offset); if (!block) { break; } - RzList *path = rz_anal_block_shortest_path (block, addr); + RzList *path = rz_analysis_block_shortest_path (block, addr); PJ *pj = pj_new (); if (pj) { pj_a (pj); @@ -9467,11 +9467,11 @@ static void cmd_anal_abt(RzCore *core, const char *input) { } case ' ': { ut64 addr = rz_num_math (core->num, input + 1); - RzAnalBlock *block = rz_anal_get_block_at (core->anal, core->offset); + RzAnalysisBlock *block = rz_analysis_get_block_at (core->analysis, core->offset); if (!block) { break; } - RzList *path = rz_anal_block_shortest_path (block, addr); + RzList *path = rz_analysis_block_shortest_path (block, addr); if (path) { RzListIter *it; rz_list_foreach (path, it, block) { @@ -9572,10 +9572,10 @@ static int cmd_anal_all(RzCore *core, const char *input) { cmd_anal_aav (core, input); break; case 'u': // "aau" - print areas not covered by functions - rz_core_anal_nofunclist (core, input + 1); + rz_core_analysis_nofunclist (core, input + 1); break; case 'i': // "aai" - rz_core_anal_info (core, input + 1); + rz_core_analysis_info (core, input + 1); break; case 's': // "aas" rz_core_cmd0 (core, "af @@= `isq~[0]`"); @@ -9587,7 +9587,7 @@ static int cmd_anal_all(RzCore *core, const char *input) { break; case 'F': // "aaF" "aaFa" if (!input[1] || input[1] == ' ' || input[1] == 'a') { - rz_core_anal_inflags (core, input + 1); + rz_core_analysis_inflags (core, input + 1); } else { eprintf ("Usage: aaF[a] - analyze functions in flag bounds (aaFa uses af/a2f instead of af+/afb+)\n"); } @@ -9595,10 +9595,10 @@ static int cmd_anal_all(RzCore *core, const char *input) { case 'n': // "aan" switch (input[1]) { case 'r': // "aanr" // all noreturn propagation - rz_core_anal_propagate_noreturn (core, UT64_MAX); + rz_core_analysis_propagate_noreturn (core, UT64_MAX); break; case 'g': // "aang" - rz_core_anal_autoname_all_golang_fcns (core); + rz_core_analysis_autoname_all_golang_fcns (core); break; case '?': eprintf ("Usage: aan[rg]\n"); @@ -9607,7 +9607,7 @@ static int cmd_anal_all(RzCore *core, const char *input) { eprintf ("aanr : auto-noreturn propagation\n"); break; default: // "aan" - rz_core_anal_autoname_all_fcns (core); + rz_core_analysis_autoname_all_fcns (core); } break; case 'p': // "aap" @@ -9636,7 +9636,7 @@ static int cmd_anal_all(RzCore *core, const char *input) { oldstr = rz_print_rowlog (core->print, "Analyze all flags starting with sym. and entry0 (aa)"); rz_cons_break_push (NULL, NULL); rz_cons_break_timeout (rz_config_get_i (core->config, "anal.timeout")); - rz_core_anal_all (core); + rz_core_analysis_all (core); rz_print_rowlog_done (core->print, oldstr); rz_core_task_yield (&core->tasks); // Run pending analysis immediately after analysis @@ -9657,7 +9657,7 @@ static int cmd_anal_all(RzCore *core, const char *input) { if (rz_str_startswith (rz_config_get (core->config, "bin.lang"), "go")) { oldstr = rz_print_rowlog (core->print, "Find function and symbol names from golang binaries (aang)"); rz_print_rowlog_done (core->print, oldstr); - rz_core_anal_autoname_all_golang_fcns (core); + rz_core_analysis_autoname_all_golang_fcns (core); oldstr = rz_print_rowlog (core->print, "Analyze all flags starting with sym.go. (aF @@ sym.go.*)"); rz_core_cmd0 (core, "aF @@ sym.go.*"); rz_print_rowlog_done (core->print, oldstr); @@ -9699,7 +9699,7 @@ static int cmd_anal_all(RzCore *core, const char *input) { } oldstr = rz_print_rowlog (core->print, "Analyze len bytes of instructions for references (aar)"); - (void)rz_core_anal_refs (core, ""); // "aar" + (void)rz_core_analysis_refs (core, ""); // "aar" rz_print_rowlog_done (core->print, oldstr); rz_core_task_yield (&core->tasks); if (rz_cons_is_breaked ()) { @@ -9737,18 +9737,18 @@ static int cmd_anal_all(RzCore *core, const char *input) { if (rz_config_get_i (core->config, "anal.autoname")) { oldstr = rz_print_rowlog (core->print, "Speculatively constructing a function name " "for fcn.* and sym.func.* functions (aan)"); - rz_core_anal_autoname_all_fcns (core); + rz_core_analysis_autoname_all_fcns (core); rz_print_rowlog_done (core->print, oldstr); rz_core_task_yield (&core->tasks); } - if (core->anal->opt.vars) { - RzAnalFunction *fcni; + if (core->analysis->opt.vars) { + RzAnalysisFunction *fcni; RzListIter *iter; - rz_list_foreach (core->anal->fcns, iter, fcni) { + rz_list_foreach (core->analysis->fcns, iter, fcni) { if (rz_cons_is_breaked ()) { break; } - RzList *list = rz_anal_var_list (core->anal, fcni, 'r'); + RzList *list = rz_analysis_var_list (core->analysis, fcni, 'r'); if (!rz_list_empty (list)) { rz_list_free (list); continue; @@ -9759,7 +9759,7 @@ static int cmd_anal_all(RzCore *core, const char *input) { } rz_core_task_yield (&core->tasks); } - if (!sdb_isempty (core->anal->sdb_zigns)) { + if (!sdb_isempty (core->analysis->sdb_zigns)) { oldstr = rz_print_rowlog (core->print, "Check for zignature from zigns folder (z/)"); rz_core_cmd0 (core, "z/"); rz_print_rowlog_done (core->print, oldstr); @@ -9772,15 +9772,15 @@ static int cmd_anal_all(RzCore *core, const char *input) { rz_core_task_yield (&core->tasks); oldstr = rz_print_rowlog (core->print, "Propagate noreturn information"); - rz_core_anal_propagate_noreturn (core, UT64_MAX); + rz_core_analysis_propagate_noreturn (core, UT64_MAX); rz_print_rowlog_done (core->print, oldstr); rz_core_task_yield (&core->tasks); // apply dwarf function information - Sdb *dwarf_sdb = sdb_ns (core->anal->sdb, "dwarf", 0); + Sdb *dwarf_sdb = sdb_ns (core->analysis->sdb, "dwarf", 0); if (dwarf_sdb) { oldstr = rz_print_rowlog (core->print, "Integrate dwarf function information."); - rz_anal_dwarf_integrate_functions (core->anal, core->flags, dwarf_sdb); + rz_analysis_dwarf_integrate_functions (core->analysis, core->flags, dwarf_sdb); rz_print_rowlog_done (core->print, oldstr); } @@ -9815,22 +9815,22 @@ static int cmd_anal_all(RzCore *core, const char *input) { break; case 't': { // "aat" char *off = input[1]? rz_str_trim_dup (input + 2): NULL; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; RzListIter *it; if (off && *off) { ut64 addr = rz_num_math (NULL, off); - fcn = rz_anal_get_function_at (core->anal, core->offset); + fcn = rz_analysis_get_function_at (core->analysis, core->offset); if (fcn) { rz_core_link_stroff (core, fcn); } else { eprintf ("Cannot find function at %08" PFMT64x "\n", addr); } } else { - if (rz_list_empty (core->anal->fcns)) { + if (rz_list_empty (core->analysis->fcns)) { eprintf ("Couldn't find any functions\n"); break; } - rz_list_foreach (core->anal->fcns, it, fcn) { + rz_list_foreach (core->analysis->fcns, it, fcn) { if (rz_cons_is_breaked ()) { break; } @@ -9849,11 +9849,11 @@ static int cmd_anal_all(RzCore *core, const char *input) { case 'e': // "aae" if (input[1] == 'f') { // "aaef" RzListIter *it; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; ut64 cur_seek = core->offset; - rz_list_foreach (core->anal->fcns, it, fcn) { + rz_list_foreach (core->analysis->fcns, it, fcn) { rz_core_seek (core, fcn->addr, true); - rz_core_anal_esil (core, "f", NULL); + rz_core_analysis_esil (core, "f", NULL); } rz_core_seek (core, cur_seek, true); } else if (input[1] == ' ') { @@ -9862,7 +9862,7 @@ static int cmd_anal_all(RzCore *core, const char *input) { if (addr) { *addr++ = 0; } - rz_core_anal_esil (core, len, addr); + rz_core_analysis_esil (core, len, addr); } else { ut64 at = core->offset; RzIOMap *map; @@ -9877,7 +9877,7 @@ static int cmd_anal_all(RzCore *core, const char *input) { if (to > from) { char *len = rz_str_newf (" 0x%"PFMT64x, to - from); rz_core_seek (core, from, true); - rz_core_anal_esil (core, len, NULL); + rz_core_analysis_esil (core, len, NULL); free (len); } else { eprintf ("Assert: anal.from > anal.to\n"); @@ -9887,7 +9887,7 @@ static int cmd_anal_all(RzCore *core, const char *input) { if (map->perm & RZ_PERM_X) { char *ss = rz_str_newf (" 0x%"PFMT64x, map->itv.size); rz_core_seek (core, map->itv.addr, true); - rz_core_anal_esil (core, ss, NULL); + rz_core_analysis_esil (core, ss, NULL); free (ss); } } @@ -9897,7 +9897,7 @@ static int cmd_anal_all(RzCore *core, const char *input) { } break; case 'r': - (void)rz_core_anal_refs (core, input + 1); + (void)rz_core_analysis_refs (core, input + 1); break; default: rz_core_cmd_help (core, help_msg_aa); @@ -9908,15 +9908,15 @@ static int cmd_anal_all(RzCore *core, const char *input) { } static bool anal_fcn_data (RzCore *core, const char *input) { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, RZ_ANAL_FCN_TYPE_ANY); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, RZ_ANAL_FCN_TYPE_ANY); if (fcn) { int i; bool gap = false; ut64 gap_addr = UT64_MAX; - ut32 fcn_size = rz_anal_function_size_from_entry (fcn); + ut32 fcn_size = rz_analysis_function_size_from_entry (fcn); char *bitmap = calloc (1, fcn_size); if (bitmap) { - RzAnalBlock *b; + RzAnalysisBlock *b; RzListIter *iter; rz_list_foreach (fcn->bbs, iter, b) { int f = b->addr - fcn->addr; @@ -9954,11 +9954,11 @@ static bool anal_fcn_data (RzCore *core, const char *input) { static bool anal_fcn_data_gaps (RzCore *core, const char *input) { ut64 end = UT64_MAX; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; RzListIter *iter; int i, wordsize = (core->rasm->bits == 64)? 8: 4; - rz_list_sort (core->anal->fcns, cmpaddr); - rz_list_foreach (core->anal->fcns, iter, fcn) { + rz_list_sort (core->analysis->fcns, cmpaddr); + rz_list_foreach (core->analysis->fcns, iter, fcn) { if (end != UT64_MAX) { int range = fcn->addr - end; if (range > 0) { @@ -9969,7 +9969,7 @@ static bool anal_fcn_data_gaps (RzCore *core, const char *input) { //rz_cons_printf ("Cd %d @ 0x%08"PFMT64x"\n", range, end); } } - end = fcn->addr + rz_anal_function_size_from_entry (fcn); + end = fcn->addr + rz_analysis_function_size_from_entry (fcn); } return true; } @@ -9978,17 +9978,17 @@ static void cmd_anal_rtti(RzCore *core, const char *input) { switch (input[0]) { case '\0': // "avr" case 'j': // "avrj" - rz_anal_rtti_print_at_vtable (core->anal, core->offset, input[0]); + rz_analysis_rtti_print_at_vtable (core->analysis, core->offset, input[0]); break; case 'a': // "avra" - rz_anal_rtti_print_all (core->anal, input[1]); + rz_analysis_rtti_print_all (core->analysis, input[1]); break; case 'r': // "avrr" - rz_anal_rtti_recover_all (core->anal); + rz_analysis_rtti_recover_all (core->analysis); break; case 'D': { // "avrD" char *name = rz_str_trim_dup (input + 1); - char *demangled = rz_anal_rtti_demangle_class_name (core->anal, name); + char *demangled = rz_analysis_rtti_demangle_class_name (core->analysis, name); free (name); if (demangled) { rz_cons_println (demangled); @@ -10007,7 +10007,7 @@ static void cmd_anal_virtual_functions(RzCore *core, const char* input) { case '\0': // "av" case '*': // "av*" case 'j': // "avj" - rz_anal_list_vtables (core->anal, input[0]); + rz_analysis_list_vtables (core->analysis, input[0]); break; case 'r': // "avr" cmd_anal_rtti (core, input + 1); @@ -10021,7 +10021,7 @@ static void cmd_anal_virtual_functions(RzCore *core, const char* input) { static void cmd_anal_class_method(RzCore *core, const char *input) { - RzAnalClassErr err = RZ_ANAL_CLASS_ERR_SUCCESS; + RzAnalysisClassErr err = RZ_ANAL_CLASS_ERR_SUCCESS; char c = input[0]; switch (c) { case ' ': // "acm" @@ -10066,14 +10066,14 @@ static void cmd_anal_class_method(RzCore *core, const char *input) { *end = '\0'; } - RzAnalMethod meth; + RzAnalysisMethod meth; meth.name = name_str; meth.addr = rz_num_get (core->num, addr_str); meth.vtable_offset = -1; if (end) { meth.vtable_offset = (int)rz_num_get (core->num, end + 1); } - err = rz_anal_class_method_set (core->anal, cstr, &meth); + err = rz_analysis_class_method_set (core->analysis, cstr, &meth); } else if (c == 'n') { char *new_name_str = end + 1; end = strchr (new_name_str, ' '); @@ -10081,9 +10081,9 @@ static void cmd_anal_class_method(RzCore *core, const char *input) { *end = '\0'; } - err = rz_anal_class_method_rename (core->anal, cstr, name_str, new_name_str); + err = rz_analysis_class_method_rename (core->analysis, cstr, name_str, new_name_str); } else if (c == '-') { - err = rz_anal_class_method_delete (core->anal, cstr, name_str); + err = rz_analysis_class_method_delete (core->analysis, cstr, name_str); } free (cstr); @@ -10107,7 +10107,7 @@ static void cmd_anal_class_method(RzCore *core, const char *input) { } static void cmd_anal_class_base(RzCore *core, const char *input) { - RzAnalClassErr err = RZ_ANAL_CLASS_ERR_SUCCESS; + RzAnalysisClassErr err = RZ_ANAL_CLASS_ERR_SUCCESS; char c = input[0]; switch (c) { case ' ': // "acb" @@ -10129,7 +10129,7 @@ static void cmd_anal_class_base(RzCore *core, const char *input) { if (!end || *end == '\0') { if (c == ' ') { - rz_anal_class_list_bases (core->anal, cstr); + rz_analysis_class_list_bases (core->analysis, cstr); } else /*if (c == '-')*/ { eprintf ("No base id given.\n"); } @@ -10144,12 +10144,12 @@ static void cmd_anal_class_base(RzCore *core, const char *input) { } if (c == '-') { - err = rz_anal_class_base_delete (core->anal, cstr, base_str); + err = rz_analysis_class_base_delete (core->analysis, cstr, base_str); free (cstr); break; } - RzAnalBaseClass base; + RzAnalysisBaseClass base; base.id = NULL; base.offset = 0; base.class_name = base_str; @@ -10158,7 +10158,7 @@ static void cmd_anal_class_base(RzCore *core, const char *input) { base.offset = rz_num_get (core->num, end + 1); } - err = rz_anal_class_base_set (core->anal, cstr, &base); + err = rz_analysis_class_base_set (core->analysis, cstr, &base); free (base.id); free (cstr); break; @@ -10174,7 +10174,7 @@ static void cmd_anal_class_base(RzCore *core, const char *input) { } static void cmd_anal_class_vtable(RzCore *core, const char *input) { - RzAnalClassErr err = RZ_ANAL_CLASS_ERR_SUCCESS; + RzAnalysisClassErr err = RZ_ANAL_CLASS_ERR_SUCCESS; char c = input[0]; switch (c) { case 'f': {// "acvf" [offset] ([class_name]) @@ -10202,7 +10202,7 @@ static void cmd_anal_class_vtable(RzCore *core, const char *input) { end = (char *)rz_str_trim_head_wp (class_arg); // in case of extra unwanted stuff at the cmd end *end = '\0'; } - rz_anal_class_list_vtable_offset_functions (core->anal, class_arg, offset_arg); + rz_analysis_class_list_vtable_offset_functions (core->analysis, class_arg, offset_arg); free (cstr); break; @@ -10226,7 +10226,7 @@ static void cmd_anal_class_vtable(RzCore *core, const char *input) { if (!end || *end == '\0') { if (c == ' ') { - rz_anal_class_list_vtables (core->anal, cstr); + rz_analysis_class_list_vtables (core->analysis, cstr); } else /*if (c == '-')*/ { eprintf ("No vtable id given. See acv [class name].\n"); } @@ -10237,7 +10237,7 @@ static void cmd_anal_class_vtable(RzCore *core, const char *input) { char *arg1_str = end; if (c == '-') { - err = rz_anal_class_vtable_delete (core->anal, cstr, arg1_str); + err = rz_analysis_class_vtable_delete (core->analysis, cstr, arg1_str); free (cstr); break; } @@ -10247,7 +10247,7 @@ static void cmd_anal_class_vtable(RzCore *core, const char *input) { *end = '\0'; } - RzAnalVTable vtable; + RzAnalysisVTable vtable; vtable.id = NULL; vtable.addr = rz_num_get (core->num, arg1_str); vtable.offset = 0; @@ -10264,7 +10264,7 @@ static void cmd_anal_class_vtable(RzCore *core, const char *input) { vtable.size = rz_num_get (core->num, arg3_str + 1); } - err = rz_anal_class_vtable_set (core->anal, cstr, &vtable); + err = rz_analysis_class_vtable_set (core->analysis, cstr, &vtable); free (vtable.id); free (cstr); break; @@ -10299,17 +10299,17 @@ static void cmd_anal_classes(RzCore *core, const char *input) { *name_end = 0; // trim the whitespace around the name if (mode == 'j') { PJ *pj = pj_new (); - rz_anal_class_json (core->anal, pj, class_name); + rz_analysis_class_json (core->analysis, pj, class_name); rz_cons_printf ("%s\n", pj_string (pj)); pj_free (pj); } else { - rz_anal_class_print (core->anal, class_name, true); + rz_analysis_class_print (core->analysis, class_name, true); } free (class_name); break; } } - rz_anal_class_list (core->anal, input[1]); + rz_analysis_class_list (core->analysis, input[1]); break; case ' ': // "ac" case '-': // "ac-" @@ -10327,7 +10327,7 @@ static void cmd_anal_classes(RzCore *core, const char *input) { *end = '\0'; } if (input[0] == '-') { - rz_anal_class_delete (core->anal, cstr); + rz_analysis_class_delete (core->analysis, cstr); } else if(input[0] == 'n') { if (!end) { eprintf ("No new class name given.\n"); @@ -10337,7 +10337,7 @@ static void cmd_anal_classes(RzCore *core, const char *input) { if (end) { *end = '\0'; } - RzAnalClassErr err = rz_anal_class_rename (core->anal, cstr, new_name); + RzAnalysisClassErr err = rz_analysis_class_rename (core->analysis, cstr, new_name); if (err == RZ_ANAL_CLASS_ERR_NONEXISTENT_CLASS) { eprintf ("Class does not exist.\n"); } else if (err == RZ_ANAL_CLASS_ERR_CLASH) { @@ -10345,7 +10345,7 @@ static void cmd_anal_classes(RzCore *core, const char *input) { } } } else { - rz_anal_class_create (core->anal, cstr); + rz_analysis_class_create (core->analysis, cstr); } free (cstr); break; @@ -10360,7 +10360,7 @@ static void cmd_anal_classes(RzCore *core, const char *input) { cmd_anal_class_method (core, input + 1); break; case 'g': { // "acg" - RzGraph *graph = rz_anal_class_get_inheritance_graph (core->anal); + RzGraph *graph = rz_analysis_class_get_inheritance_graph (core->analysis); if (!graph) { eprintf ("Couldn't create graph"); break; @@ -10382,7 +10382,7 @@ static void show_reg_args(RzCore *core, int nargs, RzStrBuf *sb) { } for (i = 0; i < nargs; i++) { snprintf (regname, sizeof (regname), "A%d", i); - ut64 v = rz_reg_getv (core->anal->reg, regname); + ut64 v = rz_reg_getv (core->analysis->reg, regname); if (sb) { rz_strbuf_appendf (sb, "%s0x%08"PFMT64x, i?", ":"", v); } else { @@ -10395,7 +10395,7 @@ static void show_reg_args(RzCore *core, int nargs, RzStrBuf *sb) { // TODO: Implement aC* and aCj static void cmd_anal_aC(RzCore *core, const char *input) { bool is_aCer = false; - RzAnalFuncArg *arg; + RzAnalysisFuncArg *arg; RzListIter *iter; RzListIter *nextele; const char *iarg = strchr (input, ' '); @@ -10417,7 +10417,7 @@ static void cmd_anal_aC(RzCore *core, const char *input) { is_aCer = (input[1] == '*'); rz_core_cmdf (core, ".abte 0x%08"PFMT64x, pcv); } - RzAnalOp* op = rz_core_anal_op (core, pcv, -1); + RzAnalysisOp* op = rz_core_analysis_op (core, pcv, -1); if (!op) { rz_strbuf_free (sb); return; @@ -10428,9 +10428,9 @@ bool go_on = true; go_on = false; } const char *fcn_name = NULL; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; if (go_on) { - fcn = rz_anal_get_function_at (core->anal, pcv); + fcn = rz_analysis_get_function_at (core->analysis, pcv); if (fcn) { fcn_name = fcn->name; } else { @@ -10439,10 +10439,10 @@ bool go_on = true; fcn_name = item->name; } } - char *key = (fcn_name)? resolve_fcn_name (core->anal, fcn_name): NULL; + char *key = (fcn_name)? resolve_fcn_name (core->analysis, fcn_name): NULL; if (key) { - const char *fcn_type = rz_type_func_ret (core->anal->sdb_types, key); - int nargs = rz_type_func_args_count (core->anal->sdb_types, key); + const char *fcn_type = rz_type_func_ret (core->analysis->sdb_types, key); + int nargs = rz_type_func_args_count (core->analysis->sdb_types, key); // remove other comments if (fcn_type) { rz_strbuf_appendf (sb, "%s%s%s(", rz_str_get (fcn_type), @@ -10465,10 +10465,10 @@ bool go_on = true; } } if (go_on) { - ut64 s_width = (core->anal->bits == 64)? 8: 4; - const char *sp = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_SP); - ut64 spv = rz_reg_getv (core->anal->reg, sp); - rz_reg_setv (core->anal->reg, sp, spv + s_width); // temporarily set stack ptr to sync with carg.c + ut64 s_width = (core->analysis->bits == 64)? 8: 4; + const char *sp = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_SP); + ut64 spv = rz_reg_getv (core->analysis->reg, sp); + rz_reg_setv (core->analysis->reg, sp, spv + s_width); // temporarily set stack ptr to sync with carg.c RzList *list = rz_core_get_func_args (core, fcn_name); if (!rz_list_empty (list)) { #if 0 @@ -10504,9 +10504,9 @@ bool go_on = true; int i, nargs = 4; // DEFAULT_NARGS; if (fcn) { // @TODO: fcn->nargs should be updated somewhere and used here instead - nargs = rz_anal_var_count (core->anal, fcn, 's', 1) + - rz_anal_var_count (core->anal, fcn, 'b', 1) + - rz_anal_var_count (core->anal, fcn, 'r', 1); + nargs = rz_analysis_var_count (core->analysis, fcn, 's', 1) + + rz_analysis_var_count (core->analysis, fcn, 'b', 1) + + rz_analysis_var_count (core->analysis, fcn, 'r', 1); } if (nargs > 0) { if (fcn_name) { @@ -10521,7 +10521,7 @@ bool go_on = true; rz_strbuf_appendf (sb, ")"); } } - rz_reg_setv (core->anal->reg, sp, spv); // reset stack ptr + rz_reg_setv (core->analysis->reg, sp, spv); // reset stack ptr } char *s = rz_strbuf_drain (sb); if (is_aCer) { @@ -10638,7 +10638,7 @@ RZ_IPI int rz_cmd_anal(void *data, const char *input) { case 'o': cmd_anal_opcode (core, input + 1); break; // "ao" case 'O': cmd_anal_bytes (core, input + 1); break; // "aO" case 'F': // "aF" - rz_core_anal_fcn (core, core->offset, UT64_MAX, RZ_ANAL_REF_TYPE_NULL, 1); + rz_core_analysis_fcn (core, core->offset, UT64_MAX, RZ_ANAL_REF_TYPE_NULL, 1); break; case 'f': // "af" { @@ -10724,21 +10724,21 @@ RZ_IPI int rz_cmd_anal(void *data, const char *input) { if (b < 1) { b = 1; } - rz_core_anal_data (core, core->offset, a, b, 0); + rz_core_analysis_data (core, core->offset, a, b, 0); } break; case 'k': // "adk" - r = rz_anal_data_kind (core->anal, + r = rz_analysis_data_kind (core->analysis, core->offset, core->block, core->blocksize); rz_cons_println (r); break; case '\0': // "ad" - rz_core_anal_data (core, core->offset, 2 + (core->blocksize / 4), 1, 0); + rz_core_analysis_data (core, core->offset, 2 + (core->blocksize / 4), 1, 0); break; case '4': // "ad4" - rz_core_anal_data (core, core->offset, 2 + (core->blocksize / 4), 1, 4); + rz_core_analysis_data (core, core->offset, 2 + (core->blocksize / 4), 1, 4); break; case '8': // "ad8" - rz_core_anal_data (core, core->offset, 2 + (core->blocksize / 4), 1, 8); + rz_core_analysis_data (core, core->offset, 2 + (core->blocksize / 4), 1, 8); break; default: rz_core_cmd_help (core, help_msg_ad); @@ -10749,8 +10749,8 @@ RZ_IPI int rz_cmd_anal(void *data, const char *input) { cmd_anal_hint (core, input + 1); break; case '!': // "a!" - if (core->anal && core->anal->cur && core->anal->cur->cmd_ext) { - return core->anal->cur->cmd_ext (core->anal, input + 1); + if (core->analysis && core->analysis->cur && core->analysis->cur->cmd_ext) { + return core->analysis->cur->cmd_ext (core->analysis, input + 1); } else { rz_cons_printf ("No plugins for this analysis plugin\n"); } diff --git a/librz/core/cmd_cmp.c b/librz/core/cmd_cmp.c index 8e6b9536fd..f70ebe3025 100644 --- a/librz/core/cmd_cmp.c +++ b/librz/core/cmd_cmp.c @@ -763,17 +763,17 @@ RZ_IPI int rz_cmd_cmp(void *data, const char *input) { switch (input[1]) { case 'o': // "cgo" file2 = (char *) rz_str_trim_head_ro (input + 2); - rz_anal_diff_setup (core->anal, true, -1, -1); + rz_analysis_diff_setup (core->analysis, true, -1, -1); break; case 'f': // "cgf" eprintf ("TODO: agf is experimental\n"); - rz_anal_diff_setup (core->anal, true, -1, -1); + rz_analysis_diff_setup (core->analysis, true, -1, -1); rz_core_gdiff_fcn (core, core->offset, rz_num_math (core->num, input + 2)); return false; case ' ': file2 = (char *) rz_str_trim_head_ro (input + 2); - rz_anal_diff_setup (core->anal, false, -1, -1); + rz_analysis_diff_setup (core->analysis, false, -1, -1); break; default: { const char *help_message[] = { @@ -807,8 +807,8 @@ RZ_IPI int rz_cmd_cmp(void *data, const char *input) { } // TODO: must replicate on core1 too rz_config_set_i (core2->config, "io.va", true); - rz_anal_diff_setup (core->anal, diffops, -1, -1); - rz_anal_diff_setup (core2->anal, diffops, -1, -1); + rz_analysis_diff_setup (core->analysis, diffops, -1, -1); + rz_analysis_diff_setup (core2->analysis, diffops, -1, -1); rz_core_bin_load (core2, file2, rz_config_get_i (core->config, "bin.baddr")); diff --git a/librz/core/cmd_debug.c b/librz/core/cmd_debug.c index 6256a946e1..e36afe2c91 100644 --- a/librz/core/cmd_debug.c +++ b/librz/core/cmd_debug.c @@ -535,7 +535,7 @@ static void cmd_debug_cont_syscall (RzCore *core, const char *_str) { if (sig == -1) { // trace ALL syscalls syscalls[i] = -1; } else if (sig == 0) { - sig = rz_syscall_get_num (core->anal->syscall, sysnumstr); + sig = rz_syscall_get_num (core->analysis->syscall, sysnumstr); if (sig == -1) { eprintf ("Unknown syscall number\n"); free (str); @@ -739,9 +739,9 @@ static int step_until(RzCore *core, ut64 addr) { } static int step_until_esil(RzCore *core, const char *esilstr) { - if (!core || !esilstr || !core->dbg || !core->dbg->anal \ - || !core->dbg->anal->esil) { - eprintf ("Not initialized %p. Run 'aei' first.\n", core->anal->esil); + if (!core || !esilstr || !core->dbg || !core->dbg->analysis \ + || !core->dbg->analysis->esil) { + eprintf ("Not initialized %p. Run 'aei' first.\n", core->analysis->esil); return false; } rz_cons_break_push (NULL, NULL); @@ -756,7 +756,7 @@ static int step_until_esil(RzCore *core, const char *esilstr) { } rz_debug_step (core->dbg, 1); rz_debug_reg_sync (core->dbg, RZ_REG_TYPE_ALL, false); - if (rz_anal_esil_condition (core->anal->esil, esilstr)) { + if (rz_analysis_esil_condition (core->analysis->esil, esilstr)) { eprintf ("ESIL BREAK!\n"); break; } @@ -767,9 +767,9 @@ static int step_until_esil(RzCore *core, const char *esilstr) { static bool is_repeatable_inst(RzCore *core, ut64 addr) { // we have read the bytes already - RzAnalOp *op = rz_core_op_anal (core, addr, RZ_ANAL_OP_MASK_ALL); + RzAnalysisOp *op = rz_core_op_anal (core, addr, RZ_ANAL_OP_MASK_ALL); bool ret = op && ((op->prefix & RZ_ANAL_OP_PREFIX_REP) || (op->prefix & RZ_ANAL_OP_PREFIX_REPNE)); - rz_anal_op_free (op); + rz_analysis_op_free (op); return ret; } @@ -827,7 +827,7 @@ static int step_until_inst(RzCore *core, const char *instr, bool regex) { } static int step_until_optype(RzCore *core, const char *_optypes) { - RzAnalOp op; + RzAnalysisOp op; ut8 buf[32]; ut64 pc; int res = true; @@ -876,20 +876,20 @@ static int step_until_optype(RzCore *core, const char *_optypes) { } } else { rz_core_esil_step (core, UT64_MAX, NULL, NULL, false); - pc = rz_reg_getv (core->anal->reg, "PC"); + pc = rz_reg_getv (core->analysis->reg, "PC"); } rz_io_read_at (core->io, pc, buf, sizeof (buf)); - if (!rz_anal_op (core->dbg->anal, &op, pc, buf, sizeof (buf), RZ_ANAL_OP_MASK_BASIC)) { - eprintf ("Error: rz_anal_op failed\n"); + if (!rz_analysis_op (core->dbg->analysis, &op, pc, buf, sizeof (buf), RZ_ANAL_OP_MASK_BASIC)) { + eprintf ("Error: rz_analysis_op failed\n"); res = false; goto cleanup_after_push; } // This is slow because we do lots of strcmp's. - // To improve this, the function rz_anal_optype_string_to_int should be implemented + // To improve this, the function rz_analysis_optype_string_to_int should be implemented // I also don't check if the opcode type exists. - const char *optype_str = rz_anal_optype_to_string (op.type); + const char *optype_str = rz_analysis_optype_to_string (op.type); rz_list_foreach (optypes_list, iter, optype) { if (!strcmp (optype_str, optype)) { goto cleanup_after_push; @@ -1142,7 +1142,7 @@ static void cmd_debug_pid(RzCore *core, const char *input) { } static void cmd_debug_backtrace(RzCore *core, const char *input) { - RzAnalOp analop; + RzAnalysisOp analop; ut64 addr, len = rz_num_math (core->num, input); if (!len) { rz_bp_traptrace_list (core->dbg->bp); @@ -1170,7 +1170,7 @@ static void cmd_debug_backtrace(RzCore *core, const char *input) { /* XXX Bottleneck..we need to reuse the bytes read by traptrace */ // XXX Do asm.arch should define the max size of opcode? rz_io_read_at (core->io, addr, buf, 32); // XXX longer opcodes? - rz_anal_op (core->anal, &analop, addr, buf, sizeof (buf), RZ_ANAL_OP_MASK_BASIC); + rz_analysis_op (core->analysis, &analop, addr, buf, sizeof (buf), RZ_ANAL_OP_MASK_BASIC); } while (rz_bp_traptrace_at (core->dbg->bp, addr, analop.size)); rz_bp_traptrace_enable (core->dbg->bp, false); } @@ -1188,15 +1188,15 @@ static int grab_bits(RzCore *core, const char *arg, int *pcbits2) { *pcbits2 = 32; } } else { - const char *pcname = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_PC); - RzRegItem *reg = rz_reg_get (core->anal->reg, pcname, 0); + const char *pcname = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_PC); + RzRegItem *reg = rz_reg_get (core->analysis->reg, pcname, 0); if (reg) { if (core->rasm->bits != reg->size) pcbits = reg->size; } } } - return pcbits ? pcbits : core->anal->bits; + return pcbits ? pcbits : core->analysis->bits; } #define MAX_MAP_SIZE 1024*1024*512 @@ -1863,7 +1863,7 @@ RZ_API void rz_core_debug_ri(RzCore *core, RzReg *reg, int mode) { rz_cons_printf (" %s", r); } rz_cons_strcat (Color_RESET); - char *rrstr = rz_core_anal_hasrefs (core, *addr, true); + char *rrstr = rz_core_analysis_hasrefs (core, *addr, true); if (rrstr && *rrstr && strchr (rrstr, 'R')) { rz_cons_printf (" ;%s"Color_RESET, rrstr); } @@ -1936,7 +1936,7 @@ RZ_API void rz_core_debug_rr(RzCore *core, RzReg *reg, int mode) { valuestr = rz_str_newf ("%"PFMT64x, value); } - char *rrstr = rz_core_anal_hasrefs (core, value, true); + char *rrstr = rz_core_analysis_hasrefs (core, value, true); if (!rrstr) { rrstr = strdup (""); } @@ -1963,12 +1963,12 @@ static void show_drpi(RzCore *core) { RzRegItem *ri; rz_cons_printf ("Aliases (Reg->name)\n"); for (i = 0; i < RZ_REG_NAME_LAST; i++) { - rz_cons_printf ("%d %s %s\n", i, rz_reg_get_role (i), core->anal->reg->name[i]); + rz_cons_printf ("%d %s %s\n", i, rz_reg_get_role (i), core->analysis->reg->name[i]); } for (i = 0; i < RZ_REG_TYPE_LAST; i++) { const char *nmi = rz_reg_get_type (i); rz_cons_printf ("regset %d (%s)\n", i, nmi); - RzRegSet *rs = &core->anal->reg->regset[i]; + RzRegSet *rs = &core->analysis->reg->regset[i]; rz_cons_printf ("* arena %s size %d\n", rz_reg_get_type (i), rs->arena->size); rz_list_foreach (rs->regs, iter, ri) { const char *tpe = rz_reg_get_type (ri->type); @@ -1984,7 +1984,7 @@ static void show_drpi(RzCore *core) { static void cmd_reg_profile(RzCore *core, char from, const char *str) { // "arp" and "drp" const char *ptr; - RzReg *r = rz_config_get_i (core->config, "cfg.debug")? core->dbg->reg: core->anal->reg; + RzReg *r = rz_config_get_i (core->config, "cfg.debug")? core->dbg->reg: core->analysis->reg; switch (str[1]) { case '\0': // "drp" "arp" if (r->reg_profile_str) { @@ -2834,7 +2834,7 @@ static void cmd_debug_reg(RzCore *core, const char *str) { } //else eprintf ("cannot retrieve registers from pid %d\n", core->dbg->pid); } else { RzReg *orig = core->dbg->reg; - core->dbg->reg = core->anal->reg; + core->dbg->reg = core->analysis->reg; if (pcbits && pcbits != bits) rz_debug_reg_list (core->dbg, RZ_REG_TYPE_GPR, pcbits, str[0], use_color); // xxx detect which one is current usage rz_debug_reg_list (core->dbg, RZ_REG_TYPE_GPR, bits, str[0], use_color); // xxx detect which one is current usage @@ -2879,9 +2879,9 @@ static void cmd_debug_reg(RzCore *core, const char *str) { case 'j': // "drj" case '\0': // "dr" if (rz_debug_reg_sync (core->dbg, RZ_REG_TYPE_GPR, false)) { - int pcbits = core->anal->bits; - const char *pcname = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_PC); - RzRegItem *reg = rz_reg_get (core->anal->reg, pcname, 0); + int pcbits = core->analysis->bits; + const char *pcname = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_PC); + RzRegItem *reg = rz_reg_get (core->analysis->reg, pcname, 0); if (reg) { if (core->rasm->bits != reg->size) { pcbits = reg->size; @@ -2951,15 +2951,15 @@ static void backtrace_vars(RzCore *core, RzList *frames) { RzDebugFrame *f; RzListIter *iter; // anal vs debug ? - const char *sp = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_SP); - const char *bp = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_BP); + const char *sp = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_SP); + const char *bp = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_BP); if (!sp) { sp = "SP"; } if (!bp) { bp = "BP"; } - RzReg *r = core->anal->reg; + RzReg *r = core->analysis->reg; ut64 dsp = rz_reg_getv (r, sp); ut64 dbp = rz_reg_getv (r, bp); int n = 0; @@ -2991,7 +2991,7 @@ static void backtrace_vars(RzCore *core, RzList *frames) { } } ////////// - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, f->addr, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, f->addr, 0); // char *str = rz_str_newf ("[frame %d]", n); rz_cons_printf ("%d 0x%08"PFMT64x" sp: 0x%08"PFMT64x" %-5d" "[%s] %s %s\n", n, f->addr, f->sp, (int)f->size, @@ -3017,16 +3017,16 @@ static void asciiart_backtrace(RzCore *core, RzList *frames) { RzListIter *iter; bool mymap = false; // anal vs debug ? - const char *sp = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_SP); - const char *bp = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_BP); + const char *sp = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_SP); + const char *bp = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_BP); if (!sp) { sp = "SP"; } if (!bp) { bp = "BP"; } - ut64 dsp = rz_reg_getv (core->anal->reg, sp); - ut64 dbp = rz_reg_getv (core->anal->reg, bp); + ut64 dsp = rz_reg_getv (core->analysis->reg, sp); + ut64 dbp = rz_reg_getv (core->analysis->reg, bp); RzDebugMap *map = rz_debug_map_get (core->dbg, dsp); if (!map) { mymap = true; @@ -3355,7 +3355,7 @@ static void rz_core_cmd_bp(RzCore *core, const char *input) { RzBinSymbol *symbol; rz_list_foreach (symbols, iter, symbol) { if (symbol->type && !strcmp (symbol->type, RZ_BIN_TYPE_FUNC_STR)) { - if (rz_anal_noreturn_at (core->anal, symbol->vaddr)) { + if (rz_analysis_noreturn_at (core->analysis, symbol->vaddr)) { bpi = rz_debug_bp_add (core->dbg, symbol->vaddr, hwbp, false, 0, NULL, 0); if (bpi) { bpi->name = rz_str_newf ("%s.%s", "sym", symbol->name); @@ -3438,7 +3438,7 @@ static void rz_core_cmd_bp(RzCore *core, const char *input) { rz_list_foreach (list, iter, frame) { char *flagdesc, *flagdesc2, *pcstr, *spstr; get_backtrace_info (core, frame, addr, &flagdesc, &flagdesc2, &pcstr, &spstr, hex_format); - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, frame->addr, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, frame->addr, 0); rz_cons_printf ("%s{\"idx\":%d,\"pc\":%s,\"sp\":%s,\"frame_size\":%d," "\"fname\":\"%s\",\"desc\":\"%s%s\"}", (i ? " ," : ""), i, @@ -3515,7 +3515,7 @@ static void rz_core_cmd_bp(RzCore *core, const char *input) { rz_list_foreach (list, iter, frame) { char *flagdesc, *flagdesc2, *pcstr, *spstr; get_backtrace_info (core, frame, addr, &flagdesc, &flagdesc2, &pcstr, &spstr, hex_format); - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, frame->addr, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, frame->addr, 0); rz_cons_printf ("%d %s sp: %s %-5d" "[%s] %s %s\n", i++, pcstr, spstr, @@ -3683,7 +3683,7 @@ static void rz_core_cmd_bp(RzCore *core, const char *input) { break; case ' ': if (input[3]) { - if (!rz_bp_use (core->dbg->bp, input + 3, core->anal->bits)) { + if (!rz_bp_use (core->dbg->bp, input + 3, core->analysis->bits)) { eprintf ("Invalid name: '%s'.\n", input + 3); } } @@ -3802,7 +3802,7 @@ static void do_debug_trace_calls(RzCore *core, ut64 from, ut64 to, ut64 final_ad while (true) { ut8 buf[32]; - RzAnalOp aop; + RzAnalysisOp aop; int addr_in_range; if (rz_cons_is_breaked()) { @@ -3829,7 +3829,7 @@ static void do_debug_trace_calls(RzCore *core, ut64 from, ut64 to, ut64 final_ad addr_in_range = addr >= from && addr < to; rz_io_read_at (core->io, addr, buf, sizeof (buf)); - rz_anal_op (core->anal, &aop, addr, buf, sizeof (buf), RZ_ANAL_OP_MASK_BASIC); + rz_analysis_op (core->analysis, &aop, addr, buf, sizeof (buf), RZ_ANAL_OP_MASK_BASIC); eprintf ("%d %"PFMT64x"\r", n++, addr); switch (aop.type) { case RZ_ANAL_OP_TYPE_UCALL: @@ -4450,7 +4450,7 @@ static char *get_corefile_name (const char *raw_name, int pid) { static int cmd_debug_step (RzCore *core, const char *input) { ut64 addr = core->offset;; ut8 buf[64]; - RzAnalOp aop; + RzAnalysisOp aop; int i, times = 1; char *ptr = strchr (input, ' '); if (ptr) { @@ -4535,11 +4535,11 @@ static int cmd_debug_step (RzCore *core, const char *input) { for (i = 0; i < times; i++) { ut8 buf[64]; ut64 addr; - RzAnalOp aop; + RzAnalysisOp aop; rz_debug_reg_sync (core->dbg, RZ_REG_TYPE_GPR, false); addr = rz_debug_reg_get (core->dbg, "PC"); rz_io_read_at (core->io, addr, buf, sizeof (buf)); - rz_anal_op (core->anal, &aop, addr, buf, sizeof (buf), RZ_ANAL_OP_MASK_BASIC); + rz_analysis_op (core->analysis, &aop, addr, buf, sizeof (buf), RZ_ANAL_OP_MASK_BASIC); if (aop.type == RZ_ANAL_OP_TYPE_CALL) { RzBinObject *o = rz_bin_cur_object (core->bin); RzBinSection *s = rz_bin_get_section_at (o, aop.jump, true); @@ -4561,7 +4561,7 @@ static int cmd_debug_step (RzCore *core, const char *input) { for (i = 0; i < times; i++) { rz_debug_reg_sync (core->dbg, RZ_REG_TYPE_GPR, false); rz_io_read_at (core->io, addr, buf, sizeof (buf)); - rz_anal_op (core->anal, &aop, addr, buf, sizeof (buf), RZ_ANAL_OP_MASK_BASIC); + rz_analysis_op (core->analysis, &aop, addr, buf, sizeof (buf), RZ_ANAL_OP_MASK_BASIC); #if 0 if (aop.jump != UT64_MAX && aop.fail != UT64_MAX) { eprintf ("Don't know how to skip this instruction\n"); @@ -4572,7 +4572,7 @@ static int cmd_debug_step (RzCore *core, const char *input) { addr += aop.size; } rz_debug_reg_set (core->dbg, "PC", addr); - rz_reg_setv (core->anal->reg, "PC", addr); + rz_reg_setv (core->analysis->reg, "PC", addr); rz_core_cmd0 (core, ".dr*"); if (bpi) { rz_core_cmd0 (core, delb); @@ -4660,7 +4660,7 @@ RZ_IPI int rz_cmd_debug(void *data, const char *input) { RzList *list; RzDebugPid *p; RzDebugTracepoint *trace; - RzAnalOp *op; + RzAnalysisOp *op; if (rz_sandbox_enable (0)) { eprintf ("Debugger commands disabled in sandbox mode\n"); @@ -4728,30 +4728,30 @@ RZ_IPI int rz_cmd_debug(void *data, const char *input) { } else if (input[2] == 'i') { int n = 0; rz_list_foreach (core->dbg->trace->traces, iter, trace) { - op = rz_core_anal_op (core, trace->addr, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_DISASM); + op = rz_core_analysis_op (core, trace->addr, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_DISASM); if (n >= min) { rz_cons_printf ("%d %s\n", trace->count, op->mnemonic); } n++; - rz_anal_op_free (op); + rz_analysis_op_free (op); } } else if (input[2] == ' ') { int n = 0; rz_list_foreach (core->dbg->trace->traces, iter, trace) { - op = rz_core_anal_op (core, trace->addr, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_DISASM); + op = rz_core_analysis_op (core, trace->addr, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_DISASM); if (n >= min) { rz_cons_printf ("0x%08"PFMT64x" %s\n", trace->addr, op->mnemonic); } n++; - rz_anal_op_free (op); + rz_analysis_op_free (op); } } else { // TODO: reimplement using the api //rz_core_cmd0 (core, "pd 1 @@= `dtq`"); rz_list_foreach (core->dbg->trace->traces, iter, trace) { - op = rz_core_anal_op (core, trace->addr, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_DISASM); + op = rz_core_analysis_op (core, trace->addr, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_DISASM); rz_cons_printf ("0x%08"PFMT64x" %s\n", trace->addr, op->mnemonic); - rz_anal_op_free (op); + rz_analysis_op_free (op); } } break; @@ -4783,54 +4783,54 @@ RZ_IPI int rz_cmd_debug(void *data, const char *input) { if (ptr) { count = rz_num_math (core->num, ptr + 1); } - RzAnalOp *op = rz_core_op_anal (core, addr, RZ_ANAL_OP_MASK_HINT); + RzAnalysisOp *op = rz_core_op_anal (core, addr, RZ_ANAL_OP_MASK_HINT); if (op) { RzDebugTracepoint *tp = rz_debug_trace_add (core->dbg, addr, op->size); if (!tp) { - rz_anal_op_free (op); + rz_analysis_op_free (op); break; } tp->count = count; - rz_anal_trace_bb (core->anal, addr); - rz_anal_op_free (op); + rz_analysis_trace_bb (core->analysis, addr); + rz_analysis_op_free (op); } else { eprintf ("Cannot analyze opcode at 0x%08" PFMT64x "\n", addr); } } break; case 'e': // "dte" - if (!core->anal->esil) { + if (!core->analysis->esil) { int stacksize = rz_config_get_i (core->config, "esil.stack.depth"); int romem = rz_config_get_i (core->config, "esil.romem"); int stats = rz_config_get_i (core->config, "esil.stats"); int iotrap = rz_config_get_i (core->config, "esil.iotrap"); int nonull = rz_config_get_i (core->config, "esil.nonull"); unsigned int addrsize = rz_config_get_i (core->config, "esil.addr.size"); - if (!(core->anal->esil = rz_anal_esil_new (stacksize, iotrap, addrsize))) { + if (!(core->analysis->esil = rz_analysis_esil_new (stacksize, iotrap, addrsize))) { return 0; } - rz_anal_esil_setup (core->anal->esil, core->anal, romem, stats, nonull); + rz_analysis_esil_setup (core->analysis->esil, core->analysis, romem, stats, nonull); } switch (input[2]) { case 0: // "dte" - rz_anal_esil_trace_list (core->anal->esil); + rz_analysis_esil_trace_list (core->analysis->esil); break; case 'i': { // "dtei" ut64 addr = rz_num_math (core->num, input + 3); if (!addr) { addr = core->offset; } - RzAnalOp *op = rz_core_anal_op (core, addr, RZ_ANAL_OP_MASK_ESIL); + RzAnalysisOp *op = rz_core_analysis_op (core, addr, RZ_ANAL_OP_MASK_ESIL); if (op) { - rz_anal_esil_trace_op (core->anal->esil, op); + rz_analysis_esil_trace_op (core->analysis->esil, op); } - rz_anal_op_free (op); + rz_analysis_op_free (op); } break; case '-': // "dte-" if (!strcmp (input + 3, "*")) { - if (core->anal->esil) { - sdb_free (core->anal->esil->trace->db); - core->anal->esil->trace->db = sdb_new0 (); + if (core->analysis->esil) { + sdb_free (core->analysis->esil->trace->db); + core->analysis->esil->trace->db = sdb_new0 (); } } else { eprintf ("TODO: dte- cannot delete specific logs. Use dte-*\n"); @@ -4838,12 +4838,12 @@ RZ_IPI int rz_cmd_debug(void *data, const char *input) { break; case ' ': { // "dte " int idx = atoi (input + 3); - rz_anal_esil_trace_show ( - core->anal->esil, idx); + rz_analysis_esil_trace_show ( + core->analysis->esil, idx); } break; case 'k': // "dtek" if (input[3] == ' ') { - char *s = sdb_querys (core->anal->esil->trace->db, + char *s = sdb_querys (core->analysis->esil->trace->db, NULL, 0, input + 4); rz_cons_println (s); free (s); diff --git a/librz/core/cmd_egg.c b/librz/core/cmd_egg.c index cb9fedeace..592a4721aa 100644 --- a/librz/core/cmd_egg.c +++ b/librz/core/cmd_egg.c @@ -248,9 +248,9 @@ RZ_IPI int rz_cmd_egg(void *data, const char *input) { } } rz_cons_printf ("\nTarget options\n"); - rz_cons_printf ("arch : %s\n", core->anal->cpu); - rz_cons_printf ("os : %s\n", core->anal->os); - rz_cons_printf ("bits : %d\n", core->anal->bits); + rz_cons_printf ("arch : %s\n", core->analysis->cpu); + rz_cons_printf ("os : %s\n", core->analysis->os); + rz_cons_printf ("bits : %d\n", core->analysis->bits); } break; case 'r': // "gr" diff --git a/librz/core/cmd_eval.c b/librz/core/cmd_eval.c index be84e7f3f7..c5c5afadc7 100644 --- a/librz/core/cmd_eval.c +++ b/librz/core/cmd_eval.c @@ -486,27 +486,27 @@ RZ_IPI int rz_cmd_eval(void *data, const char *input) { return false; case '-': // ecH- if (input[3] == '*') { - rz_meta_del (core->anal, RZ_META_TYPE_HIGHLIGHT, 0, UT64_MAX); + rz_meta_del (core->analysis, RZ_META_TYPE_HIGHLIGHT, 0, UT64_MAX); } else { - rz_meta_del (core->anal, RZ_META_TYPE_HIGHLIGHT, core->offset, 1); - // rz_meta_set_string (core->anal, RZ_META_TYPE_HIGHLIGHT, core->offset, ""); + rz_meta_del (core->analysis, RZ_META_TYPE_HIGHLIGHT, core->offset, 1); + // rz_meta_set_string (core->analysis, RZ_META_TYPE_HIGHLIGHT, core->offset, ""); } rz_str_argv_free (argv); return false; case '.': - rz_meta_print_list_in_function (core->anal, RZ_META_TYPE_HIGHLIGHT, 0, core->offset); + rz_meta_print_list_in_function (core->analysis, RZ_META_TYPE_HIGHLIGHT, 0, core->offset); rz_str_argv_free (argv); return false; case '\0': - rz_meta_print_list_all (core->anal, RZ_META_TYPE_HIGHLIGHT, 0); + rz_meta_print_list_all (core->analysis, RZ_META_TYPE_HIGHLIGHT, 0); rz_str_argv_free (argv); return false; case 'j': - rz_meta_print_list_all (core->anal, RZ_META_TYPE_HIGHLIGHT, 'j'); + rz_meta_print_list_all (core->analysis, RZ_META_TYPE_HIGHLIGHT, 'j'); rz_str_argv_free (argv); return false; case '*': - rz_meta_print_list_all (core->anal, RZ_META_TYPE_HIGHLIGHT, '*'); + rz_meta_print_list_all (core->analysis, RZ_META_TYPE_HIGHLIGHT, '*'); rz_str_argv_free (argv); return false; case ' ': @@ -546,10 +546,10 @@ RZ_IPI int rz_cmd_eval(void *data, const char *input) { rz_str_argv_free (argv); return true; } - rz_meta_set_string (core->anal, RZ_META_TYPE_HIGHLIGHT, core->offset, ""); - const char *str = rz_meta_get_string (core->anal, RZ_META_TYPE_HIGHLIGHT, core->offset); + rz_meta_set_string (core->analysis, RZ_META_TYPE_HIGHLIGHT, core->offset, ""); + const char *str = rz_meta_get_string (core->analysis, RZ_META_TYPE_HIGHLIGHT, core->offset); char *dup = rz_str_newf ("%s \"%s%s\"", str?str:"", word?word:"", color_code?color_code:rz_cons_singleton ()->context->pal.wordhl); - rz_meta_set_string (core->anal, RZ_META_TYPE_HIGHLIGHT, core->offset, dup); + rz_meta_set_string (core->analysis, RZ_META_TYPE_HIGHLIGHT, core->offset, dup); rz_str_argv_free (argv); RZ_FREE (word); RZ_FREE (dup); diff --git a/librz/core/cmd_flag.c b/librz/core/cmd_flag.c index 25adae26fb..6b255836a3 100644 --- a/librz/core/cmd_flag.c +++ b/librz/core/cmd_flag.c @@ -676,7 +676,7 @@ static int flag_space_stack_list(RzFlag *f, int mode) { typedef struct { int rad; PJ *pj; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; } PrintFcnLabelsCtx; static bool print_function_labels_cb(void *user, const ut64 addr, const void *v) { @@ -700,7 +700,7 @@ static bool print_function_labels_cb(void *user, const ut64 addr, const void *v) } -static void print_function_labels_for(RzAnalFunction *fcn, int rad, PJ *pj) { +static void print_function_labels_for(RzAnalysisFunction *fcn, int rad, PJ *pj) { rz_return_if_fail (fcn && (rad != 'j' || pj)); bool json = rad == 'j'; if (json) { @@ -713,8 +713,8 @@ static void print_function_labels_for(RzAnalFunction *fcn, int rad, PJ *pj) { } } -static void print_function_labels(RzAnal *anal, RzAnalFunction *fcn, int rad) { - rz_return_if_fail (anal || fcn); +static void print_function_labels(RzAnalysis *analysis, RzAnalysisFunction *fcn, int rad) { + rz_return_if_fail (analysis || fcn); PJ *pj = NULL; bool json = rad == 'j'; if (json) { @@ -726,9 +726,9 @@ static void print_function_labels(RzAnal *anal, RzAnalFunction *fcn, int rad) { if (json) { pj_o (pj); } - RzAnalFunction *f; + RzAnalysisFunction *f; RzListIter *iter; - rz_list_foreach (anal->fcns, iter, f) { + rz_list_foreach (analysis->fcns, iter, f) { if (!f->labels->count) { continue; } @@ -1003,9 +1003,9 @@ rep: flagname++; } if (*flagname == '.') { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, off, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, off, 0); if (fcn) { - rz_anal_function_delete_label_at (fcn, off); + rz_analysis_function_delete_label_at (fcn, off); } else { eprintf ("Cannot find function at 0x%08"PFMT64x"\n", off); } @@ -1025,18 +1025,18 @@ rep: if (input[1]) { if (input[1] == '*' || input[1] == 'j') { if (input[2] == '*') { - print_function_labels (core->anal, NULL, input[1]); + print_function_labels (core->analysis, NULL, input[1]); } else { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, off, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, off, 0); if (fcn) { - print_function_labels (core->anal, fcn, input[1]); + print_function_labels (core->analysis, fcn, input[1]); } else { eprintf ("Cannot find function at 0x%08"PFMT64x"\n", off); } } } else { char *name = strdup (input + ((input[2] == ' ')? 2: 1)); - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, off, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, off, 0); if (name) { char *eq = strchr (name, '='); if (eq) { @@ -1046,9 +1046,9 @@ rep: rz_str_trim (name); if (fcn) { if (*name=='-') { - rz_anal_function_delete_label (fcn, name + 1); + rz_analysis_function_delete_label (fcn, name + 1); } else { - rz_anal_function_set_label (fcn, name, off); + rz_analysis_function_set_label (fcn, name, off); } } else { eprintf ("Cannot find function at 0x%08"PFMT64x"\n", off); @@ -1057,9 +1057,9 @@ rep: } } } else { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, off, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, off, 0); if (fcn) { - print_function_labels (core->anal, fcn, 0); + print_function_labels (core->analysis, fcn, 0); } else { eprintf ("Local flags require a function to work."); } diff --git a/librz/core/cmd_info.c b/librz/core/cmd_info.c index df23c8dbbd..5af98bb5d9 100644 --- a/librz/core/cmd_info.c +++ b/librz/core/cmd_info.c @@ -160,18 +160,18 @@ static void cmd_info_here(RzCore *core, int mode) { pj_ks (pj, "comment", item->comment); } RzListIter *iter; - RzAnalRef *ref; + RzAnalysisRef *ref; if (item->data) { pj_ks (pj, "data", item->data); } { - RzList *refs = rz_anal_refs_get (core->anal, core->offset); + RzList *refs = rz_analysis_refs_get (core->analysis, core->offset); if (refs && rz_list_length (refs) > 0) { pj_k (pj, "refs"); pj_a (pj); rz_list_foreach (refs, iter, ref) { pj_o (pj); - pj_ks (pj, "type", rz_anal_ref_type_tostring (ref->type)); + pj_ks (pj, "type", rz_analysis_ref_type_tostring (ref->type)); pj_kn (pj, "addr", ref->addr); pj_end (pj); } @@ -179,13 +179,13 @@ static void cmd_info_here(RzCore *core, int mode) { } } { - RzList *refs = rz_anal_xrefs_get (core->anal, core->offset); + RzList *refs = rz_analysis_xrefs_get (core->analysis, core->offset); if (refs && rz_list_length (refs) > 0) { pj_k (pj, "xrefs"); pj_a (pj); rz_list_foreach (refs, iter, ref) { pj_o (pj); - pj_ks (pj, "type", rz_anal_ref_type_tostring (ref->type)); + pj_ks (pj, "type", rz_analysis_ref_type_tostring (ref->type)); pj_kn (pj, "addr", ref->addr); pj_end (pj); } diff --git a/librz/core/cmd_meta.c b/librz/core/cmd_meta.c index 6ce43967f7..f3bb580365 100644 --- a/librz/core/cmd_meta.c +++ b/librz/core/cmd_meta.c @@ -1,6 +1,6 @@ /* rizin - LGPL - Copyright 2009-2020 - pancake */ -#include "rz_anal.h" +#include "rz_analysis.h" #include "rz_bin.h" #include "rz_cons.h" #include "rz_core.h" @@ -340,20 +340,20 @@ static int cmd_meta_comment(RzCore *core, const char *input) { eprintf ("Usage: CC, [file]\n"); } else if (input[2] == ' ') { const char *fn = input+2; - const char *comment = rz_meta_get_string (core->anal, RZ_META_TYPE_COMMENT, addr); + const char *comment = rz_meta_get_string (core->analysis, RZ_META_TYPE_COMMENT, addr); while (*fn== ' ')fn++; if (comment && *comment) { // append filename in current comment char *nc = rz_str_newf ("%s ,(%s)", comment, fn); - rz_meta_set_string (core->anal, RZ_META_TYPE_COMMENT, addr, nc); + rz_meta_set_string (core->analysis, RZ_META_TYPE_COMMENT, addr, nc); free (nc); } else { char *newcomment = rz_str_newf (",(%s)", fn); - rz_meta_set_string (core->anal, RZ_META_TYPE_COMMENT, addr, newcomment); + rz_meta_set_string (core->analysis, RZ_META_TYPE_COMMENT, addr, newcomment); free (newcomment); } } else { - const char *comment = rz_meta_get_string (core->anal, RZ_META_TYPE_COMMENT, addr); + const char *comment = rz_meta_get_string (core->analysis, RZ_META_TYPE_COMMENT, addr); if (comment && *comment) { char *cmtfile = rz_str_between (comment, ",(", ")"); if (cmtfile && *cmtfile) { @@ -368,14 +368,14 @@ static int cmd_meta_comment(RzCore *core, const char *input) { case '.': { ut64 at = input[2]? rz_num_math (core->num, input + 2): addr; - const char *comment = rz_meta_get_string (core->anal, RZ_META_TYPE_COMMENT, at); + const char *comment = rz_meta_get_string (core->analysis, RZ_META_TYPE_COMMENT, at); if (comment) { rz_cons_println (comment); } } break; case 0: // "CC" - rz_meta_print_list_all (core->anal, RZ_META_TYPE_COMMENT, 0); + rz_meta_print_list_all (core->analysis, RZ_META_TYPE_COMMENT, 0); break; case 'f': // "CCf" switch (input[2]) { @@ -385,44 +385,44 @@ static int cmd_meta_comment(RzCore *core, const char *input) { if (!arg) { arg = core->offset; } - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, arg, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, arg, 0); if (fcn) { - RzAnalBlock *bb; + RzAnalysisBlock *bb; RzListIter *iter; rz_list_foreach (fcn->bbs, iter, bb) { int i; for (i = 0; i < bb->size; i++) { ut64 addr = bb->addr + i; - rz_meta_del (core->anal, RZ_META_TYPE_COMMENT, addr, 1); + rz_meta_del (core->analysis, RZ_META_TYPE_COMMENT, addr, 1); } } } } break; case 'j': // "CCfj" - rz_meta_print_list_in_function (core->anal, RZ_META_TYPE_COMMENT, 'j', core->offset); + rz_meta_print_list_in_function (core->analysis, RZ_META_TYPE_COMMENT, 'j', core->offset); break; case '*': // "CCf*" - rz_meta_print_list_in_function (core->anal, RZ_META_TYPE_COMMENT, 1, core->offset); + rz_meta_print_list_in_function (core->analysis, RZ_META_TYPE_COMMENT, 1, core->offset); break; default: - rz_meta_print_list_in_function (core->anal, RZ_META_TYPE_COMMENT, 0, core->offset); + rz_meta_print_list_in_function (core->analysis, RZ_META_TYPE_COMMENT, 0, core->offset); break; } break; case 'j': // "CCj" - rz_meta_print_list_all (core->anal, RZ_META_TYPE_COMMENT, 'j'); + rz_meta_print_list_all (core->analysis, RZ_META_TYPE_COMMENT, 'j'); break; case '!': { char *out; - const char *comment = rz_meta_get_string (core->anal, RZ_META_TYPE_COMMENT, addr); + const char *comment = rz_meta_get_string (core->analysis, RZ_META_TYPE_COMMENT, addr); out = rz_core_editor (core, NULL, comment); if (out) { - //rz_meta_set (core->anal->meta, RZ_META_TYPE_COMMENT, addr, 0, out); + //rz_meta_set (core->analysis->meta, RZ_META_TYPE_COMMENT, addr, 0, out); rz_core_cmdf (core, "CC-@0x%08"PFMT64x, addr); - //rz_meta_del (core->anal->meta, input[0], addr, addr+1); - rz_meta_set_string (core->anal, + //rz_meta_del (core->analysis->meta, input[0], addr, addr+1); + rz_meta_set_string (core->analysis, RZ_META_TYPE_COMMENT, addr, out); free (out); } @@ -432,7 +432,7 @@ static int cmd_meta_comment(RzCore *core, const char *input) { case ' ': { const char *newcomment = rz_str_trim_head_ro (input + 2); - const char *comment = rz_meta_get_string (core->anal, RZ_META_TYPE_COMMENT, addr); + const char *comment = rz_meta_get_string (core->analysis, RZ_META_TYPE_COMMENT, addr); char *text; char *nc = strdup (newcomment); rz_str_unescape (nc); @@ -442,28 +442,28 @@ static int cmd_meta_comment(RzCore *core, const char *input) { strcpy (text, comment); strcat (text, " "); strcat (text, nc); - rz_meta_set_string (core->anal, RZ_META_TYPE_COMMENT, addr, text); + rz_meta_set_string (core->analysis, RZ_META_TYPE_COMMENT, addr, text); free (text); } else { rz_sys_perror ("malloc"); } } else { - rz_meta_set_string (core->anal, RZ_META_TYPE_COMMENT, addr, nc); + rz_meta_set_string (core->analysis, RZ_META_TYPE_COMMENT, addr, nc); } free (nc); } break; case '*': // "CC*" - rz_meta_print_list_all (core->anal, RZ_META_TYPE_COMMENT, 1); + rz_meta_print_list_all (core->analysis, RZ_META_TYPE_COMMENT, 1); break; case '-': // "CC-" if (input[2] == '*') { // "CC-*" - rz_meta_del (core->anal, RZ_META_TYPE_COMMENT, UT64_MAX, UT64_MAX); + rz_meta_del (core->analysis, RZ_META_TYPE_COMMENT, UT64_MAX, UT64_MAX); } else if (input[2]) { // "CC-$$+32" ut64 arg = rz_num_math (core->num, input + 2); - rz_meta_del (core->anal, RZ_META_TYPE_COMMENT, arg, 1); + rz_meta_del (core->analysis, RZ_META_TYPE_COMMENT, arg, 1); } else { // "CC-" - rz_meta_del (core->anal, RZ_META_TYPE_COMMENT, core->offset, 1); + rz_meta_del (core->analysis, RZ_META_TYPE_COMMENT, core->offset, 1); } break; case 'u': // "CCu" @@ -483,9 +483,9 @@ static int cmd_meta_comment(RzCore *core, const char *input) { newcomment = strdup (arg); } if (newcomment) { - const char *comment = rz_meta_get_string (core->anal, RZ_META_TYPE_COMMENT, addr); + const char *comment = rz_meta_get_string (core->analysis, RZ_META_TYPE_COMMENT, addr); if (!comment || (comment && !strstr (comment, newcomment))) { - rz_meta_set_string (core->anal, RZ_META_TYPE_COMMENT, addr, newcomment); + rz_meta_set_string (core->analysis, RZ_META_TYPE_COMMENT, addr, newcomment); } free (newcomment); } @@ -509,7 +509,7 @@ static int cmd_meta_comment(RzCore *core, const char *input) { if (input[2]=='-') { if (input[3]) { addr = rz_num_math (core->num, input+3); - rz_meta_del (core->anal, + rz_meta_del (core->analysis, RZ_META_TYPE_COMMENT, addr, 1); } else eprintf ("Usage: CCa-[address]\n"); @@ -520,16 +520,16 @@ static int cmd_meta_comment(RzCore *core, const char *input) { // Comment at if (p) { if (input[2]=='+') { - const char *comment = rz_meta_get_string (core->anal, RZ_META_TYPE_COMMENT, addr); + const char *comment = rz_meta_get_string (core->analysis, RZ_META_TYPE_COMMENT, addr); if (comment) { char *text = rz_str_newf ("%s\n%s", comment, p); - rz_meta_set (core->anal, RZ_META_TYPE_COMMENT, addr, 1, text); + rz_meta_set (core->analysis, RZ_META_TYPE_COMMENT, addr, 1, text); free (text); } else { - rz_meta_set (core->anal, RZ_META_TYPE_COMMENT, addr, 1, p); + rz_meta_set (core->analysis, RZ_META_TYPE_COMMENT, addr, 1, p); } } else { - rz_meta_set (core->anal, RZ_META_TYPE_COMMENT, addr, 1, p); + rz_meta_set (core->analysis, RZ_META_TYPE_COMMENT, addr, 1, p); } } else { eprintf ("Usage: CCa [address] [comment]\n"); @@ -548,24 +548,24 @@ static int cmd_meta_vartype_comment(RzCore *core, const char *input) { rz_core_cmd_help (core, help_msg_Ct); break; case 0: // "Ct" - rz_meta_print_list_all (core->anal, RZ_META_TYPE_VARTYPE, 0); + rz_meta_print_list_all (core->analysis, RZ_META_TYPE_VARTYPE, 0); break; case ' ': // "Ct @ addr" { const char* newcomment = rz_str_trim_head_ro (input + 2); - const char *comment = rz_meta_get_string (core->anal, RZ_META_TYPE_VARTYPE, addr); + const char *comment = rz_meta_get_string (core->analysis, RZ_META_TYPE_VARTYPE, addr); char *nc = strdup (newcomment); rz_str_unescape (nc); if (comment) { char *text = rz_str_newf ("%s %s", comment, nc); if (text) { - rz_meta_set_string (core->anal, RZ_META_TYPE_VARTYPE, addr, text); + rz_meta_set_string (core->analysis, RZ_META_TYPE_VARTYPE, addr, text); free (text); } else { rz_sys_perror ("malloc"); } } else { - rz_meta_set_string (core->anal, RZ_META_TYPE_VARTYPE, addr, nc); + rz_meta_set_string (core->analysis, RZ_META_TYPE_VARTYPE, addr, nc); } free (nc); } @@ -573,14 +573,14 @@ static int cmd_meta_vartype_comment(RzCore *core, const char *input) { case '.': // "Ct. @ addr" { ut64 at = input[2]? rz_num_math (core->num, input + 2): addr; - const char *comment = rz_meta_get_string (core->anal, RZ_META_TYPE_VARTYPE, at); + const char *comment = rz_meta_get_string (core->analysis, RZ_META_TYPE_VARTYPE, at); if (comment) { rz_cons_println (comment); } } break; case '-': // "Ct-" - rz_meta_del (core->anal, RZ_META_TYPE_VARTYPE, core->offset, 1); + rz_meta_del (core->analysis, RZ_META_TYPE_VARTYPE, core->offset, 1); break; default: rz_core_cmd_help (core, help_msg_Ct); @@ -624,7 +624,7 @@ static int cmd_meta_others(RzCore *core, const char *input) { case '-': // "Cf-", "Cd-", ... switch (input[2]) { case '*': // "Cf-*", "Cd-*", ... - rz_meta_del (core->anal, input[0], 0, UT64_MAX); + rz_meta_del (core->analysis, input[0], 0, UT64_MAX); break; case ' ': p2 = strchr (input + 3, ' '); @@ -637,7 +637,7 @@ static int cmd_meta_others(RzCore *core, const char *input) { break; } for (i = 0; i < rep && UT64_MAX - cur_addr > size; i++, cur_addr += size) { - rz_meta_del (core->anal, input[0], cur_addr, size); + rz_meta_del (core->analysis, input[0], cur_addr, size); } break; } else { @@ -645,26 +645,26 @@ static int cmd_meta_others(RzCore *core, const char *input) { /* fallthrough */ } default: - rz_meta_del (core->anal, input[0], addr, 1); + rz_meta_del (core->analysis, input[0], addr, 1); break; } break; case '*': // "Cf*", "Cd*", ... - rz_meta_print_list_all (core->anal, input[0], 1); + rz_meta_print_list_all (core->analysis, input[0], 1); break; case 'j': // "Cfj", "Cdj", ... - rz_meta_print_list_all (core->anal, input[0], 'j'); + rz_meta_print_list_all (core->analysis, input[0], 'j'); break; case '!': // "Cf!", "Cd!", ... { char *out; - const char *comment = rz_meta_get_string (core->anal, RZ_META_TYPE_COMMENT, addr); + const char *comment = rz_meta_get_string (core->analysis, RZ_META_TYPE_COMMENT, addr); out = rz_core_editor (core, NULL, comment); if (out) { - //rz_meta_set (core->anal->meta, RZ_META_TYPE_COMMENT, addr, 0, out); + //rz_meta_set (core->analysis->meta, RZ_META_TYPE_COMMENT, addr, 0, out); rz_core_cmdf (core, "CC-@0x%08"PFMT64x, addr); - //rz_meta_del (core->anal->meta, input[0], addr, addr+1); - rz_meta_set_string (core->anal, RZ_META_TYPE_COMMENT, addr, out); + //rz_meta_del (core->analysis->meta, input[0], addr, addr+1); + rz_meta_set_string (core->analysis, RZ_META_TYPE_COMMENT, addr, out); free (out); } } @@ -672,22 +672,22 @@ static int cmd_meta_others(RzCore *core, const char *input) { case '.': // "Cf.", "Cd.", ... if (input[2] == '.') { // "Cs.." ut64 size; - RzAnalMetaItem *mi = rz_meta_get_at (core->anal, addr, type, &size); + RzAnalysisMetaItem *mi = rz_meta_get_at (core->analysis, addr, type, &size); if (mi) { - rz_meta_print (core->anal, mi, addr, size, input[3], NULL, false); + rz_meta_print (core->analysis, mi, addr, size, input[3], NULL, false); } break; } else if (input[2] == 'j') { // "Cs.j" ut64 size; - RzAnalMetaItem *mi = rz_meta_get_at (core->anal, addr, type, &size); + RzAnalysisMetaItem *mi = rz_meta_get_at (core->analysis, addr, type, &size); if (mi) { - rz_meta_print (core->anal, mi, addr, size, input[2], NULL, false); + rz_meta_print (core->analysis, mi, addr, size, input[2], NULL, false); rz_cons_newline (); } break; } ut64 size; - RzAnalMetaItem *mi = rz_meta_get_at (core->anal, addr, type, &size); + RzAnalysisMetaItem *mi = rz_meta_get_at (core->analysis, addr, type, &size); if (!mi) { break; } @@ -721,7 +721,7 @@ static int cmd_meta_others(RzCore *core, const char *input) { case 'a': case '8': if (type != 'z' && !input[1] && !core->tmpseek) { - rz_meta_print_list_all (core->anal, type, 0); + rz_meta_print_list_all (core->analysis, type, 0); break; } if (type == 'z') { @@ -852,15 +852,15 @@ static int cmd_meta_others(RzCore *core, const char *input) { default: subtype = RZ_STRING_ENC_GUESS; } - rz_meta_set_with_subtype (core->anal, type, subtype, addr, n, name); + rz_meta_set_with_subtype (core->analysis, type, subtype, addr, n, name); } else { - rz_meta_set (core->anal, type, addr, n, name); + rz_meta_set (core->analysis, type, addr, n, name); } free (t); repcnt ++; addr += n; } - //rz_meta_cleanup (core->anal->meta, 0LL, UT64_MAX); + //rz_meta_cleanup (core->analysis->meta, 0LL, UT64_MAX); break; default: eprintf ("Missing space after CC\n"); @@ -888,7 +888,7 @@ void rz_comment_var_help(RzCore *core, char type) { void rz_comment_vars(RzCore *core, const char *input) { //TODO enable base64 and make it the default for C* - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, 0); char *oname = NULL, *name = NULL; if (!input[0] || input[1] == '?' || (input[0] != 'b' && input[0] != 'r' && input[0] != 's')) { @@ -906,7 +906,7 @@ void rz_comment_vars(RzCore *core, const char *input) { void **it; char kind = input[0]; rz_pvector_foreach (&fcn->vars, it) { - RzAnalVar *var = *it; + RzAnalysisVar *var = *it; if (var->kind != kind || !var->comment) { continue; } @@ -934,10 +934,10 @@ void rz_comment_vars(RzCore *core, const char *input) { comment = heap_comment; } } - RzAnalVar *var = rz_anal_function_get_var_byname (fcn, name); + RzAnalysisVar *var = rz_analysis_function_get_var_byname (fcn, name); if (!var) { int idx = (int)strtol (name, NULL, 0); - var = rz_anal_function_get_var (fcn, input[0], idx); + var = rz_analysis_function_get_var (fcn, input[0], idx); } if (!var) { eprintf ("can't find variable at given offset\n"); @@ -960,10 +960,10 @@ void rz_comment_vars(RzCore *core, const char *input) { case '-': { // "Cv-" name++; rz_str_trim (name); - RzAnalVar *var = rz_anal_function_get_var_byname (fcn, name); + RzAnalysisVar *var = rz_analysis_function_get_var_byname (fcn, name); if (!var) { int idx = (int)strtol (name, NULL, 0); - var = rz_anal_function_get_var (fcn, input[0], idx); + var = rz_analysis_function_get_var (fcn, input[0], idx); } if (!var) { eprintf ("can't find variable at given offset\n"); @@ -977,7 +977,7 @@ void rz_comment_vars(RzCore *core, const char *input) { char *comment; name++; rz_str_trim (name); - RzAnalVar *var = rz_anal_function_get_var_byname (fcn, name); + RzAnalysisVar *var = rz_analysis_function_get_var_byname (fcn, name); if (!var) { eprintf ("can't find variable named `%s`\n", name); break; @@ -995,7 +995,7 @@ void rz_comment_vars(RzCore *core, const char *input) { RZ_IPI int rz_cmd_meta(void *data, const char *input) { RzCore *core = (RzCore*)data; - RzAnalFunction *f; + RzAnalysisFunction *f; RzSpaces *ms; int i; @@ -1004,19 +1004,19 @@ RZ_IPI int rz_cmd_meta(void *data, const char *input) { rz_comment_vars (core, input + 1); break; case '\0': // "C" - rz_meta_print_list_all (core->anal, RZ_META_TYPE_ANY, 0); + rz_meta_print_list_all (core->analysis, RZ_META_TYPE_ANY, 0); break; case 'j': // "Cj" case '*': { // "C*" if (!input[0] || input[1] == '.') { - rz_meta_print_list_at (core->anal, core->offset, *input); + rz_meta_print_list_at (core->analysis, core->offset, *input); } else { - rz_meta_print_list_all (core->anal, RZ_META_TYPE_ANY, *input); + rz_meta_print_list_all (core->analysis, RZ_META_TYPE_ANY, *input); } break; } case '.': { // "C." - rz_meta_print_list_at (core->anal, core->offset, 0); + rz_meta_print_list_at (core->analysis, core->offset, 0); break; } case 'L': // "CL" @@ -1040,25 +1040,25 @@ RZ_IPI int rz_cmd_meta(void *data, const char *input) { case '-': // "C-" if (input[1] != '*') { i = input[1] ? rz_num_math (core->num, input + (input[1] == ' ' ? 2 : 1)) : 1; - rz_meta_del (core->anal, RZ_META_TYPE_ANY, core->offset, i); + rz_meta_del (core->analysis, RZ_META_TYPE_ANY, core->offset, i); } else { - rz_meta_del (core->anal, RZ_META_TYPE_ANY, 0, UT64_MAX); + rz_meta_del (core->analysis, RZ_META_TYPE_ANY, 0, UT64_MAX); } break; case '?': // "C?" rz_core_cmd_help (core, help_msg_C); break; case 'F': // "CF" - f = rz_anal_get_fcn_in (core->anal, core->offset, + f = rz_analysis_get_fcn_in (core->analysis, core->offset, RZ_ANAL_FCN_TYPE_FCN|RZ_ANAL_FCN_TYPE_SYM); if (f) { - rz_anal_str_to_fcn (core->anal, f, input + 2); + rz_analysis_str_to_fcn (core->analysis, f, input + 2); } else { eprintf ("Cannot find function here\n"); } break; case 'S': // "CS" - ms = &core->anal->meta_spaces; + ms = &core->analysis->meta_spaces; /** copypasta from `fs`.. this must be refactorized to be shared */ switch (input[1]) { case '?': // "CS?" diff --git a/librz/core/cmd_open.c b/librz/core/cmd_open.c index 9d576bfd02..2b6e794a70 100644 --- a/librz/core/cmd_open.c +++ b/librz/core/cmd_open.c @@ -946,13 +946,13 @@ static bool __rebase_flags(RzFlagItem *flag, void *user) { static bool __rebase_refs_i(void *user, const ut64 k, const void *v) { struct __rebase_struct *reb = (void *)user; - RzAnalRef *ref = (RzAnalRef *)v; + RzAnalysisRef *ref = (RzAnalysisRef *)v; ref->addr += reb->diff; ref->at += reb->diff; if (reb->type) { - rz_anal_xrefs_set (reb->core->anal, ref->addr, ref->at, ref->type); + rz_analysis_xrefs_set (reb->core->analysis, ref->addr, ref->at, ref->type); } else { - rz_anal_xrefs_set (reb->core->anal, ref->at, ref->addr, ref->type); + rz_analysis_xrefs_set (reb->core->analysis, ref->at, ref->addr, ref->type); } return true; } @@ -965,7 +965,7 @@ static bool __rebase_refs(void *user, const ut64 k, const void *v) { static void __rebase_everything(RzCore *core, RzList *old_sections, ut64 old_base) { RzListIter *it, *itit, *ititit; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; ut64 new_base = core->bin->cur->o->baddr_shift; RzBinSection *old_section; ut64 diff = new_base - old_base; @@ -973,21 +973,21 @@ static void __rebase_everything(RzCore *core, RzList *old_sections, ut64 old_bas return; } // FUNCTIONS - rz_list_foreach (core->anal->fcns, it, fcn) { + rz_list_foreach (core->analysis->fcns, it, fcn) { rz_list_foreach (old_sections, itit, old_section) { if (!__is_inside_section (fcn->addr, old_section)) { continue; } - rz_anal_function_rebase_vars (core->anal, fcn); - rz_anal_function_relocate (fcn, fcn->addr + diff); - RzAnalBlock *bb; + rz_analysis_function_rebase_vars (core->analysis, fcn); + rz_analysis_function_relocate (fcn, fcn->addr + diff); + RzAnalysisBlock *bb; ut64 new_sec_addr = new_base + old_section->vaddr; rz_list_foreach (fcn->bbs, ititit, bb) { if (bb->addr >= new_sec_addr && bb->addr <= new_sec_addr + old_section->vsize) { // Todo: Find better way to check if bb was already rebased continue; } - rz_anal_block_relocate (bb, bb->addr + diff, bb->size); + rz_analysis_block_relocate (bb, bb->addr + diff, bb->size); if (bb->jump != UT64_MAX) { bb->jump += diff; } @@ -1009,14 +1009,14 @@ static void __rebase_everything(RzCore *core, RzList *old_sections, ut64 old_bas rz_flag_foreach (core->flags, __rebase_flags, &reb); // META - rz_meta_rebase (core->anal, diff); + rz_meta_rebase (core->analysis, diff); // REFS - HtUP *old_refs = core->anal->dict_refs; - HtUP *old_xrefs = core->anal->dict_xrefs; - core->anal->dict_refs = NULL; - core->anal->dict_xrefs = NULL; - rz_anal_xrefs_init (core->anal); + HtUP *old_refs = core->analysis->dict_refs; + HtUP *old_xrefs = core->analysis->dict_xrefs; + core->analysis->dict_refs = NULL; + core->analysis->dict_xrefs = NULL; + rz_analysis_xrefs_init (core->analysis); reb.type = 0; ht_up_foreach (old_refs, __rebase_refs, &reb); reb.type = 1; @@ -1612,7 +1612,7 @@ RZ_IPI int rz_cmd_open(void *data, const char *input) { rz_bin_file_delete_all (core->bin); // TODO: Move to a-- ? - rz_anal_purge (core->anal); + rz_analysis_purge (core->analysis); // TODO: Move to f-- ? rz_flag_unset_all (core->flags); // TODO: rbin? diff --git a/librz/core/cmd_plugins.c b/librz/core/cmd_plugins.c index bc4fc8a313..a447f0c0d9 100644 --- a/librz/core/cmd_plugins.c +++ b/librz/core/cmd_plugins.c @@ -12,7 +12,7 @@ static const char *help_msg_L[] = { "L", " blah."RZ_LIB_EXT, "load plugin file", "L-", "duk", "unload core plugin by name", "Ll", "", "list lang plugins (same as #!)", - "La", "", "list asm/anal plugins (aL, e asm.arch=" "??" ")", + "La", "", "list asm/analysis plugins (aL, e asm.arch=" "??" ")", "Lc", "", "list core plugins", "Ld", "", "list debug plugins (same as dL)", "LD", "", "list supported decompilers", diff --git a/librz/core/cmd_print.c b/librz/core/cmd_print.c index c74f5d50aa..901c6a1991 100644 --- a/librz/core/cmd_print.c +++ b/librz/core/cmd_print.c @@ -1411,9 +1411,9 @@ static void cmd_print_format(RzCore *core, const char *_input, const ut8* block, if (rz_str_endswith (_input, ".h")) { char *error_msg = NULL; const char *dir = rz_config_get (core->config, "dir.types"); - char *out = rz_parse_c_file (core->anal, path, dir, &error_msg); + char *out = rz_parse_c_file (core->analysis, path, dir, &error_msg); if (out) { - rz_anal_save_parsed_type (core->anal, out); + rz_analysis_save_parsed_type (core->analysis, out); rz_core_cmd0 (core, ".ts*"); free (out); } else { @@ -1733,8 +1733,8 @@ static void annotated_hexdump(RzCore *core, const char *str, int len) { RZ_FREE (note[j]); // TODO: in pava mode we should read addr or ea? // imho ea. but wat about hdrs and such - RzIntervalNode *meta_node = rz_meta_get_in (core->anal, ea + j, RZ_META_TYPE_FORMAT); - RzAnalMetaItem *meta = meta_node ? meta_node->data : NULL; + RzIntervalNode *meta_node = rz_meta_get_in (core->analysis, ea + j, RZ_META_TYPE_FORMAT); + RzAnalysisMetaItem *meta = meta_node ? meta_node->data : NULL; if (meta && meta->type == RZ_META_TYPE_FORMAT && meta_node->start == addr + j) { rz_cons_printf (".format %s ; size=", meta->str); rz_core_cmdf (core, "pfs %s", meta->str); @@ -1749,7 +1749,7 @@ static void annotated_hexdump(RzCore *core, const char *str, int len) { meta = NULL; } // collect comments - const char *comment = rz_meta_get_string (core->anal, RZ_META_TYPE_COMMENT, addr + j); + const char *comment = rz_meta_get_string (core->analysis, RZ_META_TYPE_COMMENT, addr + j); if (comment) { note[j] = rz_str_newf (";%s", comment); marks = true; @@ -1953,7 +1953,7 @@ static void annotated_hexdump(RzCore *core, const char *str, int len) { RZ_API void rz_core_print_examine(RzCore *core, const char *str) { char cmd[128], *p; ut64 addr = core->offset; - int size = (core->anal->bits / 4); + int size = (core->analysis->bits / 4); int count = atoi (str); int i, n; if (count < 1) { @@ -2073,7 +2073,7 @@ static int printzoomcallback(void *user, int mode, ut64 addr, ut8 *bufz, ut64 si switch (mode) { case 'a': { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, addr, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, addr, 0); int value = 0; if (fcn) { value = rz_list_length (fcn->bbs); @@ -2083,7 +2083,7 @@ static int printzoomcallback(void *user, int mode, ut64 addr, ut8 *bufz, ut64 si break; case 'A': { - RzCoreAnalStats *as = rz_core_anal_get_stats (core, addr, addr + size * 2, size); + RzCoreAnalStats *as = rz_core_analysis_get_stats (core, addr, addr + size * 2, size); int i; int value = 0; for (i = 0; i < 1; i++) { @@ -2096,7 +2096,7 @@ static int printzoomcallback(void *user, int mode, ut64 addr, ut8 *bufz, ut64 si value += as->block[i].blocks; value *= 20; } - rz_core_anal_stats_free (as); + rz_core_analysis_stats_free (as); return value; } break; @@ -2172,7 +2172,7 @@ static int cmd_print_pxA(RzCore *core, int len, const char *input) { char buf[2]; char *bgcolor, *fgcolor, *text; ut64 i, c, oi; - RzAnalOp op; + RzAnalysisOp op; ut8 *data; int datalen; if (*input == 'v') { @@ -2221,7 +2221,7 @@ static int cmd_print_pxA(RzCore *core, int len, const char *input) { bgcolor = Color_BGBLACK; fgcolor = Color_WHITE; text = NULL; - if (rz_anal_op (core->anal, &op, core->offset + i, data + i, len - i, RZ_ANAL_OP_MASK_BASIC) <= 0) { + if (rz_analysis_op (core->analysis, &op, core->offset + i, data + i, len - i, RZ_ANAL_OP_MASK_BASIC) <= 0) { op.type = 0; bgcolor = Color_BGRED; op.size = 1; @@ -2416,7 +2416,7 @@ static int cmd_print_pxA(RzCore *core, int len, const char *input) { } } i += opsz; - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); } rz_cons_printf (" %" PFMT64d "\n", i - oi); if (bgcolor_in_heap) { @@ -2507,9 +2507,9 @@ static void _handle_call(RzCore *core, char *line, char **str) { } // TODO: this is just a PoC, the disasm loop should be rewritten -// TODO: this is based on string matching, it should be written upon RzAnalOp to know +// TODO: this is based on string matching, it should be written upon RzAnalysisOp to know // when we have a call and such -static void disasm_strings(RzCore *core, const char *input, RzAnalFunction *fcn) { +static void disasm_strings(RzCore *core, const char *input, RzAnalysisFunction *fcn) { const char *linecolor = NULL; char *ox, *qo, *string = NULL; char *line, *s, *str, *string2 = NULL; @@ -2538,12 +2538,12 @@ static void disasm_strings(RzCore *core, const char *input, RzAnalFunction *fcn) line = NULL; s = NULL; if (!strncmp (input, "dsb", 3)) { - RzAnalBlock *bb = rz_anal_bb_from_offset (core->anal, core->offset); + RzAnalysisBlock *bb = rz_analysis_bb_from_offset (core->analysis, core->offset); if (bb) { line = s = rz_core_cmd_strf (core, "pD %"PFMT64u" @ 0x%08"PFMT64x, bb->size, bb->addr); } } else if (!strncmp (input, "dsf", 3) || !strncmp (input, "dsr", 3)) { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, RZ_ANAL_FCN_TYPE_NULL); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, RZ_ANAL_FCN_TYPE_NULL); if (fcn) { line = s = rz_core_cmd_str (core, "pdr"); } else { @@ -2717,7 +2717,7 @@ static void disasm_strings(RzCore *core, const char *input, RzAnalFunction *fcn) if (addr != UT64_MAX) { const char *str = NULL; if (show_comments) { - char *comment = rz_core_anal_get_comments (core, addr); + char *comment = rz_core_analysis_get_comments (core, addr); if (comment) { if (switchcmp) { if (strcmp (comment, switchcmp)) { @@ -2743,7 +2743,7 @@ static void disasm_strings(RzCore *core, const char *input, RzAnalFunction *fcn) if (fcn) { bool label = false; /* show labels, basic blocks and (conditional) branches */ - RzAnalBlock *bb; + RzAnalysisBlock *bb; RzListIter *iter; rz_list_foreach (fcn->bbs, iter, bb) { if (addr == bb->jump) { @@ -3157,7 +3157,7 @@ static bool cmd_print_blocks(RzCore *core, const char *input) { rz_list_free (list); list = NULL; ut64 piece = RZ_MAX ((to - from) / RZ_MAX (cols, w), 1); - as = rz_core_anal_get_stats (core, from, to, piece); + as = rz_core_analysis_get_stats (core, from, to, piece); if (!as) { goto cleanup; } @@ -3309,12 +3309,12 @@ cleanup: pj_free (pj); rz_table_free (t); rz_list_free (list); - rz_core_anal_stats_free (as); + rz_core_analysis_stats_free (as); return result; } -static bool checkAnalType(RzAnalOp *op, int t) { +static bool checkAnalType(RzAnalysisOp *op, int t) { if (t == 'c') { switch (op->type) { case RZ_ANAL_OP_TYPE_RCALL: @@ -3372,7 +3372,7 @@ static ut8 *analBars(RzCore *core, size_t type, size_t nblocks, size_t blocksize } if (type == 'A') { ut64 to = from + (blocksize * nblocks); - RzCoreAnalStats *as = rz_core_anal_get_stats (core, from, to, blocksize); + RzCoreAnalStats *as = rz_core_analysis_get_stats (core, from, to, blocksize); for (i = 0; i < nblocks; i++) { int value = 0; value += as->block[i].functions; @@ -3384,7 +3384,7 @@ static ut8 *analBars(RzCore *core, size_t type, size_t nblocks, size_t blocksize value += as->block[i].blocks; ptr[i] = RZ_MIN (255, value); } - rz_core_anal_stats_free (as); + rz_core_analysis_stats_free (as); free (p); return ptr; } @@ -3395,13 +3395,13 @@ static ut8 *analBars(RzCore *core, size_t type, size_t nblocks, size_t blocksize ut64 off = from + (i + skipblocks) * blocksize; for (j = 0; j < blocksize ; j++) { if (type == 'a') { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, off + j, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, off + j, 0); if (fcn) { ptr[i] = rz_list_length (fcn->bbs); } continue; } - RzAnalOp *op = rz_core_anal_op (core, off + j, RZ_ANAL_OP_MASK_BASIC); + RzAnalysisOp *op = rz_core_analysis_op (core, off + j, RZ_ANAL_OP_MASK_BASIC); if (op) { if (op->size < 1) { // do nothing @@ -3416,7 +3416,7 @@ static ut8 *analBars(RzCore *core, size_t type, size_t nblocks, size_t blocksize if (op->size > 0) { j += op->size - 1; } - rz_anal_op_free (op); + rz_analysis_op_free (op); } else { if (type == 'i') { matchBar (ptr, i); @@ -3550,7 +3550,7 @@ static void cmd_print_bars(RzCore *core, const char *input) { int len = 0; if (submode == 'A') { ut64 to = from + totalsize; // (blocksize * nblocks); - RzCoreAnalStats *as = rz_core_anal_get_stats (core, from, to, blocksize); + RzCoreAnalStats *as = rz_core_analysis_get_stats (core, from, to, blocksize); for (i = 0; i < nblocks; i++) { int value = 0; value += as->block[i].functions; @@ -3563,7 +3563,7 @@ static void cmd_print_bars(RzCore *core, const char *input) { ptr[i] = 256 * value / blocksize; ptr[i] *= 3; } - rz_core_anal_stats_free (as); + rz_core_analysis_stats_free (as); } else for (i = 0; i < nblocks; i++) { ut64 off = from + blocksize * (i + skipblocks); rz_io_read_at (core->io, off, p, blocksize); @@ -3571,7 +3571,7 @@ static void cmd_print_bars(RzCore *core, const char *input) { switch (submode) { case 'a': { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, off + j, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, off + j, 0); if (fcn) { k += rz_list_length (fcn->bbs); k = RZ_MAX (255, k); @@ -3872,11 +3872,11 @@ beach: free (ptr); } -static int bbcmp(RzAnalBlock *a, RzAnalBlock *b) { +static int bbcmp(RzAnalysisBlock *a, RzAnalysisBlock *b) { return a->addr - b->addr; } -/* TODO: integrate this into rz_anal */ +/* TODO: integrate this into rz_analysis */ static void _pointer_table(RzCore *core, ut64 origin, ut64 offset, const ut8 *buf, int len, int step, int mode) { int i; ut64 addr; @@ -4068,10 +4068,10 @@ static void __printPattern(RzCore *core, const char *_input) { free (input); } -static void pr_bb(RzCore *core, RzAnalFunction *fcn, RzAnalBlock *b, bool emu, ut64 saved_gp, ut8 *saved_arena, char p_type, bool fromHere) { +static void pr_bb(RzCore *core, RzAnalysisFunction *fcn, RzAnalysisBlock *b, bool emu, ut64 saved_gp, ut8 *saved_arena, char p_type, bool fromHere) { bool show_flags = rz_config_get_i (core->config, "asm.flags"); const char *orig_bb_middle = rz_config_get (core->config, "asm.bb.middle"); - core->anal->gp = saved_gp; + core->analysis->gp = saved_gp; if (fromHere) { if (b->addr < core->offset) { core->cons->null = true; @@ -4082,18 +4082,18 @@ static void pr_bb(RzCore *core, RzAnalFunction *fcn, RzAnalBlock *b, bool emu, u if (emu) { if (b->parent_reg_arena) { ut64 gp; - rz_reg_arena_poke (core->anal->reg, b->parent_reg_arena); + rz_reg_arena_poke (core->analysis->reg, b->parent_reg_arena); RZ_FREE (b->parent_reg_arena); - gp = rz_reg_getv (core->anal->reg, "gp"); + gp = rz_reg_getv (core->analysis->reg, "gp"); if (gp) { - core->anal->gp = gp; + core->analysis->gp = gp; } } else { - rz_reg_arena_poke (core->anal->reg, saved_arena); + rz_reg_arena_poke (core->analysis->reg, saved_arena); } } if (b->parent_stackptr != INT_MAX) { - core->anal->stackptr = b->parent_stackptr; + core->analysis->stackptr = b->parent_stackptr; } rz_config_set_i (core->config, "asm.bb.middle", false); p_type == 'D' @@ -4103,13 +4103,13 @@ static void pr_bb(RzCore *core, RzAnalFunction *fcn, RzAnalBlock *b, bool emu, u if (b->jump != UT64_MAX) { if (b->jump > b->addr) { - RzAnalBlock *jumpbb = rz_anal_get_block_at (b->anal, b->jump); + RzAnalysisBlock *jumpbb = rz_analysis_get_block_at (b->analysis, b->jump); if (jumpbb && rz_list_contains (jumpbb->fcns, fcn)) { - if (emu && core->anal->last_disasm_reg && !jumpbb->parent_reg_arena) { - jumpbb->parent_reg_arena = rz_reg_arena_dup (core->anal->reg, core->anal->last_disasm_reg); + if (emu && core->analysis->last_disasm_reg && !jumpbb->parent_reg_arena) { + jumpbb->parent_reg_arena = rz_reg_arena_dup (core->analysis->reg, core->analysis->last_disasm_reg); } if (jumpbb->parent_stackptr == INT_MAX) { - jumpbb->parent_stackptr = core->anal->stackptr + b->stackptr; + jumpbb->parent_stackptr = core->analysis->stackptr + b->stackptr; } } } @@ -4119,13 +4119,13 @@ static void pr_bb(RzCore *core, RzAnalFunction *fcn, RzAnalBlock *b, bool emu, u } if (b->fail != UT64_MAX) { if (b->fail > b->addr) { - RzAnalBlock *failbb = rz_anal_get_block_at (b->anal, b->fail); + RzAnalysisBlock *failbb = rz_analysis_get_block_at (b->analysis, b->fail); if (failbb && rz_list_contains (failbb->fcns, fcn)) { - if (emu && core->anal->last_disasm_reg && !failbb->parent_reg_arena) { - failbb->parent_reg_arena = rz_reg_arena_dup (core->anal->reg, core->anal->last_disasm_reg); + if (emu && core->analysis->last_disasm_reg && !failbb->parent_reg_arena) { + failbb->parent_reg_arena = rz_reg_arena_dup (core->analysis->reg, core->analysis->last_disasm_reg); } if (failbb->parent_stackptr == INT_MAX) { - failbb->parent_stackptr = core->anal->stackptr + b->stackptr; + failbb->parent_stackptr = core->analysis->stackptr + b->stackptr; } } } @@ -4156,7 +4156,7 @@ static void disasm_until_ret(RzCore *core, ut64 addr, char type_print, const cha limit = rz_num_math (core->num, arg + 1); } for (i = 0; i < limit; i++) { - RzAnalOp *op = rz_core_anal_op (core, addr, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_DISASM); + RzAnalysisOp *op = rz_core_analysis_op (core, addr, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_DISASM); if (op) { char *mnem = op->mnemonic; char *m = malloc ((strlen (mnem) * 2) + 32); @@ -4187,11 +4187,11 @@ static void disasm_until_ret(RzCore *core, ut64 addr, char type_print, const cha } } else { eprintf ("[pdp] Cannot get op at 0x%08"PFMT64x"\n", addr + p); - rz_anal_op_free (op); + rz_analysis_op_free (op); break; } //rz_io_read_at (core->io, n, rbuf, 512); - rz_anal_op_free (op); + rz_analysis_op_free (op); } beach: return; @@ -4221,7 +4221,7 @@ static void disasm_ropchain(RzCore *core, ut64 addr, char type_print) { } static void disasm_recursive(RzCore *core, ut64 addr, int count, char type_print) { - RzAnalOp aop = {0}; + RzAnalysisOp aop = {0}; int ret; ut8 buf[128]; PJ *pj = NULL; @@ -4234,8 +4234,8 @@ static void disasm_recursive(RzCore *core, ut64 addr, int count, char type_print } while (count-- > 0) { rz_io_read_at (core->io, addr, buf, sizeof (buf)); - rz_anal_op_fini (&aop); - ret = rz_anal_op (core->anal, &aop, addr, buf, sizeof (buf), RZ_ANAL_OP_MASK_BASIC); + rz_analysis_op_fini (&aop); + ret = rz_analysis_op (core->analysis, &aop, addr, buf, sizeof (buf), RZ_ANAL_OP_MASK_BASIC); if (ret < 0 || aop.size < 1) { addr++; continue; @@ -4267,9 +4267,9 @@ static void disasm_recursive(RzCore *core, ut64 addr, int count, char type_print } } -static void func_walk_blocks(RzCore *core, RzAnalFunction *f, char input, char type_print, bool fromHere) { +static void func_walk_blocks(RzCore *core, RzAnalysisFunction *f, char input, char type_print, bool fromHere) { RzListIter *iter; - RzAnalBlock *b = NULL; + RzAnalysisBlock *b = NULL; const char *orig_bb_middle = rz_config_get (core->config, "asm.bb.middle"); rz_config_set_i (core->config, "asm.bb.middle", false); PJ *pj = NULL; @@ -4277,7 +4277,7 @@ static void func_walk_blocks(RzCore *core, RzAnalFunction *f, char input, char t // XXX: hack must be reviewed/fixed in code analysis if (!b) { if (rz_list_length (f->bbs) >= 1) { - ut32 fcn_size = rz_anal_function_realsize (f); + ut32 fcn_size = rz_analysis_function_realsize (f); b = rz_list_get_top (f->bbs); if (b->size > fcn_size) { b->size = fcn_size; @@ -4316,23 +4316,23 @@ static void func_walk_blocks(RzCore *core, RzAnalFunction *f, char input, char t bool emu = rz_config_get_i (core->config, "asm.emu"); ut64 saved_gp = 0; ut8 *saved_arena = NULL; - int saved_stackptr = core->anal->stackptr; + int saved_stackptr = core->analysis->stackptr; if (emu) { - saved_gp = core->anal->gp; - saved_arena = rz_reg_arena_peek (core->anal->reg); + saved_gp = core->analysis->gp; + saved_arena = rz_reg_arena_peek (core->analysis->reg); } rz_config_set_i (core->config, "asm.lines.bb", 0); rz_list_foreach (f->bbs, iter, b) { pr_bb (core, f, b, emu, saved_gp, saved_arena, type_print, fromHere); } if (emu) { - core->anal->gp = saved_gp; + core->analysis->gp = saved_gp; if (saved_arena) { - rz_reg_arena_poke (core->anal->reg, saved_arena); + rz_reg_arena_poke (core->analysis->reg, saved_arena); RZ_FREE (saved_arena); } } - core->anal->stackptr = saved_stackptr; + core->analysis->stackptr = saved_stackptr; rz_config_set_i (core->config, "asm.lines.bb", asm_lines); } rz_config_set (core->config, "asm.bb.middle", orig_bb_middle); @@ -4390,12 +4390,12 @@ static void print_json_string(RzCore *core, const char* block, int len, const ch #endif } -static char *__op_refs(RzCore *core, RzAnalOp *op, int n) { +static char *__op_refs(RzCore *core, RzAnalysisOp *op, int n) { RzStrBuf *sb = rz_strbuf_new (""); if (n) { - // RzList *list = rz_anal_xrefs_get_from (core->anal, op->addr); - RzList *list = rz_anal_xrefs_get (core->anal, op->addr); - RzAnalRef *ref; + // RzList *list = rz_analysis_xrefs_get_from (core->analysis, op->addr); + RzList *list = rz_analysis_xrefs_get (core->analysis, op->addr); + RzAnalysisRef *ref; RzListIter *iter; rz_list_foreach (list, iter, ref) { rz_strbuf_appendf (sb, "0x%08"PFMT64x" ", ref->at); @@ -4430,13 +4430,13 @@ static void rz_core_disasm_table(RzCore * core, int l, const char *input) { const int options = RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_HINT | RZ_ANAL_OP_MASK_DISASM | RZ_ANAL_OP_MASK_ESIL; ut64 ea = core->offset; for (i = 0; i < l; i++) { - RzAnalOp *op = rz_core_anal_op (core, ea, options); + RzAnalysisOp *op = rz_core_analysis_op (core, ea, options); if (!op || op->size < 1) { i += minopsz; ea += minopsz; continue; } - const char *comment = rz_meta_get_string (core->anal, RZ_META_TYPE_COMMENT, ea); + const char *comment = rz_meta_get_string (core->analysis, RZ_META_TYPE_COMMENT, ea); // TODO parse/filter op->mnemonic for better disasm ut8 *bytes = malloc (op->size); if (!bytes) { @@ -4455,7 +4455,7 @@ static void rz_core_disasm_table(RzCore * core, int l, const char *input) { free (xrefs); free (refs); ea += op->size; - rz_anal_op_free (op); + rz_analysis_op_free (op); } if (input && *input) { rz_table_query (t, input); @@ -4485,8 +4485,8 @@ static void cmd_pxr(RzCore *core, int len, int mode, int wordsize, const char *a } if (mode == 'j' || mode == ',' || mode == '*' || mode == 'q') { size_t i; - const int base = core->anal->bits; - const int be = core->anal->big_endian; + const int base = core->analysis->bits; + const int be = core->analysis->big_endian; if (pj) { pj_a (pj); } @@ -4647,10 +4647,10 @@ RZ_IPI int rz_cmd_print(void *data, const char *input) { } if (input[0] && input[0] != 'z' && input[1] == 'f' && input[2]!='?') { - RzAnalFunction *f = rz_anal_get_fcn_in (core->anal, core->offset, 0); + RzAnalysisFunction *f = rz_analysis_get_fcn_in (core->analysis, core->offset, 0); // RZ_ANAL_FCN_TYPE_FCN|RZ_ANAL_FCN_TYPE_SYM); if (f) { - len = rz_anal_function_linear_size (f); + len = rz_analysis_function_linear_size (f); if (len > core->blocksize) { len = core->blocksize; } @@ -4764,14 +4764,14 @@ RZ_IPI int rz_cmd_print(void *data, const char *input) { } else { int printed = 0; int bufsz; - RzAnalOp aop = {0}; + RzAnalysisOp aop = {0}; rz_asm_set_pc (core->rasm, core->offset); RzAsmCode *acode = rz_asm_massemble (core->rasm, input + 2); if (acode) { bufsz = acode->len; while (printed < bufsz) { aop.size = 0; - if (rz_anal_op (core->anal, &aop, core->offset, + if (rz_analysis_op (core->analysis, &aop, core->offset, (const ut8 *)acode->bytes + printed, bufsz - printed, RZ_ANAL_OP_MASK_ESIL) > 0) { const char *str = RZ_STRBUF_SAFEGET (&aop.esil); rz_cons_println (str); @@ -4784,7 +4784,7 @@ RZ_IPI int rz_cmd_print(void *data, const char *input) { break; } printed += aop.size; - rz_anal_op_fini (&aop); + rz_analysis_op_fini (&aop); } } } @@ -4802,13 +4802,13 @@ RZ_IPI int rz_cmd_print(void *data, const char *input) { } else { int printed = 0; int bufsz; - RzAnalOp aop = { 0 }; + RzAnalysisOp aop = { 0 }; char *hex_arg = calloc (1, strlen (arg) + 1); if (hex_arg) { bufsz = rz_hex_str2bin (arg + 1, (ut8 *)hex_arg); while (printed < bufsz) { aop.size = 0; - if (rz_anal_op (core->anal, &aop, core->offset, + if (rz_analysis_op (core->analysis, &aop, core->offset, (const ut8 *)hex_arg + printed, bufsz - printed, RZ_ANAL_OP_MASK_ESIL) > 0) { const char *str = RZ_STRBUF_SAFEGET (&aop.esil); rz_cons_println (str); @@ -4821,7 +4821,7 @@ RZ_IPI int rz_cmd_print(void *data, const char *input) { break; } printed += aop.size; - rz_anal_op_fini (&aop); + rz_analysis_op_fini (&aop); } free (hex_arg); } @@ -4935,11 +4935,11 @@ RZ_IPI int rz_cmd_print(void *data, const char *input) { break; case 'f': // "pIf" { - const RzAnalFunction *f = rz_anal_get_fcn_in (core->anal, core->offset, + const RzAnalysisFunction *f = rz_analysis_get_fcn_in (core->analysis, core->offset, RZ_ANAL_FCN_TYPE_FCN | RZ_ANAL_FCN_TYPE_SYM); if (f) { rz_core_print_disasm_instructions (core, - rz_anal_function_linear_size ((RzAnalFunction *) f), 0); + rz_analysis_function_linear_size ((RzAnalysisFunction *) f), 0); break; } } @@ -4998,7 +4998,7 @@ RZ_IPI int rz_cmd_print(void *data, const char *input) { rz_core_cmdf (core, "pdfj%s", input + 3); } else if (input[2] == 'c') { // "pifc" RzListIter *iter; - RzAnalRef *refi; + RzAnalysisRef *refi; RzList *refs = NULL; PJ *pj = NULL; @@ -5010,7 +5010,7 @@ RZ_IPI int rz_cmd_print(void *data, const char *input) { } } // get function in current offset - RzAnalFunction *f = rz_anal_get_fcn_in (core->anal, core->offset, + RzAnalysisFunction *f = rz_analysis_get_fcn_in (core->analysis, core->offset, RZ_ANAL_FCN_TYPE_FCN | RZ_ANAL_FCN_TYPE_SYM); // validate that a function was found in the given address @@ -5024,7 +5024,7 @@ RZ_IPI int rz_cmd_print(void *data, const char *input) { break; } // get all the calls of the function - refs = rz_core_anal_fcn_get_calls (core, f); + refs = rz_core_analysis_fcn_get_calls (core, f); // sanity check if (!rz_list_empty (refs)) { @@ -5048,11 +5048,11 @@ RZ_IPI int rz_cmd_print(void *data, const char *input) { // iterate over all call references rz_list_foreach (refs, iter, refi) { if (pj) { - RzAnalFunction *f = rz_anal_get_fcn_in (core->anal, refi->addr, + RzAnalysisFunction *f = rz_analysis_get_fcn_in (core->analysis, refi->addr, RZ_ANAL_FCN_TYPE_FCN | RZ_ANAL_FCN_TYPE_SYM); char *dst = rz_str_newf ((f? f->name: "0x%08"PFMT64x), refi->addr); char *dst2 = NULL; - RzAnalOp *op = rz_core_anal_op (core, refi->addr, RZ_ANAL_OP_MASK_BASIC); + RzAnalysisOp *op = rz_core_analysis_op (core, refi->addr, RZ_ANAL_OP_MASK_BASIC); RzBinReloc *rel = rz_core_getreloc (core, refi->addr, op->size); if (rel) { if (rel && rel->import && rel->import->name) { @@ -5068,7 +5068,7 @@ RZ_IPI int rz_cmd_print(void *data, const char *input) { pj_kn (pj, "addr", refi->addr); pj_kn (pj, "at", refi->at); pj_end (pj); - rz_anal_op_free (op); + rz_analysis_op_free (op); } else { char *s = rz_core_cmd_strf (core, "pdi %i @ 0x%08"PFMT64x, 1, refi->at); rz_cons_printf ("%s", s); @@ -5086,12 +5086,12 @@ RZ_IPI int rz_cmd_print(void *data, const char *input) { pj_free (pj); } } else if (l != 0) { - RzAnalFunction *f = rz_anal_get_fcn_in (core->anal, core->offset, + RzAnalysisFunction *f = rz_analysis_get_fcn_in (core->analysis, core->offset, RZ_ANAL_FCN_TYPE_FCN | RZ_ANAL_FCN_TYPE_SYM); if (f) { ut32 bsz = core->blocksize; - // int fsz = rz_anal_function_realsize (f); - int fsz = rz_anal_function_linear_size (f); // we want max-min here + // int fsz = rz_analysis_function_realsize (f); + int fsz = rz_analysis_function_linear_size (f); // we want max-min here rz_core_block_size (core, fsz); rz_core_print_disasm_instructions (core, fsz, 0); rz_core_block_size (core, bsz); @@ -5103,7 +5103,7 @@ RZ_IPI int rz_cmd_print(void *data, const char *input) { break; case 'r': // "pir" { - RzAnalFunction *f = rz_anal_get_fcn_in (core->anal, core->offset, + RzAnalysisFunction *f = rz_analysis_get_fcn_in (core->analysis, core->offset, RZ_ANAL_FCN_TYPE_FCN | RZ_ANAL_FCN_TYPE_SYM); if (f) { func_walk_blocks (core, f, input[2], 'I', input[2] == '.'); @@ -5115,7 +5115,7 @@ RZ_IPI int rz_cmd_print(void *data, const char *input) { break; case 'b': // "pib" { - RzAnalBlock *b = rz_anal_bb_from_offset (core->anal, core->offset); + RzAnalysisBlock *b = rz_analysis_bb_from_offset (core->analysis, core->offset); if (b) { rz_core_print_disasm_instructions (core, b->size - (core->offset - b->addr), 0); } else { @@ -5262,7 +5262,7 @@ RZ_IPI int rz_cmd_print(void *data, const char *input) { case 'r': // "pdr" processed_cmd = true; { - RzAnalFunction *f = rz_anal_get_fcn_in (core->anal, core->offset, 0); + RzAnalysisFunction *f = rz_analysis_get_fcn_in (core->analysis, core->offset, 0); // RZ_ANAL_FCN_TYPE_FCN|RZ_ANAL_FCN_TYPE_SYM); if (f) { func_walk_blocks (core, f, input[2], 'D', input[2] == '.'); @@ -5277,7 +5277,7 @@ RZ_IPI int rz_cmd_print(void *data, const char *input) { if (input[2] == '?') { rz_cons_printf ("Usage: pdb[j] - disassemble basic block\n"); } else { - RzAnalBlock *b = rz_anal_bb_from_offset (core->anal, core->offset); + RzAnalysisBlock *b = rz_analysis_bb_from_offset (core->analysis, core->offset); if (b) { ut8 *block = malloc (b->size + 1); if (block) { @@ -5322,11 +5322,11 @@ RZ_IPI int rz_cmd_print(void *data, const char *input) { } else if (input[2] == 's') { // "pdfs" ut64 oseek = core->offset; int oblock = core->blocksize; - RzAnalFunction *f = rz_anal_get_fcn_in (core->anal, core->offset, + RzAnalysisFunction *f = rz_analysis_get_fcn_in (core->analysis, core->offset, RZ_ANAL_FCN_TYPE_FCN | RZ_ANAL_FCN_TYPE_SYM); if (f) { - ut32 rs = rz_anal_function_realsize (f); - ut32 fs = rz_anal_function_linear_size (f); + ut32 rs = rz_analysis_function_realsize (f); + ut32 fs = rz_analysis_function_linear_size (f); rz_core_seek (core, oseek, SEEK_SET); rz_core_block_size (core, RZ_MAX (rs, fs)); disasm_strings (core, input, f); @@ -5336,14 +5336,14 @@ RZ_IPI int rz_cmd_print(void *data, const char *input) { processed_cmd = true; } else { ut32 bsz = core->blocksize; - RzAnalFunction *f = rz_anal_get_fcn_in (core->anal, core->offset, RZ_ANAL_FCN_TYPE_ROOT); + RzAnalysisFunction *f = rz_analysis_get_fcn_in (core->analysis, core->offset, RZ_ANAL_FCN_TYPE_ROOT); if (!f) { - f = rz_anal_get_fcn_in (core->anal, core->offset, 0); + f = rz_analysis_get_fcn_in (core->analysis, core->offset, 0); } RzListIter *locs_it = NULL; if (f && input[2] == 'j') { // "pdfj" - RzAnalBlock *b; - ut32 fcn_size = rz_anal_function_realsize (f); + RzAnalysisBlock *b; + ut32 fcn_size = rz_analysis_function_realsize (f); const char *orig_bb_middle = rz_config_get (core->config, "asm.bb.middle"); rz_config_set_i (core->config, "asm.bb.middle", false); pj = pj_new (); @@ -5375,19 +5375,19 @@ RZ_IPI int rz_cmd_print(void *data, const char *input) { pd_result = 0; rz_config_set (core->config, "asm.bb.middle", orig_bb_middle); } else if (f) { - ut64 linearsz = rz_anal_function_linear_size (f); - ut64 realsz = rz_anal_function_realsize (f); + ut64 linearsz = rz_analysis_function_linear_size (f); + ut64 realsz = rz_analysis_function_realsize (f); if (realsz + 4096 < linearsz) { eprintf ("Linear size differs too much from the bbsum, please use pdr instead.\n"); } else { - ut64 at = f->addr; // TODO: should be min from rz_anal_fcn_get_range()? + ut64 at = f->addr; // TODO: should be min from rz_analysis_fcn_get_range()? ut64 sz = RZ_MAX (linearsz, realsz); ut8 *buf = calloc (sz, 1); if (buf) { (void)rz_io_read_at (core->io, at, buf, sz); core->num->value = rz_core_print_disasm (core->print, core, at, buf, sz, sz, 0, 1, 0, NULL, f); free (buf); - // rz_core_cmdf (core, "pD %d @ 0x%08" PFMT64x, f->_size > 0 ? f->_size: rz_anal_function_realsize (f), f->addr); + // rz_core_cmdf (core, "pD %d @ 0x%08" PFMT64x, f->_size > 0 ? f->_size: rz_analysis_function_realsize (f), f->addr); } } pd_result = 0; @@ -6265,7 +6265,7 @@ l = use_blocksize; case 'r': // "pxr" if (l) { int mode = input[2]; - int wordsize = core->anal->bits / 8; + int wordsize = core->analysis->bits / 8; if (mode == '?') { eprintf ("Usage: pxr[1248][*,jq] [length]\n"); break; diff --git a/librz/core/cmd_search.c b/librz/core/cmd_search.c index 1a2bf2fed6..0cc4b2977b 100644 --- a/librz/core/cmd_search.c +++ b/librz/core/cmd_search.c @@ -246,7 +246,7 @@ static void cmd_search_bin(RzCore *core, RzInterval itv) { int size; // , sz = sizeof (buf); int fd = core->file->fd; - RzBuffer *b = rz_buf_new_with_io (&core->anal->iob, fd); + RzBuffer *b = rz_buf_new_with_io (&core->analysis->iob, fd); rz_cons_break_push (NULL, NULL); while (from < to) { if (rz_cons_is_breaked ()) { @@ -284,7 +284,7 @@ static int __prelude_cb_hit(RzSearchKeyword *kw, void *user, ut64 addr) { RzCore *core = (RzCore *) user; int depth = rz_config_get_i (core->config, "anal.depth"); // eprintf ("ap: Found function prelude %d at 0x%08"PFMT64x"\n", preludecnt, addr); - rz_core_anal_fcn (core, addr, -1, RZ_ANAL_REF_TYPE_NULL, depth); + rz_core_analysis_fcn (core, addr, -1, RZ_ANAL_REF_TYPE_NULL, depth); preludecnt++; return 1; } @@ -328,7 +328,7 @@ RZ_API int rz_core_search_prelude(RzCore *core, ut64 from, ut64 to, const ut8 *b } static int count_functions(RzCore *core) { - return rz_list_length (core->anal->fcns); + return rz_list_length (core->analysis->fcns); } RZ_API int rz_core_search_preludes(RzCore *core, bool log) { @@ -364,7 +364,7 @@ RZ_API int rz_core_search_preludes(RzCore *core, bool log) { ret = rz_core_search_prelude (core, from, to, kw, kwlen, NULL, 0); free (kw); } else { - RzList *preds = rz_anal_preludes (core->anal); + RzList *preds = rz_analysis_preludes (core->analysis); if (preds) { RzListIter *iter; RzSearchKeyword *kw; @@ -835,15 +835,15 @@ RZ_API RzList *rz_core_get_boundaries_prot(RzCore *core, int perm, const char *m } } } else if (!strcmp (mode, "anal.fcn") || !strcmp (mode, "anal.bb")) { - RzAnalFunction *f = rz_anal_get_fcn_in (core->anal, core->offset, + RzAnalysisFunction *f = rz_analysis_get_fcn_in (core->analysis, core->offset, RZ_ANAL_FCN_TYPE_FCN | RZ_ANAL_FCN_TYPE_SYM); if (f) { - ut64 from = f->addr, size = rz_anal_function_size_from_entry (f); + ut64 from = f->addr, size = rz_analysis_function_size_from_entry (f); /* Search only inside the basic block */ if (!strcmp (mode, "anal.bb")) { RzListIter *iter; - RzAnalBlock *bb; + RzAnalysisBlock *bb; rz_list_foreach (f->bbs, iter, bb) { ut64 at = core->offset; @@ -973,7 +973,7 @@ RZ_API RzList *rz_core_get_boundaries_prot(RzCore *core, int perm, const char *m return list; } -static bool is_end_gadget(const RzAnalOp *aop, const ut8 crop) { +static bool is_end_gadget(const RzAnalysisOp *aop, const ut8 crop) { if (aop->family == RZ_ANAL_OP_FAMILY_SECURITY) { return false; } @@ -1015,7 +1015,7 @@ static bool insert_into(void *user, const ut64 k, const ut64 v) { static RzList *construct_rop_gadget(RzCore *core, ut64 addr, ut8 *buf, int buflen, int idx, const char *grep, int regex, RzList *rx_list, struct endlist_pair *end_gadget, HtUU *badstart) { int endaddr = end_gadget->instr_offset; int branch_delay = end_gadget->delay_size; - RzAnalOp aop = {0}; + RzAnalysisOp aop = {0}; const char *start = NULL, *end = NULL; char *grep_str = NULL; RzCoreAsmHit *hit = NULL; @@ -1054,7 +1054,7 @@ static RzList *construct_rop_gadget(RzCore *core, ut64 addr, ut8 *buf, int bufle } while (nb_instr < max_instr) { ht_uu_insert (localbadstart, idx, 1); - rz_anal_op (core->anal, &aop, addr, buf + idx, buflen - idx, RZ_ANAL_OP_MASK_DISASM); + rz_analysis_op (core->analysis, &aop, addr, buf + idx, buflen - idx, RZ_ANAL_OP_MASK_DISASM); if (nb_instr == 0 && (is_end_gadget (&aop, 0) || aop.type == RZ_ANAL_OP_TYPE_NOP)) { valid = false; @@ -1064,7 +1064,7 @@ static RzList *construct_rop_gadget(RzCore *core, ut64 addr, ut8 *buf, int bufle // opsz = rz_strbuf_length (asmop.buf); char *opst = aop.mnemonic; if (!opst) { - RZ_LOG_WARN ("Anal plugin %s did not return disassembly\n", core->anal->cur->name); + RZ_LOG_WARN ("Anal plugin %s did not return disassembly\n", core->analysis->cur->name); RzAsmOp asmop; rz_asm_set_pc (core->rasm, addr); if (!rz_asm_disassemble (core->rasm, &asmop, buf + idx, buflen - idx)) { @@ -1153,7 +1153,7 @@ static void print_rop(RzCore *core, RzList *hitlist, char mode, bool *json_first RzList *ropList = NULL; char *buf_asm = NULL; unsigned int size = 0; - RzAnalOp analop = RZ_EMPTY; + RzAnalysisOp analop = RZ_EMPTY; RzAsmOp asmop; Sdb *db = NULL; const bool colorize = rz_config_get_i (core->config, "scr.color"); @@ -1185,7 +1185,7 @@ static void print_rop(RzCore *core, RzList *hitlist, char mode, bool *json_first rz_io_read_at (core->io, hit->addr, buf, hit->len); rz_asm_set_pc (core->rasm, hit->addr); rz_asm_disassemble (core->rasm, &asmop, buf, hit->len); - rz_anal_op (core->anal, &analop, hit->addr, buf, hit->len, RZ_ANAL_OP_MASK_ESIL); + rz_analysis_op (core->analysis, &analop, hit->addr, buf, hit->len, RZ_ANAL_OP_MASK_ESIL); size += hit->len; if (analop.type != RZ_ANAL_OP_TYPE_RET) { char *opstr_n = rz_str_newf (" %s", RZ_STRBUF_SAFEGET (&analop.esil)); @@ -1194,7 +1194,7 @@ static void print_rop(RzCore *core, RzList *hitlist, char mode, bool *json_first rz_cons_printf ("{\"offset\":%"PFMT64d ",\"size\":%d," "\"opcode\":\"%s\",\"type\":\"%s\"}%s", hit->addr, hit->len, rz_asm_op_get_asm (&asmop), - rz_anal_optype_to_string (analop.type), + rz_analysis_optype_to_string (analop.type), iter->n? ",": ""); free (buf); } @@ -1218,7 +1218,7 @@ static void print_rop(RzCore *core, RzList *hitlist, char mode, bool *json_first rz_io_read_at (core->io, hit->addr, buf, hit->len); rz_asm_set_pc (core->rasm, hit->addr); rz_asm_disassemble (core->rasm, &asmop, buf, hit->len); - rz_anal_op (core->anal, &analop, hit->addr, buf, hit->len, RZ_ANAL_OP_MASK_BASIC); + rz_analysis_op (core->analysis, &analop, hit->addr, buf, hit->len, RZ_ANAL_OP_MASK_BASIC); size += hit->len; const char *opstr = RZ_STRBUF_SAFEGET (&analop.esil); if (analop.type != RZ_ANAL_OP_TYPE_RET) { @@ -1246,7 +1246,7 @@ static void print_rop(RzCore *core, RzList *hitlist, char mode, bool *json_first default: // Print gadgets with new instruction on a new line. rz_list_foreach (hitlist, iter, hit) { - const char *comment = rop_comments? rz_meta_get_string (core->anal, RZ_META_TYPE_COMMENT, hit->addr): NULL; + const char *comment = rop_comments? rz_meta_get_string (core->analysis, RZ_META_TYPE_COMMENT, hit->addr): NULL; if (hit->len < 0) { eprintf ("Invalid hit length here\n"); continue; @@ -1259,7 +1259,7 @@ static void print_rop(RzCore *core, RzList *hitlist, char mode, bool *json_first rz_io_read_at (core->io, hit->addr, buf, hit->len); rz_asm_set_pc (core->rasm, hit->addr); rz_asm_disassemble (core->rasm, &asmop, buf, hit->len); - rz_anal_op (core->anal, &analop, hit->addr, buf, hit->len, RZ_ANAL_OP_MASK_ESIL); + rz_analysis_op (core->analysis, &analop, hit->addr, buf, hit->len, RZ_ANAL_OP_MASK_ESIL); size += hit->len; if (analop.type != RZ_ANAL_OP_TYPE_RET) { char *opstr_n = rz_str_newf (" %s", RZ_STRBUF_SAFEGET (&analop.esil)); @@ -1413,18 +1413,18 @@ static int rz_core_search_rop(RzCore *core, RzInterval search_itv, int opt, cons // Find the end gadgets. for (i = 0; i + 32 < delta; i += increment) { - RzAnalOp end_gadget = RZ_EMPTY; + RzAnalysisOp end_gadget = RZ_EMPTY; // Disassemble one. - if (rz_anal_op (core->anal, &end_gadget, from + i, buf + i, + if (rz_analysis_op (core->analysis, &end_gadget, from + i, buf + i, delta - i, RZ_ANAL_OP_MASK_BASIC) < 1) { - rz_anal_op_fini (&end_gadget); + rz_analysis_op_fini (&end_gadget); continue; } if (is_end_gadget (&end_gadget, crop)) { #if 0 if (search->maxhits && rz_list_length (end_list) >= search->maxhits) { // limit number of high level rop gadget results - rz_anal_op_fini (&end_gadget); + rz_analysis_op_fini (&end_gadget); break; } #endif @@ -1441,7 +1441,7 @@ static int rz_core_search_rop(RzCore *core, RzInterval search_itv, int opt, cons rz_list_append (end_list, (void *) (intptr_t) epair); } } - rz_anal_op_fini (&end_gadget); + rz_analysis_op_fini (&end_gadget); if (rz_cons_is_breaked ()) { break; } @@ -1581,13 +1581,13 @@ bad: return result; } -static bool esil_addrinfo(RzAnalEsil *esil) { +static bool esil_addrinfo(RzAnalysisEsil *esil) { RzCore *core = (RzCore *) esil->cb.user; ut64 num = 0; - char *src = rz_anal_esil_pop (esil); - if (src && *src && rz_anal_esil_get_parm (esil, src, &num)) { - num = rz_core_anal_address (core, num); - rz_anal_esil_pushnum (esil, num); + char *src = rz_analysis_esil_pop (esil); + if (src && *src && rz_analysis_esil_get_parm (esil, src, &num)) { + num = rz_core_analysis_address (core, num); + rz_analysis_esil_pushnum (esil, num); } else { // error. empty stack? return false; @@ -1615,10 +1615,10 @@ static void do_esil_search(RzCore *core, struct search_parameters *param, const rz_core_cmd_help (core, help_msg_search_esil); return; } - if (!core->anal->esil) { + if (!core->analysis->esil) { // initialize esil vm rz_core_cmd0 (core, "aei"); - if (!core->anal->esil) { + if (!core->analysis->esil) { eprintf ("Cannot initialize the ESIL vm\n"); return; } @@ -1636,16 +1636,16 @@ static void do_esil_search(RzCore *core, struct search_parameters *param, const ut64 from = map->itv.addr; ut64 to = rz_itv_end (map->itv); unsigned int addrsize = rz_config_get_i (core->config, "esil.addr.size"); - if (!core->anal->esil) { - core->anal->esil = rz_anal_esil_new (stacksize, iotrap, addrsize); + if (!core->analysis->esil) { + core->analysis->esil = rz_analysis_esil_new (stacksize, iotrap, addrsize); } /* hook addrinfo */ - core->anal->esil->cb.user = core; - rz_anal_esil_set_op (core->anal->esil, "AddrInfo", esil_addrinfo, 1, 1, RZ_ANAL_ESIL_OP_TYPE_UNKNOWN); + core->analysis->esil->cb.user = core; + rz_analysis_esil_set_op (core->analysis->esil, "AddrInfo", esil_addrinfo, 1, 1, RZ_ANAL_ESIL_OP_TYPE_UNKNOWN); /* hook addrinfo */ - rz_anal_esil_setup (core->anal->esil, core->anal, 1, 0, nonull); - rz_anal_esil_stack_free (core->anal->esil); - core->anal->esil->verbose = 0; + rz_analysis_esil_setup (core->analysis->esil, core->analysis, 1, 0, nonull); + rz_analysis_esil_stack_free (core->analysis->esil); + core->analysis->esil->verbose = 0; rz_cons_break_push (NULL, NULL); for (addr = from; addr < to; addr++) { @@ -1663,21 +1663,21 @@ static void do_esil_search(RzCore *core, struct search_parameters *param, const // instack // inlibrary // inheap - rz_anal_esil_set_op (core->anal->esil, "AddressInfo", esil_search_address_info); + rz_analysis_esil_set_op (core->analysis->esil, "AddressInfo", esil_search_address_info); #endif if (rz_cons_is_breaked ()) { eprintf ("Breaked at 0x%08"PFMT64x "\n", addr); break; } - rz_anal_esil_set_pc (core->anal->esil, addr); - if (!rz_anal_esil_parse (core->anal->esil, input + 2)) { + rz_analysis_esil_set_pc (core->analysis->esil, addr); + if (!rz_analysis_esil_parse (core->analysis->esil, input + 2)) { // XXX: return value doesnt seems to be correct here eprintf ("Cannot parse esil (%s)\n", input + 2); break; } hit_happens = false; - res = rz_anal_esil_pop (core->anal->esil); - if (rz_anal_esil_get_parm (core->anal->esil, res, &nres)) { + res = rz_analysis_esil_pop (core->analysis->esil); + if (rz_analysis_esil_get_parm (core->analysis->esil, res, &nres)) { if (cfgDebug) { eprintf ("RES 0x%08"PFMT64x" %"PFMT64d"\n", addr, nres); } @@ -1698,11 +1698,11 @@ static void do_esil_search(RzCore *core, struct search_parameters *param, const } } else { eprintf ("Cannot parse esil (%s)\n", input + 2); - rz_anal_esil_stack_free (core->anal->esil); + rz_analysis_esil_stack_free (core->analysis->esil); free (res); break; } - rz_anal_esil_stack_free (core->anal->esil); + rz_analysis_esil_stack_free (core->analysis->esil); free (res); if (hit_happens) { @@ -1741,10 +1741,10 @@ static void do_esil_search(RzCore *core, struct search_parameters *param, const static int emulateSyscallPrelude(RzCore *core, ut64 at, ut64 curpc) { int i, inslen, bsize = RZ_MIN (64, core->blocksize); ut8 *arr; - RzAnalOp aop; - const int mininstrsz = rz_anal_archinfo (core->anal, RZ_ANAL_ARCHINFO_MIN_OP_SIZE); + RzAnalysisOp aop; + const int mininstrsz = rz_analysis_archinfo (core->analysis, RZ_ANAL_ARCHINFO_MIN_OP_SIZE); const int minopcode = RZ_MAX (1, mininstrsz); - const char *a0 = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_SN); + const char *a0 = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_SN); const char *pc = rz_reg_get_name (core->dbg->reg, RZ_REG_NAME_PC); RzRegItem *r = rz_reg_get (core->dbg->reg, pc, -1); RzRegItem *reg_a0 = rz_reg_get (core->dbg->reg, a0, -1); @@ -1763,7 +1763,7 @@ static int emulateSyscallPrelude(RzCore *core, ut64 at, ut64 curpc) { if (!i) { rz_io_read_at (core->io, curpc, arr, bsize); } - inslen = rz_anal_op (core->anal, &aop, curpc, arr + i, bsize - i, RZ_ANAL_OP_MASK_BASIC); + inslen = rz_analysis_op (core->analysis, &aop, curpc, arr + i, bsize - i, RZ_ANAL_OP_MASK_BASIC); if (inslen) { int incr = (core->search->align > 0)? core->search->align - 1: inslen - 1; if (incr < 0) { @@ -1771,7 +1771,7 @@ static int emulateSyscallPrelude(RzCore *core, ut64 at, ut64 curpc) { } i += incr; curpc += incr; - if (rz_anal_op_nonlinear (aop.type)) { // skip the instr + if (rz_analysis_op_nonlinear (aop.type)) { // skip the instr rz_reg_set_value (core->dbg->reg, r, curpc + 1); } else { // step instr rz_core_esil_step (core, UT64_MAX, NULL, NULL); @@ -1793,42 +1793,42 @@ static void do_syscall_search(RzCore *core, struct search_parameters *param) { #endif ut8 *buf; int curpos, idx = 0, count = 0; - RzAnalOp aop = {0}; + RzAnalysisOp aop = {0}; int i, ret, bsize = RZ_MAX (64, core->blocksize); int kwidx = core->search->n_kws; RzIOMap* map; RzListIter *iter; - const int mininstrsz = rz_anal_archinfo (core->anal, RZ_ANAL_ARCHINFO_MIN_OP_SIZE); + const int mininstrsz = rz_analysis_archinfo (core->analysis, RZ_ANAL_ARCHINFO_MIN_OP_SIZE); const int minopcode = RZ_MAX (1, mininstrsz); - RzAnalEsil *esil; + RzAnalysisEsil *esil; int align = core->search->align; int stacksize = rz_config_get_i (core->config, "esil.stack.depth"); int iotrap = rz_config_get_i (core->config, "esil.iotrap"); unsigned int addrsize = rz_config_get_i (core->config, "esil.addr.size"); - if (!(esil = rz_anal_esil_new (stacksize, iotrap, addrsize))) { + if (!(esil = rz_analysis_esil_new (stacksize, iotrap, addrsize))) { return; } int *previnstr = calloc (MAXINSTR + 1, sizeof (int)); if (!previnstr) { - rz_anal_esil_free (esil); + rz_analysis_esil_free (esil); return; } buf = malloc (bsize); if (!buf) { eprintf ("Cannot allocate %d byte(s)\n", bsize); - rz_anal_esil_free (esil); + rz_analysis_esil_free (esil); free (previnstr); return; } ut64 oldoff = core->offset; int syscallNumber = 0; rz_cons_break_push (NULL, NULL); - const char *a0 = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_SN); + const char *a0 = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_SN); char *esp = rz_str_newf ("%s,=", a0); char *esp32 = NULL; - if (core->anal->bits == 64) { - const char *reg = rz_reg_64_to_32 (core->anal->reg, a0); + if (core->analysis->bits == 64) { + const char *reg = rz_reg_64_to_32 (core->analysis->reg, a0); if (reg) { esp32 = rz_str_newf ("%s,=", reg); } @@ -1857,7 +1857,7 @@ static void do_syscall_search(RzCore *core, struct search_parameters *param) { if (!i) { rz_io_read_at (core->io, at, buf, bsize); } - ret = rz_anal_op (core->anal, &aop, at, buf + i, bsize - i, RZ_ANAL_OP_MASK_ESIL); + ret = rz_analysis_op (core->analysis, &aop, at, buf + i, bsize - i, RZ_ANAL_OP_MASK_ESIL); curpos = idx++ % (MAXINSTR + 1); previnstr[curpos] = ret; // This array holds prev n instr size + cur instr size if (aop.type == RZ_ANAL_OP_TYPE_MOV) { @@ -1886,7 +1886,7 @@ static void do_syscall_search(RzCore *core, struct search_parameters *param) { scNumber = syscallNumber; #endif scVector = (aop.val > 0)? aop.val: -1; // int 0x80 (aop.val = 0x80) - RzSyscallItem *item = rz_syscall_get (core->anal->syscall, scNumber, scVector); + RzSyscallItem *item = rz_syscall_get (core->analysis->syscall, scNumber, scVector); if (item) { rz_cons_printf ("0x%08"PFMT64x" %s\n", at, item->name); } @@ -1904,7 +1904,7 @@ static void do_syscall_search(RzCore *core, struct search_parameters *param) { } count++; if (search->maxhits > 0 && count >= search->maxhits) { - rz_anal_op_fini (&aop); + rz_analysis_op_fini (&aop); break; } syscallNumber = 0; @@ -1915,12 +1915,12 @@ static void do_syscall_search(RzCore *core, struct search_parameters *param) { } i += inc; at += inc; - rz_anal_op_fini (&aop); + rz_analysis_op_fini (&aop); } } beach: rz_core_seek (core, oldoff, true); - rz_anal_esil_free (esil); + rz_analysis_esil_free (esil); rz_cons_break_pop (); free (buf); free (esp32); @@ -1931,23 +1931,23 @@ beach: static void do_ref_search(RzCore *core, ut64 addr,ut64 from, ut64 to, struct search_parameters *param) { const int size = 12; char str[512]; - RzAnalFunction *fcn; - RzAnalRef *ref; + RzAnalysisFunction *fcn; + RzAnalysisRef *ref; RzListIter *iter; ut8 buf[12]; RzAsmOp asmop; - RzList *list = rz_anal_xrefs_get (core->anal, addr); + RzList *list = rz_analysis_xrefs_get (core->analysis, addr); if (list) { rz_list_foreach (list, iter, ref) { rz_io_read_at (core->io, ref->addr, buf, size); rz_asm_set_pc (core->rasm, ref->addr); rz_asm_disassemble (core->rasm, &asmop, buf, size); - fcn = rz_anal_get_fcn_in (core->anal, ref->addr, 0); - RzAnalHint *hint = rz_anal_hint_get (core->anal, ref->addr); + fcn = rz_analysis_get_fcn_in (core->analysis, ref->addr, 0); + RzAnalysisHint *hint = rz_analysis_hint_get (core->analysis, ref->addr); rz_parse_filter (core->parser, ref->addr, core->flags, hint, rz_strbuf_get (&asmop.buf_asm), str, sizeof (str), core->print->big_endian); - rz_anal_hint_free (hint); - const char *comment = rz_meta_get_string (core->anal, RZ_META_TYPE_COMMENT, ref->addr); + rz_analysis_hint_free (hint); + const char *comment = rz_meta_get_string (core->analysis, RZ_META_TYPE_COMMENT, ref->addr); char *print_comment = NULL; const char *nl = comment ? strchr (comment, '\n') : NULL; if (nl) { // display only until the first newline @@ -1959,7 +1959,7 @@ static void do_ref_search(RzCore *core, ut64 addr,ut64 from, ut64 to, struct sea free (print_comment); if (from <= ref->addr && to >= ref->addr) { rz_cons_printf ("%s 0x%" PFMT64x " [%s] %s\n", - buf_fcn, ref->addr, rz_anal_xrefs_type_tostring (ref->type), str); + buf_fcn, ref->addr, rz_analysis_xrefs_type_tostring (ref->type), str); if (*param->cmd_hit) { ut64 here = core->offset; rz_core_seek (core, ref->addr, true); @@ -1976,7 +1976,7 @@ static void do_ref_search(RzCore *core, ut64 addr,ut64 from, ut64 to, struct sea static bool do_anal_search(RzCore *core, struct search_parameters *param, const char *input) { RzSearch *search = core->search; ut64 at; - RzAnalOp aop; + RzAnalysisOp aop; int type = 0; int mode = 0; int kwidx = core->search->n_kws; @@ -1995,8 +1995,8 @@ static bool do_anal_search(RzCore *core, struct search_parameters *param, const case 'f': // "/alf" for (i = 0; i < 64; i++) { const char *str = type == 'f' - ? rz_anal_op_family_to_string (i) - : rz_anal_optype_to_string (i); + ? rz_analysis_op_family_to_string (i) + : rz_analysis_optype_to_string (i); if (!str || !*str) { break; } @@ -2060,7 +2060,7 @@ static bool do_anal_search(RzCore *core, struct search_parameters *param, const at = from + i; ut8 bufop[32]; rz_io_read_at (core->io, at, bufop, sizeof (bufop)); - ret = rz_anal_op (core->anal, &aop, at, bufop, sizeof(bufop), RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_DISASM); + ret = rz_analysis_op (core->analysis, &aop, at, bufop, sizeof(bufop), RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_DISASM); if (ret) { bool match = false; if (type == 'm') { @@ -2069,12 +2069,12 @@ static bool do_anal_search(RzCore *core, struct search_parameters *param, const match = true; } } else if (type == 'f') { - const char *fam = rz_anal_op_family_to_string (aop.family); + const char *fam = rz_analysis_op_family_to_string (aop.family); if (fam && (!*input || !strcmp (input, fam))) { match = true; } } else { - const char *type = rz_anal_optype_to_string (aop.type); + const char *type = rz_analysis_optype_to_string (aop.type); if (type) { bool isCandidate = !*input; if (!strcmp (input, "cswi")) { @@ -2113,7 +2113,7 @@ static bool do_anal_search(RzCore *core, struct search_parameters *param, const break; default: if (type == 'f') { - const char *fam = rz_anal_op_family_to_string (aop.family); + const char *fam = rz_analysis_op_family_to_string (aop.family); rz_cons_printf ("0x%08"PFMT64x " %d %s %s\n", at, ret, fam, opstr); } else { rz_cons_printf ("0x%08"PFMT64x " %d %s\n", at, ret, opstr); @@ -2298,10 +2298,10 @@ static void do_asm_search(RzCore *core, struct search_parameters *param, const c char tmp[128] = { 0 }; - RzAnalHint *hint = rz_anal_hint_get (core->anal, hit->addr); + RzAnalysisHint *hint = rz_analysis_hint_get (core->analysis, hit->addr); rz_parse_filter (core->parser, hit->addr, core->flags, hint, hit->code, tmp, sizeof (tmp), core->print->big_endian); - rz_anal_hint_free (hint); + rz_analysis_hint_free (hint); rz_cons_printf ("0x%08"PFMT64x " # %i: %s\n", hit->addr, hit->len, tmp); } else { @@ -2867,7 +2867,7 @@ static void __core_cmd_search_asm_infinite (RzCore *core, const char *arg) { RzList *boundaries = rz_core_get_boundaries_prot (core, -1, search_in, "search"); RzListIter *iter; RzIOMap *map; - RzAnalOp analop; + RzAnalysisOp analop; ut64 at; rz_list_foreach (boundaries, iter, map) { ut64 map_begin = map->itv.addr; @@ -2879,12 +2879,12 @@ static void __core_cmd_search_asm_infinite (RzCore *core, const char *arg) { } (void) rz_io_read_at (core->io, map_begin, buf, map_size); for (at = map->itv.addr; at + 24< map_end; at += 1) { - rz_anal_op (core->anal, &analop, at, buf + (at - map_begin), 24, RZ_ANAL_OP_MASK_HINT); + rz_analysis_op (core->analysis, &analop, at, buf + (at - map_begin), 24, RZ_ANAL_OP_MASK_HINT); if (at == analop.jump) { rz_cons_printf ("0x%08"PFMT64x"\n", at); } at += analop.size; - rz_anal_op_fini (&analop); + rz_analysis_op_fini (&analop); } free (buf); } @@ -3125,7 +3125,7 @@ reread: RzIOMap *map; rz_list_foreach (param.boundaries, iter, map) { eprintf ("-- 0x%"PFMT64x" 0x%"PFMT64x"\n", map->itv.addr, rz_itv_end (map->itv)); - rz_core_anal_search (core, map->itv.addr, rz_itv_end (map->itv), n, 'c'); + rz_core_analysis_search (core, map->itv.addr, rz_itv_end (map->itv), n, 'c'); } } break; @@ -3135,7 +3135,7 @@ reread: RzIOMap *map; rz_list_foreach (param.boundaries, iter, map) { eprintf ("-- 0x%"PFMT64x" 0x%"PFMT64x"\n", map->itv.addr, rz_itv_end (map->itv)); - rz_core_anal_search (core, map->itv.addr, rz_itv_end (map->itv), n, 0); + rz_core_analysis_search (core, map->itv.addr, rz_itv_end (map->itv), n, 0); } } break; @@ -3152,7 +3152,7 @@ reread: rz_core_seek (core, map->itv.addr, true); char *arg = rz_str_newf (" %"PFMT64d, rz_itv_end (map->itv) - map->itv.addr); char *trg = refptr? rz_str_newf (" %"PFMT64d, refptr): strdup (""); - rz_core_anal_esil (core, arg, trg); + rz_core_analysis_esil (core, arg, trg); free (arg); free (trg); rz_core_seek (core, curseek, true); @@ -3165,7 +3165,7 @@ reread: RzIOMap *map; rz_list_foreach (param.boundaries, iter, map) { eprintf ("-- 0x%"PFMT64x" 0x%"PFMT64x"\n", map->itv.addr, rz_itv_end (map->itv)); - rz_core_anal_search (core, map->itv.addr, rz_itv_end (map->itv), n, 'r'); + rz_core_analysis_search (core, map->itv.addr, rz_itv_end (map->itv), n, 'r'); } } break; @@ -3175,7 +3175,7 @@ reread: RzIOMap *map; rz_list_foreach (param.boundaries, iter, map) { eprintf ("-- 0x%"PFMT64x" 0x%"PFMT64x"\n", map->itv.addr, rz_itv_end (map->itv)); - rz_core_anal_search (core, map->itv.addr, rz_itv_end (map->itv), n, 'w'); + rz_core_analysis_search (core, map->itv.addr, rz_itv_end (map->itv), n, 'w'); } } break; @@ -3188,11 +3188,11 @@ reread: ut64 from = map->itv.addr; ut64 to = rz_itv_end (map->itv); if (input[param_offset - 1] == ' ') { - rz_core_anal_search (core, from, to, + rz_core_analysis_search (core, from, to, rz_num_math (core->num, input + 2), 0); do_ref_search (core, rz_num_math (core->num, input + 2), from, to, ¶m); } else { - rz_core_anal_search (core, from, to, core->offset, 0); + rz_core_analysis_search (core, from, to, core->offset, 0); do_ref_search (core, core->offset, from, to, ¶m); } if (rz_cons_is_breaked ()) { @@ -3715,7 +3715,7 @@ reread: if (input[1]) { addr = rz_num_math (core->num, input + 2); } else { - RzAnalFunction *fcn = rz_anal_get_function_at (core->anal, addr); + RzAnalysisFunction *fcn = rz_analysis_get_function_at (core->analysis, addr); if (fcn) { addr = fcn->addr; } else { @@ -3725,7 +3725,7 @@ reread: const int depth = rz_config_get_i (core->config, "anal.depth"); // Va;ifate input length if (input[1] != '\0') { - rz_core_anal_paths (core, addr, core->offset, input[1] == 'g', depth, (input[1] == 'j' || input[2] == 'j')); + rz_core_analysis_paths (core, addr, core->offset, input[1] == 'g', depth, (input[1] == 'j' || input[2] == 'j')); } } break; diff --git a/librz/core/cmd_search_rop.c b/librz/core/cmd_search_rop.c index a30e46b4c9..c1df61f01e 100644 --- a/librz/core/cmd_search_rop.c +++ b/librz/core/cmd_search_rop.c @@ -254,7 +254,7 @@ static char* rop_classify_constant(RzCore *core, RzList *ropList) { } esil_split_flg (esil_str, &esil_main, &esil_flg); cmd_anal_esil (core, esil_main? esil_main: esil_str); - out = sdb_querys (core->anal->esil->stats, NULL, 0, "*"); + out = sdb_querys (core->analysis->esil->stats, NULL, 0, "*"); if (!out) { goto continue_error; } @@ -333,7 +333,7 @@ static char* rop_classify_mov(RzCore *core, RzList *ropList) { } esil_split_flg (esil_str, &esil_main, &esil_flg); cmd_anal_esil (core, esil_main? esil_main: esil_str); - out = sdb_querys (core->anal->esil->stats, NULL, 0, "*"); + out = sdb_querys (core->analysis->esil->stats, NULL, 0, "*"); if (out) { ops_list = parse_list (strstr (out, "ops.list")); flg_read = parse_list (strstr (out, "flg.read")); @@ -436,7 +436,7 @@ static char* rop_classify_arithmetic(RzCore *core, RzList *ropList) { } else { cmd_anal_esil (core, esil_str); } - out = sdb_querys (core->anal->esil->stats, NULL, 0, "*"); + out = sdb_querys (core->analysis->esil->stats, NULL, 0, "*"); // rz_cons_println (out); if (!out) { goto continue_error; @@ -569,7 +569,7 @@ static char* rop_classify_arithmetic_const(RzCore *core, RzList *ropList) { } else { cmd_anal_esil (core, esil_str); } - char *out = sdb_querys (core->anal->esil->stats, NULL, 0, "*"); + char *out = sdb_querys (core->analysis->esil->stats, NULL, 0, "*"); // rz_cons_println (out); if (out) { ops_list = parse_list (strstr (out, "ops.list")); @@ -670,7 +670,7 @@ static int rop_classify_nops(RzCore *core, RzList *ropList) { // rz_cons_printf ("Emulating nop:%s\n", esil_str); cmd_anal_esil (core, esil_str); - char *out = sdb_querys (core->anal->esil->stats, NULL, 0, "*"); + char *out = sdb_querys (core->analysis->esil->stats, NULL, 0, "*"); // rz_cons_println (out); if (out) { free (out); diff --git a/librz/core/cmd_seek.c b/librz/core/cmd_seek.c index 44d27101de..38c2ac6157 100644 --- a/librz/core/cmd_seek.c +++ b/librz/core/cmd_seek.c @@ -203,7 +203,7 @@ static void seek_to_register(RzCore *core, const char *input, bool is_silent) { rz_core_seek (core, off, true); } else { RzReg *orig = core->dbg->reg; - core->dbg->reg = core->anal->reg; + core->dbg->reg = core->analysis->reg; off = rz_debug_reg_get (core->dbg, input); core->dbg->reg = orig; if (!is_silent) { @@ -250,7 +250,7 @@ static int cmd_seek_opcode_backward(RzCore *core, int numinstr) { ret = rz_core_asm_bwdis_len (core, &instr_len, &addr, numinstr); #endif addr = core->offset; - const int mininstrsize = rz_anal_archinfo (core->anal, RZ_ANAL_ARCHINFO_MIN_OP_SIZE); + const int mininstrsize = rz_analysis_archinfo (core->analysis, RZ_ANAL_ARCHINFO_MIN_OP_SIZE); for (i = 0; i < numinstr; i++) { ut64 prev_addr = rz_core_prevop_addr_force (core, addr, 1); if (prev_addr == UT64_MAX) { @@ -278,14 +278,14 @@ static int cmd_seek_opcode_forward (RzCore *core, int n) { // N forward instructions int i, ret, val = 0; for (val = i = 0; i < n; i++) { - RzAnalOp op; - ret = rz_anal_op (core->anal, &op, core->offset, core->block, + RzAnalysisOp op; + ret = rz_analysis_op (core->analysis, &op, core->offset, core->block, core->blocksize, RZ_ANAL_OP_MASK_BASIC); if (ret < 1) { ret = 1; } rz_core_seek_delta (core, ret); - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); val += ret; } return val; @@ -370,9 +370,9 @@ RZ_IPI int rz_cmd_seek(void *data, const char *input) { rz_core_cmd0 (core, "C*~^\"CC"); } else if (input[1] == ' ') { RzIntervalTreeIter it; - RzAnalMetaItem *meta; + RzAnalysisMetaItem *meta; bool seeked = false; - rz_interval_tree_foreach (&core->anal->meta, it, meta) { + rz_interval_tree_foreach (&core->analysis->meta, it, meta) { if (meta->type == RZ_META_TYPE_COMMENT && !strcmp (meta->str, input + 2)) { if (!silent) { rz_io_sundo_push (core->io, core->offset, rz_print_get_cursor (core->print)); @@ -667,25 +667,25 @@ RZ_IPI int rz_cmd_seek(void *data, const char *input) { if (!silent) { rz_io_sundo_push (core->io, core->offset, rz_print_get_cursor (core->print)); } - rz_core_anal_bb_seek (core, off); + rz_core_analysis_bb_seek (core, off); break; case 'f': { // "sf" - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; switch (input[1]) { case '\0': // "sf" - fcn = rz_anal_get_fcn_in (core->anal, core->offset, 0); + fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, 0); if (fcn) { - rz_core_seek (core, rz_anal_function_max_addr (fcn), true); + rz_core_seek (core, rz_analysis_function_max_addr (fcn), true); } break; case ' ': // "sf " - fcn = rz_anal_get_function_byname (core->anal, input + 2); + fcn = rz_analysis_get_function_byname (core->analysis, input + 2); if (fcn) { rz_core_seek (core, fcn->addr, true); } break; case '.': // "sf." - fcn = rz_anal_get_fcn_in (core->anal, core->offset, 0); + fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, 0); if (fcn) { rz_core_seek (core, fcn->addr, true); } diff --git a/librz/core/cmd_type.c b/librz/core/cmd_type.c index 78f1c8bf81..31ac8833f6 100644 --- a/librz/core/cmd_type.c +++ b/librz/core/cmd_type.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: LGPL-3.0-only #include -#include "rz_anal.h" +#include "rz_analysis.h" #include "rz_cons.h" #include "rz_core.h" #include @@ -187,9 +187,9 @@ static void __core_cmd_tcc(RzCore *core, const char *input) { break; case '-': if (input[1] == '*') { - sdb_reset (core->anal->sdb_cc); + sdb_reset (core->analysis->sdb_cc); } else { - rz_anal_cc_del (core->anal, rz_str_trim_head_ro (input + 1)); + rz_analysis_cc_del (core->analysis, rz_str_trim_head_ro (input + 1)); } break; case 0: @@ -205,7 +205,7 @@ static void __core_cmd_tcc(RzCore *core, const char *input) { PJ *pj = pj_new (); pj_a (pj); rz_list_foreach (list, iter, cc) { - char *ccexpr = rz_anal_cc_get (core->anal, cc); + char *ccexpr = rz_analysis_cc_get (core->analysis, cc); // TODO: expose this as an object, not just an array of strings pj_s (pj, ccexpr); free (ccexpr); @@ -225,7 +225,7 @@ static void __core_cmd_tcc(RzCore *core, const char *input) { RzListIter *iter; const char *cc; rz_list_foreach (list, iter, cc) { - char *ccexpr = rz_anal_cc_get (core->anal, cc); + char *ccexpr = rz_analysis_cc_get (core->analysis, cc); rz_cons_printf ("%s\n", ccexpr); free (ccexpr); } @@ -241,7 +241,7 @@ static void __core_cmd_tcc(RzCore *core, const char *input) { RzListIter *iter; const char *cc; rz_list_foreach (list, iter, cc) { - char *ccexpr = rz_anal_cc_get (core->anal, cc); + char *ccexpr = rz_analysis_cc_get (core->analysis, cc); rz_cons_printf ("tfc %s\n", ccexpr); free (ccexpr); } @@ -254,12 +254,12 @@ static void __core_cmd_tcc(RzCore *core, const char *input) { break; case ' ': if (strchr (input, '(')) { - if (!rz_anal_cc_set (core->anal, input + 1)) { + if (!rz_analysis_cc_set (core->analysis, input + 1)) { eprintf ("Invalid syntax in cc signature."); } } else { const char *ccname = rz_str_trim_head_ro (input + 1); - char *cc = rz_anal_cc_get (core->anal, ccname); + char *cc = rz_analysis_cc_get (core->analysis, ccname); if (cc) { rz_cons_printf ("%s\n", cc); free (cc); @@ -270,11 +270,11 @@ static void __core_cmd_tcc(RzCore *core, const char *input) { } static void showFormat(RzCore *core, const char *name, int mode) { - const char *isenum = sdb_const_get (core->anal->sdb_types, name, 0); + const char *isenum = sdb_const_get (core->analysis->sdb_types, name, 0); if (isenum && !strcmp (isenum, "enum")) { eprintf ("IS ENUM\n"); } else { - char *fmt = rz_type_format (core->anal->sdb_types, name); + char *fmt = rz_type_format (core->analysis->sdb_types, name); if (fmt) { rz_str_trim (fmt); if (mode == 'j') { @@ -347,7 +347,7 @@ static void cmd_type_noreturn(RzCore *core, const char *input) { char *k; RzList *list = rz_str_split_list (s, " ", 0); rz_list_foreach (list, iter, k) { - rz_anal_noreturn_drop (core->anal, k); + rz_analysis_noreturn_drop (core->analysis, k); } rz_list_free (list); free (s); @@ -358,15 +358,15 @@ static void cmd_type_noreturn(RzCore *core, const char *input) { const char *arg = rz_str_trim_head_ro (input + 1); ut64 n = rz_num_math (core->num, arg); if (n) { - rz_anal_noreturn_add (core->anal, arg, n); + rz_analysis_noreturn_add (core->analysis, arg, n); } else { - rz_anal_noreturn_add (core->anal, arg, UT64_MAX); + rz_analysis_noreturn_add (core->analysis, arg, UT64_MAX); } } break; case 'a': // "tna" if (input[1] == ' ') { - rz_anal_noreturn_add (core->anal, NULL, + rz_analysis_noreturn_add (core->analysis, NULL, rz_num_math (core->num, input + 1)); } else { rz_core_cmd_help (core, help_msg_tn); @@ -375,17 +375,17 @@ static void cmd_type_noreturn(RzCore *core, const char *input) { case 'n': // "tnn" if (input[1] == ' ') { /* do nothing? */ - rz_anal_noreturn_add (core->anal, rz_str_trim_head_ro (input + 2), UT64_MAX); + rz_analysis_noreturn_add (core->analysis, rz_str_trim_head_ro (input + 2), UT64_MAX); } else { rz_core_cmd_help (core, help_msg_tn); } break; case '*': case 'r': // "tn*" - rz_anal_noreturn_list (core->anal, 1); + rz_analysis_noreturn_list (core->analysis, 1); break; case 0: // "tn" - rz_anal_noreturn_list (core->anal, 0); + rz_analysis_noreturn_list (core->analysis, 0); break; default: case '?': @@ -561,7 +561,7 @@ static bool printkey_cb(void *user, const char *k, const char *v) { // maybe dupe?. should return char *instead of print for reusability static void printFunctionTypeC(RzCore *core, const char *input) { - Sdb *TDB = core->anal->sdb_types; + Sdb *TDB = core->analysis->sdb_types; char *res = sdb_querys (TDB, NULL, -1, sdb_fmt ("func.%s.args", input)); const char *name = rz_str_trim_head_ro (input); int i, args = sdb_num_get (TDB, sdb_fmt ("func.%s.args", name), 0); @@ -588,7 +588,7 @@ static void printFunctionTypeC(RzCore *core, const char *input) { } static void printFunctionType(RzCore *core, const char *input) { - Sdb *TDB = core->anal->sdb_types; + Sdb *TDB = core->analysis->sdb_types; PJ *pj = pj_new (); if (!pj) { return; @@ -643,7 +643,7 @@ static bool stdifunion(void *p, const char *k, const char *v) { static bool sdbdeletelink(void *p, const char *k, const char *v) { RzCore *core = (RzCore *)p; if (!strncmp (k, "link.", strlen ("link."))) { - rz_type_del (core->anal->sdb_types, k); + rz_type_del (core->analysis->sdb_types, k); } return true; } @@ -669,7 +669,7 @@ static bool print_link_r_cb(void *p, const char *k, const char *v) { static bool print_link_readable_cb(void *p, const char *k, const char *v) { RzCore *core = (RzCore *)p; - char *fmt = rz_type_format (core->anal->sdb_types, v); + char *fmt = rz_type_format (core->analysis->sdb_types, v); if (!fmt) { eprintf ("Can't fint type %s", v); return 1; @@ -681,7 +681,7 @@ static bool print_link_readable_cb(void *p, const char *k, const char *v) { static bool print_link_readable_json_cb(void *p, const char *k, const char *v) { RzCore *core = (RzCore *)p; - char *fmt = rz_type_format (core->anal->sdb_types, v); + char *fmt = rz_type_format (core->analysis->sdb_types, v); if (!fmt) { eprintf ("Can't fint type %s", v); return true; @@ -705,7 +705,7 @@ static bool print_typelist_json_cb(void *p, const char *k, const char *v) { RzCore *core = (RzCore *)p; PJ *pj = pj_new (); pj_o (pj); - Sdb *sdb = core->anal->sdb_types; + Sdb *sdb = core->analysis->sdb_types; char *sizecmd = rz_str_newf ("type.%s.size", k); char *size_s = sdb_querys (sdb, NULL, -1, sizecmd); char *formatcmd = rz_str_newf ("type.%s", k); @@ -754,28 +754,28 @@ static void typesList(RzCore *core, int mode) { switch (mode) { case 1: case '*': - print_keys (core->anal->sdb_types, core, NULL, print_typelist_r_cb, false); + print_keys (core->analysis->sdb_types, core, NULL, print_typelist_r_cb, false); break; case 'j': - print_keys (core->anal->sdb_types, core, stdiftype, print_typelist_json_cb, true); + print_keys (core->analysis->sdb_types, core, stdiftype, print_typelist_json_cb, true); break; default: - print_keys (core->anal->sdb_types, core, stdiftype, printkey_cb, false); + print_keys (core->analysis->sdb_types, core, stdiftype, printkey_cb, false); break; } } -static void set_offset_hint(RzCore *core, RzAnalOp *op, const char *type, ut64 laddr, ut64 at, int offimm) { - char *res = rz_type_get_struct_memb (core->anal->sdb_types, type, offimm); +static void set_offset_hint(RzCore *core, RzAnalysisOp *op, const char *type, ut64 laddr, ut64 at, int offimm) { + char *res = rz_type_get_struct_memb (core->analysis->sdb_types, type, offimm); const char *cmt = ((offimm == 0) && res)? res: type; if (offimm > 0) { // set hint only if link is present char* query = sdb_fmt ("link.%08"PFMT64x, laddr); - if (res && sdb_const_get (core->anal->sdb_types, query, 0)) { - rz_anal_hint_set_offset (core->anal, at, res); + if (res && sdb_const_get (core->analysis->sdb_types, query, 0)) { + rz_analysis_hint_set_offset (core->analysis, at, res); } - } else if (cmt && rz_anal_op_ismemref (op->type)) { - rz_meta_set_string (core->anal, RZ_META_TYPE_VARTYPE, at, cmt); + } else if (cmt && rz_analysis_op_ismemref (op->type)) { + rz_meta_set_string (core->analysis, RZ_META_TYPE_VARTYPE, at, cmt); } } @@ -786,10 +786,10 @@ RZ_API int rz_core_get_stacksz(RzCore *core, ut64 from, ut64 to) { if (from >= to) { return 0; } - const int mininstrsz = rz_anal_archinfo (core->anal, RZ_ANAL_ARCHINFO_MIN_OP_SIZE); + const int mininstrsz = rz_analysis_archinfo (core->analysis, RZ_ANAL_ARCHINFO_MIN_OP_SIZE); const int minopcode = RZ_MAX (1, mininstrsz); while (at < to) { - RzAnalOp *op = rz_core_anal_op (core, at, RZ_ANAL_OP_MASK_BASIC); + RzAnalysisOp *op = rz_core_analysis_op (core, at, RZ_ANAL_OP_MASK_BASIC); if (!op || op->size <= 0) { at += minopcode; continue; @@ -801,15 +801,15 @@ RZ_API int rz_core_get_stacksz(RzCore *core, ut64 from, ut64 to) { } } at += op->size; - rz_anal_op_free (op); + rz_analysis_op_free (op); } return maxstack; } static void set_retval(RzCore *core, ut64 at) { - RzAnal *anal = core->anal; - RzAnalHint *hint = rz_anal_hint_get (anal, at); - RzAnalFunction *fcn = rz_anal_get_fcn_in (anal, at, 0); + RzAnalysis *analysis = core->analysis; + RzAnalysisHint *hint = rz_analysis_hint_get (analysis, at); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (analysis, at, 0); if (!hint || !fcn || !fcn->name) { goto beach; @@ -817,65 +817,65 @@ static void set_retval(RzCore *core, ut64 at) { if (hint->ret == UT64_MAX) { goto beach; } - const char *cc = rz_anal_cc_func (core->anal, fcn->name); - const char *regname = rz_anal_cc_ret (anal, cc); + const char *cc = rz_analysis_cc_func (core->analysis, fcn->name); + const char *regname = rz_analysis_cc_ret (analysis, cc); if (regname) { - RzRegItem *reg = rz_reg_get (anal->reg, regname, -1); + RzRegItem *reg = rz_reg_get (analysis->reg, regname, -1); if (reg) { - rz_reg_set_value (anal->reg, reg, hint->ret); + rz_reg_set_value (analysis->reg, reg, hint->ret); } } beach: - rz_anal_hint_free (hint); + rz_analysis_hint_free (hint); return; } -RZ_API void rz_core_link_stroff(RzCore *core, RzAnalFunction *fcn) { - RzAnalBlock *bb; +RZ_API void rz_core_link_stroff(RzCore *core, RzAnalysisFunction *fcn) { + RzAnalysisBlock *bb; RzListIter *it; - RzAnalOp aop = {0}; + RzAnalysisOp aop = {0}; bool ioCache = rz_config_get_i (core->config, "io.cache"); bool stack_set = false; bool resolved = false; const char *varpfx; int dbg_follow = rz_config_get_i (core->config, "dbg.follow"); - Sdb *TDB = core->anal->sdb_types; - RzAnalEsil *esil; + Sdb *TDB = core->analysis->sdb_types; + RzAnalysisEsil *esil; int iotrap = rz_config_get_i (core->config, "esil.iotrap"); int stacksize = rz_config_get_i (core->config, "esil.stack.depth"); unsigned int addrsize = rz_config_get_i (core->config, "esil.addr.size"); - const char *pc_name = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_PC); - const char *sp_name = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_SP); - RzRegItem *pc = rz_reg_get (core->anal->reg, pc_name, -1); + const char *pc_name = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_PC); + const char *sp_name = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_SP); + RzRegItem *pc = rz_reg_get (core->analysis->reg, pc_name, -1); if (!fcn) { return; } - if (!(esil = rz_anal_esil_new (stacksize, iotrap, addrsize))) { + if (!(esil = rz_analysis_esil_new (stacksize, iotrap, addrsize))) { return; } - rz_anal_esil_setup (esil, core->anal, 0, 0, 0); + rz_analysis_esil_setup (esil, core->analysis, 0, 0, 0); int i, ret, bsize = RZ_MAX (64, core->blocksize); - const int mininstrsz = rz_anal_archinfo (core->anal, RZ_ANAL_ARCHINFO_MIN_OP_SIZE); - const int maxinstrsz = rz_anal_archinfo (core->anal, RZ_ANAL_ARCHINFO_MAX_OP_SIZE); + const int mininstrsz = rz_analysis_archinfo (core->analysis, RZ_ANAL_ARCHINFO_MIN_OP_SIZE); + const int maxinstrsz = rz_analysis_archinfo (core->analysis, RZ_ANAL_ARCHINFO_MAX_OP_SIZE); const int minopcode = RZ_MAX (1, mininstrsz); ut8 *buf = malloc (bsize); if (!buf) { free (buf); - rz_anal_esil_free (esil); + rz_analysis_esil_free (esil); return; } - rz_reg_arena_push (core->anal->reg); + rz_reg_arena_push (core->analysis->reg); rz_debug_reg_sync (core->dbg, RZ_REG_TYPE_ALL, true); - ut64 spval = rz_reg_getv (esil->anal->reg, sp_name); + ut64 spval = rz_reg_getv (esil->analysis->reg, sp_name); if (spval) { // reset stack pointer to initial value - RzRegItem *sp = rz_reg_get (esil->anal->reg, sp_name, -1); - ut64 curpc = rz_reg_getv (esil->anal->reg, pc_name); + RzRegItem *sp = rz_reg_get (esil->analysis->reg, sp_name, -1); + ut64 curpc = rz_reg_getv (esil->analysis->reg, pc_name); int stacksz = rz_core_get_stacksz (core, fcn->addr, curpc); if (stacksz > 0) { - rz_reg_arena_zero (esil->anal->reg); // clear prev reg values - rz_reg_set_value (esil->anal->reg, sp, spval + stacksz); + rz_reg_arena_zero (esil->analysis->reg); // clear prev reg values + rz_reg_set_value (esil->analysis->reg, sp, spval + stacksz); } } else { // initialize stack @@ -891,7 +891,7 @@ RZ_API void rz_core_link_stroff(RzCore *core, RzAnalFunction *fcn) { rz_list_foreach (fcn->bbs, it, bb) { ut64 at = bb->addr; ut64 to = bb->addr + bb->size; - rz_reg_set_value (esil->anal->reg, pc, at); + rz_reg_set_value (esil->analysis->reg, pc, at); for (i = 0; at < to; i++) { if (rz_cons_is_breaked ()) { goto beach; @@ -905,36 +905,36 @@ RZ_API void rz_core_link_stroff(RzCore *core, RzAnalFunction *fcn) { if (!i) { rz_io_read_at (core->io, at, buf, bsize); } - ret = rz_anal_op (core->anal, &aop, at, buf + i, bsize - i, RZ_ANAL_OP_MASK_VAL); + ret = rz_analysis_op (core->analysis, &aop, at, buf + i, bsize - i, RZ_ANAL_OP_MASK_VAL); if (ret <= 0) { i += minopcode; at += minopcode; - rz_anal_op_fini (&aop); + rz_analysis_op_fini (&aop); continue; } i += ret - 1; at += ret; int index = 0; if (aop.ireg) { - index = rz_reg_getv (esil->anal->reg, aop.ireg) * aop.scale; + index = rz_reg_getv (esil->analysis->reg, aop.ireg) * aop.scale; } int j, src_imm = -1, dst_imm = -1; ut64 src_addr = UT64_MAX; ut64 dst_addr = UT64_MAX; for (j = 0; j < 3; j++) { if (aop.src[j] && aop.src[j]->reg && aop.src[j]->reg->name) { - src_addr = rz_reg_getv (esil->anal->reg, aop.src[j]->reg->name) + index; + src_addr = rz_reg_getv (esil->analysis->reg, aop.src[j]->reg->name) + index; src_imm = aop.src[j]->delta; } } if (aop.dst && aop.dst->reg && aop.dst->reg->name) { - dst_addr = rz_reg_getv (esil->anal->reg, aop.dst->reg->name) + index; + dst_addr = rz_reg_getv (esil->analysis->reg, aop.dst->reg->name) + index; dst_imm = aop.dst->delta; } - RzAnalVar *var = rz_anal_get_used_function_var (core->anal, aop.addr); + RzAnalysisVar *var = rz_analysis_get_used_function_var (core->analysis, aop.addr); if (false) { // src_addr != UT64_MAX || dst_addr != UT64_MAX) { // if (src_addr == UT64_MAX && dst_addr == UT64_MAX) { - rz_anal_op_fini (&aop); + rz_analysis_op_fini (&aop); continue; } char *slink = rz_type_link_at (TDB, src_addr); @@ -951,16 +951,16 @@ RZ_API void rz_core_link_stroff(RzCore *core, RzAnalFunction *fcn) { // var int local_e0h --> var struct foo if (strcmp (var->name , vlink) && !resolved) { resolved = true; - rz_anal_var_set_type (var, varpfx); - rz_anal_var_rename (var, vlink, false); + rz_analysis_var_set_type (var, varpfx); + rz_analysis_var_rename (var, vlink, false); } } else if (slink) { set_offset_hint (core, &aop, slink, src_addr, at - ret, src_imm); } else if (dlink) { set_offset_hint (core, &aop, dlink, dst_addr, at - ret, dst_imm); } - if (rz_anal_op_nonlinear (aop.type)) { - rz_reg_set_value (esil->anal->reg, pc, at); + if (rz_analysis_op_nonlinear (aop.type)) { + rz_reg_set_value (esil->analysis->reg, pc, at); set_retval (core, at - ret); } else { rz_core_esil_step (core, UT64_MAX, NULL, NULL, false); @@ -968,7 +968,7 @@ RZ_API void rz_core_link_stroff(RzCore *core, RzAnalFunction *fcn) { free (dlink); free (vlink); free (slink); - rz_anal_op_fini (&aop); + rz_analysis_op_fini (&aop); } } beach: @@ -979,8 +979,8 @@ beach: rz_core_cmd0 (core, "aeim-"); } rz_core_seek (core, oldoff, true); - rz_anal_esil_free (esil); - rz_reg_arena_pop (core->anal->reg); + rz_analysis_esil_free (esil); + rz_reg_arena_pop (core->analysis->reg); rz_core_cmd0 (core, ".ar*"); rz_cons_break_pop (); free (buf); @@ -988,7 +988,7 @@ beach: RZ_IPI int rz_cmd_type(void *data, const char *input) { RzCore *core = (RzCore *)data; - Sdb *TDB = core->anal->sdb_types; + Sdb *TDB = core->analysis->sdb_types; char *res; TDB_ = TDB; // HACK @@ -1138,7 +1138,7 @@ RZ_IPI int rz_cmd_type(void *data, const char *input) { } break; case 'e': { // "te" char *res = NULL, *temp = strchr (input, ' '); - Sdb *TDB = core->anal->sdb_types; + Sdb *TDB = core->analysis->sdb_types; char *name = temp ? strdup (temp + 1): NULL; char *member_name = name ? strchr (name, ' '): NULL; @@ -1289,10 +1289,10 @@ RZ_IPI int rz_cmd_type(void *data, const char *input) { char *tmp = rz_core_editor (core, "*.h", ""); if (tmp) { char *error_msg = NULL; - char *out = rz_parse_c_string (core->anal, tmp, &error_msg); + char *out = rz_parse_c_string (core->analysis, tmp, &error_msg); if (out) { // rz_cons_strcat (out); - rz_anal_save_parsed_type (core->anal, out); + rz_analysis_save_parsed_type (core->analysis, out); free (out); } if (error_msg) { @@ -1303,10 +1303,10 @@ RZ_IPI int rz_cmd_type(void *data, const char *input) { } } else { char *error_msg = NULL; - char *out = rz_parse_c_file (core->anal, filename, dir, &error_msg); + char *out = rz_parse_c_file (core->analysis, filename, dir, &error_msg); if (out) { //rz_cons_strcat (out); - rz_anal_save_parsed_type (core->anal, out); + rz_analysis_save_parsed_type (core->analysis, out); free (out); } if (error_msg) { @@ -1336,12 +1336,12 @@ RZ_IPI int rz_cmd_type(void *data, const char *input) { char *tmp = rz_core_editor (core, "*.h", str); if (tmp) { char *error_msg = NULL; - char *out = rz_parse_c_string (core->anal, tmp, &error_msg); + char *out = rz_parse_c_string (core->analysis, tmp, &error_msg); if (out) { // remove previous types and save new edited types sdb_reset (TDB); rz_parse_c_reset (core->parser); - rz_anal_save_parsed_type (core->anal, out); + rz_analysis_save_parsed_type (core->analysis, out); free (out); } if (error_msg) { @@ -1371,10 +1371,10 @@ RZ_IPI int rz_cmd_type(void *data, const char *input) { break; } char *error_msg = NULL; - char *out = rz_parse_c_string (core->anal, tmp, &error_msg); + char *out = rz_parse_c_string (core->analysis, tmp, &error_msg); free (tmp); if (out) { - rz_anal_save_parsed_type (core->anal, out); + rz_analysis_save_parsed_type (core->analysis, out); free (out); } if (error_msg) { @@ -1388,7 +1388,7 @@ RZ_IPI int rz_cmd_type(void *data, const char *input) { case 'x': { char *type, *type2; RzListIter *iter, *iter2; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; switch (input[1]) { case '.': // "tx." type xrefs case 'f': // "txf" type xrefs @@ -1397,9 +1397,9 @@ RZ_IPI int rz_cmd_type(void *data, const char *input) { if (input[2] == ' ') { addr = rz_num_math (core->num, input + 2); } - fcn = rz_anal_get_function_at (core->anal, addr); + fcn = rz_analysis_get_function_at (core->analysis, addr); if (fcn) { - RzList *uniq = rz_anal_types_from_fcn (core->anal, fcn); + RzList *uniq = rz_analysis_types_from_fcn (core->analysis, fcn); rz_list_foreach (uniq , iter , type) { rz_cons_println (type); } @@ -1410,8 +1410,8 @@ RZ_IPI int rz_cmd_type(void *data, const char *input) { } break; case 0: // "tx" - rz_list_foreach (core->anal->fcns, iter, fcn) { - RzList *uniq = rz_anal_types_from_fcn (core->anal, fcn); + rz_list_foreach (core->analysis->fcns, iter, fcn) { + RzList *uniq = rz_analysis_types_from_fcn (core->analysis, fcn); if (rz_list_length (uniq)) { rz_cons_printf ("%s: ", fcn->name); } @@ -1422,8 +1422,8 @@ RZ_IPI int rz_cmd_type(void *data, const char *input) { break; case 'g': // "txg" { - rz_list_foreach (core->anal->fcns, iter, fcn) { - RzList *uniq = rz_anal_types_from_fcn (core->anal, fcn); + rz_list_foreach (core->analysis->fcns, iter, fcn) { + RzList *uniq = rz_analysis_types_from_fcn (core->analysis, fcn); if (rz_list_length (uniq)) { rz_cons_printf ("agn %s\n", fcn->name); } @@ -1440,8 +1440,8 @@ RZ_IPI int rz_cmd_type(void *data, const char *input) { case 'l': // "txl" { RzList *uniqList = rz_list_newf (free); - rz_list_foreach (core->anal->fcns, iter, fcn) { - RzList *uniq = rz_anal_types_from_fcn (core->anal, fcn); + rz_list_foreach (core->analysis->fcns, iter, fcn) { + RzList *uniq = rz_analysis_types_from_fcn (core->analysis, fcn); rz_list_foreach (uniq , iter2, type) { if (!rz_list_find (uniqList, type, (RzListComparator)strcmp)) { rz_list_push (uniqList, strdup (type)); @@ -1458,8 +1458,8 @@ RZ_IPI int rz_cmd_type(void *data, const char *input) { case 't': case ' ': // "tx " -- show which function use given type type = (char *)rz_str_trim_head_ro (input + 2); - rz_list_foreach (core->anal->fcns, iter, fcn) { - RzList *uniq = rz_anal_types_from_fcn (core->anal, fcn); + rz_list_foreach (core->analysis->fcns, iter, fcn) { + RzList *uniq = rz_analysis_types_from_fcn (core->analysis, fcn); rz_list_foreach (uniq , iter2, type2) { if (!strcmp (type2, type)) { rz_cons_printf ("%s\n", fcn->name); @@ -1520,11 +1520,11 @@ RZ_IPI int rz_cmd_type(void *data, const char *input) { char *tmp = sdb_get (TDB, type, 0); if (tmp && *tmp) { rz_type_set_link (TDB, type, addr); - RzList *fcns = rz_anal_get_functions_in (core->anal, core->offset); + RzList *fcns = rz_analysis_get_functions_in (core->analysis, core->offset); if (rz_list_length (fcns) > 1) { eprintf ("Multiple functions found in here.\n"); } else if (rz_list_length (fcns) == 1) { - RzAnalFunction *fcn = rz_list_first (fcns); + RzAnalysisFunction *fcn = rz_list_first (fcns); rz_core_link_stroff (core, fcn); } else { eprintf ("Cannot find any function here\n"); @@ -1624,11 +1624,11 @@ RZ_IPI int rz_cmd_type(void *data, const char *input) { ut64 addr = arg ? rz_num_math (core->num, arg): core->offset; ut64 original_addr = addr; if (!addr && arg) { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, -1); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, -1); if (fcn) { - RzAnalVar *var = rz_anal_function_get_var_byname (fcn, arg); + RzAnalysisVar *var = rz_analysis_function_get_var_byname (fcn, arg); if (var) { - addr = rz_anal_var_addr (var); + addr = rz_analysis_var_addr (var); } } } @@ -1657,7 +1657,7 @@ RZ_IPI int rz_cmd_type(void *data, const char *input) { } else { const char *name = rz_str_trim_head_ro (input + 1); if (*name) { - rz_anal_remove_parsed_type (core->anal, name); + rz_analysis_remove_parsed_type (core->analysis, name); } else { eprintf ("Invalid use of t- . See t-? for help.\n"); } diff --git a/librz/core/cmd_write.c b/librz/core/cmd_write.c index f5e187c53d..f70bfa949e 100644 --- a/librz/core/cmd_write.c +++ b/librz/core/cmd_write.c @@ -1795,18 +1795,18 @@ RZ_IPI int rz_wa_handler_old(void *data, const char *input) { acode = rz_asm_massemble (core->rasm, file); if (acode) { if (input[0] == 'i') { // "wai" - RzAnalOp analop; - if (!rz_anal_op (core->anal, &analop, core->offset, core->block, core->blocksize, RZ_ANAL_OP_MASK_BASIC)) { + RzAnalysisOp analop; + if (!rz_analysis_op (core->analysis, &analop, core->offset, core->block, core->blocksize, RZ_ANAL_OP_MASK_BASIC)) { eprintf ("Invalid instruction?\n"); break; } if (analop.size < acode->len) { eprintf ("Doesnt fit\n"); - rz_anal_op_fini (&analop); + rz_analysis_op_fini (&analop); rz_asm_code_free (acode); break; } - rz_anal_op_fini (&analop); + rz_analysis_op_fini (&analop); rz_core_cmd0 (core, "wao nop"); } if (acode->len > 0) { diff --git a/librz/core/cmd_zign.c b/librz/core/cmd_zign.c index 2bd74ad677..f710293ffe 100644 --- a/librz/core/cmd_zign.c +++ b/librz/core/cmd_zign.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: LGPL-3.0-only #include -#include +#include #include #include #include @@ -92,11 +92,11 @@ static const char *help_msg_zc[] = { NULL }; -static void addFcnZign(RzCore *core, RzAnalFunction *fcn, const char *name) { +static void addFcnZign(RzCore *core, RzAnalysisFunction *fcn, const char *name) { char *ptr = NULL; char *zignspace = NULL; char *zigname = NULL; - const RzSpace *curspace = rz_spaces_current (&core->anal->zign_spaces); + const RzSpace *curspace = rz_spaces_current (&core->analysis->zign_spaces); int len = 0; if (name) { @@ -107,7 +107,7 @@ static void addFcnZign(RzCore *core, RzAnalFunction *fcn, const char *name) { if ((ptr = strchr (fcn->name, ':')) != NULL) { len = ptr - fcn->name; zignspace = rz_str_newlen (fcn->name, len); - rz_spaces_push (&core->anal->zign_spaces, zignspace); + rz_spaces_push (&core->analysis->zign_spaces, zignspace); } else if (curspace) { zigname = rz_str_newf ("%s:", curspace->name); } @@ -122,33 +122,33 @@ static void addFcnZign(RzCore *core, RzAnalFunction *fcn, const char *name) { } // add sig types info to item it->name = zigname; // will be free'd when item is free'd - it->space = rz_spaces_current (&core->anal->zign_spaces); - rz_sign_addto_item (core->anal, it, fcn, RZ_SIGN_GRAPH); - rz_sign_addto_item (core->anal, it, fcn, RZ_SIGN_BYTES); - rz_sign_addto_item (core->anal, it, fcn, RZ_SIGN_XREFS); - rz_sign_addto_item (core->anal, it, fcn, RZ_SIGN_REFS); - rz_sign_addto_item (core->anal, it, fcn, RZ_SIGN_VARS); - rz_sign_addto_item (core->anal, it, fcn, RZ_SIGN_TYPES); - rz_sign_addto_item (core->anal, it, fcn, RZ_SIGN_BBHASH); - rz_sign_addto_item (core->anal, it, fcn, RZ_SIGN_OFFSET); - rz_sign_addto_item (core->anal, it, fcn, RZ_SIGN_NAME); + it->space = rz_spaces_current (&core->analysis->zign_spaces); + rz_sign_addto_item (core->analysis, it, fcn, RZ_SIGN_GRAPH); + rz_sign_addto_item (core->analysis, it, fcn, RZ_SIGN_BYTES); + rz_sign_addto_item (core->analysis, it, fcn, RZ_SIGN_XREFS); + rz_sign_addto_item (core->analysis, it, fcn, RZ_SIGN_REFS); + rz_sign_addto_item (core->analysis, it, fcn, RZ_SIGN_VARS); + rz_sign_addto_item (core->analysis, it, fcn, RZ_SIGN_TYPES); + rz_sign_addto_item (core->analysis, it, fcn, RZ_SIGN_BBHASH); + rz_sign_addto_item (core->analysis, it, fcn, RZ_SIGN_OFFSET); + rz_sign_addto_item (core->analysis, it, fcn, RZ_SIGN_NAME); - /* rz_sign_add_addr (core->anal, zigname, fcn->addr); */ + /* rz_sign_add_addr (core->analysis, zigname, fcn->addr); */ // commit the item to anal - rz_sign_add_item (core->anal, it); + rz_sign_add_item (core->analysis, it); /* XXX this is very slow and poorly tested char *comments = getFcnComments (core, fcn); if (comments) { - rz_sign_add_comment (core->anal, zigname, comments); + rz_sign_add_comment (core->analysis, zigname, comments); } */ rz_sign_item_free (it); // causes zigname to be free'd if (zignspace) { - rz_spaces_pop (&core->anal->zign_spaces); + rz_spaces_pop (&core->analysis->zign_spaces); free (zignspace); } } @@ -159,7 +159,7 @@ static bool addCommentZign(RzCore *core, const char *name, RzList *args) { return false; } const char *comment = (const char *)rz_list_get_top (args); - return rz_sign_add_comment (core->anal, name, comment); + return rz_sign_add_comment (core->analysis, name, comment); } static bool addNameZign(RzCore *core, const char *name, RzList *args) { @@ -168,7 +168,7 @@ static bool addNameZign(RzCore *core, const char *name, RzList *args) { return false; } const char *realname = (const char *)rz_list_get_top (args); - return rz_sign_add_name (core->anal, name, realname); + return rz_sign_add_name (core->analysis, name, realname); } static bool addGraphZign(RzCore *core, const char *name, RzList *args) { @@ -191,7 +191,7 @@ static bool addGraphZign(RzCore *core, const char *name, RzList *args) { return false; } } - return rz_sign_add_graph (core->anal, name, graph); + return rz_sign_add_graph (core->analysis, name, graph); } static bool addHashZign(RzCore *core, const char *name, int type, RzList *args) { @@ -204,7 +204,7 @@ static bool addHashZign(RzCore *core, const char *name, int type, RzList *args) if (!len) { return false; } - return rz_sign_add_hash (core->anal, name, type, hash, len); + return rz_sign_add_hash (core->analysis, name, type, hash, len); } static bool addBytesZign(RzCore *core, const char *name, int type, RzList *args) { @@ -250,10 +250,10 @@ static bool addBytesZign(RzCore *core, const char *name, int type, RzList *args) switch (type) { case RZ_SIGN_BYTES: - retval = rz_sign_add_bytes (core->anal, name, size, bytes, mask); + retval = rz_sign_add_bytes (core->analysis, name, size, bytes, mask); break; case RZ_SIGN_ANAL: - retval = rz_sign_add_anal (core->anal, name, size, bytes, 0); + retval = rz_sign_add_anal (core->analysis, name, size, bytes, 0); break; } @@ -274,7 +274,7 @@ static bool addOffsetZign(RzCore *core, const char *name, RzList *args) { return false; } ut64 offset = rz_num_get (core->num, offstr); - return rz_sign_add_addr (core->anal, name, offset); + return rz_sign_add_addr (core->analysis, name, offset); } static bool addZign(RzCore *core, const char *name, int type, RzList *args) { @@ -291,13 +291,13 @@ static bool addZign(RzCore *core, const char *name, int type, RzList *args) { case RZ_SIGN_OFFSET: return addOffsetZign (core, name, args); case RZ_SIGN_REFS: - return rz_sign_add_refs (core->anal, name, args); + return rz_sign_add_refs (core->analysis, name, args); case RZ_SIGN_XREFS: - return rz_sign_add_xrefs (core->anal, name, args); + return rz_sign_add_xrefs (core->analysis, name, args); case RZ_SIGN_VARS: - return rz_sign_add_vars (core->anal, name, args); + return rz_sign_add_vars (core->analysis, name, args); case RZ_SIGN_TYPES: - return rz_sign_add_types (core->anal, name, args); + return rz_sign_add_types (core->analysis, name, args); case RZ_SIGN_BBHASH: return addHashZign (core, name, type, args); default: @@ -348,7 +348,7 @@ out_case_manual: break; case 'f': // "zaf" { - RzAnalFunction *fcni = NULL; + RzAnalysisFunction *fcni = NULL; RzListIter *iter = NULL; const char *fcnname = NULL, *zigname = NULL; char *args = NULL; @@ -372,7 +372,7 @@ out_case_manual: } rz_cons_break_push (NULL, NULL); - rz_list_foreach (core->anal->fcns, iter, fcni) { + rz_list_foreach (core->analysis->fcns, iter, fcni) { if (rz_cons_is_breaked ()) { break; } @@ -391,12 +391,12 @@ out_case_fcn: break; case 'F': { - RzAnalFunction *fcni = NULL; + RzAnalysisFunction *fcni = NULL; RzListIter *iter = NULL; int count = 0; rz_cons_break_push (NULL, NULL); - rz_list_foreach (core->anal->fcns, iter, fcni) { + rz_list_foreach (core->analysis->fcns, iter, fcni) { if (rz_cons_is_breaked ()) { break; } @@ -457,19 +457,19 @@ static int cmdOpen(void *data, const char *input) { switch (*input) { case ' ': if (input[1]) { - return rz_sign_load (core->anal, input + 1); + return rz_sign_load (core->analysis, input + 1); } eprintf ("Usage: zo filename\n"); return false; case 's': if (input[1] == ' ' && input[2]) { - return rz_sign_save (core->anal, input + 2); + return rz_sign_save (core->analysis, input + 2); } eprintf ("Usage: zos filename\n"); return false; case 'z': if (input[1] == ' ' && input[2]) { - return rz_sign_load_gz (core->anal, input + 2); + return rz_sign_load_gz (core->analysis, input + 2); } eprintf ("Usage: zoz filename\n"); return false; @@ -486,7 +486,7 @@ static int cmdOpen(void *data, const char *input) { static int cmdSpace(void *data, const char *input) { RzCore *core = (RzCore *) data; - RzSpaces *zs = &core->anal->zign_spaces; + RzSpaces *zs = &core->analysis->zign_spaces; switch (*input) { case '+': @@ -545,7 +545,7 @@ static int cmdFlirt(void *data, const char *input) { eprintf ("Usage: zfd filename\n"); return false; } - rz_sign_flirt_dump (core->anal, input + 2); + rz_sign_flirt_dump (core->analysis, input + 2); break; case 's': // TODO @@ -558,7 +558,7 @@ static int cmdFlirt(void *data, const char *input) { RzListIter *iter; RzList *files = rz_file_globsearch (input + 2, depth); rz_list_foreach (files, iter, file) { - rz_sign_flirt_scan (core->anal, file); + rz_sign_flirt_scan (core->analysis, file); } rz_list_free (files); break; @@ -582,7 +582,7 @@ struct ctxSearchCB { const char *prefix; }; -static void apply_name(RzCore *core, RzAnalFunction *fcn, RzSignItem *it, bool rad) { +static void apply_name(RzCore *core, RzAnalysisFunction *fcn, RzSignItem *it, bool rad) { rz_return_if_fail (core && fcn && it && it->name); const char *name = it->realname? it->realname: it->name; if (rad) { @@ -597,13 +597,13 @@ static void apply_name(RzCore *core, RzAnalFunction *fcn, RzSignItem *it, bool r if (flag && flag->space && strcmp (flag->space->name, RZ_FLAGS_FS_FUNCTIONS)) { rz_flag_rename (core->flags, flag, name); } - rz_anal_function_rename (fcn, name); - if (core->anal->cb.on_fcn_rename) { - core->anal->cb.on_fcn_rename (core->anal, core->anal->user, fcn, name); + rz_analysis_function_rename (fcn, name); + if (core->analysis->cb.on_fcn_rename) { + core->analysis->cb.on_fcn_rename (core->analysis, core->analysis->user, fcn, name); } } -static void apply_types(RzCore *core, RzAnalFunction *fcn, RzSignItem *it) { +static void apply_types(RzCore *core, RzAnalysisFunction *fcn, RzSignItem *it) { rz_return_if_fail (core && fcn && it && it->name); if (!it->types) { return; @@ -628,7 +628,7 @@ static void apply_types(RzCore *core, RzAnalFunction *fcn, RzSignItem *it) { } } rz_str_remove_char (alltypes, '"'); - rz_anal_save_parsed_type (core->anal, alltypes); + rz_analysis_save_parsed_type (core->analysis, alltypes); free (start); free (alltypes); } @@ -672,7 +672,7 @@ static const char *getprefix(RzSignType t) { static int searchHitCB(RzSignItem *it, RzSearchKeyword *kw, ut64 addr, void *user) { struct ctxSearchCB *ctx = (struct ctxSearchCB *)user; apply_flag (ctx->core, it, addr, kw->keyword_length, kw->count, ctx->prefix, ctx->rad); - RzAnalFunction *fcn = rz_anal_get_fcn_in (ctx->core->anal, addr, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (ctx->core->analysis, addr, 0); // TODO: create fcn if it does not exist if (fcn) { apply_name (ctx->core, fcn, it, ctx->rad); @@ -682,11 +682,11 @@ static int searchHitCB(RzSignItem *it, RzSearchKeyword *kw, ut64 addr, void *use return 1; } -static int fcnMatchCB(RzSignItem *it, RzAnalFunction *fcn, RzSignType type, bool seen, void *user) { +static int fcnMatchCB(RzSignItem *it, RzAnalysisFunction *fcn, RzSignType type, bool seen, void *user) { struct ctxSearchCB *ctx = (struct ctxSearchCB *)user; const char *prefix = getprefix (type); // TODO(nibble): use one counter per metric zign instead of ctx->count - ut64 sz = rz_anal_function_realsize (fcn); + ut64 sz = rz_analysis_function_realsize (fcn); apply_flag (ctx->core, it, fcn->addr, sz, ctx->count, prefix, ctx->rad); if (!seen) { apply_name (ctx->core, fcn, it, ctx->rad); @@ -708,7 +708,7 @@ static bool searchRange(RzCore *core, ut64 from, ut64 to, bool rad, struct ctxSe } RzSignSearch *ss = rz_sign_search_new (); ss->search->align = rz_config_get_i (core->config, "search.align"); - rz_sign_search_init (core->anal, ss, minsz, searchHitCB, ctx); + rz_sign_search_init (core->analysis, ss, minsz, searchHitCB, ctx); rz_cons_break_push (NULL, NULL); for (at = from; at < to; at += core->blocksize) { @@ -722,7 +722,7 @@ static bool searchRange(RzCore *core, ut64 from, ut64 to, bool rad, struct ctxSe break; } (void)rz_io_read_at (core->io, at, buf, rlen); - if (rz_sign_search_update (core->anal, ss, &at, buf, rlen) == -1) { + if (rz_sign_search_update (core->analysis, ss, &at, buf, rlen) == -1) { eprintf ("search: update read error at 0x%08" PFMT64x "\n", at); retval = false; break; @@ -756,7 +756,7 @@ static bool searchRange2(RzCore *core, RzSignSearch *ss, ut64 from, ut64 to, boo break; } (void)rz_io_read_at (core->io, at, buf, rlen); - if (rz_sign_search_update (core->anal, ss, &at, buf, rlen) == -1) { + if (rz_sign_search_update (core->analysis, ss, &at, buf, rlen) == -1) { eprintf ("search: update read error at 0x%08"PFMT64x"\n", at); retval = false; break; @@ -790,7 +790,7 @@ static bool fill_search_metrics(RzSignSearchMetrics *sm, RzCore *c, void *user) search_add_to_types(c, sm, RZ_SIGN_VARS, "zign.vars", &i); #endif sm->mincc = rz_config_get_i (c->config, "zign.mincc"); - sm->anal = c->anal; + sm->analysis = c->analysis; sm->cb = fcnMatchCB; sm->user = user; sm->fcn = NULL; @@ -800,7 +800,7 @@ static bool fill_search_metrics(RzSignSearchMetrics *sm, RzCore *c, void *user) static bool search(RzCore *core, bool rad, bool only_func) { RzList *list; RzListIter *iter; - RzAnalFunction *fcni = NULL; + RzAnalysisFunction *fcni = NULL; RzIOMap *map; bool retval = true; int hits = 0; @@ -850,16 +850,16 @@ static bool search(RzCore *core, bool rad, bool only_func) { ss = rz_sign_search_new (); ss->search->align = rz_config_get_i (core->config, "search.align"); int minsz = rz_config_get_i (core->config, "zign.minsz"); - rz_sign_search_init (core->anal, ss, minsz, searchHitCB, &bytes_search_ctx); + rz_sign_search_init (core->analysis, ss, minsz, searchHitCB, &bytes_search_ctx); } - rz_list_foreach (core->anal->fcns, iter, fcni) { + rz_list_foreach (core->analysis->fcns, iter, fcni) { if (rz_cons_is_breaked ()) { break; } if (useBytes && only_func) { - eprintf ("Matching func %d / %d (hits %d)\n", count, rz_list_length (core->anal->fcns), bytes_search_ctx.count); - int fcnlen = rz_anal_function_realsize (fcni); + eprintf ("Matching func %d / %d (hits %d)\n", count, rz_list_length (core->analysis->fcns), bytes_search_ctx.count); + int fcnlen = rz_analysis_function_realsize (fcni); int len = RZ_MIN (core->io->addrbytes * fcnlen, maxsz); retval &= searchRange2 (core, ss, fcni->addr, fcni->addr + len, rad, &bytes_search_ctx); } @@ -906,7 +906,7 @@ static void print_possible_matches(RzList *list) { } } -static RzSignItem *item_frm_signame(RzAnal *a, const char *signame) { +static RzSignItem *item_frm_signame(RzAnalysis *a, const char *signame) { // example zign|*|sym.unlink_blk const RzSpace *space = rz_spaces_current (&a->zign_spaces); char *k = rz_str_newf ("zign|%s|%s", space? space->name: "*", signame); @@ -944,7 +944,7 @@ static double get_zb_threshold(RzCore *core) { static bool do_bestmatch_fcn(RzCore *core, const char *zigname, int count) { rz_return_val_if_fail (core, false); - RzSignItem *it = item_frm_signame (core->anal, zigname); + RzSignItem *it = item_frm_signame (core->analysis, zigname); if (!it) { eprintf ("Couldn't get signature for %s\n", zigname); return false; @@ -960,7 +960,7 @@ static bool do_bestmatch_fcn(RzCore *core, const char *zigname, int count) { } double thresh = get_zb_threshold (core); - RzList *list = rz_sign_find_closest_fcn (core->anal, it, count, thresh); + RzList *list = rz_sign_find_closest_fcn (core->analysis, it, count, thresh); rz_sign_item_free (it); if (list) { @@ -1004,7 +1004,7 @@ static bool bestmatch_fcn(RzCore *core, const char *input) { } static bool do_bestmatch_sig(RzCore *core, int count) { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, 0); if (!fcn) { eprintf ("No function at 0x%08" PFMT64x "\n", core->offset); return false; @@ -1016,7 +1016,7 @@ static bool do_bestmatch_sig(RzCore *core, int count) { } if (rz_config_get_i (core->config, "zign.bytes")) { - rz_sign_addto_item (core->anal, item, fcn, RZ_SIGN_BYTES); + rz_sign_addto_item (core->analysis, item, fcn, RZ_SIGN_BYTES); RzSignBytes *b = item->bytes; int minsz = rz_config_get_i (core->config, "zign.minsz"); if (b && b->size < minsz) { @@ -1026,14 +1026,14 @@ static bool do_bestmatch_sig(RzCore *core, int count) { } } if (rz_config_get_i (core->config, "zign.graph")) { - rz_sign_addto_item (core->anal, item, fcn, RZ_SIGN_GRAPH); + rz_sign_addto_item (core->analysis, item, fcn, RZ_SIGN_GRAPH); } double th = get_zb_threshold (core); bool found = false; if (item->graph || item->bytes) { rz_cons_break_push (NULL, NULL); - RzList *list = rz_sign_find_closest_sig (core->anal, item, count, th); + RzList *list = rz_sign_find_closest_sig (core->analysis, item, count, th); if (list) { found = true; print_possible_matches (list); @@ -1096,7 +1096,7 @@ static int cmdCompare(void *data, const char *input) { result = false; break; } - result = rz_sign_diff (core->anal, options, input + 1); + result = rz_sign_diff (core->analysis, options, input + 1); break; case 'n': switch (input[1]) { @@ -1106,7 +1106,7 @@ static int cmdCompare(void *data, const char *input) { result = false; break; } - result = rz_sign_diff_by_name (core->anal, options, input + 2, false); + result = rz_sign_diff_by_name (core->analysis, options, input + 2, false); break; case '!': if (input[2] != ' ' || !input[3]) { @@ -1114,7 +1114,7 @@ static int cmdCompare(void *data, const char *input) { result = false; break; } - result = rz_sign_diff_by_name (core->anal, options, input + 3, true); + result = rz_sign_diff_by_name (core->analysis, options, input + 3, true); break; default: eprintf ("Usage: zcn! other_space\n"); @@ -1138,7 +1138,7 @@ static int cmdCheck(void *data, const char *input) { RzCore *core = (RzCore *) data; RzSignSearch *ss; RzListIter *iter; - RzAnalFunction *fcni = NULL; + RzAnalysisFunction *fcni = NULL; ut64 at = core->offset; bool retval = true; bool rad = input[0] == '*'; @@ -1167,8 +1167,8 @@ static int cmdCheck(void *data, const char *input) { if (useBytes) { eprintf ("[+] searching 0x%08"PFMT64x" - 0x%08"PFMT64x"\n", at, at + core->blocksize); ss = rz_sign_search_new (); - rz_sign_search_init (core->anal, ss, minsz, searchHitCB, &bytes_search_ctx); - if (rz_sign_search_update (core->anal, ss, &at, core->block, core->blocksize) == -1) { + rz_sign_search_init (core->analysis, ss, minsz, searchHitCB, &bytes_search_ctx); + if (rz_sign_search_update (core->analysis, ss, &at, core->block, core->blocksize) == -1) { eprintf ("search: update read error at 0x%08"PFMT64x"\n", at); retval = false; } @@ -1179,7 +1179,7 @@ static int cmdCheck(void *data, const char *input) { if (metsearch) { eprintf ("[+] searching function metrics\n"); rz_cons_break_push (NULL, NULL); - rz_list_foreach (core->anal->fcns, iter, fcni) { + rz_list_foreach (core->analysis->fcns, iter, fcni) { if (rz_cons_is_breaked ()) { break; } @@ -1253,13 +1253,13 @@ RZ_IPI int rz_cmd_zign(void *data, const char *input) { case '*': case 'q': case 'j': // "zj" - rz_sign_list (core->anal, *input); + rz_sign_list (core->analysis, *input); break; case 'k': // "zk" rz_core_cmd0 (core, "k anal/zigns/*"); break; case '-': // "z-" - rz_sign_delete (core->anal, arg); + rz_sign_delete (core->analysis, arg); break; case '.': // "z." return cmdCheck (data, arg); @@ -1296,16 +1296,16 @@ RZ_IPI RzCmdStatus rz_zign_show_handler(RzCore *core, int argc, const char **arg char *out; switch (mode) { case RZ_OUTPUT_MODE_STANDARD: - rz_sign_list (core->anal, '\0'); + rz_sign_list (core->analysis, '\0'); return RZ_CMD_STATUS_OK; case RZ_OUTPUT_MODE_QUIET: - rz_sign_list (core->anal, 'q'); + rz_sign_list (core->analysis, 'q'); return RZ_CMD_STATUS_OK; case RZ_OUTPUT_MODE_JSON: - rz_sign_list (core->anal, 'j'); + rz_sign_list (core->analysis, 'j'); return RZ_CMD_STATUS_OK; case RZ_OUTPUT_MODE_RIZIN: - rz_sign_list (core->anal, '*'); + rz_sign_list (core->analysis, '*'); return RZ_CMD_STATUS_OK; case RZ_OUTPUT_MODE_SDB: out = sdb_querys (core->sdb, NULL, 0, "anal/zigns/*"); @@ -1342,7 +1342,7 @@ RZ_IPI RzCmdStatus rz_zign_best_name_handler(RzCore *core, int argc, const char } RZ_IPI RzCmdStatus rz_zign_delete_handler(RzCore *core, int argc, const char **argv) { - rz_sign_delete (core->anal, argv[1]); + rz_sign_delete (core->analysis, argv[1]); return RZ_CMD_STATUS_OK; } @@ -1359,12 +1359,12 @@ RZ_IPI RzCmdStatus rz_zign_add_handler(RzCore *core, int argc, const char **argv } RZ_IPI RzCmdStatus rz_zign_add_fcn_handler(RzCore *core, int argc, const char **argv) { - RzAnalFunction *fcni = NULL; + RzAnalysisFunction *fcni = NULL; RzListIter *iter = NULL; const char *fcnname = argc > 1? argv[1]: NULL; const char *zigname = argc > 2? argv[2]: NULL; rz_cons_break_push (NULL, NULL); - rz_list_foreach (core->anal->fcns, iter, fcni) { + rz_list_foreach (core->analysis->fcns, iter, fcni) { if (rz_cons_is_breaked ()) { break; } @@ -1379,11 +1379,11 @@ RZ_IPI RzCmdStatus rz_zign_add_fcn_handler(RzCore *core, int argc, const char ** } RZ_IPI RzCmdStatus rz_zign_add_all_fcns_handler(RzCore *core, int argc, const char **argv) { - RzAnalFunction *fcni = NULL; + RzAnalysisFunction *fcni = NULL; RzListIter *iter = NULL; int count = 0; rz_cons_break_push (NULL, NULL); - rz_list_foreach (core->anal->fcns, iter, fcni) { + rz_list_foreach (core->analysis->fcns, iter, fcni) { if (rz_cons_is_breaked ()) { break; } @@ -1400,19 +1400,19 @@ RZ_IPI RzCmdStatus rz_zign_generate_handler(RzCore *core, int argc, const char * } RZ_IPI RzCmdStatus rz_zign_load_sdb_handler(RzCore *core, int argc, const char **argv) { - return rz_sign_load (core->anal, argv[1])? RZ_CMD_STATUS_OK: RZ_CMD_STATUS_ERROR; + return rz_sign_load (core->analysis, argv[1])? RZ_CMD_STATUS_OK: RZ_CMD_STATUS_ERROR; } RZ_IPI RzCmdStatus rz_zign_load_gzip_sdb_handler(RzCore *core, int argc, const char **argv) { - return rz_sign_load_gz (core->anal, argv[1]) ? RZ_CMD_STATUS_OK : RZ_CMD_STATUS_ERROR; + return rz_sign_load_gz (core->analysis, argv[1]) ? RZ_CMD_STATUS_OK : RZ_CMD_STATUS_ERROR; } RZ_IPI RzCmdStatus rz_zign_save_sdb_handler(RzCore *core, int argc, const char **argv) { - return rz_sign_save (core->anal, argv[1]) ? RZ_CMD_STATUS_OK : RZ_CMD_STATUS_ERROR; + return rz_sign_save (core->analysis, argv[1]) ? RZ_CMD_STATUS_OK : RZ_CMD_STATUS_ERROR; } RZ_IPI RzCmdStatus rz_zign_flirt_dump_handler(RzCore *core, int argc, const char **argv) { - rz_sign_flirt_dump (core->anal, argv[1]); + rz_sign_flirt_dump (core->analysis, argv[1]); return RZ_CMD_STATUS_OK; } @@ -1422,7 +1422,7 @@ RZ_IPI RzCmdStatus rz_zign_flirt_scan_handler(RzCore *core, int argc, const char RzListIter *iter; RzList *files = rz_file_globsearch (argv[1], depth); rz_list_foreach (files, iter, file) { - rz_sign_flirt_scan (core->anal, file); + rz_sign_flirt_scan (core->analysis, file); } rz_list_free (files); return RZ_CMD_STATUS_OK; @@ -1440,7 +1440,7 @@ RZ_IPI RzCmdStatus rz_zign_cmp_handler(RzCore *core, int argc, const char **argv const char *raw_bytes_thresh = rz_config_get (core->config, "zign.diff.bthresh"); const char *raw_graph_thresh = rz_config_get (core->config, "zign.diff.gthresh"); RzSignOptions *options = rz_sign_options_new (raw_bytes_thresh, raw_graph_thresh); - RzCmdStatus res = rz_sign_diff (core->anal, options, argv[1])? RZ_CMD_STATUS_OK: RZ_CMD_STATUS_ERROR; + RzCmdStatus res = rz_sign_diff (core->analysis, options, argv[1])? RZ_CMD_STATUS_OK: RZ_CMD_STATUS_ERROR; rz_sign_options_free (options); return res; } @@ -1449,7 +1449,7 @@ static RzCmdStatus zcn_handler_common(RzCore *core, int argc, const char **argv, const char *raw_bytes_thresh = rz_config_get (core->config, "zign.diff.bthresh"); const char *raw_graph_thresh = rz_config_get (core->config, "zign.diff.gthresh"); RzSignOptions *options = rz_sign_options_new (raw_bytes_thresh, raw_graph_thresh); - RzCmdStatus res = rz_sign_diff_by_name (core->anal, options, argv[1], negative_match) ? RZ_CMD_STATUS_OK : RZ_CMD_STATUS_ERROR; + RzCmdStatus res = rz_sign_diff_by_name (core->analysis, options, argv[1], negative_match) ? RZ_CMD_STATUS_OK : RZ_CMD_STATUS_ERROR; rz_sign_options_free (options); return res; } @@ -1466,43 +1466,43 @@ RZ_IPI RzCmdStatus rz_zign_space_select_handler(RzCore *core, int argc, const ch if (argc == 1) { switch (mode) { case RZ_OUTPUT_MODE_STANDARD: - spaces_list (&core->anal->zign_spaces, '\0'); + spaces_list (&core->analysis->zign_spaces, '\0'); break; case RZ_OUTPUT_MODE_JSON: - spaces_list (&core->anal->zign_spaces, 'j'); + spaces_list (&core->analysis->zign_spaces, 'j'); break; case RZ_OUTPUT_MODE_RIZIN: - spaces_list (&core->anal->zign_spaces, '*'); + spaces_list (&core->analysis->zign_spaces, '*'); break; default: return RZ_CMD_STATUS_ERROR; } } else { - rz_spaces_set (&core->anal->zign_spaces, argv[1]); + rz_spaces_set (&core->analysis->zign_spaces, argv[1]); } return RZ_CMD_STATUS_OK; } RZ_IPI RzCmdStatus rz_zign_space_delete_handler(RzCore *core, int argc, const char **argv) { if (argc == 1) { - rz_spaces_pop (&core->anal->zign_spaces); + rz_spaces_pop (&core->analysis->zign_spaces); return RZ_CMD_STATUS_OK; } if (!strcmp (argv[1], "*")) { - rz_spaces_unset (&core->anal->zign_spaces, NULL); + rz_spaces_unset (&core->analysis->zign_spaces, NULL); } else { - rz_spaces_unset (&core->anal->zign_spaces, argv[1]); + rz_spaces_unset (&core->analysis->zign_spaces, argv[1]); } return RZ_CMD_STATUS_OK; } RZ_IPI RzCmdStatus rz_zign_space_add_handler(RzCore *core, int argc, const char **argv) { - rz_spaces_push (&core->anal->zign_spaces, argv[1]); + rz_spaces_push (&core->analysis->zign_spaces, argv[1]); return RZ_CMD_STATUS_OK; } RZ_IPI RzCmdStatus rz_zign_space_rename_handler(RzCore *core, int argc, const char **argv) { - rz_spaces_rename (&core->anal->zign_spaces, NULL, argv[1]); + rz_spaces_rename (&core->analysis->zign_spaces, NULL, argv[1]); return RZ_CMD_STATUS_OK; } diff --git a/librz/core/core.c b/librz/core/core.c index 4422e1147e..3b769d2830 100644 --- a/librz/core/core.c +++ b/librz/core/core.c @@ -21,7 +21,7 @@ static ut64 letter_divs[RZ_CORE_ASMQJMPS_LEN_LETTERS - 1] = { extern bool rz_core_is_project (RzCore *core, const char *name); -static int on_fcn_new(RzAnal *_anal, void* _user, RzAnalFunction *fcn) { +static int on_fcn_new(RzAnalysis *_analysis, void* _user, RzAnalysisFunction *fcn) { RzCore *core = (RzCore*)_user; const char *cmd = rz_config_get (core->config, "cmd.fcn.new"); if (cmd && *cmd) { @@ -34,7 +34,7 @@ static int on_fcn_new(RzAnal *_anal, void* _user, RzAnalFunction *fcn) { return 0; } -static int on_fcn_delete (RzAnal *_anal, void* _user, RzAnalFunction *fcn) { +static int on_fcn_delete (RzAnalysis *_analysis, void* _user, RzAnalysisFunction *fcn) { RzCore *core = (RzCore*)_user; const char *cmd = rz_config_get (core->config, "cmd.fcn.delete"); if (cmd && *cmd) { @@ -47,7 +47,7 @@ static int on_fcn_delete (RzAnal *_anal, void* _user, RzAnalFunction *fcn) { return 0; } -static int on_fcn_rename(RzAnal *_anal, void* _user, RzAnalFunction *fcn, const char *oname) { +static int on_fcn_rename(RzAnalysis *_analysis, void* _user, RzAnalysisFunction *fcn, const char *oname) { RzCore *core = (RzCore*)_user; const char *cmd = rz_config_get (core->config, "cmd.fcn.rename"); if (cmd && *cmd) { @@ -340,18 +340,18 @@ RZ_API RzCore *rz_core_cast(void *p) { } static ut64 getref (RzCore *core, int n, char t, int type) { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, 0); RzListIter *iter; - RzAnalRef *r; + RzAnalysisRef *r; RzList *list; int i = 0; if (!fcn) { return UT64_MAX; } if (t == 'r') { - list = rz_anal_function_get_refs (fcn); + list = rz_analysis_function_get_refs (fcn); } else { - list = rz_anal_function_get_xrefs (fcn); + list = rz_analysis_function_get_xrefs (fcn); } rz_list_foreach (list, iter, r) { if (r->type == type) { @@ -368,9 +368,9 @@ static ut64 getref (RzCore *core, int n, char t, int type) { return UT64_MAX; } -static ut64 bbInstructions(RzAnalFunction *fcn, ut64 addr) { +static ut64 bbInstructions(RzAnalysisFunction *fcn, ut64 addr) { RzListIter *iter; - RzAnalBlock *bb; + RzAnalysisBlock *bb; rz_list_foreach (fcn->bbs, iter, bb) { if (RZ_BETWEEN (bb->addr, addr, bb->addr + bb->size - 1)) { return bb->ninstr; @@ -379,9 +379,9 @@ static ut64 bbInstructions(RzAnalFunction *fcn, ut64 addr) { return UT64_MAX; } -static ut64 bbBegin(RzAnalFunction *fcn, ut64 addr) { +static ut64 bbBegin(RzAnalysisFunction *fcn, ut64 addr) { RzListIter *iter; - RzAnalBlock *bb; + RzAnalysisBlock *bb; rz_list_foreach (fcn->bbs, iter, bb) { if (RZ_BETWEEN (bb->addr, addr, bb->addr + bb->size - 1)) { return bb->addr; @@ -390,9 +390,9 @@ static ut64 bbBegin(RzAnalFunction *fcn, ut64 addr) { return UT64_MAX; } -static ut64 bbJump(RzAnalFunction *fcn, ut64 addr) { +static ut64 bbJump(RzAnalysisFunction *fcn, ut64 addr) { RzListIter *iter; - RzAnalBlock *bb; + RzAnalysisBlock *bb; rz_list_foreach (fcn->bbs, iter, bb) { if (RZ_BETWEEN (bb->addr, addr, bb->addr + bb->size - 1)) { return bb->jump; @@ -401,9 +401,9 @@ static ut64 bbJump(RzAnalFunction *fcn, ut64 addr) { return UT64_MAX; } -static ut64 bbFail(RzAnalFunction *fcn, ut64 addr) { +static ut64 bbFail(RzAnalysisFunction *fcn, ut64 addr) { RzListIter *iter; - RzAnalBlock *bb; + RzAnalysisBlock *bb; rz_list_foreach (fcn->bbs, iter, bb) { if (RZ_BETWEEN (bb->addr, addr, bb->addr + bb->size - 1)) { return bb->fail; @@ -412,9 +412,9 @@ static ut64 bbFail(RzAnalFunction *fcn, ut64 addr) { return UT64_MAX; } -static ut64 bbSize(RzAnalFunction *fcn, ut64 addr) { +static ut64 bbSize(RzAnalysisFunction *fcn, ut64 addr) { RzListIter *iter; - RzAnalBlock *bb; + RzAnalysisBlock *bb; rz_list_foreach (fcn->bbs, iter, bb) { if (RZ_BETWEEN (bb->addr, addr, bb->addr + bb->size - 1)) { return bb->size; @@ -442,11 +442,11 @@ static const char *str_callback(RNum *user, ut64 off, int *ok) { static ut64 num_callback(RNum *userptr, const char *str, int *ok) { RzCore *core = (RzCore *)userptr; // XXX ? - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; char *ptr, *bptr, *out = NULL; RzFlagItem *flag; RzBinSection *s; - RzAnalOp op; + RzAnalysisOp op; ut64 ret = 0; if (ok) { @@ -465,12 +465,12 @@ static ut64 num_callback(RNum *userptr, const char *str, int *ok) { if (!off) { off = core->offset; } - RzAnalFunction *fcn = rz_anal_get_function_at (core->anal, off); + RzAnalysisFunction *fcn = rz_analysis_get_function_at (core->analysis, off); if (fcn) { if (ok) { *ok = true; } - ut64 dst = rz_anal_function_get_label (fcn, str + 1); + ut64 dst = rz_analysis_function_get_label (fcn, str + 1); if (dst == UT64_MAX) { dst = fcn->addr; } @@ -541,9 +541,9 @@ static ut64 num_callback(RNum *userptr, const char *str, int *ok) { *ok = 1; } // TODO: group analop-dependant vars after a char, so i can filter - rz_anal_op (core->anal, &op, core->offset, core->block, core->blocksize, RZ_ANAL_OP_MASK_BASIC); - rz_anal_op_fini (&op); // we don't need strings or pointers, just values, which are not nullified in fini - // XXX the above line is assuming op after fini keeps jump, fail, ptr, val, size and rz_anal_op_is_eob() + rz_analysis_op (core->analysis, &op, core->offset, core->block, core->blocksize, RZ_ANAL_OP_MASK_BASIC); + rz_analysis_op_fini (&op); // we don't need strings or pointers, just values, which are not nullified in fini + // XXX the above line is assuming op after fini keeps jump, fail, ptr, val, size and rz_analysis_op_is_eob() switch (str[1]) { case '.': // can use pc, sp, a0, a1, ... return rz_debug_reg_get (core->dbg, str + 2); @@ -605,10 +605,10 @@ static ut64 num_callback(RNum *userptr, const char *str, int *ok) { } } } else { - RzRegItem *r = rz_reg_get (core->anal->reg, bptr, -1); + RzRegItem *r = rz_reg_get (core->analysis->reg, bptr, -1); if (r) { free (bptr); - return rz_reg_get_value (core->anal->reg, r); + return rz_reg_get_value (core->analysis->reg, r); } } free (bptr); @@ -633,7 +633,7 @@ static ut64 num_callback(RNum *userptr, const char *str, int *ok) { } return UT64_MAX; } - return rz_anal_op_is_eob (&op); + return rz_analysis_op_is_eob (&op); case 'j': // $j jump address return op.jump; case 'p': // $p @@ -744,13 +744,13 @@ static ut64 num_callback(RNum *userptr, const char *str, int *ok) { case 'X': // $X nth xref return getref (core, atoi (str + 2), 'x', RZ_ANAL_REF_TYPE_CALL); case 'F': // $F function size - fcn = rz_anal_get_fcn_in (core->anal, core->offset, 0); + fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, 0); if (fcn) { switch (str[2]) { /* function bounds (uppercase) */ case 'B': return fcn->addr; // begin - case 'E': return rz_anal_function_max_addr (fcn); // end - case 'S': return (str[3]=='S') ? rz_anal_function_realsize (fcn) : rz_anal_function_linear_size (fcn); + case 'E': return rz_analysis_function_max_addr (fcn); // end + case 'S': return (str[3]=='S') ? rz_analysis_function_realsize (fcn) : rz_analysis_function_linear_size (fcn); case 'I': return fcn->ninstr; /* basic blocks (lowercase) */ case 'b': return bbBegin (fcn, core->offset); @@ -768,7 +768,7 @@ static ut64 num_callback(RNum *userptr, const char *str, int *ok) { default: if (*str >= 'A') { // NOTE: functions override flags - RzAnalFunction *fcn = rz_anal_get_function_byname (core->anal, str); + RzAnalysisFunction *fcn = rz_analysis_get_function_byname (core->analysis, str); if (fcn) { if (ok) { *ok = true; @@ -776,7 +776,7 @@ static ut64 num_callback(RNum *userptr, const char *str, int *ok) { return fcn->addr; } #if 0 - ut64 addr = rz_anal_fcn_label_get (core->anal, core->offset, str); + ut64 addr = rz_analysis_fcn_label_get (core->analysis, core->offset, str); if (addr != 0) { ret = addr; } else { @@ -1333,7 +1333,7 @@ static void autocomplete_sdb (RzCore *core, RzLineCompletion *completion, const static void autocomplete_zignatures(RzCore *core, RzLineCompletion *completion, const char* msg) { rz_return_if_fail (msg); int length = strlen (msg); - RzSpaces *zs = &core->anal->zign_spaces; + RzSpaces *zs = &core->analysis->zign_spaces; RzSpace *s; RzSpaceIter it; @@ -1368,10 +1368,10 @@ static void autocomplete_flagspaces(RzCore *core, RzLineCompletion *completion, static void autocomplete_functions (RzCore *core, RzLineCompletion *completion, const char* str) { rz_return_if_fail (str); RzListIter *iter; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; int n = strlen (str); - rz_list_foreach (core->anal->fcns, iter, fcn) { - char *name = rz_core_anal_fcn_name (core, fcn); + rz_list_foreach (core->analysis->fcns, iter, fcn) { + char *name = rz_core_analysis_fcn_name (core, fcn); if (!strncmp (name, str, n)) { rz_line_completion_push (completion, name); } @@ -1698,15 +1698,15 @@ RZ_API void rz_core_autocomplete(RZ_NULLABLE RzCore *core, RzLineCompletion *com } } else if ((!strncmp (buf->data, "afvn ", 5)) || (!strncmp (buf->data, "afan ", 5))) { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, 0); RzList *vars; if (!strncmp (buf->data, "afvn ", 5)) { - vars = rz_anal_var_list (core->anal, fcn, RZ_ANAL_VAR_KIND_BPV); + vars = rz_analysis_var_list (core->analysis, fcn, RZ_ANAL_VAR_KIND_BPV); } else { - vars = rz_list_new (); // TODO rz_anal_var_list (core->anal, fcn, RZ_ANAL_VAR_KIND_ARG); + vars = rz_list_new (); // TODO rz_analysis_var_list (core->analysis, fcn, RZ_ANAL_VAR_KIND_ARG); } const char *f_ptr, *l_ptr; - RzAnalVar *var; + RzAnalysisVar *var; int len = strlen (buf->data); f_ptr = rz_sub_str_lchr (buf->data, 0, buf->index, ' '); @@ -1724,7 +1724,7 @@ RZ_API void rz_core_autocomplete(RZ_NULLABLE RzCore *core, RzLineCompletion *com rz_list_free (vars); } else if (!strncmp (buf->data, "t ", 2) || !strncmp (buf->data, "t- ", 3)) { - SdbList *l = sdb_foreach_list (core->anal->sdb_types, true); + SdbList *l = sdb_foreach_list (core->analysis->sdb_types, true); SdbListIter *iter; SdbKv *kv; int chr = (buf->data[1] == ' ')? 2: 3; @@ -1739,7 +1739,7 @@ RZ_API void rz_core_autocomplete(RZ_NULLABLE RzCore *core, RzLineCompletion *com } ls_free (l); } else if ((!strncmp (buf->data, "te ", 3))) { - SdbList *l = sdb_foreach_list (core->anal->sdb_types, true); + SdbList *l = sdb_foreach_list (core->analysis->sdb_types, true); SdbListIter *iter; SdbKv *kv; int chr = 3; @@ -1768,7 +1768,7 @@ RZ_API void rz_core_autocomplete(RZ_NULLABLE RzCore *core, RzLineCompletion *com || !strncmp (buf->data, "tpx ", 4) || !strncmp (buf->data, "tss ", 4) || !strncmp (buf->data, "ts* ", 4)) { - SdbList *l = sdb_foreach_list (core->anal->sdb_types, true); + SdbList *l = sdb_foreach_list (core->analysis->sdb_types, true); SdbListIter *iter; SdbKv *kv; int chr = (buf->data[2] == ' ')? 3: 4; @@ -1784,8 +1784,8 @@ RZ_API void rz_core_autocomplete(RZ_NULLABLE RzCore *core, RzLineCompletion *com ls_free (l); } else if (!strncmp (buf->data, "zo ", 3) || !strncmp (buf->data, "zoz ", 4)) { - if (core->anal->zign_path && core->anal->zign_path[0]) { - char *zignpath = rz_file_abspath (core->anal->zign_path); + if (core->analysis->zign_path && core->analysis->zign_path[0]) { + char *zignpath = rz_file_abspath (core->analysis->zign_path); char *paths[2] = { zignpath, NULL }; autocompleteFilename (completion, buf, paths, 1); free (zignpath); @@ -1876,8 +1876,8 @@ static void update_sdb(RzCore *core) { return; } //SDB// anal/ - if (core->anal && core->anal->sdb) { - sdb_ns_set (DB, "anal", core->anal->sdb); + if (core->analysis && core->analysis->sdb) { + sdb_ns_set (DB, "anal", core->analysis->sdb); } //SDB// bin/ if (core->bin && core->bin->sdb) { @@ -1933,17 +1933,17 @@ static int is_string (const ut8 *buf, int size, int *len) { return 1; } -static char *rz_core_anal_hasrefs_to_depth(RzCore *core, ut64 value, int depth); -RZ_API char *rz_core_anal_hasrefs(RzCore *core, ut64 value, bool verbose) { +static char *rz_core_analysis_hasrefs_to_depth(RzCore *core, ut64 value, int depth); +RZ_API char *rz_core_analysis_hasrefs(RzCore *core, ut64 value, bool verbose) { if (verbose) { const int hex_depth = rz_config_get_i (core->config, "hex.depth"); - return rz_core_anal_hasrefs_to_depth (core, value, hex_depth); + return rz_core_analysis_hasrefs_to_depth (core, value, hex_depth); } RzFlagItem *fi = rz_flag_get_i (core->flags, value); return fi? strdup (fi->name): NULL; } -static char *rz_core_anal_hasrefs_to_depth(RzCore *core, ut64 value, int depth) { +static char *rz_core_analysis_hasrefs_to_depth(RzCore *core, ut64 value, int depth) { rz_return_val_if_fail (core, NULL); if (depth < 1 || value == UT64_MAX) { return NULL; @@ -1951,7 +1951,7 @@ static char *rz_core_anal_hasrefs_to_depth(RzCore *core, ut64 value, int depth) RzStrBuf *s = rz_strbuf_new (NULL); char *mapname = NULL; RzFlagItem *fi = rz_flag_get_i (core->flags, value); - ut64 type = rz_core_anal_address (core, value); + ut64 type = rz_core_analysis_address (core, value); if (value && value != UT64_MAX) { RzDebugMap *map = rz_debug_map_get (core->dbg, value); if (map && map->name && map->name[0]) { @@ -2005,12 +2005,12 @@ static char *rz_core_anal_hasrefs_to_depth(RzCore *core, ut64 value, int depth) rz_strbuf_appendf (s, " %s", fi->name); } } - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, value, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, value, 0); if (fcn) { rz_strbuf_appendf (s, " %s", fcn->name); } if (type) { - const char *c = rz_core_anal_optype_colorfor (core, value, true); + const char *c = rz_core_analysis_optype_colorfor (core, value, true); const char *cend = (c && *c) ? Color_RESET: ""; if (!c) { c = ""; @@ -2102,7 +2102,7 @@ static char *rz_core_anal_hasrefs_to_depth(RzCore *core, ut64 value, int depth) rz_io_read_at (core->io, value, buf, sizeof (buf)); ut64 n = (core->rasm->bits == 64)? *n64: *n32; if(n != value) { - char* rrstr = rz_core_anal_hasrefs_to_depth (core, n, depth-1); + char* rrstr = rz_core_analysis_hasrefs_to_depth (core, n, depth-1); if (rrstr) { if (rrstr[0]) { rz_strbuf_appendf (s, " --> %s", rrstr); @@ -2115,10 +2115,10 @@ static char *rz_core_anal_hasrefs_to_depth(RzCore *core, ut64 value, int depth) return rz_strbuf_drain (s); } -RZ_API char *rz_core_anal_get_comments(RzCore *core, ut64 addr) { +RZ_API char *rz_core_analysis_get_comments(RzCore *core, ut64 addr) { if (core) { - const char *type = rz_meta_get_string (core->anal, RZ_META_TYPE_VARTYPE, addr); - const char *cmt = rz_meta_get_string (core->anal, RZ_META_TYPE_COMMENT, addr); + const char *type = rz_meta_get_string (core->analysis, RZ_META_TYPE_VARTYPE, addr); + const char *cmt = rz_meta_get_string (core->analysis, RZ_META_TYPE_COMMENT, addr); if (type && cmt) { return rz_str_newf ("%s %s", type, cmt); } else if (type) { @@ -2130,7 +2130,7 @@ RZ_API char *rz_core_anal_get_comments(RzCore *core, ut64 addr) { return NULL; } -RZ_API const char *rz_core_anal_optype_colorfor(RzCore *core, ut64 addr, bool verbose) { +RZ_API const char *rz_core_analysis_optype_colorfor(RzCore *core, ut64 addr, bool verbose) { ut64 type; if (!(core->print->flags & RZ_PRINT_FLAGS_COLOR)) { return NULL; @@ -2138,7 +2138,7 @@ RZ_API const char *rz_core_anal_optype_colorfor(RzCore *core, ut64 addr, bool ve if (!rz_config_get_i (core->config, "scr.color")) { return NULL; } - type = rz_core_anal_address (core, addr); + type = rz_core_analysis_address (core, addr); if (type & RZ_ANAL_ADDR_TYPE_EXEC) { return core->cons->context->pal.ai_exec; //Color_RED; } @@ -2172,16 +2172,16 @@ static int mywrite(const ut8 *buf, int len) { } static bool exists_var(RzPrint *print, ut64 func_addr, char *str) { - RzAnal *anal = ((RzCore*)(print->user))->anal; - RzAnalFunction *fcn = rz_anal_get_function_at (anal, func_addr); + RzAnalysis *analysis = ((RzCore*)(print->user))->analysis; + RzAnalysisFunction *fcn = rz_analysis_get_function_at (analysis, func_addr); if (!fcn) { return false; } - return !!rz_anal_function_get_var_byname (fcn, str); + return !!rz_analysis_function_get_var_byname (fcn, str); } -static bool rz_core_anal_read_at(struct rz_anal_t *anal, ut64 addr, ut8 *buf, int len) { - return rz_io_read_at (anal->iob.io, addr, buf, len); +static bool rz_core_analysis_read_at(struct rz_analysis_t *analysis, ut64 addr, ut8 *buf, int len) { + return rz_io_read_at (analysis->iob.io, addr, buf, len); } static void rz_core_break (RzCore *core) { @@ -2271,11 +2271,11 @@ static void __init_autocomplete(RzCore* core) { } static const char *colorfor_cb(void *user, ut64 addr, bool verbose) { - return rz_core_anal_optype_colorfor ((RzCore *)user, addr, verbose); + return rz_core_analysis_optype_colorfor ((RzCore *)user, addr, verbose); } static char *hasrefs_cb(void *user, ut64 addr, bool verbose) { - return rz_core_anal_hasrefs ((RzCore *)user, addr, verbose); + return rz_core_analysis_hasrefs ((RzCore *)user, addr, verbose); } static const char *get_section_name(void *user, ut64 addr) { @@ -2283,7 +2283,7 @@ static const char *get_section_name(void *user, ut64 addr) { } static char *get_comments_cb(void *user, ut64 addr) { - return rz_core_anal_get_comments ((RzCore *)user, addr); + return rz_core_analysis_get_comments ((RzCore *)user, addr); } static RzFlagItem *core_flg_class_set(RzFlag *f, const char *name, ut64 addr, ut32 size) { @@ -2344,7 +2344,7 @@ static void ev_iowrite_cb(RzEvent *ev, int type, void *user, void *data) { RzCore *core = user; RzEventIOWrite *iow = data; if (rz_config_get_i (core->config, "anal.detectwrites")) { - rz_anal_update_analysis_range (core->anal, iow->addr, iow->len); + rz_analysis_update_analysis_range (core->analysis, iow->addr, iow->len); if (core->cons->event_resize && core->cons->event_data) { // Force a reload of the graph core->cons->event_resize (core->cons->event_data); @@ -2450,21 +2450,21 @@ RZ_API bool rz_core_init(RzCore *core) { core->rasm = rz_asm_new (); core->rasm->num = core->num; rz_asm_set_user_ptr (core->rasm, core); - core->anal = rz_anal_new (); + core->analysis = rz_analysis_new (); core->gadgets = rz_list_newf ((RzListFree)rz_core_gadget_free); - core->anal->ev = core->ev; - core->anal->read_at = rz_core_anal_read_at; - core->anal->flag_get = rz_core_flag_get_by_spaces; - core->anal->cb.on_fcn_new = on_fcn_new; - core->anal->cb.on_fcn_delete = on_fcn_delete; - core->anal->cb.on_fcn_rename = on_fcn_rename; - core->print->sdb_types = core->anal->sdb_types; - core->rasm->syscall = rz_syscall_ref (core->anal->syscall); // BIND syscall anal/asm - rz_anal_set_user_ptr (core->anal, core); - core->anal->cb_printf = (void *) rz_cons_printf; + core->analysis->ev = core->ev; + core->analysis->read_at = rz_core_analysis_read_at; + core->analysis->flag_get = rz_core_flag_get_by_spaces; + core->analysis->cb.on_fcn_new = on_fcn_new; + core->analysis->cb.on_fcn_delete = on_fcn_delete; + core->analysis->cb.on_fcn_rename = on_fcn_rename; + core->print->sdb_types = core->analysis->sdb_types; + core->rasm->syscall = rz_syscall_ref (core->analysis->syscall); // BIND syscall anal/asm + rz_analysis_set_user_ptr (core->analysis, core); + core->analysis->cb_printf = (void *) rz_cons_printf; core->parser = rz_parse_new (); - rz_anal_bind (core->anal, &(core->parser->analb)); - core->parser->varlist = rz_anal_function_get_var_fields; + rz_analysis_bind (core->analysis, &(core->parser->analb)); + core->parser->varlist = rz_analysis_function_get_var_fields; /// XXX shouhld be using coreb rz_parse_set_user_ptr (core->parser, core); core->bin = rz_bin_new (); @@ -2490,22 +2490,22 @@ RZ_API bool rz_core_init(RzCore *core) { } rz_bin_bind (core->bin, &(core->rasm->binb)); - rz_bin_bind (core->bin, &(core->anal->binb)); - rz_bin_bind (core->bin, &(core->anal->binb)); + rz_bin_bind (core->bin, &(core->analysis->binb)); + rz_bin_bind (core->bin, &(core->analysis->binb)); rz_io_bind (core->io, &(core->search->iob)); rz_io_bind (core->io, &(core->print->iob)); - rz_io_bind (core->io, &(core->anal->iob)); + rz_io_bind (core->io, &(core->analysis->iob)); rz_io_bind (core->io, &(core->bin->iob)); - rz_flag_bind (core->flags, &(core->anal->flb)); - core->anal->flg_class_set = core_flg_class_set; - core->anal->flg_class_get = core_flg_class_get; - core->anal->flg_fcn_set = core_flg_fcn_set; - rz_anal_bind (core->anal, &(core->parser->analb)); + rz_flag_bind (core->flags, &(core->analysis->flb)); + core->analysis->flg_class_set = core_flg_class_set; + core->analysis->flg_class_get = core_flg_class_get; + core->analysis->flg_fcn_set = core_flg_fcn_set; + rz_analysis_bind (core->analysis, &(core->parser->analb)); core->parser->flag_get = rz_core_flag_get_by_spaces; - core->parser->label_get = rz_anal_function_get_label_at; + core->parser->label_get = rz_analysis_function_get_label_at; - rz_core_bind (core, &(core->anal->coreb)); + rz_core_bind (core, &(core->analysis->coreb)); core->file = NULL; core->files = rz_list_newf ((RzListFree)rz_core_file_free); @@ -2519,11 +2519,11 @@ RZ_API bool rz_core_init(RzCore *core) { rz_core_bind (core, &core->dbg->corebind); rz_core_bind (core, &core->dbg->bp->corebind); rz_core_bind (core, &core->io->corebind); - core->dbg->anal = core->anal; // XXX: dupped instance.. can cause lost pointerz + core->dbg->analysis = core->analysis; // XXX: dupped instance.. can cause lost pointerz //rz_debug_use (core->dbg, "native"); // XXX pushing uninitialized regstate results in trashed reg values // rz_reg_arena_push (core->dbg->reg); // create a 2 level register state stack -// core->dbg->anal->reg = core->anal->reg; // XXX: dupped instance.. can cause lost pointerz +// core->dbg->analysis->reg = core->analysis->reg; // XXX: dupped instance.. can cause lost pointerz core->io->cb_printf = rz_cons_printf; core->dbg->cb_printf = rz_cons_printf; core->dbg->bp->cb_printf = rz_cons_printf; @@ -2536,7 +2536,7 @@ RZ_API bool rz_core_init(RzCore *core) { // TODO: get arch from rz_bin or from native arch rz_asm_use (core->rasm, RZ_SYS_ARCH); - rz_anal_use (core->anal, RZ_SYS_ARCH); + rz_analysis_use (core->analysis, RZ_SYS_ARCH); if (RZ_SYS_BITS & RZ_SYS_BITS_64) { rz_config_set_i (core->config, "asm.bits", 64); } else { @@ -2545,7 +2545,7 @@ RZ_API bool rz_core_init(RzCore *core) { } } rz_config_set (core->config, "asm.arch", RZ_SYS_ARCH); - rz_bp_use (core->dbg->bp, RZ_SYS_ARCH, core->anal->bits); + rz_bp_use (core->dbg->bp, RZ_SYS_ARCH, core->analysis->bits); update_sdb (core); { char *a = rz_str_rz_prefix (RZ_FLAGS); @@ -2556,7 +2556,7 @@ RZ_API bool rz_core_init(RzCore *core) { free (a); } } - rz_core_anal_type_init (core); + rz_core_analysis_type_init (core); __init_autocomplete (core); return 0; } @@ -2618,7 +2618,7 @@ RZ_API void rz_core_fini(RzCore *c) { rz_core_task_scheduler_fini (&c->tasks); c->rcmd = rz_cmd_free (c->rcmd); rz_list_free (c->cmd_descriptors); - c->anal = rz_anal_free (c->anal); + c->analysis = rz_analysis_free (c->analysis); rz_asm_free (c->rasm); c->rasm = NULL; c->print = rz_print_free (c->print); @@ -2912,11 +2912,11 @@ RZ_API char *rz_core_op_str(RzCore *core, ut64 addr) { return str; } -RZ_API RzAnalOp *rz_core_op_anal(RzCore *core, ut64 addr, RzAnalOpMask mask) { +RZ_API RzAnalysisOp *rz_core_op_anal(RzCore *core, ut64 addr, RzAnalysisOpMask mask) { ut8 buf[64]; - RzAnalOp *op = RZ_NEW (RzAnalOp); + RzAnalysisOp *op = RZ_NEW (RzAnalysisOp); rz_io_read_at (core->io, addr, buf, sizeof (buf)); - rz_anal_op (core->anal, op, addr, buf, sizeof (buf), mask); + rz_analysis_op (core->analysis, op, addr, buf, sizeof (buf), mask); return op; } @@ -3343,12 +3343,12 @@ RZ_API RzBuffer *rz_core_syscall (RzCore *core, const char *name, const char *ar int num; //arch check - if (strcmp (core->anal->cur->arch, "x86")) { + if (strcmp (core->analysis->cur->arch, "x86")) { eprintf ("architecture not yet supported!\n"); return 0; } - num = rz_syscall_get_num (core->anal->syscall, name); + num = rz_syscall_get_num (core->analysis->syscall, name); //bits check switch (core->rasm->bits) { diff --git a/librz/core/disasm.c b/librz/core/disasm.c index 4b1a70b43b..dcad1585ce 100644 --- a/librz/core/disasm.c +++ b/librz/core/disasm.c @@ -233,7 +233,7 @@ typedef struct { const char *color_func_var_addr; RzFlagItem *lastflag; - RzAnalHint *hint; + RzAnalysisHint *hint; RzPrint *print; ut64 esil_old_pc; @@ -258,9 +258,9 @@ typedef struct { char chref; bool retry; RzAsmOp asmop; - RzAnalOp analop; - RzAnalFunction *fcn; - RzAnalFunction *pdf; + RzAnalysisOp analop; + RzAnalysisFunction *fcn; + RzAnalysisFunction *pdf; const ut8 *buf; int len; int maxrefs; @@ -278,7 +278,7 @@ typedef struct { bool showpayloads; bool showrelocs; int cmtcount; - bool asm_anal; + bool asm_analysis; ut64 printed_str_addr; ut64 printed_flag_addr; ut64 min_ref_addr; @@ -325,7 +325,7 @@ static void ds_print_trace(RDisasmState *ds); static void ds_print_opstr(RDisasmState *ds); static void ds_print_color_reset(RDisasmState *ds); static int ds_print_middle(RDisasmState *ds, int ret); -static bool ds_print_labels(RDisasmState *ds, RzAnalFunction *f); +static bool ds_print_labels(RDisasmState *ds, RzAnalysisFunction *f); static void ds_print_sysregs(RDisasmState *ds); static void ds_print_fcn_name(RDisasmState *ds); static void ds_print_as_string(RDisasmState *ds); @@ -352,11 +352,11 @@ RZ_API ut64 rz_core_pava (RzCore *core, ut64 addr) { return addr; } -static RzAnalFunction *fcnIn(RDisasmState *ds, ut64 at, int type) { - if (ds->fcn && rz_anal_function_contains (ds->fcn, at)) { +static RzAnalysisFunction *fcnIn(RDisasmState *ds, ut64 at, int type) { + if (ds->fcn && rz_analysis_function_contains (ds->fcn, at)) { return ds->fcn; } - return rz_anal_get_fcn_in (ds->core->anal, at, type); + return rz_analysis_get_fcn_in (ds->core->analysis, at, type); } static const char *get_utf8_char(const char line, RDisasmState *ds) { @@ -415,7 +415,7 @@ static void ds_print_ref_lines(char *line, char *line_col, RDisasmState *ds) { } } -static void get_bits_comment(RzCore *core, RzAnalFunction *f, char *cmt, int cmt_size) { +static void get_bits_comment(RzCore *core, RzAnalysisFunction *f, char *cmt, int cmt_size) { if (core && f && cmt && cmt_size > 0 && f->bits && f->bits != core->rasm->bits) { const char *asm_arch = rz_config_get (core->config, "asm.arch"); if (asm_arch && *asm_arch && strstr (asm_arch, "arm")) { @@ -540,18 +540,18 @@ static void ds_print_esil_anal_fini(RDisasmState *ds) { RzCore *core = ds->core; if (ds->show_emu && ds->esil_regstate) { RzCore* core = ds->core; - core->anal->last_disasm_reg = rz_reg_arena_peek (core->anal->reg); - const char *pc = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_PC); - RzRegSet *regset = rz_reg_regset_get (ds->core->anal->reg, RZ_REG_TYPE_GPR); + core->analysis->last_disasm_reg = rz_reg_arena_peek (core->analysis->reg); + const char *pc = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_PC); + RzRegSet *regset = rz_reg_regset_get (ds->core->analysis->reg, RZ_REG_TYPE_GPR); if (ds->esil_regstate_size == regset->arena->size) { - rz_reg_arena_poke (core->anal->reg, ds->esil_regstate); + rz_reg_arena_poke (core->analysis->reg, ds->esil_regstate); } - rz_reg_setv (core->anal->reg, pc, ds->esil_old_pc); + rz_reg_setv (core->analysis->reg, pc, ds->esil_old_pc); RZ_FREE (ds->esil_regstate); } - if (core && core->anal && core->anal->esil) { + if (core && core->analysis && core->analysis->esil) { // make sure to remove reference to ds to avoid UAF - core->anal->esil->user = NULL; + core->analysis->esil->user = NULL; } } @@ -611,7 +611,7 @@ static RDisasmState * ds_init(RzCore *core) { const char *ah = rz_config_get (core->config, "asm.highlight"); ds->asm_highlight = (ah && *ah)? rz_num_math (core->num, ah): UT64_MAX; } - ds->asm_anal = rz_config_get_i (core->config, "asm.anal"); + ds->asm_analysis = rz_config_get_i (core->config, "asm.anal"); ds->show_color = rz_config_get_i (core->config, "scr.color"); ds->show_color_bytes = rz_config_get_i (core->config, "scr.color.bytes"); // maybe rename to asm.color.bytes ds->show_color_args = rz_config_get_i (core->config, "scr.color.args"); @@ -689,7 +689,7 @@ static RDisasmState * ds_init(RzCore *core) { // TODO: initialize fake stack in here const char *uri = "malloc://32K"; ut64 size = rz_num_get (core->num, "32K"); - ut64 addr = rz_reg_getv (core->anal->reg, "SP") - (size / 2); + ut64 addr = rz_reg_getv (core->analysis->reg, "SP") - (size / 2); emustack_min = addr; emustack_max = addr + size; ds->stackFd = rz_io_fd_open (core->io, uri, RZ_PERM_RW, 0); @@ -702,7 +702,7 @@ static RDisasmState * ds_init(RzCore *core) { rz_io_map_set_name (map, "fake.stack"); } } - ds->stackptr = core->anal->stackptr; + ds->stackptr = core->analysis->stackptr; ds->show_offseg = rz_config_get_i (core->config, "asm.segoff"); ds->show_flags = rz_config_get_i (core->config, "asm.flags"); ds->show_bytes = rz_config_get_i (core->config, "asm.bytes"); @@ -838,27 +838,27 @@ static RDisasmState * ds_init(RzCore *core) { static ut64 lastaddr = UT64_MAX; static void ds_reflines_fini(RDisasmState *ds) { - RzAnal *anal = ds->core->anal; - rz_list_free (anal->reflines); - anal->reflines = NULL; + RzAnalysis *analysis = ds->core->analysis; + rz_list_free (analysis->reflines); + analysis->reflines = NULL; RZ_FREE (ds->refline); RZ_FREE (ds->refline2); RZ_FREE (ds->prev_line_col); } static void ds_reflines_init(RDisasmState *ds) { - RzAnal *anal = ds->core->anal; + RzAnalysis *analysis = ds->core->analysis; lastaddr = UT64_MAX; if (ds->show_lines_bb || ds->pj) { ds_reflines_fini (ds); - anal->reflines = rz_anal_reflines_get (anal, + analysis->reflines = rz_analysis_reflines_get (analysis, ds->addr, ds->buf, ds->len, ds->l, ds->linesout, ds->show_lines_call); } else { - rz_list_free (anal->reflines); - anal->reflines = NULL; + rz_list_free (analysis->reflines); + analysis->reflines = NULL; } } @@ -874,8 +874,8 @@ static void ds_free(RDisasmState *ds) { } } rz_asm_op_fini (&ds->asmop); - rz_anal_op_fini (&ds->analop); - rz_anal_hint_free (ds->hint); + rz_analysis_op_fini (&ds->analop); + rz_analysis_hint_free (ds->hint); ds_print_esil_anal_fini (ds); ds_reflines_fini (ds); ds_print_esil_anal_fini (ds); @@ -896,9 +896,9 @@ static void ds_free(RDisasmState *ds) { /* XXX move to rz_print */ static char *colorize_asm_string(RzCore *core, RDisasmState *ds, bool print_color) { char *source = ds->opstr? ds->opstr: rz_asm_op_get_asm (&ds->asmop); - const char *hlstr = rz_meta_get_string (ds->core->anal, RZ_META_TYPE_HIGHLIGHT, ds->at); + const char *hlstr = rz_meta_get_string (ds->core->analysis, RZ_META_TYPE_HIGHLIGHT, ds->at); bool partial_reset = line_highlighted (ds) ? true : ((hlstr && *hlstr) ? true : false); - RzAnalFunction *f = ds->show_color_args ? fcnIn (ds, ds->vat, RZ_ANAL_FCN_TYPE_NULL) : NULL; + RzAnalysisFunction *f = ds->show_color_args ? fcnIn (ds, ds->vat, RZ_ANAL_FCN_TYPE_NULL) : NULL; if (!ds->show_color || !ds->colorop) { return strdup (source); @@ -933,7 +933,7 @@ static char *colorize_asm_string(RzCore *core, RDisasmState *ds, bool print_colo static bool ds_must_strip(RDisasmState *ds) { if (ds && ds->strip && *ds->strip) { - const char * optype = rz_anal_optype_to_string (ds->analop.type); + const char * optype = rz_analysis_optype_to_string (ds->analop.type); if (optype && *optype) { return strstr (ds->strip, optype); } @@ -949,10 +949,10 @@ static void ds_highlight_word(RDisasmState * ds, char *word, char *color) { } static void __replaceImports(RDisasmState *ds) { - if (ds->core->anal->imports) { + if (ds->core->analysis->imports) { char *imp; RzListIter *iter; - rz_list_foreach (ds->core->anal->imports, iter, imp) { + rz_list_foreach (ds->core->analysis->imports, iter, imp) { ds->opstr = rz_str_replace (ds->opstr, imp, ".", 1); } } @@ -968,20 +968,20 @@ static void __replaceImports(RDisasmState *ds) { static char *get_op_ireg (void *user, ut64 addr) { RzCore *core = (RzCore *)user; char *res = NULL; - RzAnalOp *op = rz_core_anal_op (core, addr, 0); + RzAnalysisOp *op = rz_core_analysis_op (core, addr, 0); if (op && op->ireg) { res = strdup (op->ireg); } - rz_anal_op_free (op); + rz_analysis_op_free (op); return res; } -static st64 get_ptr_at(RzAnalFunction *fcn, st64 delta, ut64 addr) { - return rz_anal_function_get_var_stackptr_at (fcn, delta, addr); +static st64 get_ptr_at(RzAnalysisFunction *fcn, st64 delta, ut64 addr) { + return rz_analysis_function_get_var_stackptr_at (fcn, delta, addr); } -static const char *get_reg_at(RzAnalFunction *fcn, st64 delta, ut64 addr) { - return rz_anal_function_get_var_reg_at (fcn, delta, addr); +static const char *get_reg_at(RzAnalysisFunction *fcn, st64 delta, ut64 addr) { + return rz_analysis_function_get_var_reg_at (fcn, delta, addr); } static void ds_build_op_str(RDisasmState *ds, bool print_color) { @@ -997,7 +997,7 @@ static void ds_build_op_str(RDisasmState *ds, bool print_color) { } if (ds->decode) { free (ds->opstr); - ds->opstr = rz_anal_op_to_string (core->anal, &ds->analop); + ds->opstr = rz_analysis_op_to_string (core->analysis, &ds->analop); return; } if (!ds->opstr) { @@ -1015,7 +1015,7 @@ static void ds_build_op_str(RDisasmState *ds, bool print_color) { } if (ds->subvar && ds->opstr) { ut64 at = ds->vat; - RzAnalFunction *f = fcnIn (ds, at, RZ_ANAL_FCN_TYPE_NULL); + RzAnalysisFunction *f = fcnIn (ds, at, RZ_ANAL_FCN_TYPE_NULL); core->parser->get_op_ireg = get_op_ireg; core->parser->get_ptr_at = get_ptr_at; core->parser->get_reg_at = get_reg_at; @@ -1026,9 +1026,9 @@ static void ds_build_op_str(RDisasmState *ds, bool print_color) { ds->opstr = strdup (ds->strsub); } if (core->parser->subrel) { - RzList *list = rz_anal_refs_get (core->anal, at); + RzList *list = rz_analysis_refs_get (core->analysis, at); RzListIter *iter; - RzAnalRef *ref; + RzAnalysisRef *ref; rz_list_foreach (list, iter, ref) { if ((ref->type == RZ_ANAL_REF_TYPE_DATA || ref->type == RZ_ANAL_REF_TYPE_STRING) @@ -1122,7 +1122,7 @@ static void ds_build_op_str(RDisasmState *ds, bool print_color) { int i = 0; char *word = NULL; char *bgcolor = NULL; - const char *wcdata = rz_meta_get_string (ds->core->anal, RZ_META_TYPE_HIGHLIGHT, ds->at); + const char *wcdata = rz_meta_get_string (ds->core->analysis, RZ_META_TYPE_HIGHLIGHT, ds->at); int argc = 0; char **wc_array = rz_str_argv (wcdata, &argc); for (i = 0; i < argc; i++) { @@ -1133,10 +1133,10 @@ static void ds_build_op_str(RDisasmState *ds, bool print_color) { } } -RZ_API RzAnalHint *rz_core_hint_begin(RzCore *core, RzAnalHint* hint, ut64 at) { +RZ_API RzAnalysisHint *rz_core_hint_begin(RzCore *core, RzAnalysisHint* hint, ut64 at) { static char *hint_syntax = NULL; - rz_anal_hint_free (hint); - hint = rz_anal_hint_get (core->anal, at); + rz_analysis_hint_free (hint); + hint = rz_analysis_hint_get (core->analysis, at); if (hint_syntax) { rz_config_set (core->config, "asm.syntax", hint_syntax); hint_syntax = NULL; @@ -1153,11 +1153,11 @@ RZ_API RzAnalHint *rz_core_hint_begin(RzCore *core, RzAnalHint* hint, ut64 at) { /* TODO: do something here */ } } - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, at, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, at, 0); if (fcn) { if (fcn->bits == 16 || fcn->bits == 32) { if (!hint) { - hint = RZ_NEW0 (RzAnalHint); + hint = RZ_NEW0 (RzAnalysisHint); } hint->bits = fcn->bits; hint->new_bits = fcn->bits; @@ -1182,11 +1182,11 @@ static void ds_begin_line(RDisasmState *ds) { if (ds->pj) { pj_o (ds->pj); pj_kn (ds->pj, "offset", ds->vat); - if (ds->core->anal->reflines) { - RzAnalRefline *ref; + if (ds->core->analysis->reflines) { + RzAnalysisRefline *ref; RzListIter *iter; // XXX Probably expensive - rz_list_foreach (ds->core->anal->reflines, iter, ref) { + rz_list_foreach (ds->core->analysis->reflines, iter, ref) { if (ref->from == ds->vat) { pj_kn (ds->pj, "arrow", ref->to); break; @@ -1224,10 +1224,10 @@ static void ds_begin_cont(RDisasmState *ds) { ds_begin_line (ds); ds_setup_print_pre (ds, false, false); if (!ds->linesright && ds->show_lines_bb && ds->line) { - RzAnalRefStr *refstr = rz_anal_reflines_str (ds->core, ds->at, + RzAnalysisRefStr *refstr = rz_analysis_reflines_str (ds->core, ds->at, ds->linesopts | RZ_ANAL_REFLINE_TYPE_MIDDLE_AFTER); ds_print_ref_lines (refstr->str, refstr->cols, ds); - rz_anal_reflines_str_free (refstr); + rz_analysis_reflines_str_free (refstr); } } @@ -1241,16 +1241,16 @@ static void ds_begin_comment(RDisasmState *ds) { } static void ds_show_refs(RDisasmState *ds) { - RzAnalRef *ref; + RzAnalysisRef *ref; RzListIter *iter; if (!ds->show_cmtrefs) { return; } - RzList *list = rz_anal_xrefs_get_from (ds->core->anal, ds->at); + RzList *list = rz_analysis_xrefs_get_from (ds->core->analysis, ds->at); rz_list_foreach (list, iter, ref) { - const char *cmt = rz_meta_get_string (ds->core->anal, RZ_META_TYPE_COMMENT, ref->addr); + const char *cmt = rz_meta_get_string (ds->core->analysis, RZ_META_TYPE_COMMENT, ref->addr); const RzList *fls = rz_flag_get_list (ds->core->flags, ref->addr); RzListIter *iter2; RzFlagItem *fis; @@ -1268,12 +1268,12 @@ static void ds_show_refs(RDisasmState *ds) { ds_comment (ds, true, "; (%s)", cmt); } if (ref->type & RZ_ANAL_REF_TYPE_CALL) { - RzAnalOp aop; + RzAnalysisOp aop; ut8 buf[12]; rz_io_read_at (ds->core->io, ref->at, buf, sizeof (buf)); - rz_anal_op (ds->core->anal, &aop, ref->at, buf, sizeof (buf), RZ_ANAL_OP_MASK_ALL); + rz_analysis_op (ds->core->analysis, &aop, ref->at, buf, sizeof (buf), RZ_ANAL_OP_MASK_ALL); if ((aop.type & RZ_ANAL_OP_TYPE_MASK) == RZ_ANAL_OP_TYPE_UCALL) { - RzAnalFunction * fcn = rz_anal_get_function_at (ds->core->anal, ref->addr); + RzAnalysisFunction * fcn = rz_analysis_get_function_at (ds->core->analysis, ref->addr); ds_begin_comment (ds); if (fcn) { ds_comment (ds, true, "; %s", fcn->name); @@ -1288,7 +1288,7 @@ static void ds_show_refs(RDisasmState *ds) { } static void ds_show_xrefs(RDisasmState *ds) { - RzAnalRef *refi; + RzAnalysisRef *refi; RzListIter *iter, *it; RzCore *core = ds->core; char *name, *realname; @@ -1297,7 +1297,7 @@ static void ds_show_xrefs(RDisasmState *ds) { return; } /* show xrefs */ - RzList *xrefs = rz_anal_xrefs_get (core->anal, ds->at); + RzList *xrefs = rz_analysis_xrefs_get (core->analysis, ds->at); if (!xrefs) { return; } @@ -1326,7 +1326,7 @@ static void ds_show_xrefs(RDisasmState *ds) { ds_comment (ds, false, "%s; XREFS: ", ds->show_color? ds->pal_comment: ""); rz_list_foreach (xrefs, iter, refi) { ds_comment (ds, false, "%s 0x%08"PFMT64x" ", - rz_anal_xrefs_type_tostring (refi->type), refi->addr); + rz_analysis_xrefs_type_tostring (refi->type), refi->addr); if (count == cols) { if (iter->n) { ds_print_color_reset (ds); @@ -1347,7 +1347,7 @@ static void ds_show_xrefs(RDisasmState *ds) { } RzList *addrs = rz_list_newf (free); - RzAnalFunction *fun, *next_fun; + RzAnalysisFunction *fun, *next_fun; RzFlagItem *f, *next_f; rz_list_foreach (xrefs, iter, refi) { if (!ds->asm_xrefs_code && refi->type == RZ_ANAL_REF_TYPE_CODE) { @@ -1358,8 +1358,8 @@ static void ds_show_xrefs(RDisasmState *ds) { fun = fcnIn (ds, refi->addr, -1); if (fun) { if (iter != xrefs->tail) { - ut64 next_addr = ((RzAnalRef *)(iter->n->data))->addr; - next_fun = rz_anal_get_fcn_in (core->anal, next_addr, -1); + ut64 next_addr = ((RzAnalysisRef *)(iter->n->data))->addr; + next_fun = rz_analysis_get_fcn_in (core->analysis, next_addr, -1); if (next_fun && next_fun->addr == fun->addr) { rz_list_append (addrs, rz_num_dup (refi->addr)); continue; @@ -1377,7 +1377,7 @@ static void ds_show_xrefs(RDisasmState *ds) { f = rz_flag_get_at (core->flags, refi->addr, true); if (f) { if (iter != xrefs->tail) { - ut64 next_addr = ((RzAnalRef *)(iter->n->data))->addr; + ut64 next_addr = ((RzAnalysisRef *)(iter->n->data))->addr; next_f = rz_flag_get_at (core->flags, next_addr, true); if (next_f && f->offset == next_f->offset) { rz_list_append (addrs, rz_num_dup (refi->addr - f->offset)); @@ -1406,7 +1406,7 @@ static void ds_show_xrefs(RDisasmState *ds) { const char* plural = rz_list_length (addrs) > 1 ? "S" : ""; const char* plus = fun ? "" : "+"; ds_comment (ds, false, "%s; %s XREF%s from %s @ ", - COLOR (ds, pal_comment), rz_anal_xrefs_type_tostring (refi->type), plural, + COLOR (ds, pal_comment), rz_analysis_xrefs_type_tostring (refi->type), plural, realname ? realname : name); ut64 *addrptr; rz_list_foreach (addrs, it, addrptr) { @@ -1414,7 +1414,7 @@ static void ds_show_xrefs(RDisasmState *ds) { ds_comment (ds, false, "%s%s0x%"PFMT64x, it == addrs->head ? "" : ", ", plus, *addrptr); } } - if (realname && (!fun || rz_anal_get_function_at (core->anal, ds->at))) { + if (realname && (!fun || rz_analysis_get_function_at (core->analysis, ds->at))) { const char *pad = ds->show_comment_right ? "" : " "; if (!ds->show_comment_right) { ds_newline (ds); @@ -1535,14 +1535,14 @@ static int handleMidFlags(RzCore *core, RDisasmState *ds, bool print) { static int handleMidBB(RzCore *core, RDisasmState *ds) { int i; ds->hasMidbb = false; - rz_return_val_if_fail (core->anal, 0); + rz_return_val_if_fail (core->analysis, 0); // Unfortunately, can't just check the addr of the last insn byte since // a bb (and fcn) can be as small as 1 byte, and advancing i based on // bb->size is unsound if basic blocks can nest or overlap for (i = 1; i < ds->oplen; i++) { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, ds->at + i, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, ds->at + i, 0); if (fcn) { - RzAnalBlock *bb = rz_anal_fcn_bbget_in (core->anal, fcn, ds->at + i); + RzAnalysisBlock *bb = rz_analysis_fcn_bbget_in (core->analysis, fcn, ds->at + i); if (bb && bb->addr > ds->at) { ds->hasMidbb = true; return bb->addr - ds->at; @@ -1627,15 +1627,15 @@ static void ds_pre_xrefs(RDisasmState *ds, bool no_fcnlines) { } //TODO: this function is a temporary fix. All analysis should be based on realsize. However, now for same architectures realisze is not used -static ut32 tmp_get_realsize (RzAnalFunction *f) { - ut32 size = rz_anal_function_realsize (f); - return (size > 0) ? size : rz_anal_function_linear_size (f); +static ut32 tmp_get_realsize (RzAnalysisFunction *f) { + ut32 size = rz_analysis_function_realsize (f); + return (size > 0) ? size : rz_analysis_function_linear_size (f); } -static void ds_show_functions_argvar(RDisasmState *ds, RzAnalFunction *fcn, RzAnalVar *var, const char *base, bool is_var, char sign) { +static void ds_show_functions_argvar(RDisasmState *ds, RzAnalysisFunction *fcn, RzAnalysisVar *var, const char *base, bool is_var, char sign) { int delta = var->kind == 'b' ? RZ_ABS (var->delta + fcn->bp_off) : RZ_ABS (var->delta); const char *pfx = is_var ? "var" : "arg"; - char *constr = rz_anal_var_get_constraints_readable (var); + char *constr = rz_analysis_var_get_constraints_readable (var); rz_cons_printf ("%s%s %s%s%s%s %s%s%s%s@ %s%c0x%x", COLOR_ARG (ds, color_func_var), pfx, COLOR_ARG (ds, color_func_var_type), var->type, rz_str_endswith (var->type, "*") ? "" : " ", @@ -1657,7 +1657,7 @@ static void ds_show_functions_argvar(RDisasmState *ds, RzAnalFunction *fcn, RzAn static void printVarSummary(RDisasmState *ds, RzList *list) { const char *numColor = ds->core->cons->context->pal.num; - RzAnalVar *var; + RzAnalysisVar *var; RzListIter *iter; int bp_vars = 0; int sp_vars = 0; @@ -1749,7 +1749,7 @@ static bool empty_signature(const char *s) { } static void ds_show_functions(RDisasmState *ds) { - RzAnalFunction *f; + RzAnalysisFunction *f; RzCore *core = ds->core; char *fcn_name; bool fcn_name_alloc = false; // whether fcn_name needs to be freed by this function @@ -1762,7 +1762,7 @@ static void ds_show_functions(RDisasmState *ds) { bool showSig = ds->show_fcnsig && ds->show_calls; bool call = rz_config_get_i (core->config, "asm.calls"); const char *lang = demangle ? rz_config_get (core->config, "bin.lang") : NULL; - f = rz_anal_get_function_at (core->anal, ds->at); + f = rz_analysis_get_function_at (core->analysis, ds->at); if (!f) { return; } @@ -1778,7 +1778,7 @@ static void ds_show_functions(RDisasmState *ds) { } ds_begin_line (ds); - char *sign = rz_anal_function_get_signature (f); + char *sign = rz_analysis_function_get_signature (f); if (empty_signature (sign)) { RZ_FREE (sign); } @@ -1787,7 +1787,7 @@ static void ds_show_functions(RDisasmState *ds) { core->cons->vline[LINE_CROSS]); // |- if (!showSig) { rz_cons_printf ("%s%s%s %"PFMT64u, COLOR (ds, color_floc), - fcn_name, COLOR_RESET (ds), rz_anal_function_linear_size (f)); + fcn_name, COLOR_RESET (ds), rz_analysis_function_linear_size (f)); ds_newline (ds); } } else { @@ -1833,9 +1833,9 @@ static void ds_show_functions(RDisasmState *ds) { if (ds->show_lines_fcn) { ds->pre = DS_PRE_FCN_MIDDLE; } - ds->stackptr = core->anal->stackptr; - RzAnalFcnVarsCache vars_cache; - rz_anal_fcn_vars_cache_init (core->anal, &vars_cache, f); + ds->stackptr = core->analysis->stackptr; + RzAnalysisFcnVarsCache vars_cache; + rz_analysis_fcn_vars_cache_init (core->analysis, &vars_cache, f); int o_varsum = ds->show_varsum; if (ds->interactive && !o_varsum) { @@ -1855,7 +1855,7 @@ static void ds_show_functions(RDisasmState *ds) { ds_print_pre (ds, true); rz_cons_printf ("%s ", COLOR_RESET (ds)); } - rz_cons_printf ("%" PFMT64d ": ", rz_anal_function_realsize (f)); + rz_cons_printf ("%" PFMT64d ": ", rz_analysis_function_realsize (f)); // show function's realname in the signature if realnames are enabled if (core->flags->realnames) { @@ -1865,7 +1865,7 @@ static void ds_show_functions(RDisasmState *ds) { } } - char *sig = rz_anal_fcn_format_sig (core->anal, f, fcn_name, &vars_cache, COLOR (ds, color_fname), COLOR_RESET (ds)); + char *sig = rz_analysis_fcn_format_sig (core->analysis, f, fcn_name, &vars_cache, COLOR (ds, color_fname), COLOR_RESET (ds)); if (sig) { rz_cons_print (sig); free (sig); @@ -1881,7 +1881,7 @@ static void ds_show_functions(RDisasmState *ds) { printVarSummary (ds, all_vars); } else { char spaces[32]; - RzAnalVar *var; + RzAnalysisVar *var; RzListIter *iter; RzList *all_vars = vars_cache.bvars; rz_list_join (all_vars, vars_cache.svars); @@ -1889,7 +1889,7 @@ static void ds_show_functions(RDisasmState *ds) { rz_list_foreach (all_vars, iter, var) { ds_begin_line (ds); int idx; - RzAnal *anal = ds->core->anal; + RzAnalysis *analysis = ds->core->analysis; memset (spaces, ' ', sizeof(spaces)); idx = 12 - strlen (var->name); if (idx < 0) { @@ -1907,11 +1907,11 @@ static void ds_show_functions(RDisasmState *ds) { char sign = var->isarg || (-var->delta <= f->bp_off) ? '+' : '-'; bool is_var = !var->isarg; ds_show_functions_argvar (ds, f, var, - anal->reg->name[RZ_REG_NAME_BP], is_var, sign); + analysis->reg->name[RZ_REG_NAME_BP], is_var, sign); } break; case RZ_ANAL_VAR_KIND_REG: { - RzRegItem *i = rz_reg_index_get (anal->reg, var->delta); + RzRegItem *i = rz_reg_index_get (analysis->reg, var->delta); if (!i) { eprintf ("Register not found"); break; @@ -1936,7 +1936,7 @@ static void ds_show_functions(RDisasmState *ds) { var->delta = f->maxstack + var->delta; char sign = var->isarg || (-var->delta <= f->maxstack) ? '+' : '-'; ds_show_functions_argvar (ds, f, var, - anal->reg->name[RZ_REG_NAME_SP], + analysis->reg->name[RZ_REG_NAME_SP], is_var, sign); var->delta = saved_delta; } @@ -1951,7 +1951,7 @@ static void ds_show_functions(RDisasmState *ds) { } } ds->show_varsum = o_varsum; - rz_anal_fcn_vars_cache_fini (&vars_cache); + rz_analysis_fcn_vars_cache_fini (&vars_cache); if (fcn_name_alloc) { free (fcn_name); } @@ -1966,7 +1966,7 @@ static void ds_show_functions(RDisasmState *ds) { ds_newline (ds); } } - rz_list_foreach (ds->core->anal->imports, iter, imp) { + rz_list_foreach (ds->core->analysis->imports, iter, imp) { ds_print_pre (ds, true); ds_print_lines_left(ds); rz_cons_printf (".globalimport %s", imp); @@ -1987,17 +1987,17 @@ static void ds_setup_pre(RDisasmState *ds, bool tail, bool middle) { return; } ds->pre = DS_PRE_EMPTY; - RzAnalFunction *f = fcnIn (ds, ds->at, RZ_ANAL_FCN_TYPE_NULL); + RzAnalysisFunction *f = fcnIn (ds, ds->at, RZ_ANAL_FCN_TYPE_NULL); if (f) { if (f->addr == ds->at) { - if (ds->analop.size == rz_anal_function_linear_size (f) && !middle) { + if (ds->analop.size == rz_analysis_function_linear_size (f) && !middle) { ds->pre = DS_PRE_FCN_TAIL; } else { ds->pre = DS_PRE_FCN_MIDDLE; } - } else if (rz_anal_function_max_addr (f) - ds->analop.size == ds->at && f->addr == rz_anal_function_min_addr (f)) { + } else if (rz_analysis_function_max_addr (f) - ds->analop.size == ds->at && f->addr == rz_analysis_function_min_addr (f)) { ds->pre = DS_PRE_FCN_TAIL; - } else if (rz_anal_function_contains (f, ds->at)) { + } else if (rz_analysis_function_contains (f, ds->at)) { ds->pre = DS_PRE_FCN_MIDDLE; } if (tail) { @@ -2081,8 +2081,8 @@ static void ds_show_comments_right(RDisasmState *ds) { return; } RzFlagItem *item = rz_flag_get_i (core->flags, ds->at); - const char *comment = rz_meta_get_string (core->anal, RZ_META_TYPE_COMMENT, ds->at); - const char *vartype = rz_meta_get_string (core->anal, RZ_META_TYPE_VARTYPE, ds->at); + const char *comment = rz_meta_get_string (core->analysis, RZ_META_TYPE_COMMENT, ds->at); + const char *vartype = rz_meta_get_string (core->analysis, RZ_META_TYPE_VARTYPE, ds->at); if (!comment) { if (vartype) { ds->comment = rz_str_newf ("%s; %s", COLOR_ARG (ds, color_func_var_type), vartype); @@ -2195,7 +2195,7 @@ static void ds_show_flags(RDisasmState *ds) { //const char *beginch; RzFlagItem *flag; RzListIter *iter; - RzAnalFunction *f = NULL; + RzAnalysisFunction *f = NULL; if (!ds->show_flags) { return; } @@ -2203,7 +2203,7 @@ static void ds_show_flags(RDisasmState *ds) { char addr[64]; ut64 switch_addr = UT64_MAX; int case_start = -1, case_prev = 0, case_current = 0; - f = rz_anal_get_function_at (ds->core->anal, ds->at); + f = rz_analysis_get_function_at (ds->core->analysis, ds->at); const RzList *flaglist = rz_flag_get_list (core->flags, ds->at); RzList *uniqlist = flaglist? rz_list_uniq (flaglist, flagCmp): NULL; int count = 0; @@ -2355,7 +2355,7 @@ static void ds_update_ref_lines(RDisasmState *ds) { if (ds->show_lines_bb) { free (ds->line); free (ds->line_col); - RzAnalRefStr *line = rz_anal_reflines_str (ds->core, ds->at, ds->linesopts); + RzAnalysisRefStr *line = rz_analysis_reflines_str (ds->core, ds->at, ds->linesopts); ds->line = line->str; ds->line_col = line->cols; free (ds->refline); @@ -2363,7 +2363,7 @@ static void ds_update_ref_lines(RDisasmState *ds) { free (ds->refline2); free (ds->prev_line_col); free (line); - line = rz_anal_reflines_str (ds->core, ds->at, + line = rz_analysis_reflines_str (ds->core, ds->at, ds->linesopts | RZ_ANAL_REFLINE_TYPE_MIDDLE_BEFORE); ds->refline2 = line->str; ds->prev_line_col = line->cols; @@ -2396,14 +2396,14 @@ static int ds_disassemble(RDisasmState *ds, ut8 *buf, int len) { int ret; // find the meta item at this offset if any - RzPVector *metas = rz_meta_get_all_at (ds->core->anal, ds->at); // TODO: do in range - RzAnalMetaItem *meta = NULL; + RzPVector *metas = rz_meta_get_all_at (ds->core->analysis, ds->at); // TODO: do in range + RzAnalysisMetaItem *meta = NULL; ut64 meta_size = UT64_MAX; if (metas) { void **it; rz_pvector_foreach (metas, it) { RzIntervalNode *node = *it; - RzAnalMetaItem *mi = node->data; + RzAnalysisMetaItem *mi = node->data; switch (mi->type) { case RZ_META_TYPE_DATA: case RZ_META_TYPE_STRING: @@ -2421,7 +2421,7 @@ static int ds_disassemble(RDisasmState *ds, ut8 *buf, int len) { rz_pvector_free (metas); } if (ds->hint && ds->hint->bits) { - if (!ds->core->anal->opt.ignbithints) { + if (!ds->core->analysis->opt.ignbithints) { rz_config_set_i (core->config, "asm.bits", ds->hint->bits); } } @@ -2553,7 +2553,7 @@ static int ds_disassemble(RDisasmState *ds, ut8 *buf, int len) { static void ds_control_flow_comments(RDisasmState *ds) { if (ds->show_comments && ds->show_cmtflgrefs) { RzFlagItem *item; - if (ds->asm_anal) { + if (ds->asm_analysis) { switch (ds->analop.type) { case RZ_ANAL_OP_TYPE_CALL: rz_core_cmdf (ds->core, "af @ 0x%"PFMT64x, ds->analop.jump); @@ -2668,7 +2668,7 @@ static void ds_print_lines_left(RDisasmState *ds) { static void ds_print_family(RDisasmState *ds) { if (ds->show_family) { - const char *familystr = rz_anal_op_family_to_string (ds->analop.family); + const char *familystr = rz_analysis_op_family_to_string (ds->analop.family); rz_cons_printf ("%5s ", familystr? familystr: ""); } } @@ -2723,9 +2723,9 @@ static void ds_print_offset(RDisasmState *ds) { unsigned int seggrn = rz_config_get_i (core->config, "asm.seggrn"); if (ds->show_reloff) { - RzAnalFunction *f = rz_anal_get_function_at (core->anal, at); + RzAnalysisFunction *f = rz_analysis_get_function_at (core->analysis, at); if (!f) { - f = fcnIn (ds, at, RZ_ANAL_FCN_TYPE_NULL); // rz_anal_get_fcn_in (core->anal, at, RZ_ANAL_FCN_TYPE_NULL); + f = fcnIn (ds, at, RZ_ANAL_FCN_TYPE_NULL); // rz_analysis_get_fcn_in (core->analysis, at, RZ_ANAL_FCN_TYPE_NULL); } if (f) { delta = at - f->addr; @@ -2823,12 +2823,12 @@ static void ds_print_trace(RDisasmState *ds) { static void ds_adistrick_comments(RDisasmState *ds) { if (ds->adistrick) { - ds->middle = rz_anal_reflines_middle (ds->core->anal, - ds->core->anal->reflines, ds->at, ds->analop.size); + ds->middle = rz_analysis_reflines_middle (ds->core->analysis, + ds->core->analysis->reflines, ds->at, ds->analop.size); } } -// TODO move into RzAnal.meta +// TODO move into RzAnalysis.meta static bool ds_print_data_type(RDisasmState *ds, const ut8 *buf, int ib, int size) { RzCore *core = ds->core; const char *type = NULL; @@ -2921,7 +2921,7 @@ static bool ds_print_data_type(RDisasmState *ds, const ut8 *buf, int ib, int siz static bool ds_print_meta_infos(RDisasmState *ds, ut8* buf, int len, int idx, int *mi_type) { bool ret = false; - RzAnalMetaItem *fmi; + RzAnalysisMetaItem *fmi; RzCore *core = ds->core; if (!ds->asm_meta) { return false; @@ -2929,11 +2929,11 @@ static bool ds_print_meta_infos(RDisasmState *ds, ut8* buf, int len, int idx, in #if 0 UNUSED char key[100]; - Sdb *s = core->anal->sdb_meta; + Sdb *s = core->analysis->sdb_meta; snprintf (key, sizeof (key), "meta.0x%" PFMT64x, ds->at); const char *infos = sdb_const_get (s, key, 0); #endif - RzPVector *metas = rz_meta_get_all_in (core->anal, ds->at, RZ_META_TYPE_ANY); + RzPVector *metas = rz_meta_get_all_in (core->analysis, ds->at, RZ_META_TYPE_ANY); if (!metas) { return false; } @@ -2942,7 +2942,7 @@ static bool ds_print_meta_infos(RDisasmState *ds, ut8* buf, int len, int idx, in void **it; rz_pvector_foreach (metas, it) { RzIntervalNode *node = *it; - RzAnalMetaItem *mi = node->data; + RzAnalysisMetaItem *mi = node->data; switch (mi->type) { case RZ_META_TYPE_DATA: if (once) { @@ -2965,7 +2965,7 @@ static bool ds_print_meta_infos(RDisasmState *ds, ut8* buf, int len, int idx, in } rz_pvector_foreach (metas, it) { RzIntervalNode *node = *it; - RzAnalMetaItem *mi = node->data; + RzAnalysisMetaItem *mi = node->data; ut64 mi_size = rz_meta_node_size (node); char *out = NULL; int hexlen; @@ -3234,7 +3234,7 @@ static void ds_print_indent(RDisasmState *ds) { static void ds_print_optype(RDisasmState *ds) { if (ds->show_optype) { - const char *optype = rz_anal_optype_to_string (ds->analop.type); + const char *optype = rz_analysis_optype_to_string (ds->analop.type); ds_print_color_reset (ds); const char *pad = rz_str_pad (' ', 8 - strlen (optype)); rz_cons_printf ("[%s]%s", optype, pad); @@ -3270,16 +3270,16 @@ static int ds_print_middle(RDisasmState *ds, int ret) { return ret; } -static bool ds_print_labels(RDisasmState *ds, RzAnalFunction *f) { +static bool ds_print_labels(RDisasmState *ds, RzAnalysisFunction *f) { const char *label; if (!f) { - // f = rz_anal_get_fcn_in (core->anal, ds->at, 0); + // f = rz_analysis_get_fcn_in (core->analysis, ds->at, 0); f = fcnIn (ds, ds->at, 0); } if (!f) { return false; } - label = rz_anal_function_get_label_at (f, ds->at); + label = rz_analysis_function_get_label_at (f, ds->at); if (!label) { return false; } @@ -3332,7 +3332,7 @@ static void ds_print_sysregs(RDisasmState *ds) { case RZ_ANAL_OP_TYPE_IO: { const int imm = (int)ds->analop.val; - RzSyscall *sc = core->anal->syscall; + RzSyscall *sc = core->analysis->syscall; const char *ioname = rz_syscall_get_io (sc, imm); if (ioname && *ioname) { CMT_ALIGN; @@ -3348,7 +3348,7 @@ static void ds_print_sysregs(RDisasmState *ds) { case RZ_ANAL_OP_TYPE_STORE: { const int imm = (int)ds->analop.ptr; - const char *sr = rz_syscall_sysreg (core->anal->syscall, "reg", imm); + const char *sr = rz_syscall_sysreg (core->analysis->syscall, "reg", imm); if (sr) { CMT_ALIGN; ds_comment (ds, true, "; REG %s - %s", sr, ""); @@ -3369,7 +3369,7 @@ static void ds_print_fcn_name(RDisasmState *ds) { && ds->analop.type != RZ_ANAL_OP_TYPE_CALL) { return; } - RzAnalFunction *f = fcnIn (ds, ds->analop.jump, RZ_ANAL_FCN_TYPE_NULL); + RzAnalysisFunction *f = fcnIn (ds, ds->analop.jump, RZ_ANAL_FCN_TYPE_NULL); if (!f && ds->core->flags && (!ds->core->vmode || (!ds->subjmp && !ds->subnames))) { const char *arch; RzFlagItem *flag = rz_flag_get_by_spaces (ds->core->flags, ds->analop.jump, @@ -3394,12 +3394,12 @@ static void ds_print_fcn_name(RDisasmState *ds) { return; } st64 delta = ds->analop.jump - f->addr; - const char *label = rz_anal_function_get_label_at (f, ds->analop.jump); + const char *label = rz_analysis_function_get_label_at (f, ds->analop.jump); if (label) { ds_begin_comment (ds); ds_comment (ds, true, "; %s.%s", f->name, label); } else { - RzAnalFunction *f2 = fcnIn (ds, ds->at, 0); + RzAnalysisFunction *f2 = fcnIn (ds, ds->at, 0); if (f == f2) { return; } @@ -3466,15 +3466,15 @@ static int ds_print_shortcut(RDisasmState *ds, ut64 addr, int pos) { static bool ds_print_core_vmode_jump_hit(RDisasmState *ds, int pos) { RzCore *core = ds->core; - RzAnal *a = core->anal; - RzAnalHint *hint = rz_anal_hint_get (a, ds->at); + RzAnalysis *a = core->analysis; + RzAnalysisHint *hint = rz_analysis_hint_get (a, ds->at); bool res = false; if (hint) { if (hint->jump != UT64_MAX) { ds_print_shortcut (ds, hint->jump, pos); res = true; } - rz_anal_hint_free (hint); + rz_analysis_hint_free (hint); } return res; } @@ -3531,7 +3531,7 @@ static bool ds_print_core_vmode(RDisasmState *ds, int pos) { } if (ds->asm_hint_lea) { ut64 size; - RzAnalMetaItem *mi = rz_meta_get_at (ds->core->anal, ds->at, RZ_META_TYPE_ANY, &size); + RzAnalysisMetaItem *mi = rz_meta_get_at (ds->core->analysis, ds->at, RZ_META_TYPE_ANY, &size); if (mi) { int obits = ds->core->rasm->bits; ds->core->rasm->bits = size * 8; @@ -3706,7 +3706,7 @@ static void ds_print_dwarf(RDisasmState *ds) { static void ds_print_asmop_payload(RDisasmState *ds, const ut8 *buf) { if (ds->show_varaccess) { // XXX assume analop is filled - //rz_anal_op (core->anal, &ds->analop, ds->at, core->block+i, core->blocksize-i); + //rz_analysis_op (core->analysis, &ds->analop, ds->at, core->block+i, core->blocksize-i); int v = ds->analop.ptr; switch (ds->analop.stackop) { case RZ_ANAL_STACK_GET: @@ -3848,7 +3848,7 @@ static inline bool is_filtered_flag(RDisasmState *ds, const char *name) { return false; } ut64 refaddr = ds->analop.ptr; - const char *anal_flag = rz_meta_get_string (ds->core->anal, RZ_META_TYPE_STRING, refaddr); + const char *anal_flag = rz_meta_get_string (ds->core->analysis, RZ_META_TYPE_STRING, refaddr); if (anal_flag) { char *dupped = strdup (anal_flag); if (dupped) { @@ -3913,8 +3913,8 @@ static void ds_print_ptr(RDisasmState *ds, int len, int idx) { } RzList *list = NULL; RzListIter *iter; - RzAnalRef *ref; - list = rz_anal_refs_get (core->anal, ds->at); + RzAnalysisRef *ref; + list = rz_analysis_refs_get (core->analysis, ds->at); rz_list_foreach (list, iter, ref) { if (ref->type == RZ_ANAL_REF_TYPE_STRING || ref->type == RZ_ANAL_REF_TYPE_DATA) { if ((f = rz_flag_get_i (core->flags, ref->addr))) { @@ -3996,7 +3996,7 @@ static void ds_print_ptr(RDisasmState *ds, int len, int idx) { msg2 = calloc (sizeof (char), len); rz_io_read_at (core->io, n, (ut8*)msg2, len - 1); msg2[len - 1] = 0; - kind = rz_anal_data_kind (core->anal, refaddr, (const ut8*)msg2, len - 1); + kind = rz_analysis_data_kind (core->analysis, refaddr, (const ut8*)msg2, len - 1); if (kind && !strcmp (kind, "text")) { rz_str_filter (msg2, 0); if (*msg2) { @@ -4107,8 +4107,8 @@ static void ds_print_ptr(RDisasmState *ds, int len, int idx) { } else if (refaddr > 10) { if ((st64)refaddr < 0) { // resolve local var if possible - RzAnalFunction *fcn = rz_anal_get_function_at (core->anal, ds->at); - RzAnalVar *v = fcn ? rz_anal_function_get_var (fcn, 'v', (int)refaddr) : NULL; + RzAnalysisFunction *fcn = rz_analysis_get_function_at (core->analysis, ds->at); + RzAnalysisVar *v = fcn ? rz_analysis_function_get_var (fcn, 'v', (int)refaddr) : NULL; ds_begin_comment (ds); if (v) { ds_comment (ds, true, "; var %s", v->name); @@ -4116,7 +4116,7 @@ static void ds_print_ptr(RDisasmState *ds, int len, int idx) { ds_comment (ds, true, "; var %d", -(int)refaddr); } } else { - if (rz_core_anal_address (core, refaddr) & RZ_ANAL_ADDR_TYPE_ASCII) { + if (rz_core_analysis_address (core, refaddr) & RZ_ANAL_ADDR_TYPE_ASCII) { if (!string_printed && print_msg) { ds_print_str (ds, msg, len, refaddr); string_printed = true; @@ -4125,7 +4125,7 @@ static void ds_print_ptr(RDisasmState *ds, int len, int idx) { } } //XXX this should be refactored with along the above - kind = rz_anal_data_kind (core->anal, refaddr, (const ut8*)msg, len - 1); + kind = rz_analysis_data_kind (core->analysis, refaddr, (const ut8*)msg, len - 1); if (kind) { if (!strcmp (kind, "text")) { if (!string_printed && print_msg) { @@ -4239,19 +4239,19 @@ static void ds_print_relocs(RDisasmState *ds) { } } -static int mymemwrite0(RzAnalEsil *esil, ut64 addr, const ut8 *buf, int len) { +static int mymemwrite0(RzAnalysisEsil *esil, ut64 addr, const ut8 *buf, int len) { return 0; } -static int mymemwrite1(RzAnalEsil *esil, ut64 addr, const ut8 *buf, int len) { +static int mymemwrite1(RzAnalysisEsil *esil, ut64 addr, const ut8 *buf, int len) { return 1; } -static int mymemwrite2(RzAnalEsil *esil, ut64 addr, const ut8 *buf, int len) { +static int mymemwrite2(RzAnalysisEsil *esil, ut64 addr, const ut8 *buf, int len) { return (addr >= emustack_min && addr < emustack_max); } -static char *ssa_get(RzAnalEsil *esil, const char *reg) { +static char *ssa_get(RzAnalysisEsil *esil, const char *reg) { RDisasmState *ds = esil->user; if (isdigit (*reg)) { return strdup (reg); @@ -4263,13 +4263,13 @@ static char *ssa_get(RzAnalEsil *esil, const char *reg) { return rz_str_newf ("%s_%d", reg, n); } -static void ssa_set(RzAnalEsil *esil, const char *reg) { +static void ssa_set(RzAnalysisEsil *esil, const char *reg) { RDisasmState *ds = esil->user; (void)sdb_num_inc (ds->ssa, reg, 1, 0); } #define RZ_DISASM_MAX_STR 512 -static int myregread(RzAnalEsil *esil, const char *name, ut64 *res, int *size) { +static int myregread(RzAnalysisEsil *esil, const char *name, ut64 *res, int *size) { RDisasmState *ds = esil->user; if (ds && ds->show_emu_ssa) { if (!isdigit (*name)) { @@ -4281,7 +4281,7 @@ static int myregread(RzAnalEsil *esil, const char *name, ut64 *res, int *size) { return 0; } -static int myregwrite(RzAnalEsil *esil, const char *name, ut64 *val) { +static int myregwrite(RzAnalysisEsil *esil, const char *name, ut64 *val) { char str[64], *msg = NULL; ut32 *n32 = (ut32*)str; RDisasmState *ds = esil->user; @@ -4308,7 +4308,7 @@ static int myregwrite(RzAnalEsil *esil, const char *name, ut64 *val) { if (*val) { bool emu_str_printed = false; char *type = NULL; - (void)rz_io_read_at (esil->anal->iob.io, *val, (ut8*)str, sizeof (str)-1); + (void)rz_io_read_at (esil->analysis->iob.io, *val, (ut8*)str, sizeof (str)-1); str[sizeof (str) - 1] = 0; ds->emuptr = *val; // support cstring here @@ -4323,15 +4323,15 @@ static int myregwrite(RzAnalEsil *esil, const char *name, ut64 *val) { if (!(*val >> 32)) { addr = addr & UT32_MAX; } - (void)rz_io_read_at (esil->anal->iob.io, addr, + (void)rz_io_read_at (esil->analysis->iob.io, addr, (ut8*)str, sizeof (str)-1); // eprintf ("IS CSTRING 0x%llx %s\n", addr, str); type = rz_str_newf ("(cstr 0x%08"PFMT64x") ", addr); ds->printed_str_addr = cstr[2]; - } else if (rz_io_is_valid_offset (esil->anal->iob.io, addr, 0)) { + } else if (rz_io_is_valid_offset (esil->analysis->iob.io, addr, 0)) { ds->printed_str_addr = cstr[0]; type = rz_str_newf ("(pstr 0x%08"PFMT64x") ", addr); - (void)rz_io_read_at (esil->anal->iob.io, addr, + (void)rz_io_read_at (esil->analysis->iob.io, addr, (ut8*)str, sizeof (str) - 1); // eprintf ("IS PSTRING 0x%llx %s\n", addr, str); } @@ -4403,7 +4403,7 @@ static int myregwrite(RzAnalEsil *esil, const char *name, ut64 *val) { RZ_FREE (type); if ((ds->printed_flag_addr == UT64_MAX || *val != ds->printed_flag_addr) && (ds->show_emu_strflag || !emu_str_printed)) { - RzFlagItem *fi = rz_flag_get_i (esil->anal->flb.f, *val); + RzFlagItem *fi = rz_flag_get_i (esil->analysis->flb.f, *val); if (fi && (!ds->opstr || !strstr (ds->opstr, fi->name))) { msg = rz_str_appendf (msg, "%s%s", msg && *msg ? " " : "", fi->name); } @@ -4445,28 +4445,28 @@ static void ds_pre_emulation(RDisasmState *ds) { return; } ut64 base = f->offset; - RzAnalEsil *esil = ds->core->anal->esil; + RzAnalysisEsil *esil = ds->core->analysis->esil; int i, end = ds->core->offset - base; int maxemu = 1024 * 1024; - RzAnalEsilHookRegWriteCB orig_cb = esil->cb.hook_reg_write; + RzAnalysisEsilHookRegWriteCB orig_cb = esil->cb.hook_reg_write; if (end < 0 || end > maxemu) { return; } - ds->stackptr = ds->core->anal->stackptr; + ds->stackptr = ds->core->analysis->stackptr; esil->cb.hook_reg_write = NULL; for (i = 0; i < end; i++) { ut64 addr = base + i; - RzAnalOp* op = rz_core_anal_op (ds->core, addr, RZ_ANAL_OP_MASK_ESIL | RZ_ANAL_OP_MASK_HINT); + RzAnalysisOp* op = rz_core_analysis_op (ds->core, addr, RZ_ANAL_OP_MASK_ESIL | RZ_ANAL_OP_MASK_HINT); if (op) { if (do_esil) { - rz_anal_esil_set_pc (esil, addr); - rz_anal_esil_parse (esil, RZ_STRBUF_SAFEGET (&op->esil)); + rz_analysis_esil_set_pc (esil, addr); + rz_analysis_esil_parse (esil, RZ_STRBUF_SAFEGET (&op->esil)); if (op->size > 0) { i += op->size - 1; } } ds_update_stackptr (ds, op); - rz_anal_op_free (op); + rz_analysis_op_free (op); } } esil->cb.hook_reg_write = orig_cb; @@ -4474,11 +4474,11 @@ static void ds_pre_emulation(RDisasmState *ds) { static void ds_print_esil_anal_init(RDisasmState *ds) { RzCore *core = ds->core; - const char *pc = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_PC); + const char *pc = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_PC); if (!pc) { return; } - ds->esil_old_pc = rz_reg_getv (core->anal->reg, pc); + ds->esil_old_pc = rz_reg_getv (core->analysis->reg, pc); if (!ds->esil_old_pc || ds->esil_old_pc == UT64_MAX) { ds->esil_old_pc = core->offset; } @@ -4486,25 +4486,25 @@ static void ds_print_esil_anal_init(RDisasmState *ds) { // XXX. stackptr not computed without asm.emu, when its not required return; } - if (!core->anal->esil) { + if (!core->analysis->esil) { int iotrap = rz_config_get_i (core->config, "esil.iotrap"); int esd = rz_config_get_i (core->config, "esil.stack.depth"); unsigned int addrsize = rz_config_get_i (core->config, "esil.addr.size"); - if (!(core->anal->esil = rz_anal_esil_new (esd, iotrap, addrsize))) { + if (!(core->analysis->esil = rz_analysis_esil_new (esd, iotrap, addrsize))) { RZ_FREE (ds->esil_regstate); return; } - rz_anal_esil_setup (core->anal->esil, core->anal, 0, 0, 1); + rz_analysis_esil_setup (core->analysis->esil, core->analysis, 0, 0, 1); } - core->anal->esil->user = ds; + core->analysis->esil->user = ds; free (ds->esil_regstate); - RZ_FREE (core->anal->last_disasm_reg); - if (core->anal->gp) { - rz_reg_setv (core->anal->reg, "gp", core->anal->gp); + RZ_FREE (core->analysis->last_disasm_reg); + if (core->analysis->gp) { + rz_reg_setv (core->analysis->reg, "gp", core->analysis->gp); } - ds->esil_regstate = rz_reg_arena_peek (core->anal->reg); - RzRegSet *regset = rz_reg_regset_get (core->anal->reg, RZ_REG_TYPE_GPR); + ds->esil_regstate = rz_reg_arena_peek (core->analysis->reg); + RzRegSet *regset = rz_reg_regset_get (core->analysis->reg, RZ_REG_TYPE_GPR); if (ds->esil_regstate && regset) { ds->esil_regstate_size = regset->arena->size; } @@ -4515,10 +4515,10 @@ static void ds_print_esil_anal_init(RDisasmState *ds) { static void ds_print_bbline(RDisasmState *ds) { if (ds->show_bbline && ds->at) { - RzAnalBlock *bb = NULL; - RzAnalFunction *f_before = NULL; + RzAnalysisBlock *bb = NULL; + RzAnalysisFunction *f_before = NULL; if (ds->fcn) { - bb = rz_anal_fcn_bbget_at (ds->core->anal, ds->fcn, ds->at); + bb = rz_analysis_fcn_bbget_at (ds->core->analysis, ds->fcn, ds->at); } else { f_before = fcnIn (ds, ds->at - 1, RZ_ANAL_FCN_TYPE_NULL); } @@ -4589,10 +4589,10 @@ static bool can_emulate_metadata(RzCore *core, ut64 at) { // check if there is a meta at the addr that is unemulateable const char *emuskipmeta = rz_config_get (core->config, "emu.skip"); bool ret = true; - RzPVector *metas = rz_meta_get_all_at (core->anal, at); + RzPVector *metas = rz_meta_get_all_at (core->analysis, at); void **it; rz_pvector_foreach (metas, it) { - RzAnalMetaItem *item = ((RzIntervalNode *)*it)->data; + RzAnalysisMetaItem *item = ((RzIntervalNode *)*it)->data; if (strchr (emuskipmeta, (char)item->type)) { ret = false; break; @@ -4608,7 +4608,7 @@ static void mipsTweak(RDisasmState *ds) { if (asm_arch && *asm_arch && strstr (asm_arch, "mips")) { if (rz_config_get_i (core->config, "anal.gpfixed")) { ut64 gp = rz_config_get_i (core->config, "anal.gp"); - rz_reg_setv (core->anal->reg, "gp", gp); + rz_reg_setv (core->analysis->reg, "gp", gp); } } } @@ -4616,9 +4616,9 @@ static void mipsTweak(RDisasmState *ds) { // modifies anal register state static void ds_print_esil_anal(RDisasmState *ds) { RzCore *core = ds->core; - RzAnalEsil *esil = core->anal->esil; + RzAnalysisEsil *esil = core->analysis->esil; const char *pc; - int (*hook_mem_write)(RzAnalEsil *esil, ut64 addr, const ut8 *buf, int len) = NULL; + int (*hook_mem_write)(RzAnalysisEsil *esil, ut64 addr, const ut8 *buf, int len) = NULL; int i, nargs; ut64 at = rz_core_pava (core, ds->at); RzConfigHold *hc = rz_config_hold_new (core->config); @@ -4627,7 +4627,7 @@ static void ds_print_esil_anal(RDisasmState *ds) { } if (!esil) { ds_print_esil_anal_init (ds); - esil = core->anal->esil; + esil = core->analysis->esil; } if (!ds->show_emu) { goto beach; @@ -4638,10 +4638,10 @@ static void ds_print_esil_anal(RDisasmState *ds) { if (ds->show_color) { rz_cons_strcat (ds->pal_comment); } - esil = core->anal->esil; - pc = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_PC); + esil = core->analysis->esil; + pc = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_PC); if (pc) { - rz_reg_setv (core->anal->reg, pc, at + ds->analop.size); + rz_reg_setv (core->analysis->reg, pc, at + ds->analop.size); esil->cb.user = ds; esil->cb.hook_reg_write = myregwrite; esil->cb.hook_reg_read = myregread; @@ -4660,10 +4660,10 @@ static void ds_print_esil_anal(RDisasmState *ds) { const char *esilstr = RZ_STRBUF_SAFEGET (&ds->analop.esil); if (RZ_STR_ISNOTEMPTY (esilstr)) { mipsTweak (ds); - rz_anal_esil_set_pc (esil, at); - rz_anal_esil_parse (esil, esilstr); + rz_analysis_esil_set_pc (esil, at); + rz_analysis_esil_parse (esil, esilstr); } - rz_anal_esil_stack_free (esil); + rz_analysis_esil_stack_free (esil); rz_config_hold_i (hc, "io.cache", NULL); rz_config_set (core->config, "io.cache", "true"); if (!ds->show_comments) { @@ -4683,7 +4683,7 @@ static void ds_print_esil_anal(RDisasmState *ds) { case RZ_ANAL_OP_TYPE_JMP: { ut64 addr = ds->analop.jump; - if (!rz_anal_get_function_at (ds->core->anal, addr) + if (!rz_analysis_get_function_at (ds->core->analysis, addr) && !rz_flag_get_at (core->flags, addr, false)) { break; } @@ -4694,8 +4694,8 @@ static void ds_print_esil_anal(RDisasmState *ds) { case RZ_ANAL_OP_TYPE_IRCALL: case RZ_ANAL_OP_TYPE_CALL: { - RzAnalFunction *fcn; - RzAnalFuncArg *arg; + RzAnalysisFunction *fcn; + RzAnalysisFuncArg *arg; RzListIter *iter; RzListIter *nextele; const char *fcn_name = NULL; @@ -4707,13 +4707,13 @@ static void ds_print_esil_anal(RDisasmState *ds) { if (pcv == UT64_MAX) { pcv = ds->analop.ptr; // call [reloc-addr] // windows style if (pcv == UT64_MAX || !pcv) { - rz_anal_esil_reg_read (esil, "$jt", &pcv, NULL); + rz_analysis_esil_reg_read (esil, "$jt", &pcv, NULL); if (pcv == UT64_MAX || !pcv) { - pcv = rz_reg_getv (core->anal->reg, pc); + pcv = rz_reg_getv (core->analysis->reg, pc); } } } - fcn = rz_anal_get_function_at (core->anal, pcv); + fcn = rz_analysis_get_function_at (core->analysis, pcv); if (fcn) { fcn_name = fcn->name; } else { @@ -4723,14 +4723,14 @@ static void ds_print_esil_anal(RDisasmState *ds) { } } if (fcn_name) { - key = resolve_fcn_name (core->anal, fcn_name); + key = resolve_fcn_name (core->analysis, fcn_name); } if (key) { if (ds->asm_types < 1) { break; } - const char *fcn_type = rz_type_func_ret (core->anal->sdb_types, key); - int nargs = rz_type_func_args_count (core->anal->sdb_types, key); + const char *fcn_type = rz_type_func_ret (core->analysis->sdb_types, key); + int nargs = rz_type_func_args_count (core->analysis->sdb_types, key); // remove other comments delete_last_comment (ds); // ds_comment_start (ds, ""); @@ -4745,10 +4745,10 @@ static void ds_print_esil_anal(RDisasmState *ds) { } } } - ut64 s_width = (core->anal->bits == 64)? 8: 4; - const char *sp = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_SP); - ut64 spv = rz_reg_getv (core->anal->reg, sp); - rz_reg_setv (core->anal->reg, sp, spv + s_width); // temporarily set stack ptr to sync with carg.c + ut64 s_width = (core->analysis->bits == 64)? 8: 4; + const char *sp = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_SP); + ut64 spv = rz_reg_getv (core->analysis->reg, sp); + rz_reg_setv (core->analysis->reg, sp, spv + s_width); // temporarily set stack ptr to sync with carg.c RzList *list = rz_core_get_func_args (core, fcn_name); if (!rz_list_empty (list)) { bool warning = false; @@ -4791,9 +4791,9 @@ static void ds_print_esil_anal(RDisasmState *ds) { nargs = DEFAULT_NARGS; if (fcn) { // @TODO: fcn->nargs should be updated somewhere and used here instead - nargs = rz_anal_var_count (core->anal, fcn, 's', 1) + - rz_anal_var_count (core->anal, fcn, 'b', 1) + - rz_anal_var_count (core->anal, fcn, 'r', 1); + nargs = rz_analysis_var_count (core->analysis, fcn, 's', 1) + + rz_analysis_var_count (core->analysis, fcn, 'b', 1) + + rz_analysis_var_count (core->analysis, fcn, 'r', 1); } if (nargs > 0) { ds_comment_esil (ds, true, false, "%s", ds->show_color ? ds->pal_comment : ""); @@ -4809,7 +4809,7 @@ static void ds_print_esil_anal(RDisasmState *ds) { ds_comment_end (ds, ")"); } } - rz_reg_setv (core->anal->reg, sp, spv); // reset stack ptr + rz_reg_setv (core->analysis->reg, sp, spv); // reset stack ptr } break; } @@ -4829,13 +4829,13 @@ static void ds_print_calls_hints(RDisasmState *ds) { // this is done by ESIL return; } - RzAnal *anal = ds->core->anal; - Sdb *TDB = anal->sdb_types; + RzAnalysis *analysis = ds->core->analysis; + Sdb *TDB = analysis->sdb_types; char *name; char *full_name = NULL; if (ds->analop.type == RZ_ANAL_OP_TYPE_CALL) { - // RzAnalFunction *fcn = rz_anal_get_fcn_in (anal, ds->analop.jump, -1); - RzAnalFunction *fcn = fcnIn (ds, ds->analop.jump, -1); + // RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (analysis, ds->analop.jump, -1); + RzAnalysisFunction *fcn = fcnIn (ds, ds->analop.jump, -1); if (fcn) { full_name = fcn->name; } @@ -4891,7 +4891,7 @@ static void ds_print_comments_right(RDisasmState *ds) { RzCore *core = ds->core; ds_print_relocs (ds); bool is_code = (!ds->hint) || (ds->hint && ds->hint->type != 'd'); - RzAnalMetaItem *mi = rz_meta_get_at (ds->core->anal, ds->at, RZ_META_TYPE_ANY, NULL); + RzAnalysisMetaItem *mi = rz_meta_get_at (ds->core->analysis, ds->at, RZ_META_TYPE_ANY, NULL); if (mi) { is_code = mi->type != 'd'; mi = NULL; @@ -5042,11 +5042,11 @@ static bool set_jump_realname(RDisasmState *ds, ut64 addr, const char **kw, cons // TODO: this should be moved into rz_parse static char *ds_sub_jumps(RDisasmState *ds, char *str) { - RzAnal *anal = ds->core->anal; + RzAnalysis *analysis = ds->core->analysis; RzFlag *f = ds->core->flags; const char *name = NULL; const char *kw = ""; - if (!ds->subjmp || !anal) { + if (!ds->subjmp || !analysis) { return str; } int optype = ds->analop.type & 0xFFFF; @@ -5060,7 +5060,7 @@ static char *ds_sub_jumps(RDisasmState *ds, char *str) { } ut64 addr = ds->analop.jump; - RzAnalFunction *fcn = rz_anal_get_function_at (anal, addr); + RzAnalysisFunction *fcn = rz_analysis_get_function_at (analysis, addr); if (fcn) { if (!set_jump_realname (ds, addr, &kw, &name)) { name = fcn->name; @@ -5137,10 +5137,10 @@ static void ds_end_line_highlight(RDisasmState *ds) { } // int l is for lines -RZ_API int rz_core_print_disasm(RzPrint *p, RzCore *core, ut64 addr, ut8 *buf, int len, int l, int invbreak, int cbytes, bool json, PJ *pj, RzAnalFunction *pdf) { +RZ_API int rz_core_print_disasm(RzPrint *p, RzCore *core, ut64 addr, ut8 *buf, int len, int l, int invbreak, int cbytes, bool json, PJ *pj, RzAnalysisFunction *pdf) { int continueoninvbreak = (len == l) && invbreak; - RzAnalFunction *of = NULL; - RzAnalFunction *f = NULL; + RzAnalysisFunction *of = NULL; + RzAnalysisFunction *f = NULL; bool calc_row_offsets = p->calc_row_offsets; int ret, i, inc = 0, skip_bytes_flag = 0, skip_bytes_bb = 0, idx = 0; ut8 *nbuf = NULL; @@ -5179,7 +5179,7 @@ RZ_API int rz_core_print_disasm(RzPrint *p, RzCore *core, ut64 addr, ut8 *buf, i // XXX - is there a better way to reset a the analysis counter so that // when code is disassembled, it can actually find the correct offsets { /* used by asm.emu */ - rz_reg_arena_push (core->anal->reg); + rz_reg_arena_push (core->analysis->reg); } ds_reflines_init (ds); @@ -5205,15 +5205,15 @@ toro: if (core->print->cur_enabled) { // TODO: support in-the-middle-of-instruction too - rz_anal_op_fini (&ds->analop); - if (rz_anal_op (core->anal, &ds->analop, core->offset + core->print->cur, + rz_analysis_op_fini (&ds->analop); + if (rz_analysis_op (core->analysis, &ds->analop, core->offset + core->print->cur, buf + core->print->cur, (int)(len - core->print->cur), RZ_ANAL_OP_MASK_ALL)) { // TODO: check for ds->analop.type and ret ds->dest = ds->analop.jump; } } else { /* highlight eip */ - const char *pc = core->anal->reg->name[RZ_REG_NAME_PC]; + const char *pc = core->analysis->reg->name[RZ_REG_NAME_PC]; if (pc) { RzFlagItem *item = rz_flag_get (core->flags, pc); if (item) { @@ -5241,7 +5241,7 @@ toro: return 0; //break; } if (core->print->flags & RZ_PRINT_FLAGS_UNALLOC) { - if (!core->anal->iob.is_valid_offset (core->anal->iob.io, ds->at, 0)) { + if (!core->analysis->iob.is_valid_offset (core->analysis->iob.io, ds->at, 0)) { ds_begin_line (ds); ds_print_labels (ds, f); ds_setup_print_pre (ds, false, false); @@ -5280,22 +5280,22 @@ toro: // ds_update_pc (ds, ds->at); rz_asm_set_pc (core->rasm, ds->at); ds_update_ref_lines (ds); - rz_anal_op_fini (&ds->analop); - rz_anal_op (core->anal, &ds->analop, ds->at, buf + addrbytes * idx, (int)(len - addrbytes * idx), RZ_ANAL_OP_MASK_ALL); + rz_analysis_op_fini (&ds->analop); + rz_analysis_op (core->analysis, &ds->analop, ds->at, buf + addrbytes * idx, (int)(len - addrbytes * idx), RZ_ANAL_OP_MASK_ALL); if (ds_must_strip (ds)) { inc = ds->analop.size; // inc = ds->asmop.payload + (ds->asmop.payload % ds->core->rasm->dataalign); - rz_anal_op_fini (&ds->analop); + rz_analysis_op_fini (&ds->analop); continue; } - // f = rz_anal_get_fcn_in (core->anal, ds->at, RZ_ANAL_FCN_TYPE_NULL); + // f = rz_analysis_get_fcn_in (core->analysis, ds->at, RZ_ANAL_FCN_TYPE_NULL); f = ds->fcn = fcnIn (ds, ds->at, RZ_ANAL_FCN_TYPE_NULL); - if (f && f->folded && rz_anal_function_contains (f, ds->at)) { - int delta = (ds->at <= f->addr) ? (ds->at - rz_anal_function_max_addr (f)) : 0; + if (f && f->folded && rz_analysis_function_contains (f, ds->at)) { + int delta = (ds->at <= f->addr) ? (ds->at - rz_analysis_function_max_addr (f)) : 0; if (of != f) { char cmt[32]; get_bits_comment (core, f, cmt, sizeof (cmt)); - const char *comment = rz_meta_get_string (core->anal, RZ_META_TYPE_COMMENT, ds->at); + const char *comment = rz_meta_get_string (core->analysis, RZ_META_TYPE_COMMENT, ds->at); if (comment) { ds_pre_xrefs (ds, true); rz_cons_printf ("; %s\n", comment); @@ -5306,7 +5306,7 @@ toro: ds_setup_print_pre (ds, true, false); ds_print_lines_left (ds); ds_print_offset (ds); - rz_cons_printf ("(%" PFMT64d " byte folded function)\n", rz_anal_function_linear_size (f)); + rz_cons_printf ("(%" PFMT64d " byte folded function)\n", rz_analysis_function_linear_size (f)); //rz_cons_printf ("%s%s%s\n", COLOR (ds, color_fline), core->cons->vline[RDWN_CORNER], COLOR_RESET (ds)); if (delta < 0) { delta = -delta; @@ -5316,7 +5316,7 @@ toro: inc = 0; //delta; idx = 0; of = f; - rz_anal_op_fini (&ds->analop); + rz_analysis_op_fini (&ds->analop); if (len == l) { break; } @@ -5326,25 +5326,25 @@ toro: rz_io_read_at (core->io, ds->addr, buf, len); inc = 0; //delta; idx = 0; - rz_anal_op_fini (&ds->analop); + rz_analysis_op_fini (&ds->analop); } continue; } ds_show_comments_right (ds); // TRY adding here char *link_key = sdb_fmt ("link.%08"PFMT64x, ds->addr + idx); - const char *link_type = sdb_const_get (core->anal->sdb_types, link_key, 0); + const char *link_type = sdb_const_get (core->analysis->sdb_types, link_key, 0); if (link_type) { - char *fmt = rz_type_format (core->anal->sdb_types, link_type); + char *fmt = rz_type_format (core->analysis->sdb_types, link_type); if (fmt) { rz_cons_printf ("(%s)\n", link_type); rz_core_cmdf (core, "pf %s @ 0x%08"PFMT64x"\n", fmt, ds->addr + idx); - const ut32 type_bitsize = rz_type_get_bitsize (core->anal->sdb_types, link_type); + const ut32 type_bitsize = rz_type_get_bitsize (core->analysis->sdb_types, link_type); // always round up when calculating byte_size from bit_size of types // could be struct with a bitfield entry inc = (type_bitsize >> 3) + (!!(type_bitsize & 0x7)); free (fmt); - rz_anal_op_fini (&ds->analop); + rz_analysis_op_fini (&ds->analop); continue; } } else { @@ -5352,7 +5352,7 @@ toro: ret = ds_disassemble (ds, buf + addrbytes * idx, len - addrbytes * idx); if (ret == -31337) { inc = ds->oplen; - rz_anal_op_fini (&ds->analop); + rz_analysis_op_fini (&ds->analop); continue; } } @@ -5360,13 +5360,13 @@ toro: if (ds->retry) { ds->retry = false; rz_cons_break_pop (); - rz_anal_op_fini (&ds->analop); + rz_analysis_op_fini (&ds->analop); goto retry; } ds_atabs_option (ds); if (ds->analop.addr != ds->at) { - rz_anal_op_fini (&ds->analop); - rz_anal_op (core->anal, &ds->analop, ds->at, buf + addrbytes * idx, (int)(len - addrbytes * idx), RZ_ANAL_OP_MASK_ALL); + rz_analysis_op_fini (&ds->analop); + rz_analysis_op (core->analysis, &ds->analop, ds->at, buf + addrbytes * idx, (int)(len - addrbytes * idx), RZ_ANAL_OP_MASK_ALL); } if (ret < 1) { rz_strbuf_fini (&ds->analop.esil); @@ -5401,15 +5401,15 @@ toro: } if (ds->pdf) { static bool sparse = false; - RzAnalBlock *bb = rz_anal_fcn_bbget_in (core->anal, ds->pdf, ds->at); + RzAnalysisBlock *bb = rz_analysis_fcn_bbget_in (core->analysis, ds->pdf, ds->at); if (!bb) { for (inc = 1; inc < ds->oplen; inc++) { - RzAnalBlock *bb = rz_anal_fcn_bbget_in (core->anal, ds->pdf, ds->at + inc); + RzAnalysisBlock *bb = rz_analysis_fcn_bbget_in (core->analysis, ds->pdf, ds->at + inc); if (bb) { break; } } - rz_anal_op_fini (&ds->analop); + rz_analysis_op_fini (&ds->analop); if (!sparse) { rz_cons_printf ("..\n"); sparse = true; @@ -5452,13 +5452,13 @@ toro: ds_start_line_highlight (ds); ds_print_offset (ds); //// - RzAnalFunction *fcn = f; + RzAnalysisFunction *fcn = f; if (fcn) { - RzAnalBlock *bb = rz_anal_fcn_bbget_in (core->anal, fcn, ds->at); + RzAnalysisBlock *bb = rz_analysis_fcn_bbget_in (core->analysis, fcn, ds->at); if (!bb) { - fcn = rz_anal_get_function_at (core->anal, ds->at); + fcn = rz_analysis_get_function_at (core->analysis, ds->at); if (fcn) { - bb = rz_anal_fcn_bbget_in (core->anal, fcn, ds->at); + bb = rz_analysis_fcn_bbget_in (core->analysis, fcn, ds->at); } } if (bb) { @@ -5600,7 +5600,7 @@ toro: } inc += ds->asmop.payload + (ds->asmop.payload % ds->core->rasm->dataalign); } - rz_anal_op_fini (&ds->analop); + rz_analysis_op_fini (&ds->analop); RZ_FREE (nbuf); rz_cons_break_pop (); @@ -5649,7 +5649,7 @@ toro: RZ_FREE (nbuf); p->calc_row_offsets = calc_row_offsets; /* used by asm.emu */ - rz_reg_arena_pop (core->anal->reg); + rz_reg_arena_pop (core->analysis->reg); return addrbytes * idx; //-ds->lastfail; } @@ -5668,7 +5668,7 @@ RZ_API int rz_core_print_disasm_instructions_with_buf(RzCore *core, ut64 address int i, j, ret, len = 0; char *tmpopstr; const ut64 old_offset = core->offset; - bool hasanal = false; + bool hasanalysis = false; const size_t addrbytes = buf ? 1 : core->io->addrbytes; int skip_bytes_flag = 0, skip_bytes_bb = 0; @@ -5676,7 +5676,7 @@ RZ_API int rz_core_print_disasm_instructions_with_buf(RzCore *core, ut64 address return 0; } - rz_reg_arena_push (core->anal->reg); + rz_reg_arena_push (core->analysis->reg); ds = ds_init (core); ds->l = nb_opcodes; @@ -5696,7 +5696,7 @@ toro: for (i = 0; check_end (nb_opcodes, nb_bytes, addrbytes * i, j); i += ret, j++) { ds->at = address + i; ds->vat = rz_core_pava (core, ds->at); - hasanal = false; + hasanalysis = false; rz_core_seek_arch_bits (core, ds->at); if (rz_cons_is_breaked ()) { break; @@ -5705,7 +5705,7 @@ toro: ds->has_description = false; rz_asm_set_pc (core->rasm, ds->at); // XXX copypasta from main disassembler function - // rz_anal_get_fcn_in (core->anal, ds->at, RZ_ANAL_FCN_TYPE_NULL); + // rz_analysis_get_fcn_in (core->analysis, ds->at, RZ_ANAL_FCN_TYPE_NULL); ret = rz_asm_disassemble (core->rasm, &ds->asmop, buf + addrbytes * i, nb_bytes - addrbytes * i); ds->oplen = ret; @@ -5721,11 +5721,11 @@ toro: if (skip_bytes_bb && skip_bytes_bb < ret) { ret = skip_bytes_bb; } - rz_anal_op_fini (&ds->analop); - if (!hasanal) { + rz_analysis_op_fini (&ds->analop); + if (!hasanalysis) { // XXX we probably don't need MASK_ALL - rz_anal_op (core->anal, &ds->analop, ds->at, buf + addrbytes * i, nb_bytes - addrbytes * i, RZ_ANAL_OP_MASK_ALL); - hasanal = true; + rz_analysis_op (core->analysis, &ds->analop, ds->at, buf + addrbytes * i, nb_bytes - addrbytes * i, RZ_ANAL_OP_MASK_ALL); + hasanalysis = true; } if (ds_must_strip (ds)) { continue; @@ -5748,22 +5748,22 @@ toro: } else { if (ds->decode && !ds->immtrim) { RZ_FREE (ds->opstr); - if (!hasanal) { - rz_anal_op (core->anal, &ds->analop, ds->at, buf + i, nb_bytes - i, RZ_ANAL_OP_MASK_ALL); - hasanal = true; + if (!hasanalysis) { + rz_analysis_op (core->analysis, &ds->analop, ds->at, buf + i, nb_bytes - i, RZ_ANAL_OP_MASK_ALL); + hasanalysis = true; } - tmpopstr = rz_anal_op_to_string (core->anal, &ds->analop); + tmpopstr = rz_analysis_op_to_string (core->analysis, &ds->analop); ds->opstr = (tmpopstr)? tmpopstr: strdup (rz_asm_op_get_asm (&ds->asmop)); } else if (ds->immtrim) { free (ds->opstr); ds->opstr = strdup (rz_asm_op_get_asm (&ds->asmop)); rz_parse_immtrim (ds->opstr); } else if (ds->use_esil) { - if (!hasanal) { - rz_anal_op (core->anal, &ds->analop, + if (!hasanalysis) { + rz_analysis_op (core->analysis, &ds->analop, ds->at, buf + i, nb_bytes - i, RZ_ANAL_OP_MASK_ESIL | RZ_ANAL_OP_MASK_HINT); - hasanal = true; + hasanalysis = true; } if (*RZ_STRBUF_SAFEGET (&ds->analop.esil)) { free (ds->opstr); @@ -5813,7 +5813,7 @@ toro: RZ_FREE (ds->opstr); } if (ds->hint) { - rz_anal_hint_free (ds->hint); + rz_analysis_hint_free (ds->hint); ds->hint = NULL; } } @@ -5825,7 +5825,7 @@ toro: rz_cons_break_pop (); ds_free (ds); core->offset = old_offset; - rz_reg_arena_pop (core->anal->reg); + rz_reg_arena_pop (core->analysis->reg); return len; } @@ -5902,7 +5902,7 @@ RZ_API int rz_core_print_disasm_instructions(RzCore *core, int nb_bytes, int nb_ RZ_API int rz_core_print_disasm_json(RzCore *core, ut64 addr, ut8 *buf, int nb_bytes, int nb_opcodes, PJ *pj) { RzAsmOp asmop; RDisasmState *ds; - RzAnalFunction *f; + RzAnalysisFunction *f; int i, j, k, ret, line; ut64 old_offset = core->offset; ut64 at; @@ -6026,14 +6026,14 @@ RZ_API int rz_core_print_disasm_json(RzCore *core, ut64 addr, ut8 *buf, int nb_b rz_str_ncpy (opstr, rz_asm_op_get_asm (&asmop), sizeof (opstr) - 1); ds->has_description = false; - rz_anal_op_fini (&ds->analop); - rz_anal_op (core->anal, &ds->analop, at, buf + i, nb_bytes - i, RZ_ANAL_OP_MASK_ALL); + rz_analysis_op_fini (&ds->analop); + rz_analysis_op (core->analysis, &ds->analop, at, buf + i, nb_bytes - i, RZ_ANAL_OP_MASK_ALL); if (ds->pseudo) { rz_parse_parse (core->parser, opstr, opstr); } - // f = rz_anal_get_fcn_in (core->anal, at, + // f = rz_analysis_get_fcn_in (core->analysis, at, f = fcnIn (ds, at, RZ_ANAL_FCN_TYPE_FCN | RZ_ANAL_FCN_TYPE_SYM | RZ_ANAL_FCN_TYPE_LOC); if (ds->subvar && f) { int ba_len = rz_strbuf_length (&asmop.buf_asm) + 128; @@ -6093,7 +6093,7 @@ RZ_API int rz_core_print_disasm_json(RzCore *core, ut64 addr, ut8 *buf, int nb_b pj_s (pj, RZ_STRBUF_SAFEGET (&ds->analop.esil)); pj_kb (pj, "refptr", ds->analop.refptr); pj_kn (pj, "fcn_addr", f ? f->addr : 0); - pj_kn (pj, "fcn_last", f ? rz_anal_function_max_addr (f) - ds->oplen : 0); + pj_kn (pj, "fcn_last", f ? rz_analysis_function_max_addr (f) - ds->oplen : 0); pj_ki (pj, "size", ds->analop.size); pj_ks (pj, "opcode", opstr); pj_ks (pj, "disasm", str); @@ -6102,8 +6102,8 @@ RZ_API int rz_core_print_disasm_json(RzCore *core, ut64 addr, ut8 *buf, int nb_b pj_ks (pj, "bytes", hex); free (hex); } - pj_ks (pj, "family", rz_anal_op_family_to_string (ds->analop.family)); - pj_ks (pj, "type", rz_anal_optype_to_string (ds->analop.type)); + pj_ks (pj, "family", rz_analysis_op_family_to_string (ds->analop.family)); + pj_ks (pj, "type", rz_analysis_optype_to_string (ds->analop.type)); // indicate a relocated address RzBinReloc *rel = rz_core_getreloc (core, ds->at, ds->analop.size); // reloc is true if address in reloc table @@ -6117,7 +6117,7 @@ RZ_API int rz_core_print_disasm_json(RzCore *core, ut64 addr, ut8 *buf, int nb_b // this is an artifact to make ensure the disassembly is properly // represented during the analysis RzListIter *iter; - RzAnalCaseOp *caseop; + RzAnalysisCaseOp *caseop; pj_k (pj, "switch"); pj_a (pj); rz_list_foreach (ds->analop.switch_op->cases, iter, caseop ) { @@ -6152,7 +6152,7 @@ RZ_API int rz_core_print_disasm_json(RzCore *core, ut64 addr, ut8 *buf, int nb_b /* add comments */ { // TODO: slow because we are encoding b64 - const char *comment = rz_meta_get_string (core->anal, RZ_META_TYPE_COMMENT, at); + const char *comment = rz_meta_get_string (core->analysis, RZ_META_TYPE_COMMENT, at); if (comment) { char *b64comment = sdb_encode ((const ut8*)comment, -1); pj_ks (pj, "comment", b64comment); @@ -6161,16 +6161,16 @@ RZ_API int rz_core_print_disasm_json(RzCore *core, ut64 addr, ut8 *buf, int nb_b } /* add refs */ { - RzAnalRef *ref; + RzAnalysisRef *ref; RzListIter *iter; - RzList *refs = rz_anal_refs_get (core->anal, at); + RzList *refs = rz_analysis_refs_get (core->analysis, at); if (refs && !rz_list_empty (refs)) { pj_k (pj, "refs"); pj_a (pj); rz_list_foreach (refs, iter, ref) { pj_o (pj); pj_kn (pj, "addr", ref->addr); - pj_ks (pj, "type", rz_anal_xrefs_type_tostring (ref->type)); + pj_ks (pj, "type", rz_analysis_xrefs_type_tostring (ref->type)); pj_end (pj); } pj_end (pj); @@ -6179,16 +6179,16 @@ RZ_API int rz_core_print_disasm_json(RzCore *core, ut64 addr, ut8 *buf, int nb_b } /* add xrefs */ { - RzAnalRef *ref; + RzAnalysisRef *ref; RzListIter *iter; - RzList *xrefs = rz_anal_xrefs_get (core->anal, at); + RzList *xrefs = rz_analysis_xrefs_get (core->analysis, at); if (xrefs && !rz_list_empty (xrefs)) { pj_k (pj, "xrefs"); pj_a (pj); rz_list_foreach (xrefs, iter, ref) { pj_o (pj); pj_kn (pj, "addr", ref->addr); - pj_ks (pj, "type", rz_anal_xrefs_type_tostring (ref->type)); + pj_ks (pj, "type", rz_analysis_xrefs_type_tostring (ref->type)); pj_end (pj); } pj_end (pj); @@ -6211,7 +6211,7 @@ RZ_API int rz_core_print_disasm_json(RzCore *core, ut64 addr, ut8 *buf, int nb_b } // rz_cons_printf ("]"); core->offset = old_offset; - rz_anal_op_fini (&ds->analop); + rz_analysis_op_fini (&ds->analop); ds_free (ds); if (!result) { pj_o (pj); @@ -6266,9 +6266,9 @@ RZ_API int rz_core_print_disasm_all(RzCore *core, ut64 addr, int l, int len, int rz_parse_filter (core->parser, ds->vat, core->flags, ds->hint, rz_asm_op_get_asm (&asmop), str, sizeof (str), core->print->big_endian); if (scr_color) { - RzAnalOp aop; - RzAnalFunction *f = fcnIn (ds, ds->vat, RZ_ANAL_FCN_TYPE_NULL); - rz_anal_op (core->anal, &aop, addr, buf+i, l-i, RZ_ANAL_OP_MASK_ALL); + RzAnalysisOp aop; + RzAnalysisFunction *f = fcnIn (ds, ds->vat, RZ_ANAL_FCN_TYPE_NULL); + rz_analysis_op (core->analysis, &aop, addr, buf+i, l-i, RZ_ANAL_OP_MASK_ALL); char *buf_asm = rz_print_colorize_opcode (core->print, str, core->cons->context->pal.reg, core->cons->context->pal.num, false, f ? f->addr : 0); if (buf_asm) { @@ -6369,7 +6369,7 @@ RZ_API int rz_core_disasm_pdi_with_buf(RzCore *core, ut64 address, ut8 *buf, ut3 rz_config_set_i (core->config, "asm.marks", false); i = 0; j = 0; - RzAnalMetaItem *meta = NULL; + RzAnalysisMetaItem *meta = NULL; toro: for (; check_end (nb_opcodes, nb_bytes, addrbytes * i, j); j++) { if (rz_cons_is_breaked ()) { @@ -6399,7 +6399,7 @@ toro: } ut64 meta_start = at; ut64 meta_size; - meta = rz_meta_get_at (core->anal, meta_start, RZ_META_TYPE_ANY, &meta_size); + meta = rz_meta_get_at (core->analysis, meta_start, RZ_META_TYPE_ANY, &meta_size); if (meta) { switch (meta->type) { case RZ_META_TYPE_DATA: @@ -6472,7 +6472,7 @@ toro: } } if (fmt == 'C') { - const char *comment = rz_meta_get_string (core->anal, RZ_META_TYPE_COMMENT, core->offset + i); + const char *comment = rz_meta_get_string (core->analysis, RZ_META_TYPE_COMMENT, core->offset + i); if (comment) { rz_cons_printf ("0x%08" PFMT64x " %s\n", core->offset + i, comment); } @@ -6500,13 +6500,13 @@ toro: if (!asm_instr) { rz_cons_newline (); } else if (!asm_immtrim && (decode || esil)) { - RzAnalOp analop = { + RzAnalysisOp analop = { 0 }; char *tmpopstr, *opstr = NULL; - rz_anal_op (core->anal, &analop, core->offset + i, + rz_analysis_op (core->analysis, &analop, core->offset + i, buf + addrbytes * i, nb_bytes - addrbytes * i, RZ_ANAL_OP_MASK_ALL); - tmpopstr = rz_anal_op_to_string (core->anal, &analop); + tmpopstr = rz_analysis_op_to_string (core->analysis, &analop); if (fmt == 'e') { // pie char *esil = (RZ_STRBUF_SAFEGET (&analop.esil)); rz_cons_println (esil); @@ -6521,7 +6521,7 @@ toro: } rz_cons_println (opstr); } - rz_anal_op_fini (&analop); + rz_analysis_op_fini (&analop); } else { char opstr[128] = { 0 @@ -6534,25 +6534,25 @@ toro: rz_parse_immtrim (asm_str); } if (subnames) { - RzAnalHint *hint = rz_anal_hint_get (core->anal, at); + RzAnalysisHint *hint = rz_analysis_hint_get (core->analysis, at); rz_parse_filter (core->parser, at, core->flags, hint, asm_str, opstr, sizeof (opstr) - 1, core->print->big_endian); - rz_anal_hint_free (hint); + rz_analysis_hint_free (hint); asm_str = (char *)&opstr; } if (show_color) { - RzAnalOp aop = { + RzAnalysisOp aop = { 0 }; - RzAnalFunction *f = rz_anal_get_fcn_in (core->anal, core->offset + i, RZ_ANAL_FCN_TYPE_NULL); - rz_anal_op (core->anal, &aop, core->offset + i, + RzAnalysisFunction *f = rz_analysis_get_fcn_in (core->analysis, core->offset + i, RZ_ANAL_FCN_TYPE_NULL); + rz_analysis_op (core->analysis, &aop, core->offset + i, buf + addrbytes * i, nb_bytes - addrbytes * i, RZ_ANAL_OP_MASK_BASIC); asm_str = rz_print_colorize_opcode (core->print, asm_str, color_reg, color_num, false, f ? f->addr : 0); rz_cons_printf ("%s%s"Color_RESET "\n", rz_print_color_op_type (core->print, aop.type), asm_str); free (asm_str); - rz_anal_op_fini (&aop); + rz_analysis_op_fini (&aop); } else { rz_cons_println (asm_str); } @@ -6598,7 +6598,7 @@ RZ_API int rz_core_disasm_pde(RzCore *core, int nb_opcodes, int mode) { if (nb_opcodes < 1) { return 0; } - RzReg *reg = core->anal->reg; + RzReg *reg = core->analysis->reg; RzRegItem *pc = rz_reg_get (reg, "PC", RZ_REG_TYPE_ALL); if (!pc) { return -1; @@ -6611,13 +6611,13 @@ RZ_API int rz_core_disasm_pde(RzCore *core, int nb_opcodes, int mode) { } pj_a (pj); } - if (!core->anal->esil) { + if (!core->analysis->esil) { rz_core_cmd0 (core, "aei"); if (!rz_config_get_i (core->config, "cfg.debug")) { rz_core_cmd0 (core, "aeim"); } } - RzAnalEsil *esil = core->anal->esil; + RzAnalysisEsil *esil = core->analysis->esil; RzPVector ocache = core->io->cache; RzCache *ocacheb = core->io->buffer; const int ocached = core->io->cached; @@ -6640,8 +6640,8 @@ RZ_API int rz_core_disasm_pde(RzCore *core, int nb_opcodes, int mode) { rz_config_set_i (core->config, "io.cache", true); rz_config_set_i (core->config, "asm.lines", false); const char *strip = rz_config_get (core->config, "asm.strip"); - const int max_op_size = rz_anal_archinfo (core->anal, RZ_ANAL_ARCHINFO_MAX_OP_SIZE); - int min_op_size = rz_anal_archinfo (core->anal, RZ_ANAL_ARCHINFO_MIN_OP_SIZE); + const int max_op_size = rz_analysis_archinfo (core->analysis, RZ_ANAL_ARCHINFO_MAX_OP_SIZE); + int min_op_size = rz_analysis_archinfo (core->analysis, RZ_ANAL_ARCHINFO_MIN_OP_SIZE); min_op_size = min_op_size > 0 ? min_op_size : 1; const ut64 read_len = max_op_size > 0 ? max_op_size : 32; size_t buf_sz = 0x100, block_sz = 0, block_instr = 0; @@ -6653,8 +6653,8 @@ RZ_API int rz_core_disasm_pde(RzCore *core, int nb_opcodes, int mode) { if (!read_ahead (core->io, &buf, &buf_sz, op_addr, block_sz, read_len)) { break; } - RzAnalOp op; - int ret = rz_anal_op (core->anal, &op, op_addr, buf + block_sz, read_len, RZ_ANAL_OP_MASK_ESIL); + RzAnalysisOp op; + int ret = rz_analysis_op (core->analysis, &op, op_addr, buf + block_sz, read_len, RZ_ANAL_OP_MASK_ESIL); const bool invalid_instr = ret < 1 || op.size < 1 || op.type == RZ_ANAL_OP_TYPE_ILL; bool end_of_block = false; switch (op.type & RZ_ANAL_OP_TYPE_MASK & ~RZ_ANAL_OP_HINT_MASK) { @@ -6666,7 +6666,7 @@ RZ_API int rz_core_disasm_pde(RzCore *core, int nb_opcodes, int mode) { end_of_block = true; break; } - if (RZ_STR_ISNOTEMPTY (strip) && strstr (strip, rz_anal_optype_to_string (op.type))) { + if (RZ_STR_ISNOTEMPTY (strip) && strstr (strip, rz_analysis_optype_to_string (op.type))) { i--; } else { if (invalid_instr) { @@ -6712,13 +6712,13 @@ RZ_API int rz_core_disasm_pde(RzCore *core, int nb_opcodes, int mode) { if (invalid_instr) { break; } - rz_anal_esil_set_pc (core->anal->esil, op_addr); + rz_analysis_esil_set_pc (core->analysis->esil, op_addr); rz_reg_set_value (reg, pc, op_addr + op.size); const char *e = rz_strbuf_get (&op.esil); if (RZ_STR_ISNOTEMPTY (e)) { - rz_anal_esil_parse (esil, e); + rz_analysis_esil_parse (esil, e); } - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); if (end_of_block) { block_start = rz_reg_get_value (reg, pc); diff --git a/librz/core/disasm_stackptr.inc b/librz/core/disasm_stackptr.inc index 4562a2bba7..80ea7e040e 100644 --- a/librz/core/disasm_stackptr.inc +++ b/librz/core/disasm_stackptr.inc @@ -3,7 +3,7 @@ #define USE_BB_STACKPTR 0 #define USE_BB_LINEAR 1 -static void ds_update_stackptr(RDisasmState *ds, RzAnalOp *op) { +static void ds_update_stackptr(RDisasmState *ds, RzAnalysisOp *op) { if (!ds->show_stackptr) { return; } @@ -21,7 +21,7 @@ static void ds_update_stackptr(RDisasmState *ds, RzAnalOp *op) { break; } /* XXX if we reset the stackptr 'ret 0x4' has not effect. - * Use RzAnalFunction->RzAnalOp->stackptr? */ + * Use RzAnalysisFunction->RzAnalysisOp->stackptr? */ if (op->type == RZ_ANAL_OP_TYPE_RET) { ds->stackptr = 0; } @@ -32,7 +32,7 @@ static int _stackptr_range(RDisasmState *ds, ut64 addr, ut64 addr_end, int stack ut64 end = addr_end; while (at < end) { int sz = 1; - RzAnalOp* op = rz_core_anal_op (ds->core, at, 0); + RzAnalysisOp* op = rz_core_analysis_op (ds->core, at, 0); if (op) { *ostackptr = stackptr; switch (op->stackop) { @@ -49,7 +49,7 @@ static int _stackptr_range(RDisasmState *ds, ut64 addr, ut64 addr_end, int stack if (op->size > 0) { sz = op->size; } - rz_anal_op_free (op); + rz_analysis_op_free (op); } at += sz; } @@ -70,9 +70,9 @@ static int ds_ostackptr_atfcn(RDisasmState *ds, int *ostackptr) { // SLOW, recursive emulation is more correct, but slow to find paths // return stackptr; ut64 addr = ds->at; - RzList *paths = rz_core_anal_graph_to (ds->core, addr, 2); + RzList *paths = rz_core_analysis_graph_to (ds->core, addr, 2); if (paths) { - RzAnalBlock *bb; + RzAnalysisBlock *bb; RzList *path; RzListIter *pathi; RzListIter *bbi; @@ -95,9 +95,9 @@ static int ds_ostackptr_at(RDisasmState *ds, int *ostackptr) { #if USE_BB_STACKPTR // XXX doesnt works because bb->stackptr returns the maximum increment of the bb instead of the initial stackptr value *ostackptr = ds->ostackptr; - RzAnalFunction *fcn = rz_anal_get_fcn_in (ds->core->anal, ds->at, RZ_ANAL_FCN_TYPE_NULL); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (ds->core->analysis, ds->at, RZ_ANAL_FCN_TYPE_NULL); if (fcn) { - RzAnalBlock *bb = rz_anal_fcn_bbget_in (ds->core->anal, fcn, ds->at); + RzAnalysisBlock *bb = rz_analysis_fcn_bbget_in (ds->core->analysis, fcn, ds->at); if (bb) { return bb->stackptr; } else { diff --git a/librz/core/gdiff.c b/librz/core/gdiff.c index 646240533d..42ff6e7877 100644 --- a/librz/core/gdiff.c +++ b/librz/core/gdiff.c @@ -2,31 +2,31 @@ #include #include -#include +#include #include #include #include RZ_API int rz_core_gdiff_fcn(RzCore *c, ut64 addr, ut64 addr2) { RzList *la, *lb; - RzAnalFunction *fa = rz_anal_get_function_at (c->anal, addr); - RzAnalFunction *fb = rz_anal_get_function_at (c->anal, addr2); + RzAnalysisFunction *fa = rz_analysis_get_function_at (c->analysis, addr); + RzAnalysisFunction *fb = rz_analysis_get_function_at (c->analysis, addr2); if (!fa || !fb) { return false; } - RzAnalBlock *bb; + RzAnalysisBlock *bb; RzListIter *iter; rz_list_foreach (fa->bbs, iter, bb) { - rz_anal_diff_fingerprint_bb (c->anal, bb); + rz_analysis_diff_fingerprint_bb (c->analysis, bb); } rz_list_foreach (fb->bbs, iter, bb) { - rz_anal_diff_fingerprint_bb (c->anal, bb); + rz_analysis_diff_fingerprint_bb (c->analysis, bb); } la = rz_list_new (); rz_list_append (la, fa); lb = rz_list_new (); rz_list_append (lb, fb); - rz_anal_diff_fcn (c->anal, la, lb); + rz_analysis_diff_fcn (c->analysis, la, lb); rz_list_free (la); rz_list_free (lb); return true; @@ -35,8 +35,8 @@ RZ_API int rz_core_gdiff_fcn(RzCore *c, ut64 addr, ut64 addr2) { /* Fingerprint functions and blocks, then diff. */ RZ_API int rz_core_gdiff(RzCore *c, RzCore *c2) { RzCore *cores[2] = {c, c2}; - RzAnalFunction *fcn; - RzAnalBlock *bb; + RzAnalysisFunction *fcn; + RzAnalysisBlock *bb; RzListIter *iter, *iter2; int i; @@ -45,24 +45,24 @@ RZ_API int rz_core_gdiff(RzCore *c, RzCore *c2) { } for (i = 0; i < 2; i++) { /* remove strings */ - rz_list_foreach_safe (cores[i]->anal->fcns, iter, iter2, fcn) { + rz_list_foreach_safe (cores[i]->analysis->fcns, iter, iter2, fcn) { if (!strncmp (fcn->name, "str.", 4)) { - rz_anal_function_delete (fcn); + rz_analysis_function_delete (fcn); } } /* Fingerprint fcn bbs (functions basic-blocks) */ - rz_list_foreach (cores[i]->anal->fcns, iter, fcn) { + rz_list_foreach (cores[i]->analysis->fcns, iter, fcn) { rz_list_foreach (fcn->bbs, iter2, bb) { - rz_anal_diff_fingerprint_bb (cores[i]->anal, bb); + rz_analysis_diff_fingerprint_bb (cores[i]->analysis, bb); } } /* Fingerprint fcn */ - rz_list_foreach (cores[i]->anal->fcns, iter, fcn) { - rz_anal_diff_fingerprint_fcn (cores[i]->anal, fcn); + rz_list_foreach (cores[i]->analysis->fcns, iter, fcn) { + rz_analysis_diff_fingerprint_fcn (cores[i]->analysis, fcn); } } /* Diff functions */ - rz_anal_diff_fcn (cores[0]->anal, cores[0]->anal->fcns, cores[1]->anal->fcns); + rz_analysis_diff_fcn (cores[0]->analysis, cores[0]->analysis->fcns, cores[1]->analysis->fcns); return true; } @@ -91,10 +91,10 @@ static void diffrow(ut64 addr, const char *name, ut32 size, int maxnamelen, RZ_API void rz_core_diff_show(RzCore *c, RzCore *c2) { bool bare = rz_config_get_i (c->config, "diff.bare") || rz_config_get_i (c2->config, "diff.bare"); - RzList *fcns = rz_anal_get_fcns (c->anal); + RzList *fcns = rz_analysis_get_fcns (c->analysis); const char *match; RzListIter *iter; - RzAnalFunction *f; + RzAnalysisFunction *f; int maxnamelen = 0; ut64 maxsize = 0; int digits = 1; @@ -104,17 +104,17 @@ RZ_API void rz_core_diff_show(RzCore *c, RzCore *c2) { if (f->name && (len = strlen (f->name)) > maxnamelen) { maxnamelen = len; } - if (rz_anal_function_linear_size (f) > maxsize) { - maxsize = rz_anal_function_linear_size (f); + if (rz_analysis_function_linear_size (f) > maxsize) { + maxsize = rz_analysis_function_linear_size (f); } } - fcns = rz_anal_get_fcns (c2->anal); + fcns = rz_analysis_get_fcns (c2->analysis); rz_list_foreach (fcns, iter, f) { if (f->name && (len = strlen (f->name)) > maxnamelen) { maxnamelen = len; } - if (rz_anal_function_linear_size (f) > maxsize) { - maxsize = rz_anal_function_linear_size (f); + if (rz_analysis_function_linear_size (f) > maxsize) { + maxsize = rz_analysis_function_linear_size (f); } } while (maxsize > 9) { @@ -122,12 +122,12 @@ RZ_API void rz_core_diff_show(RzCore *c, RzCore *c2) { digits++; } - fcns = rz_anal_get_fcns (c->anal); + fcns = rz_analysis_get_fcns (c->analysis); if (rz_list_empty (fcns)) { eprintf ("No functions found, try running with -A or load a project\n"); return; } - rz_list_sort (fcns, c->anal->columnSort); + rz_list_sort (fcns, c->analysis->columnSort); rz_list_foreach (fcns, iter, f) { switch (f->type) { @@ -144,20 +144,20 @@ RZ_API void rz_core_diff_show(RzCore *c, RzCore *c2) { match = "NEW"; f->diff->dist = 0; } - diffrow (f->addr, f->name, rz_anal_function_linear_size (f), maxnamelen, digits, + diffrow (f->addr, f->name, rz_analysis_function_linear_size (f), maxnamelen, digits, f->diff->addr, f->diff->name, f->diff->size, match, f->diff->dist, bare); break; } } - fcns = rz_anal_get_fcns (c2->anal); - rz_list_sort (fcns, c2->anal->columnSort); + fcns = rz_analysis_get_fcns (c2->analysis); + rz_list_sort (fcns, c2->analysis->columnSort); rz_list_foreach (fcns, iter, f) { switch (f->type) { case RZ_ANAL_FCN_TYPE_FCN: case RZ_ANAL_FCN_TYPE_SYM: if (f->diff->type == RZ_ANAL_DIFF_TYPE_NULL) { - diffrow (f->addr, f->name, rz_anal_function_linear_size (f), maxnamelen, + diffrow (f->addr, f->name, rz_analysis_function_linear_size (f), maxnamelen, digits, f->diff->addr, f->diff->name, f->diff->size, "NEW", 0, bare); //f->diff->dist, bare); } diff --git a/librz/core/hack.c b/librz/core/hack.c index d2e05064b3..e0f7ebd4a5 100644 --- a/librz/core/hack.c +++ b/librz/core/hack.c @@ -26,7 +26,7 @@ void rz_core_hack_help(const RzCore *core) { rz_core_cmd_help (core, help_msg); } -RZ_API bool rz_core_hack_dalvik(RzCore *core, const char *op, const RzAnalOp *analop) { +RZ_API bool rz_core_hack_dalvik(RzCore *core, const char *op, const RzAnalysisOp *analop) { if (!strcmp (op, "nop")) { rz_core_cmdf (core, "wx 0000"); } else if (!strcmp (op, "ret2")) { @@ -44,7 +44,7 @@ RZ_API bool rz_core_hack_dalvik(RzCore *core, const char *op, const RzAnalOp *an return true; } -RZ_API bool rz_core_hack_arm64(RzCore *core, const char *op, const RzAnalOp *analop) { +RZ_API bool rz_core_hack_arm64(RzCore *core, const char *op, const RzAnalysisOp *analop) { if (!strcmp (op, "nop")) { rz_core_cmdf (core, "wx 1f2003d5"); } else if (!strcmp (op, "ret")) { @@ -77,7 +77,7 @@ RZ_API bool rz_core_hack_arm64(RzCore *core, const char *op, const RzAnalOp *ana } return true; } -RZ_API bool rz_core_hack_arm(RzCore *core, const char *op, const RzAnalOp *analop) { +RZ_API bool rz_core_hack_arm(RzCore *core, const char *op, const RzAnalysisOp *analop) { const int bits = core->rasm->bits; const ut8 *b = core->block; @@ -196,7 +196,7 @@ RZ_API bool rz_core_hack_arm(RzCore *core, const char *op, const RzAnalOp *analo return true; } -RZ_API bool rz_core_hack_x86(RzCore *core, const char *op, const RzAnalOp *analop) { +RZ_API bool rz_core_hack_x86(RzCore *core, const char *op, const RzAnalysisOp *analop) { const ut8 *b = core->block; int i, size = analop->size; if (!strcmp (op, "nop")) { @@ -264,7 +264,7 @@ RZ_API bool rz_core_hack_x86(RzCore *core, const char *op, const RzAnalOp *analo } RZ_API int rz_core_hack(RzCore *core, const char *op) { - bool (*hack)(RzCore *core, const char *op, const RzAnalOp *analop) = NULL; + bool (*hack)(RzCore *core, const char *op, const RzAnalysisOp *analop) = NULL; const char *asmarch = rz_config_get (core->config, "asm.arch"); const int asmbits = core->rasm->bits; @@ -285,8 +285,8 @@ RZ_API int rz_core_hack(RzCore *core, const char *op) { eprintf ("TODO: write hacks are only for x86\n"); } if (hack) { - RzAnalOp analop; - if (!rz_anal_op (core->anal, &analop, core->offset, core->block, core->blocksize, RZ_ANAL_OP_MASK_BASIC)) { + RzAnalysisOp analop; + if (!rz_analysis_op (core->analysis, &analop, core->offset, core->block, core->blocksize, RZ_ANAL_OP_MASK_BASIC)) { eprintf ("anal op fail\n"); return false; } diff --git a/librz/core/libs.c b/librz/core/libs.c index fa4525bb6d..f7e01d5858 100644 --- a/librz/core/libs.c +++ b/librz/core/libs.c @@ -35,7 +35,7 @@ CB (debug, dbg) #define rz_bp_add rz_bp_plugin_add CB (bp, dbg->bp) CB (lang, lang) -CB (anal, anal) +CB (analysis, analysis) CB (asm, rasm) CB (parse, parser) CB (bin, bin) @@ -99,7 +99,7 @@ RZ_API void rz_core_loadlibs_init(RzCore *core) { DF (DBG, "debugger plugins", debug); DF (BP, "debugger breakpoint plugins", bp); DF (LANG, "language plugins", lang); - DF (ANAL, "analysis plugins", anal); + DF (ANAL, "analysis plugins", analysis); DF (ASM, "(dis)assembler plugins", asm); DF (PARSE, "parsing plugins", parse); DF (BIN, "bin plugins", bin); diff --git a/librz/core/meson.build b/librz/core/meson.build index 0c8611318f..684263997d 100644 --- a/librz/core/meson.build +++ b/librz/core/meson.build @@ -99,7 +99,7 @@ rz_core_deps = [ rz_syscall_dep, rz_search_dep, rz_cons_dep, - rz_anal_dep, + rz_analysis_dep, rz_socket_dep, rz_io_dep, rz_lang_dep, @@ -151,7 +151,7 @@ pkgconfig_mod.generate( 'rz_syscall', 'rz_search', 'rz_cons', - 'rz_anal', + 'rz_analysis', 'rz_socket', 'rz_io', 'rz_lang', diff --git a/librz/core/p/Makefile b/librz/core/p/Makefile index 28637d00e9..e1fd212423 100644 --- a/librz/core/p/Makefile +++ b/librz/core/p/Makefile @@ -9,7 +9,7 @@ CFLAGS+=-L../../cons -lrz_cons -L../../bin -lrz_bin CFLAGS+=-L../../parse -lrz_parse -L../../io -lrz_io CFLAGS+=-L../../magic -lrz_magic -L../../hash -lrz_hash CFLAGS+=-L../../config -lrz_config -CFLAGS+=-L../../anal -lrz_anal -L../../egg -lrz_egg -L../../flag -lrz_flag +CFLAGS+=-L../../analysis -lrz_analysis -L../../egg -lrz_egg -L../../flag -lrz_flag CFLAGS+=-L../../syscall -lrz_syscall -L../../socket -lrz_socket -L../../search -lrz_search CFLAGS+= -L../../lang -lrz_lang -L../../debug -lrz_debug CFLAGS+=-L../../bp -lrz_bp -L../../reg -lrz_reg -L../../asm -lrz_asm diff --git a/librz/core/p/a2f.mk b/librz/core/p/a2f.mk index c02253f17f..b9d45d1588 100644 --- a/librz/core/p/a2f.mk +++ b/librz/core/p/a2f.mk @@ -7,7 +7,7 @@ ifeq ($(WITHPIC),1) ALL_TARGETS+=${CORE_TARGET_A2F} ${CORE_TARGET_A2F}: ${CORE_OBJ_A2F} - ${CC} $(call libname,core_anal) ${CFLAGS} \ + ${CC} $(call libname,core_analysis) ${CFLAGS} \ -o core_a2f.${EXT_SO} \ $(SHLR)/sdb/src/libsdb.a \ -L$(LIBR)/crypto -lrz_crypto \ diff --git a/librz/core/p/core_a2f.c b/librz/core/p/core_a2f.c index 3f922c31fe..0da8f326e4 100644 --- a/librz/core/p/core_a2f.c +++ b/librz/core/p/core_a2f.c @@ -121,7 +121,7 @@ static ut64 analyzeStackBased(RzCore *core, Sdb *db, ut64 addr, RzList *delayed_ #define bbAddOpcode(x) sdb_array_insert_num (db, sdb_fmt ("bb.%"PFMT64x, addr+cur), -1, x, 0); ut64 oaddr = addr; ut64 *value = NULL; - RzAnalOp *op; + RzAnalysisOp *op; int cur = 0; bool block_end = false; RzStack *stack = rz_stack_newf (10, free); @@ -140,7 +140,7 @@ static ut64 analyzeStackBased(RzCore *core, Sdb *db, ut64 addr, RzList *delayed_ free (value); cur = 0; while (!block_end && cur < maxfcnsize) { - op = rz_core_anal_op (core, addr + cur, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_DISASM); + op = rz_core_analysis_op (core, addr + cur, RZ_ANAL_OP_MASK_BASIC | RZ_ANAL_OP_MASK_DISASM); if (!op || !op->mnemonic) { eprintf ("a2f: Cannot analyze opcode at 0x%"PFMT64x"\n", addr+cur); oaddr = UT64_MAX; @@ -235,7 +235,7 @@ static ut64 analyzeStackBased(RzCore *core, Sdb *db, ut64 addr, RzList *delayed_ break; } cur += op->size; - rz_anal_op_free (op); + rz_analysis_op_free (op); op = NULL; } } diff --git a/librz/core/p/core_java.c b/librz/core/p/core_java.c index 484a3504a8..e493340fdf 100644 --- a/librz/core/p/core_java.c +++ b/librz/core/p/core_java.c @@ -6,7 +6,7 @@ #include #include #include -#include +#include #include "../../../shlr/java/ops.h" #include "../../../shlr/java/class.h" @@ -31,7 +31,7 @@ static const char * rz_cmd_java_consumetok (const char *str1, const char b, size static int rz_cmd_java_reload_bin_from_buf (RzCore *core, RzBinJavaObj *obj, ut8* buffer, ut64 len); static int rz_cmd_java_print_json_definitions( RzBinJavaObj *obj ); -static int rz_cmd_java_print_all_definitions( RzAnal *anal ); +static int rz_cmd_java_print_all_definitions( RzAnalysis *analysis ); static int rz_cmd_java_print_class_definitions( RzBinJavaObj *obj ); static int rz_cmd_java_print_field_definitions( RzBinJavaObj *obj ); static int rz_cmd_java_print_method_definitions( RzBinJavaObj *obj ); @@ -61,8 +61,8 @@ static int _(rz_cmd_java_print_method_count) (RzBinJavaObj *obj); static int rz_cmd_java_print_method_name (RzBinJavaObj *obj, ut16 idx); static int rz_cmd_java_print_method_num_name (RzBinJavaObj *obj); -static RzBinJavaObj * rz_cmd_java_get_bin_obj(RzAnal *anal); -static RzList * rz_cmd_java_get_bin_obj_list(RzAnal *anal); +static RzBinJavaObj * rz_cmd_java_get_bin_obj(RzAnalysis *analysis); +static RzList * rz_cmd_java_get_bin_obj_list(RzAnalysis *analysis); static ut64 rz_cmd_java_get_input_num_value(RzCore *core, const char *input_value); static int rz_cmd_java_is_valid_input_num_value(RzCore *core, const char *input_value); @@ -366,8 +366,8 @@ static const char *rz_cmd_java_strtok(const char *str1, const char b, size_t len return p; } -static RzAnal *get_anal(RzCore *core) { - return core? core->anal: NULL; +static RzAnalysis *get_anal(RzCore *core) { + return core? core->analysis: NULL; } static void rz_cmd_java_print_cmd_help(RzCmdJavaCmd *cmd) { @@ -393,8 +393,8 @@ static int rz_cmd_java_handle_help(RzCore *core, const char *input) { } static int rz_cmd_java_handle_prototypes(RzCore *core, const char *cmd) { - RzAnal *anal = get_anal (core); - RzBinJavaObj *obj = (RzBinJavaObj *)rz_cmd_java_get_bin_obj (anal); + RzAnalysis *analysis = get_anal (core); + RzBinJavaObj *obj = (RzBinJavaObj *)rz_cmd_java_get_bin_obj (analysis); IFDBG rz_cons_printf ("Function call made: %s\n", cmd); if (!obj) { @@ -407,15 +407,15 @@ static int rz_cmd_java_handle_prototypes(RzCore *core, const char *cmd) { case 'f': return rz_cmd_java_print_field_definitions (obj); case 'i': return rz_cmd_java_print_import_definitions (obj); case 'c': return rz_cmd_java_print_class_definitions (obj); - case 'a': return rz_cmd_java_print_all_definitions (anal); + case 'a': return rz_cmd_java_print_all_definitions (analysis); case 'j': return rz_cmd_java_print_json_definitions (obj); } return false; } static int rz_cmd_java_handle_summary_info(RzCore *core, const char *cmd) { - RzAnal *anal = get_anal (core); - RzBinJavaObj *obj = (RzBinJavaObj *)rz_cmd_java_get_bin_obj (anal); + RzAnalysis *analysis = get_anal (core); + RzBinJavaObj *obj = (RzBinJavaObj *)rz_cmd_java_get_bin_obj (analysis); IFDBG rz_cons_printf ("Function call made: %s\n", cmd); if (!obj) { @@ -812,16 +812,16 @@ static int rz_cmd_java_handle_replace_classname_value(RzCore *core, const char * RzBinJavaObj *obj; char *class_name = NULL, *new_class_name = NULL; ut32 class_name_len = 0, new_class_name_len = 0; - RzAnal *anal = get_anal (core); + RzAnalysis *analysis = get_anal (core); const char *p = cmd; int res = false; ut32 idx = -1; - if (!core || !anal || !cmd) { + if (!core || !analysis || !cmd) { return false; } IFDBG rz_cons_printf ("Function call made: %s\n", p); - obj = (RzBinJavaObj *)rz_cmd_java_get_bin_obj (anal); + obj = (RzBinJavaObj *)rz_cmd_java_get_bin_obj (analysis); if (!obj) { eprintf ("The current binary is not a Java Bin Object.\n"); return true; @@ -891,8 +891,8 @@ static int rz_cmd_java_handle_replace_classname_value(RzCore *core, const char * } static int rz_cmd_java_handle_reload_bin(RzCore *core, const char *cmd) { - RzAnal *anal = get_anal (core); - RzBinJavaObj *obj = (RzBinJavaObj *)rz_cmd_java_get_bin_obj (anal); + RzAnalysis *analysis = get_anal (core); + RzBinJavaObj *obj = (RzBinJavaObj *)rz_cmd_java_get_bin_obj (analysis); const char *p = cmd; ut64 addr = 0LL; //cur_offset = core->offset, addr = 0; ut64 buf_size = 0; @@ -932,8 +932,8 @@ static int rz_cmd_java_handle_reload_bin(RzCore *core, const char *cmd) { static int rz_cmd_java_handle_find_cp_const(RzCore *core, const char *cmd) { const char *p = (cmd && *cmd == ' ')? rz_cmd_java_consumetok (cmd, ' ', -1): NULL; RzBinJavaObj *obj = (RzBinJavaObj *)rz_cmd_java_get_bin_obj (get_anal (core)); - RzAnalFunction *fcn = NULL; - RzAnalBlock *bb = NULL; + RzAnalysisFunction *fcn = NULL; + RzAnalysisBlock *bb = NULL; RzListIter *bb_iter, *fn_iter, *iter; RzCmdJavaCPResult *cp_res = NULL; ut16 idx = -1; @@ -962,8 +962,8 @@ static int rz_cmd_java_handle_find_cp_const(RzCore *core, const char *cmd) { } find_list = rz_list_new (); find_list->free = free; - // XXX - this will break once RzAnal moves to sdb - rz_list_foreach (core->anal->fcns, fn_iter, fcn) { + // XXX - this will break once RzAnalysis moves to sdb + rz_list_foreach (core->analysis->fcns, fn_iter, fcn) { rz_list_foreach (fcn->bbs, bb_iter, bb) { char op = bb->op_bytes[0]; cp_res = NULL; @@ -1005,8 +1005,8 @@ static int rz_cmd_java_handle_find_cp_const(RzCore *core, const char *cmd) { } static int rz_cmd_java_handle_field_info(RzCore *core, const char *cmd) { - RzAnal *anal = get_anal (core); - RzBinJavaObj *obj = (RzBinJavaObj *)rz_cmd_java_get_bin_obj (anal); + RzAnalysis *analysis = get_anal (core); + RzBinJavaObj *obj = (RzBinJavaObj *)rz_cmd_java_get_bin_obj (analysis); IFDBG rz_cons_printf ("Function call made: %s\n", cmd); ut16 idx = -1; @@ -1035,8 +1035,8 @@ static int rz_cmd_java_handle_field_info(RzCore *core, const char *cmd) { } static int rz_cmd_java_handle_method_info(RzCore *core, const char *cmd) { - RzAnal *anal = get_anal (core); - RzBinJavaObj *obj = (RzBinJavaObj *)rz_cmd_java_get_bin_obj (anal); + RzAnalysis *analysis = get_anal (core); + RzBinJavaObj *obj = (RzBinJavaObj *)rz_cmd_java_get_bin_obj (analysis); IFDBG rz_cons_printf ("Command is (%s)\n", cmd); ut16 idx = -1; @@ -1176,9 +1176,9 @@ static int rz_cmd_java_handle_isvalid(RzCore *core, const char *cmd) { } static int rz_cmd_java_handle_resolve_cp(RzCore *core, const char *cmd) { - RzAnal *anal = get_anal (core); + RzAnalysis *analysis = get_anal (core); char c_type = cmd && *cmd? *cmd: 0; - RzBinJavaObj *obj = rz_cmd_java_get_bin_obj (anal); + RzBinJavaObj *obj = rz_cmd_java_get_bin_obj (analysis); ut32 idx = rz_cmd_java_get_input_num_value (core, cmd + 2); IFDBG rz_cons_printf ("Function call made: %s\n", cmd); IFDBG rz_cons_printf ("Ctype: %d (%c) RzBinJavaObj points to: %p and the idx is (%s): %d\n", c_type, c_type, obj, cmd + 2, idx); @@ -1524,8 +1524,8 @@ static int rz_cmd_java_print_import_definitions(RzBinJavaObj *obj) { return true; } -static int rz_cmd_java_print_all_definitions(RzAnal *anal) { - RzList *obj_list = rz_cmd_java_get_bin_obj_list (anal); +static int rz_cmd_java_print_all_definitions(RzAnalysis *analysis) { + RzList *obj_list = rz_cmd_java_get_bin_obj_list (analysis); RzListIter *iter; RzBinJavaObj *obj; @@ -1594,8 +1594,8 @@ static int rz_cmd_java_print_class_definitions(RzBinJavaObj *obj) { return true; } -static RzList *rz_cmd_java_get_bin_obj_list(RzAnal *anal) { - RzBinJavaObj *bin_obj = (RzBinJavaObj *)rz_cmd_java_get_bin_obj (anal); +static RzList *rz_cmd_java_get_bin_obj_list(RzAnalysis *analysis) { + RzBinJavaObj *bin_obj = (RzBinJavaObj *)rz_cmd_java_get_bin_obj (analysis); // See librz/bin/p/bin_java.c to see what is happening here. The original intention // was to use a shared global db variable from shlr/java/class.c, but the // BIN_OBJS_ADDRS variable kept getting corrupted on Mac, so I (deeso) switched the @@ -1605,14 +1605,14 @@ static RzList *rz_cmd_java_get_bin_obj_list(RzAnal *anal) { return rz_bin_java_get_bin_obj_list_thru_obj (bin_obj); } -static RzBinJavaObj *rz_cmd_java_get_bin_obj(RzAnal *anal) { +static RzBinJavaObj *rz_cmd_java_get_bin_obj(RzAnalysis *analysis) { RzBin *b; int is_java; RzBinPlugin *plugin; - if (!anal || !anal->binb.bin) { + if (!analysis || !analysis->binb.bin) { return NULL; } - b = anal->binb.bin; + b = analysis->binb.bin; if (!b->cur || !b->cur->o) { return NULL; } @@ -1792,8 +1792,8 @@ static int rz_cmd_java_print_method_name(RzBinJavaObj *obj, ut16 idx) { } static int rz_cmd_java_handle_yara_code_extraction_refs(RzCore *core, const char *input) { - RzAnal *anal = get_anal (core); - RzBinJavaObj *bin = anal? (RzBinJavaObj *)rz_cmd_java_get_bin_obj (anal): NULL; + RzAnalysis *analysis = get_anal (core); + RzBinJavaObj *bin = analysis? (RzBinJavaObj *)rz_cmd_java_get_bin_obj (analysis): NULL; const char *p = input? rz_cmd_java_consumetok (input, ' ', -1): NULL, *n = NULL; char *name = NULL; ut64 addr = -1, count = -1; @@ -1801,7 +1801,7 @@ static int rz_cmd_java_handle_yara_code_extraction_refs(RzCore *core, const char if (!bin) { return res; - } else if (!anal || !anal->fcns || rz_list_length (anal->fcns) == 0) { + } else if (!analysis || !analysis->fcns || rz_list_length (analysis->fcns) == 0) { eprintf ("Unable to access the current analysis, perform 'af' for function analysis.\n"); return true; } @@ -1839,8 +1839,8 @@ static int rz_cmd_java_handle_yara_code_extraction_refs(RzCore *core, const char } static int rz_cmd_java_handle_insert_method_ref(RzCore *core, const char *input) { - RzAnal *anal = get_anal (core); - RzBinJavaObj *bin = anal? (RzBinJavaObj *)rz_cmd_java_get_bin_obj (anal): NULL; + RzAnalysis *analysis = get_anal (core); + RzBinJavaObj *bin = analysis? (RzBinJavaObj *)rz_cmd_java_get_bin_obj (analysis): NULL; const char *p = input? rz_cmd_java_consumetok (input, ' ', -1): NULL, *n = NULL; char *classname = NULL, *name = NULL, *descriptor = NULL; ut32 cn_sz = 0, n_sz = 0, d_sz = 0; @@ -1849,7 +1849,7 @@ static int rz_cmd_java_handle_insert_method_ref(RzCore *core, const char *input) if (!bin) { return res; } - if (!anal || !anal->fcns || rz_list_length (anal->fcns) == 0) { + if (!analysis || !analysis->fcns || rz_list_length (analysis->fcns) == 0) { eprintf ("Unable to access the current analysis, perform 'af' for function analysis.\n"); return true; } @@ -1901,8 +1901,8 @@ static int rz_cmd_java_handle_insert_method_ref(RzCore *core, const char *input) } static int rz_cmd_java_handle_print_exceptions(RzCore *core, const char *input) { - RzAnal *anal = get_anal (core); - RzBinJavaObj *bin = (RzBinJavaObj *) rz_cmd_java_get_bin_obj (anal); + RzAnalysis *analysis = get_anal (core); + RzBinJavaObj *bin = (RzBinJavaObj *) rz_cmd_java_get_bin_obj (analysis); RzListIter *exc_iter = NULL, *methods_iter=NULL; RzBinJavaField *method; ut64 func_addr = -1; diff --git a/librz/core/p/core_test.c b/librz/core/p/core_test.c index c9daf70971..edf97213a5 100644 --- a/librz/core/p/core_test.c +++ b/librz/core/p/core_test.c @@ -11,7 +11,7 @@ mv core_test.so ~/.config/rizin/plugins #include #include #include -#include +#include #undef RZ_API #define RZ_API static diff --git a/librz/core/panels.c b/librz/core/panels.c index da0971bc97..5c32b018c5 100644 --- a/librz/core/panels.c +++ b/librz/core/panels.c @@ -1512,10 +1512,10 @@ void __cursor_up(RzCore *core) { void __cursor_down(RzCore *core) { RzPrint *print = core->print; - RzAnalOp *aop = rz_core_anal_op (core, core->offset + print->cur, RZ_ANAL_OP_MASK_BASIC); + RzAnalysisOp *aop = rz_core_analysis_op (core, core->offset + print->cur, RZ_ANAL_OP_MASK_BASIC); if (aop) { print->cur += aop->size; - rz_anal_op_free (aop); + rz_analysis_op_free (aop); } else { print->cur += 4; } @@ -2885,7 +2885,7 @@ void __call_visual_graph(RzCore *core) { } bool __check_func(RzCore *core) { - RzAnalFunction *fun = rz_anal_get_fcn_in (core->anal, core->offset, RZ_ANAL_FCN_TYPE_NULL); + RzAnalysisFunction *fun = rz_analysis_get_fcn_in (core->analysis, core->offset, RZ_ANAL_FCN_TYPE_NULL); if (!fun) { rz_cons_message ("Not in a function. Type 'df' to define it here"); return false; @@ -2898,7 +2898,7 @@ bool __check_func(RzCore *core) { } bool __check_func_diff(RzCore *core, RzPanel *p) { - RzAnalFunction *func = rz_anal_get_fcn_in (core->anal, core->offset, RZ_ANAL_FCN_TYPE_NULL); + RzAnalysisFunction *func = rz_analysis_get_fcn_in (core->analysis, core->offset, RZ_ANAL_FCN_TYPE_NULL); if (!func) { if (RZ_STR_ISEMPTY (p->model->funcName)) { return false; @@ -3018,8 +3018,8 @@ void __init_panel_param(RzCore *core, RzPanel *p, const char *title, const char __set_dcb (core, p); __set_rcb (core->panels, p); if (__check_panel_type (p, PANEL_CMD_STACK)) { - const char *sp = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_SP); - const ut64 stackbase = rz_reg_getv (core->anal->reg, sp); + const char *sp = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_SP); + const ut64 stackbase = rz_reg_getv (core->analysis->reg, sp); m->baseAddr = stackbase; __set_panel_addr (core, p, stackbase - rz_config_get_i (core->config, "stack.delta")); } @@ -4908,11 +4908,11 @@ void __panels_check_stackbase(RzCore *core) { return; } int i; - const char *sp = rz_reg_get_name (core->anal->reg, RZ_REG_NAME_SP); + const char *sp = rz_reg_get_name (core->analysis->reg, RZ_REG_NAME_SP); if (!sp) { return; } - const ut64 stackbase = rz_reg_getv (core->anal->reg, sp); + const ut64 stackbase = rz_reg_getv (core->analysis->reg, sp); RzPanels *panels = core->panels; for (i = 1; i < panels->n_panels; i++) { RzPanel *panel = __get_panel (panels, i); diff --git a/librz/core/rtr.c b/librz/core/rtr.c index a8c74504a5..f2667280b5 100644 --- a/librz/core/rtr.c +++ b/librz/core/rtr.c @@ -968,7 +968,7 @@ RZ_API void rz_core_rtr_cmd(RzCore *core, const char *input) { rz_socket_close (fh); return; } - char *cmd_output = rz_socket_rap_client_command (fh, cmd, &core->anal->coreb); + char *cmd_output = rz_socket_rap_client_command (fh, cmd, &core->analysis->coreb); rz_cons_println (cmd_output); free (cmd_output); return; diff --git a/librz/core/serialize_core.c b/librz/core/serialize_core.c index a417ed38b8..6bb850771f 100644 --- a/librz/core/serialize_core.c +++ b/librz/core/serialize_core.c @@ -11,7 +11,7 @@ * / * /config => see config.c * /flags => see flag.c - * /anal => see anal.c + * /analysis => see anal.c * /file => see below * offset= * blocksize= @@ -25,7 +25,7 @@ RZ_API void rz_serialize_core_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzCore *core, file_save (sdb_ns (db, "file", true), core, prj_file); rz_serialize_config_save (sdb_ns (db, "config", true), core->config); rz_serialize_flag_save (sdb_ns (db, "flags", true), core->flags); - rz_serialize_anal_save (sdb_ns (db, "anal", true), core->anal); + rz_serialize_anal_save (sdb_ns (db, "anal", true), core->analysis); char buf[0x20]; if (snprintf (buf, sizeof (buf), "0x%"PFMT64x, core->offset) < 0) { @@ -50,7 +50,7 @@ RZ_API bool rz_serialize_core_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzCore *core, } SUB ("config", rz_serialize_config_load (subdb, core->config, res)); SUB ("flags", rz_serialize_flag_load (subdb, core->flags, res)); - SUB ("anal", rz_serialize_anal_load (subdb, core->anal, res)); + SUB ("anal", rz_serialize_anal_load (subdb, core->analysis, res)); const char *str = sdb_get (db, "offset", 0); if (!str || !*str) { diff --git a/librz/core/visual.c b/librz/core/visual.c index 7451aea1cd..3149ec3c50 100644 --- a/librz/core/visual.c +++ b/librz/core/visual.c @@ -396,7 +396,7 @@ static void printSnow(RzCore *core) { #endif static void rotateAsmBits(RzCore *core) { - RzAnalHint *hint = rz_anal_hint_get (core->anal, core->offset); + RzAnalysisHint *hint = rz_analysis_hint_get (core->analysis, core->offset); int bits = hint? hint->bits : rz_config_get_i (core->config, "asm.bits"); int retries = 4; while (retries > 0) { @@ -411,7 +411,7 @@ static void rotateAsmBits(RzCore *core) { bits = nb; retries--; } - rz_anal_hint_free (hint); + rz_analysis_hint_free (hint); } static const char *rotateAsmemu(RzCore *core) { @@ -1158,11 +1158,11 @@ static void setprintmode(RzCore *core, int n) { static ut64 prevop_addr(RzCore *core, ut64 addr) { ut8 buf[OPDELTA * 2]; ut64 target, base; - RzAnalBlock *bb; - RzAnalOp op; + RzAnalysisBlock *bb; + RzAnalysisOp op; int len, ret, i; - int minop = rz_anal_archinfo (core->anal, RZ_ANAL_ARCHINFO_MIN_OP_SIZE); - int maxop = rz_anal_archinfo (core->anal, RZ_ANAL_ARCHINFO_MAX_OP_SIZE); + int minop = rz_analysis_archinfo (core->analysis, RZ_ANAL_ARCHINFO_MIN_OP_SIZE); + int maxop = rz_analysis_archinfo (core->analysis, RZ_ANAL_ARCHINFO_MAX_OP_SIZE); if (minop == maxop) { if (minop == -1) { @@ -1175,9 +1175,9 @@ static ut64 prevop_addr(RzCore *core, ut64 addr) { // TODO: look in the current basicblock, then in the current function // and search in all functions only as a last chance, to try to speed // up the process. - bb = rz_anal_bb_from_offset (core->anal, addr - minop); + bb = rz_analysis_bb_from_offset (core->analysis, addr - minop); if (bb) { - ut64 res = rz_anal_bb_opaddr_at (bb, addr - minop); + ut64 res = rz_analysis_bb_opaddr_at (bb, addr - minop); if (res != UT64_MAX) { return res; } @@ -1188,14 +1188,14 @@ static ut64 prevop_addr(RzCore *core, ut64 addr) { base = target > OPDELTA ? target - OPDELTA : 0; rz_io_read_at (core->io, base, buf, sizeof (buf)); for (i = 0; i < sizeof (buf); i++) { - ret = rz_anal_op (core->anal, &op, base + i, + ret = rz_analysis_op (core->analysis, &op, base + i, buf + i, sizeof (buf) - i, RZ_ANAL_OP_MASK_BASIC); if (ret) { len = op.size; if (len < 1) { len = 1; } - rz_anal_op_fini (&op); // XXX + rz_analysis_op_fini (&op); // XXX if (midflags >= RZ_MIDFLAGS_REALIGN) { int skip_bytes = rz_core_flag_in_middle (core, base + i, len, &midflags); if (skip_bytes && base + i + skip_bytes < target) { @@ -1216,14 +1216,14 @@ static ut64 prevop_addr(RzCore *core, ut64 addr) { // Returns true if we can use analysis to find the previous operation address, // sets prev_addr to the value of the instruction numinstrs back. -// If we can't use the anal, then set prev_addr to UT64_MAX and return false; +// If we can't use the analysis, then set prev_addr to UT64_MAX and return false; RZ_API bool rz_core_prevop_addr(RzCore *core, ut64 start_addr, int numinstrs, ut64 *prev_addr) { - RzAnalBlock *bb; + RzAnalysisBlock *bb; int i; // Check that we're in a bb, otherwise this prevop stuff won't work. - bb = rz_anal_bb_from_offset (core->anal, start_addr); + bb = rz_analysis_bb_from_offset (core->analysis, start_addr); if (bb) { - if (rz_anal_bb_opaddr_at (bb, start_addr) != UT64_MAX) { + if (rz_analysis_bb_opaddr_at (bb, start_addr) != UT64_MAX) { // Do some anal looping. for (i = 0; i < numinstrs; i++) { *prev_addr = prevop_addr (core, start_addr); @@ -1342,7 +1342,7 @@ static void addComment(RzCore *core, ut64 addr) { } static int follow_ref(RzCore *core, RzList *xrefs, int choice, int xref) { - RzAnalRef *refi = rz_list_get_n (xrefs, choice); + RzAnalysisRef *refi = rz_list_get_n (xrefs, choice); if (refi) { if (core->print->cur_enabled) { core->print->cur = 0; @@ -1361,7 +1361,7 @@ RZ_API int rz_core_visual_refs(RzCore *core, bool xref, bool fcnInsteadOfAddr) { char ch; int count = 0; RzList *xrefs = NULL; - RzAnalRef *refi; + RzAnalysisRef *refi; RzListIter *iter; int skip = 0; int idx = 0; @@ -1375,23 +1375,23 @@ RZ_API int rz_core_visual_refs(RzCore *core, bool xref, bool fcnInsteadOfAddr) { repeat: rz_list_free (xrefs); if (xrefsMode) { - RzAnalFunction *fun = rz_anal_get_fcn_in (core->anal, addr, RZ_ANAL_FCN_TYPE_NULL); + RzAnalysisFunction *fun = rz_analysis_get_fcn_in (core->analysis, addr, RZ_ANAL_FCN_TYPE_NULL); if (fun) { if (xref) { // function xrefs - xrefs = rz_anal_xrefs_get (core->anal, addr); - //XXX xrefs = rz_anal_fcn_get_xrefs (core->anal, fun); + xrefs = rz_analysis_xrefs_get (core->analysis, addr); + //XXX xrefs = rz_analysis_fcn_get_xrefs (core->analysis, fun); // this function is buggy so we must get the xrefs of the addr } else { // functon refs - xrefs = rz_anal_function_get_refs (fun); + xrefs = rz_analysis_function_get_refs (fun); } } else { xrefs = NULL; } } else { if (xref) { // address xrefs - xrefs = rz_anal_xrefs_get (core->anal, addr); + xrefs = rz_analysis_xrefs_get (core->analysis, addr); } else { // address refs - xrefs = rz_anal_refs_get (core->anal, addr); + xrefs = rz_analysis_refs_get (core->analysis, addr); } } @@ -1439,7 +1439,7 @@ repeat: if (idx == skip) { cur_ref_addr = refi->addr; } - RzAnalFunction *fun = rz_anal_get_fcn_in (core->anal, refi->addr, RZ_ANAL_FCN_TYPE_NULL); + RzAnalysisFunction *fun = rz_analysis_get_fcn_in (core->analysis, refi->addr, RZ_ANAL_FCN_TYPE_NULL); char *name; if (fun) { name = strdup (fun->name); @@ -1462,7 +1462,7 @@ repeat: rz_str_trim (cmt); rz_cons_printf (" %d [%s] 0x%08"PFMT64x" 0x%08"PFMT64x " %s %sref (%s) ; %s\n", idx, cstr, refi->at, refi->addr, - rz_anal_xrefs_type_tostring (refi->type), + rz_analysis_xrefs_type_tostring (refi->type), xref ? "x":"", name, cmt); free (cmt); free (name); @@ -1662,7 +1662,7 @@ static void visual_comma(RzCore *core) { bool mouse_state = __holdMouseState (core); ut64 addr = core->offset + (core->print->cur_enabled? core->print->cur: 0); char *comment, *cwd, *cmtfile; - const char *prev_cmt = rz_meta_get_string (core->anal, RZ_META_TYPE_COMMENT, addr); + const char *prev_cmt = rz_meta_get_string (core->analysis, RZ_META_TYPE_COMMENT, addr); comment = prev_cmt ? strdup (prev_cmt) : NULL; cmtfile = rz_str_between (comment, ",(", ")"); cwd = getcommapath (core); @@ -1673,11 +1673,11 @@ static void visual_comma(RzCore *core) { cmtfile = strdup (fn); if (!comment || !*comment) { comment = rz_str_newf (",(%s)", fn); - rz_meta_set_string (core->anal, RZ_META_TYPE_COMMENT, addr, comment); + rz_meta_set_string (core->analysis, RZ_META_TYPE_COMMENT, addr, comment); } else { // append filename in current comment char *nc = rz_str_newf ("%s ,(%s)", comment, fn); - rz_meta_set_string (core->anal, RZ_META_TYPE_COMMENT, addr, nc); + rz_meta_set_string (core->analysis, RZ_META_TYPE_COMMENT, addr, nc); free (nc); } } @@ -1718,11 +1718,11 @@ static void cursor_ocur(RzCore *core, bool use_ocur) { } static void nextOpcode(RzCore *core) { - RzAnalOp *aop = rz_core_anal_op (core, core->offset + core->print->cur, RZ_ANAL_OP_MASK_BASIC); + RzAnalysisOp *aop = rz_core_analysis_op (core, core->offset + core->print->cur, RZ_ANAL_OP_MASK_BASIC); RzPrint *p = core->print; if (aop) { p->cur += aop->size; - rz_anal_op_free (aop); + rz_analysis_op_free (aop); } else { p->cur += 4; } @@ -2291,9 +2291,9 @@ static bool canWrite(RzCore *core, ut64 addr) { } static bool toggle_bb(RzCore *core, ut64 addr) { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, addr, RZ_ANAL_FCN_TYPE_NULL); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, addr, RZ_ANAL_FCN_TYPE_NULL); if (fcn) { - RzAnalBlock *bb = rz_anal_fcn_bbget_in (core->anal, fcn, addr); + RzAnalysisBlock *bb = rz_analysis_fcn_bbget_in (core->analysis, fcn, addr); if (bb) { bb->folded = !bb->folded; } else { @@ -2386,13 +2386,13 @@ RZ_API int rz_core_visual_cmd(RzCore *core, const char *arg) { #endif case 0x0d: // "enter" "\\n" "newline" { - RzAnalOp *op; + RzAnalysisOp *op; int wheel = rz_config_get_i (core->config, "scr.wheel"); if (wheel) { rz_cons_enable_mouse (true); } do { - op = rz_core_anal_op (core, core->offset + core->print->cur, RZ_ANAL_OP_MASK_BASIC); + op = rz_core_analysis_op (core, core->offset + core->print->cur, RZ_ANAL_OP_MASK_BASIC); if (op) { if (op->type == RZ_ANAL_OP_TYPE_JMP || op->type == RZ_ANAL_OP_TYPE_CJMP || @@ -2414,7 +2414,7 @@ RZ_API int rz_core_visual_cmd(RzCore *core, const char *arg) { } } } - rz_anal_op_free (op); + rz_analysis_op_free (op); } while (--wheelspeed > 0); } break; @@ -2811,7 +2811,7 @@ RZ_API int rz_core_visual_cmd(RzCore *core, const char *arg) { break; case '^': { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, 0); if (fcn) { rz_core_seek (core, fcn->addr, false); } else { @@ -2852,7 +2852,7 @@ RZ_API int rz_core_visual_cmd(RzCore *core, const char *arg) { if (rz_config_get_i (core->config, "graph.web")) { rz_core_cmd0 (core, "agv $$"); } else { - RzAnalFunction *fun = rz_anal_get_fcn_in (core->anal, core->offset, RZ_ANAL_FCN_TYPE_NULL); + RzAnalysisFunction *fun = rz_analysis_get_fcn_in (core->analysis, core->offset, RZ_ANAL_FCN_TYPE_NULL); int ocolor = rz_config_get_i (core->config, "scr.color"); if (!fun) { rz_cons_message ("Not in a function. Type 'df' to define it here"); @@ -2933,9 +2933,9 @@ RZ_API int rz_core_visual_cmd(RzCore *core, const char *arg) { int times = RZ_MAX (1, wheelspeed); // Check if we have a data annotation. ut64 amisize; - RzAnalMetaItem *ami = rz_meta_get_at (core->anal, core->offset, RZ_META_TYPE_DATA, &amisize); + RzAnalysisMetaItem *ami = rz_meta_get_at (core->analysis, core->offset, RZ_META_TYPE_DATA, &amisize); if (!ami) { - ami = rz_meta_get_at (core->anal, core->offset, RZ_META_TYPE_STRING, &amisize); + ami = rz_meta_get_at (core->analysis, core->offset, RZ_META_TYPE_STRING, &amisize); } if (ami) { rz_core_seek_delta (core, amisize); @@ -3194,7 +3194,7 @@ RZ_API int rz_core_visual_cmd(RzCore *core, const char *arg) { break; case '0': { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, RZ_ANAL_FCN_TYPE_NULL); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, RZ_ANAL_FCN_TYPE_NULL); if (fcn) { rz_core_seek (core, fcn->addr, true); } @@ -3504,12 +3504,12 @@ RZ_API int rz_core_visual_cmd(RzCore *core, const char *arg) { break; case 'z': { - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; if (core->print->cur_enabled) { - fcn = rz_anal_get_fcn_in (core->anal, + fcn = rz_analysis_get_fcn_in (core->analysis, core->offset + core->print->cur, RZ_ANAL_FCN_TYPE_NULL); } else { - fcn = rz_anal_get_fcn_in (core->anal, + fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, RZ_ANAL_FCN_TYPE_NULL); } if (fcn) { @@ -3656,7 +3656,7 @@ RZ_API void rz_core_visual_title(RzCore *core, int color) { f->name, (int) (addr - f->offset), addr); } } else { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, addr, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, addr, 0); if (fcn) { int delta = addr - fcn->addr; if (delta > 0) { @@ -4095,7 +4095,7 @@ static void visual_refresh_oneshot(RzCore *core) { } RZ_API void rz_core_visual_disasm_up(RzCore *core, int *cols) { - RzAnalFunction *f = rz_anal_get_fcn_in (core->anal, core->offset, RZ_ANAL_FCN_TYPE_NULL); + RzAnalysisFunction *f = rz_analysis_get_fcn_in (core->analysis, core->offset, RZ_ANAL_FCN_TYPE_NULL); if (f && f->folded) { *cols = core->offset - f->addr; // + f->size; if (*cols < 1) { @@ -4109,11 +4109,11 @@ RZ_API void rz_core_visual_disasm_up(RzCore *core, int *cols) { RZ_API void rz_core_visual_disasm_down(RzCore *core, RzAsmOp *op, int *cols) { int midflags = rz_config_get_i (core->config, "asm.flags.middle"); const bool midbb = rz_config_get_i (core->config, "asm.bb.middle"); - RzAnalFunction *f = NULL; - f = rz_anal_get_fcn_in (core->anal, core->offset, 0); + RzAnalysisFunction *f = NULL; + f = rz_analysis_get_fcn_in (core->analysis, core->offset, 0); op->size = 1; if (f && f->folded) { - *cols = core->offset - rz_anal_function_max_addr (f); + *cols = core->offset - rz_analysis_function_max_addr (f); } else { rz_asm_set_pc (core->rasm, core->offset); *cols = rz_asm_disassemble (core->rasm, diff --git a/librz/core/vmenus.c b/librz/core/vmenus.c index 60a317105e..83e0ed80d7 100644 --- a/librz/core/vmenus.c +++ b/librz/core/vmenus.c @@ -57,7 +57,7 @@ static char *prompt(const char *str, const char *txt) { } static inline char *getformat (RzCoreVisualTypes *vt, const char *k) { - return sdb_get (vt->core->anal->sdb_types, + return sdb_get (vt->core->analysis->sdb_types, sdb_fmt ("type.%s", k), 0); } @@ -67,7 +67,7 @@ static char *colorize_asm_string(RzCore *core, const char *buf_asm, int optype, bool use_color = core->print->flags & RZ_PRINT_FLAGS_COLOR; const char *color_num = core->cons->context->pal.num; const char *color_reg = core->cons->context->pal.reg; - RzAnalFunction* fcn = rz_anal_get_fcn_in (core->anal, addr, RZ_ANAL_FCN_TYPE_NULL); + RzAnalysisFunction* fcn = rz_analysis_get_fcn_in (core->analysis, addr, RZ_ANAL_FCN_TYPE_NULL); if (!use_color) { return strdup (source); @@ -121,7 +121,7 @@ static int wordpos(const char *esil, int n) { return (size_t)(w - esil); } -static void showreg(RzAnalEsil *esil, const char *rn, const char *desc) { +static void showreg(RzAnalysisEsil *esil, const char *rn, const char *desc) { ut64 nm = 0; int sz = 0; rz_cons_printf ("%s 0x%08"PFMT64x" (%d) ; %s\n", rn, nm, sz, desc); @@ -133,7 +133,7 @@ RZ_API bool rz_core_visual_esil(RzCore *core) { char *word = NULL; int x = 0; RzAsmOp asmop; - RzAnalOp analop; + RzAnalysisOp analop; ut8 buf[sizeof (ut64)]; unsigned int addrsize = rz_config_get_i (core->config, "esil.addr.size"); @@ -141,15 +141,15 @@ RZ_API bool rz_core_visual_esil(RzCore *core) { return false; } memcpy (buf, core->block, sizeof (ut64)); - RzAnalEsil *esil = rz_anal_esil_new (20, 0, addrsize); - esil->anal = core->anal; - rz_anal_esil_set_pc (esil, core->offset); + RzAnalysisEsil *esil = rz_analysis_esil_new (20, 0, addrsize); + esil->analysis = core->analysis; + rz_analysis_esil_set_pc (esil, core->offset); for (;;) { rz_cons_clear00 (); // bool use_color = core->print->flags & RZ_PRINT_FLAGS_COLOR; (void) rz_asm_disassemble (core->rasm, &asmop, buf, sizeof (ut64)); analop.type = -1; - (void)rz_anal_op (core->anal, &analop, core->offset, buf, sizeof (ut64), RZ_ANAL_OP_MASK_ESIL); + (void)rz_analysis_op (core->analysis, &analop, core->offset, buf, sizeof (ut64), RZ_ANAL_OP_MASK_ESIL); analopType = analop.type & RZ_ANAL_OP_TYPE_MASK; rz_cons_printf ("rizin's esil debugger:\n\n"); rz_cons_printf ("pos: %d\n", x); @@ -205,8 +205,8 @@ RZ_API bool rz_core_visual_esil(RzCore *core) { free (r); } rz_cons_printf ("esil stack:\n"); - rz_anal_esil_dumpstack (esil); - rz_anal_op_fini (&analop); + rz_analysis_esil_dumpstack (esil); + rz_analysis_op_fini (&analop); rz_cons_newline (); rz_cons_visual_flush (); @@ -223,7 +223,7 @@ RZ_API bool rz_core_visual_esil(RzCore *core) { eprintf ("step ((%s))\n", word); rz_sys_usleep (500); x = RZ_MIN (x + 1, nbits - 1); - rz_anal_esil_runword (esil, word); + rz_analysis_esil_runword (esil, word); break; case 'S': eprintf ("esil step over :D\n"); @@ -267,7 +267,7 @@ RZ_API bool rz_core_visual_esil(RzCore *core) { } } beach: - rz_anal_esil_free (esil); + rz_analysis_esil_free (esil); free (word); return true; } @@ -278,7 +278,7 @@ RZ_API bool rz_core_visual_bit_editor(RzCore *core) { int analopType; int i, j, x = 0; RzAsmOp asmop; - RzAnalOp analop; + RzAnalysisOp analop; ut8 buf[sizeof (ut64)]; bool bitsInLine = false; @@ -295,7 +295,7 @@ RZ_API bool rz_core_visual_bit_editor(RzCore *core) { bool use_color = core->print->flags & RZ_PRINT_FLAGS_COLOR; (void) rz_asm_disassemble (core->rasm, &asmop, buf, sizeof (ut64)); analop.type = -1; - (void)rz_anal_op (core->anal, &analop, core->offset, buf, sizeof (ut64), RZ_ANAL_OP_MASK_ESIL); + (void)rz_analysis_op (core->analysis, &analop, core->offset, buf, sizeof (ut64), RZ_ANAL_OP_MASK_ESIL); analopType = analop.type & RZ_ANAL_OP_TYPE_MASK; rz_cons_printf ("rizin's bit editor:\n\n"); rz_cons_printf ("offset: 0x%08"PFMT64x"\n"Color_RESET, core->offset + cur); @@ -317,7 +317,7 @@ RZ_API bool rz_core_visual_bit_editor(RzCore *core) { free (op); } rz_cons_printf (Color_RESET"esl: %s\n"Color_RESET, rz_strbuf_get (&analop.esil)); - rz_anal_op_fini (&analop); + rz_analysis_op_fini (&analop); rz_cons_printf ("chr:"); for (i = 0; i < 8; i++) { const ut8 *byte = buf + i; @@ -683,7 +683,7 @@ RZ_API int rz_core_visual_types(RzCore *core) { vt.t_ctr = 0; vt.type = opts[h_opt]; vt.optword = optword; - sdb_foreach (core->anal->sdb_types, sdbforcb, &vt); + sdb_foreach (core->analysis->sdb_types, sdbforcb, &vt); } rz_cons_visual_flush (); @@ -899,8 +899,8 @@ RZ_API bool rz_core_visual_hudstuff(RzCore *core) { list->free = free; rz_flag_foreach (core->flags, hudstuff_append, list); RzIntervalTreeIter it; - RzAnalMetaItem *mi; - rz_interval_tree_foreach (&core->anal->meta, it, mi) { + RzAnalysisMetaItem *mi; + rz_interval_tree_foreach (&core->analysis->meta, it, mi) { if (mi->type == RZ_META_TYPE_COMMENT) { char *s = rz_str_newf ("0x%08"PFMT64x" %s", rz_interval_tree_iter_get (&it)->start, mi->str); if (s) { @@ -1335,14 +1335,14 @@ RZ_API int rz_core_visual_classes(RzCore *core) { return true; } -static void anal_class_print(RzAnal *anal, const char *class_name) { - RzVector *bases = rz_anal_class_base_get_all (anal, class_name); - RzVector *vtables = rz_anal_class_vtable_get_all (anal, class_name); - RzVector *methods = rz_anal_class_method_get_all (anal, class_name); +static void anal_class_print(RzAnalysis *analysis, const char *class_name) { + RzVector *bases = rz_analysis_class_base_get_all (analysis, class_name); + RzVector *vtables = rz_analysis_class_vtable_get_all (analysis, class_name); + RzVector *methods = rz_analysis_class_method_get_all (analysis, class_name); rz_cons_print (class_name); if (bases) { - RzAnalBaseClass *base; + RzAnalysisBaseClass *base; bool first = true; rz_vector_foreach (bases, base) { if (first) { @@ -1360,7 +1360,7 @@ static void anal_class_print(RzAnal *anal, const char *class_name) { if (vtables) { - RzAnalVTable *vtable; + RzAnalysisVTable *vtable; rz_vector_foreach (vtables, vtable) { rz_cons_printf (" %2s vtable 0x%"PFMT64x" @ +0x%"PFMT64x" size:+0x%"PFMT64x"\n", vtable->id, vtable->addr, vtable->offset, vtable->size); } @@ -1370,7 +1370,7 @@ static void anal_class_print(RzAnal *anal, const char *class_name) { rz_cons_print ("\n"); if (methods) { - RzAnalMethod *meth; + RzAnalysisMethod *meth; rz_vector_foreach (methods, meth) { rz_cons_printf (" %s @ 0x%"PFMT64x, meth->name, meth->addr); if (meth->vtable_offset >= 0) { @@ -1393,7 +1393,7 @@ static const char *show_anal_classes(RzCore *core, char mode, int *idx, SdbList rz_cons_printf ("[hjkl_/Cfm]> anal classes:\n\n"); if (mode == 'd' && class_name) { - anal_class_print (core->anal, class_name); + anal_class_print (core->analysis, class_name); return class_name; } @@ -1434,7 +1434,7 @@ static const char *show_anal_classes(RzCore *core, char mode, int *idx, SdbList RZ_API int rz_core_visual_anal_classes(RzCore *core) { int ch, index = 0; char command[1024]; - SdbList *list = rz_anal_class_get_all (core->anal, true); + SdbList *list = rz_analysis_class_get_all (core->analysis, true); int oldcur = 0; char mode = ' '; const char *class_name = ""; @@ -1662,7 +1662,7 @@ RZ_API int rz_core_visual_view_rop(RzCore *core) { int extra = strlen (chainstr) / scr_w; rz_cons_gotoxy (0, extra + 22 + count); rz_cons_strcat (msg); - const char *cmt = rz_meta_get_string (core->anal, RZ_META_TYPE_COMMENT, rz_num_get (NULL, msg)); + const char *cmt = rz_meta_get_string (core->analysis, RZ_META_TYPE_COMMENT, rz_num_get (NULL, msg)); if (cmt) { rz_cons_strcat (cmt); } @@ -2162,9 +2162,9 @@ RZ_API int rz_core_visual_comments (RzCore *core) { rz_cons_clear00 (); rz_cons_strcat ("Comments:\n"); RzIntervalTreeIter it; - RzAnalMetaItem *item; + RzAnalysisMetaItem *item; i = 0; - rz_interval_tree_foreach (&core->anal->meta, it, item) { + rz_interval_tree_foreach (&core->analysis->meta, it, item) { if (item->type != RZ_META_TYPE_COMMENT) { continue; } @@ -2211,7 +2211,7 @@ RZ_API int rz_core_visual_comments (RzCore *core) { break; case 'd': if (p) { - rz_meta_del (core->anal, RZ_META_TYPE_ANY, from, size); + rz_meta_del (core->analysis, RZ_META_TYPE_ANY, from, size); } break; case 'P': @@ -2259,7 +2259,7 @@ RZ_API int rz_core_visual_comments (RzCore *core) { " j/k - down/up keys\n" " h/b - go back\n" " l/' ' - accept current selection\n" - " a/d/e - add/delete/edit comment/anal symbol\n" + " a/d/e - add/delete/edit comment/analysis symbol\n" " p/P - rotate print format\n"); rz_cons_flush (); rz_cons_any_key (NULL); @@ -2484,26 +2484,26 @@ RZ_API void rz_core_visual_config(RzCore *core) { // helper static void function_rename(RzCore *core, ut64 addr, const char *name) { RzListIter *iter; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; - rz_list_foreach (core->anal->fcns, iter, fcn) { + rz_list_foreach (core->analysis->fcns, iter, fcn) { if (fcn->addr == addr) { rz_flag_unset_name (core->flags, fcn->name); free (fcn->name); fcn->name = strdup (name); - rz_flag_set (core->flags, name, addr, rz_anal_function_size_from_entry (fcn)); + rz_flag_set (core->flags, name, addr, rz_analysis_function_size_from_entry (fcn)); break; } } } static void variable_rename (RzCore *core, ut64 addr, int vindex, const char *name) { - RzAnalFunction* fcn = rz_anal_get_fcn_in (core->anal, addr, RZ_ANAL_FCN_TYPE_NULL); + RzAnalysisFunction* fcn = rz_analysis_get_fcn_in (core->analysis, addr, RZ_ANAL_FCN_TYPE_NULL); ut64 a_tmp = core->offset; int i = 0; RzListIter *iter; - RzList *list = rz_anal_var_all_list (core->anal, fcn); - RzAnalVar* var; + RzList *list = rz_analysis_var_all_list (core->analysis, fcn); + RzAnalysisVar* var; rz_list_foreach (list, iter, var) { if (i == vindex) { @@ -2518,14 +2518,14 @@ static void variable_rename (RzCore *core, ut64 addr, int vindex, const char *na } static void variable_set_type (RzCore *core, ut64 addr, int vindex, const char *type) { - RzAnalFunction* fcn = rz_anal_get_fcn_in (core->anal, addr, RZ_ANAL_FCN_TYPE_NULL); - RzList *list = rz_anal_var_all_list (core->anal, fcn); + RzAnalysisFunction* fcn = rz_analysis_get_fcn_in (core->analysis, addr, RZ_ANAL_FCN_TYPE_NULL); + RzList *list = rz_analysis_var_all_list (core->analysis, fcn); RzListIter *iter; - RzAnalVar* var; + RzAnalysisVar* var; rz_list_foreach (list, iter, var) { if (vindex == 0) { - rz_anal_var_set_type (var, type); + rz_analysis_var_set_type (var, type); break; } vindex--; @@ -2539,7 +2539,7 @@ static ut64 var_functions_show(RzCore *core, int idx, int show, int cols) { char *var_functions; ut64 seek = core->offset; ut64 addr = core->offset; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; int window, i = 0, print_full_func; RzListIter *iter; @@ -2550,7 +2550,7 @@ static ut64 var_functions_show(RzCore *core, int idx, int show, int cols) { const char *color_addr = core->cons->context->pal.offset; const char *color_fcn = core->cons->context->pal.fname; - rz_list_foreach (core->anal->fcns, iter, fcn) { + rz_list_foreach (core->analysis->fcns, iter, fcn) { print_full_func = true; if (i >= wdelta) { if (i > window + wdelta - 1) { @@ -2566,13 +2566,13 @@ static ut64 var_functions_show(RzCore *core, int idx, int show, int cols) { var_functions = rz_str_newf ("%c%c %s0x%08"PFMT64x"" Color_RESET" %4"PFMT64d" %s%s"Color_RESET"", (seek == fcn->addr)?'>':' ', (idx==i)?'*':' ', - color_addr, fcn->addr, rz_anal_function_realsize (fcn), + color_addr, fcn->addr, rz_analysis_function_realsize (fcn), color_fcn, fcn->name); } else { var_functions = rz_str_newf ("%c%c 0x%08"PFMT64x" %4"PFMT64d" %s", (seek == fcn->addr)?'>':' ', (idx==i)?'*':' ', - fcn->addr, rz_anal_function_realsize (fcn), fcn->name); + fcn->addr, rz_analysis_function_realsize (fcn), fcn->name); } if (var_functions) { if (!rz_cons_singleton ()->show_vals) { @@ -2601,12 +2601,12 @@ static ut64 var_functions_show(RzCore *core, int idx, int show, int cols) { static ut64 var_variables_show(RzCore* core, int idx, int *vindex, int show, int cols) { int i = 0; const ut64 addr = var_functions_show (core, idx, 0, cols); - RzAnalFunction* fcn = rz_anal_get_fcn_in (core->anal, addr, RZ_ANAL_FCN_TYPE_NULL); + RzAnalysisFunction* fcn = rz_analysis_get_fcn_in (core->analysis, addr, RZ_ANAL_FCN_TYPE_NULL); int window; int wdelta = (idx > 5) ? idx - 5 : 0; RzListIter *iter; - RzList *list = rz_anal_var_all_list (core->anal, fcn); - RzAnalVar* var; + RzList *list = rz_analysis_var_all_list (core->analysis, fcn); + RzAnalysisVar* var; // Adjust the window size automatically. (void)rz_cons_get_size (&window); window -= 8; // Size of printed things. @@ -2629,7 +2629,7 @@ static ut64 var_variables_show(RzCore* core, int idx, int *vindex, int show, int switch (var->kind & 0xff) { case 'r': { - RzRegItem *r = rz_reg_index_get (core->anal->reg, var->delta); + RzRegItem *r = rz_reg_index_get (core->analysis->reg, var->delta); if (!r) { eprintf ("Register not found"); break; @@ -2645,7 +2645,7 @@ static ut64 var_variables_show(RzCore* core, int idx, int *vindex, int show, int i == *vindex ? "* ":" ", var->delta < 0? "var": "arg", var->type, var->name, - core->anal->reg->name[RZ_REG_NAME_BP], + core->analysis->reg->name[RZ_REG_NAME_BP], (var->kind == 'v')?"-":"+", var->delta); break; @@ -2654,7 +2654,7 @@ static ut64 var_variables_show(RzCore* core, int idx, int *vindex, int show, int i == *vindex ? "* ":" ", var->delta < 0? "var": "arg", var->type, var->name, - core->anal->reg->name[RZ_REG_NAME_BP], + core->analysis->reg->name[RZ_REG_NAME_BP], (var->kind == 'v')?"-":"+", var->delta); break; @@ -2682,9 +2682,9 @@ static void rz_core_visual_anal_refresh_column (RzCore *core, int colpos) { const ut64 addr = (level != 0 && level != 1) ? core->offset : var_functions_show (core, option, 0, colpos); - // RzAnalFunction* fcn = rz_anal_get_fcn_in(core->anal, addr, RZ_ANAL_FCN_TYPE_NULL); + // RzAnalysisFunction* fcn = rz_analysis_get_fcn_in(core->analysis, addr, RZ_ANAL_FCN_TYPE_NULL); int h, w = rz_cons_get_size (&h); - // int sz = (fcn)? RZ_MIN (rz_anal_fcn_size (fcn), h * 15) : 16; // max instr is 15 bytes. + // int sz = (fcn)? RZ_MIN (rz_analysis_fcn_size (fcn), h * 15) : 16; // max instr is 15 bytes. const char *cmd; if (printMode > 0 && printMode < lastPrintMode) { @@ -2812,7 +2812,7 @@ static ut64 rz_core_visual_anal_refresh (RzCore *core) { rz_cons_printf ("%s", drained); addr = var_variables_show (core, option, &variable_option, 1, cols); free (drained); - // var_index_show (core->anal, fcn, addr, option); + // var_index_show (core->analysis, fcn, addr, option); break; case 2: rz_cons_printf ("Press 'q' to quit call refs\n"); @@ -2986,7 +2986,7 @@ RZ_API void rz_core_visual_anal(RzCore *core, const char *input) { int asmbytes = rz_config_get_i (core->config, "asm.bytes"); rz_config_set_i (core->config, "asm.bytes", 0); for (;;) { - nfcns = rz_list_length (core->anal->fcns); + nfcns = rz_list_length (core->analysis->fcns); addr = rz_core_visual_anal_refresh (core); if (input && *input) { ch = *input; @@ -3151,8 +3151,8 @@ RZ_API void rz_core_visual_anal(RzCore *core, const char *input) { rz_core_cmd0 (core, "s $(afl~...)"); int n = 0; RzListIter *iter; - RzAnalFunction *fcn; - rz_list_foreach (core->anal->fcns, iter, fcn) { + RzAnalysisFunction *fcn; + rz_list_foreach (core->analysis->fcns, iter, fcn) { if (fcn->addr == core->offset) { option = n; break; @@ -3236,9 +3236,9 @@ RZ_API void rz_core_visual_anal(RzCore *core, const char *input) { rz_core_visual_showcursor (core, true); rz_core_visual_offset (core); // change the seek to selected offset RzListIter *iter; // change the current option to selected seek - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; int i = 0; - rz_list_foreach (core->anal->fcns, iter, fcn) { + rz_list_foreach (core->analysis->fcns, iter, fcn) { if (core->offset == fcn->addr){ option = i; } @@ -3307,15 +3307,15 @@ RZ_API void rz_core_seek_next(RzCore *core, const char *type) { RzListIter *iter; ut64 next = UT64_MAX; if (strstr (type, "opc")) { - RzAnalOp aop; - if (rz_anal_op (core->anal, &aop, core->offset, core->block, core->blocksize, RZ_ANAL_OP_MASK_BASIC)) { + RzAnalysisOp aop; + if (rz_analysis_op (core->analysis, &aop, core->offset, core->block, core->blocksize, RZ_ANAL_OP_MASK_BASIC)) { next = core->offset + aop.size; } else { eprintf ("Invalid opcode\n"); } } else if (strstr (type, "fun")) { - RzAnalFunction *fcni; - rz_list_foreach (core->anal->fcns, iter, fcni) { + RzAnalysisFunction *fcni; + rz_list_foreach (core->analysis->fcns, iter, fcni) { if (fcni->addr < next && fcni->addr > core->offset) { next = fcni->addr; } @@ -3340,8 +3340,8 @@ RZ_API void rz_core_seek_previous (RzCore *core, const char *type) { eprintf ("TODO: rz_core_seek_previous (opc)\n"); } else if (strstr (type, "fun")) { - RzAnalFunction *fcni; - rz_list_foreach (core->anal->fcns, iter, fcni) { + RzAnalysisFunction *fcni; + rz_list_foreach (core->analysis->fcns, iter, fcni) { if (fcni->addr > next && fcni->addr < core->offset) { next = fcni->addr; } @@ -3363,12 +3363,12 @@ RZ_API void rz_core_seek_previous (RzCore *core, const char *type) { //define the data at offset according to the type (byte, word...) n times static void define_data_ntimes (RzCore *core, ut64 off, int times, int type) { int i = 0; - rz_meta_del (core->anal, RZ_META_TYPE_ANY, off, core->blocksize); + rz_meta_del (core->analysis, RZ_META_TYPE_ANY, off, core->blocksize); if (times < 0) { times = 1; } for (i = 0; i < times; i++, off += type) { - rz_meta_set (core->anal, RZ_META_TYPE_DATA, off, type, ""); + rz_meta_set (core->analysis, RZ_META_TYPE_DATA, off, type, ""); } } @@ -3397,7 +3397,7 @@ static void handleHints(RzCore *core) { rz_str_trim (arg); int bits = atoi (arg); if (bits == 8 || bits == 16 || bits == 32 || bits == 64) { - rz_anal_hint_set_bits (core->anal, core->offset, bits); + rz_analysis_hint_set_bits (core->analysis, core->offset, bits); } } break; @@ -3578,7 +3578,7 @@ onemoretime: { char *man = NULL; /* check for manpage */ - RzAnalOp *op = rz_core_anal_op (core, off, RZ_ANAL_OP_MASK_BASIC); + RzAnalysisOp *op = rz_core_analysis_op (core, off, RZ_ANAL_OP_MASK_BASIC); if (op) { if (op->jump != UT64_MAX) { RzFlagItem *item = rz_flag_get_i (core->flags, op->jump); @@ -3589,7 +3589,7 @@ onemoretime: } } } - rz_anal_op_free (op); + rz_analysis_op_free (op); } if (man) { char *p = strstr (man, "INODE"); @@ -3606,27 +3606,27 @@ onemoretime: break; case 'n': { - RzAnalOp op; + RzAnalysisOp op; char *q = NULL; ut64 tgt_addr = UT64_MAX; if (!isDisasmPrint (core->printidx)) { break; } // TODO: get the aligned instruction even if the cursor is in the middle of it. - rz_anal_op (core->anal, &op, off, + rz_analysis_op (core->analysis, &op, off, core->block + off - core->offset, 32, RZ_ANAL_OP_MASK_BASIC); tgt_addr = op.jump != UT64_MAX ? op.jump : op.ptr; - RzAnalVar *var = rz_anal_get_used_function_var (core->anal, op.addr); + RzAnalysisVar *var = rz_analysis_get_used_function_var (core->analysis, op.addr); if (var) { // q = rz_str_newf ("?i Rename variable %s to;afvn %s `yp`", op.var->name, op.var->name); char *newname = rz_cons_input (sdb_fmt ("New variable name for '%s': ", var->name)); if (newname && *newname) { - rz_anal_var_rename (var, newname, true); + rz_analysis_var_rename (var, newname, true); free (newname); } } else if (tgt_addr != UT64_MAX) { - RzAnalFunction *fcn = rz_anal_get_function_at (core->anal, tgt_addr); + RzAnalysisFunction *fcn = rz_analysis_get_function_at (core->analysis, tgt_addr); RzFlagItem *f = rz_flag_get_i (core->flags, tgt_addr); if (fcn) { q = rz_str_newf ("?i Rename function %s to;afn `yp` 0x%"PFMT64x, @@ -3644,7 +3644,7 @@ onemoretime: rz_core_cmd0 (core, q); free (q); } - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); break; } case 'C': @@ -3689,17 +3689,17 @@ onemoretime: case 'e': // set function size { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, off, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, off, 0); if (!fcn) { - fcn = rz_anal_get_fcn_in (core->anal, core->offset, 0); + fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, 0); } if (fcn) { - RzAnalOp op; + RzAnalysisOp op; ut64 size; - if (rz_anal_op (core->anal, &op, off, core->block+delta, + if (rz_analysis_op (core->analysis, &op, off, core->block+delta, core->blocksize-delta, RZ_ANAL_OP_MASK_BASIC)) { size = off - fcn->addr + op.size; - rz_anal_function_resize (fcn, size); + rz_analysis_function_resize (fcn, size); } } } @@ -3755,11 +3755,11 @@ onemoretime: } name[4 + n] = '\0'; if (is_wide) { - rz_meta_set (core->anal, RZ_META_TYPE_STRING, + rz_meta_set (core->analysis, RZ_META_TYPE_STRING, off + ntotal, (n * 2) + ntotal, (const char *) name + 4); } else { - rz_meta_set (core->anal, RZ_META_TYPE_STRING, + rz_meta_set (core->analysis, RZ_META_TYPE_STRING, off + ntotal, n + ntotal, (const char *) name + 4); } @@ -3808,10 +3808,10 @@ onemoretime: //handle wide strings //memcpy (name + 4, (const char *)p, n); if (is_wide) { - rz_meta_set (core->anal, RZ_META_TYPE_STRING, off, + rz_meta_set (core->analysis, RZ_META_TYPE_STRING, off, n * 2, (const char *) name + 4); } else { - rz_meta_set (core->anal, RZ_META_TYPE_STRING, off, + rz_meta_set (core->analysis, RZ_META_TYPE_STRING, off, n, (const char *) name + 4); } rz_name_filter (name, n + 10); @@ -3821,21 +3821,21 @@ onemoretime: } break; case 'd': // TODO: check - rz_meta_del (core->anal, RZ_META_TYPE_ANY, off, plen); - rz_meta_set (core->anal, RZ_META_TYPE_DATA, off, plen, ""); + rz_meta_del (core->analysis, RZ_META_TYPE_ANY, off, plen); + rz_meta_set (core->analysis, RZ_META_TYPE_DATA, off, plen, ""); break; case 'c': // TODO: check - rz_meta_del (core->anal, RZ_META_TYPE_ANY, off, plen); - rz_meta_set (core->anal, RZ_META_TYPE_CODE, off, plen, ""); + rz_meta_del (core->analysis, RZ_META_TYPE_ANY, off, plen); + rz_meta_set (core->analysis, RZ_META_TYPE_CODE, off, plen, ""); break; case 'u': - rz_core_anal_undefine (core, off); + rz_core_analysis_undefine (core, off); break; case 'f': { - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, core->offset, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, core->offset, 0); if (fcn) { - rz_anal_function_resize (fcn, core->offset - fcn->addr); + rz_analysis_function_resize (fcn, core->offset - fcn->addr); } rz_cons_break_push (NULL, NULL); rz_core_cmdf (core, "af @ 0x%08" PFMT64x, off); // required for thumb autodetection @@ -3876,15 +3876,15 @@ onemoretime: } ut64 try_off; - RzAnalOp *op = NULL; - RzAnalVar *var = NULL; + RzAnalysisOp *op = NULL; + RzAnalysisVar *var = NULL; for (try_off = start_off; try_off < start_off + incr*16; try_off += incr) { - rz_anal_op_free (op); - op = rz_core_anal_op (core, try_off, RZ_ANAL_OP_MASK_ALL); + rz_analysis_op_free (op); + op = rz_core_analysis_op (core, try_off, RZ_ANAL_OP_MASK_ALL); if (!op) { break; } - var = rz_anal_get_used_function_var (core->anal, op->addr); + var = rz_analysis_get_used_function_var (core->analysis, op->addr); if (var) { break; } @@ -3893,7 +3893,7 @@ onemoretime: if (var) { char *newname = rz_cons_input (sdb_fmt ("New variable name for '%s': ", var->name)); if (newname && *newname) { - rz_anal_var_rename (var, newname, true); + rz_analysis_var_rename (var, newname, true); free (newname); } } else { @@ -3901,7 +3901,7 @@ onemoretime: rz_cons_any_key (NULL); } - rz_anal_op_free (op); + rz_analysis_op_free (op); break; } case 'Q': diff --git a/librz/core/vmenus_graph.c b/librz/core/vmenus_graph.c index 27555763e1..b3fbf72927 100644 --- a/librz/core/vmenus_graph.c +++ b/librz/core/vmenus_graph.c @@ -37,7 +37,7 @@ RZ_API char *rz_str_widget_list(void *user, RzList *list, int rows, int cur, Pri typedef struct { ut64 addr; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; int cur; // current row selected int cur_sort; // holds current sort RzCore *core; @@ -49,7 +49,7 @@ typedef struct { typedef struct { ut64 addr; const char *name; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; } RzCoreVisualViewGraphItem; static char *print_item(void *_core, void *_item, bool selected) { @@ -68,8 +68,8 @@ static char *print_item(void *_core, void *_item, bool selected) { static RzList *__xrefs(RzCore *core, ut64 addr) { RzList *r = rz_list_newf (free); RzListIter *iter; - RzAnalRef *ref; - RzList *xrefs = rz_anal_xrefs_get (core->anal, addr); + RzAnalysisRef *ref; + RzList *xrefs = rz_analysis_xrefs_get (core->analysis, addr); rz_list_foreach (xrefs, iter, ref) { if (ref->type != 'C') { continue; @@ -78,7 +78,7 @@ static RzList *__xrefs(RzCore *core, ut64 addr) { RzFlagItem *f = rz_flag_get_at (core->flags, ref->addr, 0); item->addr = ref->addr; item->name = f? f->name: NULL; - RzAnalFunction *rf = rz_anal_get_fcn_in (core->anal, ref->addr, 0); + RzAnalysisFunction *rf = rz_analysis_get_fcn_in (core->analysis, ref->addr, 0); item->fcn = rf; if (rf) { item->name = rf->name; @@ -91,12 +91,12 @@ static RzList *__xrefs(RzCore *core, ut64 addr) { static RzList *__refs(RzCore *core, ut64 addr) { RzList *r = rz_list_newf (free); RzListIter *iter; - RzAnalRef *ref; - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, addr, 0); + RzAnalysisRef *ref; + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, addr, 0); if (!fcn) { return r; } - RzList *refs = rz_anal_function_get_refs (fcn); + RzList *refs = rz_analysis_function_get_refs (fcn); rz_list_foreach (refs, iter, ref) { if (ref->type != 'C') { continue; @@ -105,7 +105,7 @@ static RzList *__refs(RzCore *core, ut64 addr) { RzFlagItem *f = rz_flag_get_at (core->flags, ref->addr, 0); item->addr = ref->addr; item->name = f? f->name: NULL; - RzAnalFunction *rf = rz_anal_get_fcn_in (core->anal, ref->addr, 0); + RzAnalysisFunction *rf = rz_analysis_get_fcn_in (core->analysis, ref->addr, 0); if (rf) { item->name = rf->name; item->fcn = rf; @@ -118,15 +118,15 @@ static RzList *__refs(RzCore *core, ut64 addr) { static RzList *__fcns(RzCore *core) { RzList *r = rz_list_newf (free); RzListIter *iter; - RzAnalFunction *fcn; - rz_list_foreach (core->anal->fcns, iter, fcn) { + RzAnalysisFunction *fcn; + rz_list_foreach (core->analysis->fcns, iter, fcn) { RzCoreVisualViewGraphItem *item = RZ_NEW0 (RzCoreVisualViewGraphItem); item->addr = fcn->addr; item->name = fcn->name; item->fcn = fcn; rz_list_append (r, item); } - return r; // core->anal->fcns; + return r; // core->analysis->fcns; } static void __seek_cursor(RzCoreVisualViewGraph *status) { @@ -180,7 +180,7 @@ static void __toggleSort (RzCoreVisualViewGraph *status) { static void __reset_status(RzCoreVisualViewGraph *status) { status->addr = status->core->offset; - status->fcn = rz_anal_get_function_at (status->core->anal, status->addr); + status->fcn = rz_analysis_get_function_at (status->core->analysis, status->addr); status->mainCol = __fcns (status->core); __sort (status, status->mainCol); @@ -257,7 +257,7 @@ RZ_API int rz_core_visual_view_graph(RzCore *core) { status.cur_sort = SORT_NAME; __reset_status (&status); __sync_status_with_cursor (&status); - RzAnalFunction *fcn = rz_anal_get_fcn_in (core->anal, status.addr, 0); + RzAnalysisFunction *fcn = rz_analysis_get_fcn_in (core->analysis, status.addr, 0); if (fcn) { status.addr = fcn->addr; status.fcn = fcn; diff --git a/librz/core/vmenus_zigns.c b/librz/core/vmenus_zigns.c index 181b00c123..b75423fdad 100644 --- a/librz/core/vmenus_zigns.c +++ b/librz/core/vmenus_zigns.c @@ -5,7 +5,7 @@ typedef struct { ut64 addr; ut64 faddr; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; int pos; // related to columns int cur; // current row selected RzList *columns; @@ -38,7 +38,7 @@ static char *print_item (void *_core, void *_item, bool selected) { static RzList *__signs(RzCoreVisualViewZigns *status, ut64 addr, bool update) { RzCore *core = status->core; - return rz_sign_get_list (core->anal); + return rz_sign_get_list (core->analysis); } RZ_API int __core_visual_view_zigns_update(RzCore *core, RzCoreVisualViewZigns *status) { @@ -97,7 +97,7 @@ RZ_API int rz_core_visual_view_zigns(RzCore *core) { break; case 'd': if (cur_name && *cur_name) { - rz_sign_delete (core->anal, cur_name); + rz_sign_delete (core->analysis, cur_name); RZ_FREE (cur_name); } break; diff --git a/librz/core/zdiff.c b/librz/core/zdiff.c index 8e717d3373..e773e6a888 100644 --- a/librz/core/zdiff.c +++ b/librz/core/zdiff.c @@ -40,8 +40,8 @@ RZ_API int rz_core_zdiff(RzCore *c, RzCore *c2) { return false; } ////////// moove this into anal/sign - SdbList *a = sdb_foreach_list (c->anal->sdb_zigns, false); - SdbList *b = sdb_foreach_list (c2->anal->sdb_zigns, false); + SdbList *a = sdb_foreach_list (c->analysis->sdb_zigns, false); + SdbList *b = sdb_foreach_list (c2->analysis->sdb_zigns, false); eprintf ("Diff %d %d\n", (int)ls_length (a), (int)ls_length (b)); SdbListIter *iter; @@ -49,7 +49,7 @@ RZ_API int rz_core_zdiff(RzCore *c, RzCore *c2) { RzList *la = rz_list_new (); ls_foreach (a, iter, kv) { RzSignItem *it = rz_sign_item_new (); - if (rz_sign_deserialize (c->anal, it, kv->base.key, kv->base.value)) { + if (rz_sign_deserialize (c->analysis, it, kv->base.key, kv->base.value)) { rz_list_append (la, it); } else { rz_sign_item_free (it); @@ -58,7 +58,7 @@ RZ_API int rz_core_zdiff(RzCore *c, RzCore *c2) { RzList *lb = rz_list_new (); ls_foreach (b, iter, kv) { RzSignItem *it = rz_sign_item_new (); - if (rz_sign_deserialize (c2->anal, it, kv->base.key, kv->base.value)) { + if (rz_sign_deserialize (c2->analysis, it, kv->base.key, kv->base.value)) { rz_list_append (lb, it); } else { rz_sign_item_free (it); @@ -90,7 +90,7 @@ RZ_API int rz_core_zdiff(RzCore *c, RzCore *c2) { } /* Diff functions */ - // rz_anal_diff_fcn (cores[0]->anal, cores[0]->anal->fcns, cores[1]->anal->fcns); + // rz_analysis_diff_fcn (cores[0]->analysis, cores[0]->analysis->fcns, cores[1]->analysis->fcns); return true; } diff --git a/librz/debug/Makefile b/librz/debug/Makefile index 099c698e33..5e7e119bab 100644 --- a/librz/debug/Makefile +++ b/librz/debug/Makefile @@ -1,7 +1,7 @@ include ../config.mk NAME=rz_debug -RZ_DEPS=rz_reg rz_anal rz_bp rz_io rz_parse rz_cons rz_syscall rz_hash rz_flag rz_util rz_egg rz_crypto +RZ_DEPS=rz_reg rz_analysis rz_bp rz_io rz_parse rz_cons rz_syscall rz_hash rz_flag rz_util rz_egg rz_crypto RZ_DEPS+=rz_socket CFLAGS+=-DRZ_PLUGIN_INCORE diff --git a/librz/debug/debug.c b/librz/debug/debug.c index 47222c5a51..2e624011b9 100644 --- a/librz/debug/debug.c +++ b/librz/debug/debug.c @@ -364,7 +364,7 @@ RZ_API RzDebug *rz_debug_new(int hard) { dbg->follow_child = false; RZ_FREE (dbg->btalgo); dbg->trace_execs = 0; - dbg->anal = NULL; + dbg->analysis = NULL; dbg->pid = -1; dbg->bpsize = 1; dbg->tid = -1; @@ -426,7 +426,7 @@ RZ_API RzDebug *rz_debug_free(RzDebug *dbg) { free (dbg->btalgo); rz_debug_trace_free (dbg->trace); rz_debug_session_free (dbg->session); - rz_anal_op_free (dbg->cur_op); + rz_analysis_op_free (dbg->cur_op); dbg->trace = NULL; rz_egg_free (dbg->egg); free (dbg->arch); @@ -785,7 +785,7 @@ RZ_API int rz_debug_step_soft(RzDebug *dbg) { ut8 buf[32]; ut64 pc, sp, r; ut64 next[2]; - RzAnalOp op; + RzAnalysisOp op; int br, i, ret; union { ut64 r64; @@ -813,7 +813,7 @@ RZ_API int rz_debug_step_soft(RzDebug *dbg) { if (!dbg->iob.read_at (dbg->iob.io, pc, buf, sizeof (buf))) { return false; } - if (!rz_anal_op (dbg->anal, &op, pc, buf, sizeof (buf), RZ_ANAL_OP_MASK_BASIC)) { + if (!rz_analysis_op (dbg->analysis, &op, pc, buf, sizeof (buf), RZ_ANAL_OP_MASK_BASIC)) { return false; } if (op.type == RZ_ANAL_OP_TYPE_ILL) { @@ -1014,7 +1014,7 @@ static bool isStepOverable(ut64 opType) { } RZ_API int rz_debug_step_over(RzDebug *dbg, int steps) { - RzAnalOp op; + RzAnalysisOp op; ut64 buf_pc, pc, ins_size; ut8 buf[DBG_BUF_SIZE]; int steps_taken = 0; @@ -1044,7 +1044,7 @@ RZ_API int rz_debug_step_over(RzDebug *dbg, int steps) { return steps_taken; } - if (!dbg->anal || !dbg->reg) { + if (!dbg->analysis || !dbg->reg) { return steps_taken; } @@ -1060,7 +1060,7 @@ RZ_API int rz_debug_step_over(RzDebug *dbg, int steps) { dbg->iob.read_at (dbg->iob.io, buf_pc, buf, sizeof (buf)); } // Analyze the opcode - if (!rz_anal_op (dbg->anal, &op, pc, buf + (pc - buf_pc), sizeof (buf) - (pc - buf_pc), RZ_ANAL_OP_MASK_BASIC)) { + if (!rz_analysis_op (dbg->analysis, &op, pc, buf + (pc - buf_pc), sizeof (buf) - (pc - buf_pc), RZ_ANAL_OP_MASK_BASIC)) { eprintf ("debug-step-over: Decode error at %"PFMT64x"\n", pc); return steps_taken; } @@ -1278,10 +1278,10 @@ repeat: } else if (what & RZ_DBG_SIGNAL_SKIP) { // skip signal. requires skipping one instruction ut8 buf[64]; - RzAnalOp op = {0}; + RzAnalysisOp op = {0}; ut64 pc = rz_debug_reg_get (dbg, "PC"); dbg->iob.read_at (dbg->iob.io, pc, buf, sizeof (buf)); - rz_anal_op (dbg->anal, &op, pc, buf, sizeof (buf), RZ_ANAL_OP_MASK_BASIC); + rz_analysis_op (dbg->analysis, &op, pc, buf, sizeof (buf), RZ_ANAL_OP_MASK_BASIC); if (op.size > 0) { const char *signame = rz_signal_to_string (dbg->reason.signum); rz_debug_reg_set (dbg, "PC", pc+op.size); @@ -1331,14 +1331,14 @@ RZ_API int rz_debug_continue_until_nontraced(RzDebug *dbg) { RZ_API int rz_debug_continue_until_optype(RzDebug *dbg, int type, int over) { int ret, n = 0; ut64 pc, buf_pc = 0; - RzAnalOp op; + RzAnalysisOp op; ut8 buf[DBG_BUF_SIZE]; if (rz_debug_is_dead (dbg)) { return false; } - if (!dbg->anal || !dbg->reg) { + if (!dbg->analysis || !dbg->reg) { eprintf ("Undefined pointer at dbg->anal\n"); return false; } @@ -1363,7 +1363,7 @@ RZ_API int rz_debug_continue_until_optype(RzDebug *dbg, int type, int over) { dbg->iob.read_at (dbg->iob.io, buf_pc, buf, sizeof (buf)); } // Analyze the opcode - if (!rz_anal_op (dbg->anal, &op, pc, buf + (pc - buf_pc), sizeof (buf) - (pc - buf_pc), RZ_ANAL_OP_MASK_BASIC)) { + if (!rz_analysis_op (dbg->analysis, &op, pc, buf + (pc - buf_pc), sizeof (buf) - (pc - buf_pc), RZ_ANAL_OP_MASK_BASIC)) { eprintf ("Decode error at %"PFMT64x"\n", pc); return false; } @@ -1465,7 +1465,7 @@ static int show_syscall(RzDebug *dbg, const char *sysreg) { int reg, i, args; RzSyscallItem *si; reg = (int)rz_debug_reg_get (dbg, sysreg); - si = rz_syscall_get (dbg->anal->syscall, reg, -1); + si = rz_syscall_get (dbg->analysis->syscall, reg, -1); if (si) { sysname = si->name? si->name: "unknown"; args = si->args; diff --git a/librz/debug/desil.c b/librz/debug/desil.c index 95d703ed5c..9be2470d6f 100644 --- a/librz/debug/desil.c +++ b/librz/debug/desil.c @@ -32,7 +32,7 @@ static int prestep = 1; // TODO: make it configurable static ut64 opc = 0; RzList *esil_watchpoints = NULL; #define EWPS esil_watchpoints -#define ESIL dbg->anal->esil +#define ESIL dbg->analysis->esil static int exprmatch (RzDebug *dbg, ut64 addr, const char *expr) { char *e = strdup (expr); @@ -83,7 +83,7 @@ static int esilbreak_check_pc (RzDebug *dbg, ut64 pc) { return 0; } -static int esilbreak_mem_read(RzAnalEsil *esil, ut64 addr, ut8 *buf, int len) { +static int esilbreak_mem_read(RzAnalysisEsil *esil, ut64 addr, ut8 *buf, int len) { EsilBreak *ew; RzListIter *iter; eprintf (Color_GREEN"MEM READ 0x%"PFMT64x"\n"Color_RESET, addr); @@ -98,7 +98,7 @@ static int esilbreak_mem_read(RzAnalEsil *esil, ut64 addr, ut8 *buf, int len) { return 0; // fallback } -static int esilbreak_mem_write(RzAnalEsil *esil, ut64 addr, const ut8 *buf, int len) { +static int esilbreak_mem_write(RzAnalysisEsil *esil, ut64 addr, const ut8 *buf, int len) { EsilBreak *ew; RzListIter *iter; eprintf (Color_RED"MEM WRTE 0x%"PFMT64x"\n"Color_RESET, addr); @@ -113,7 +113,7 @@ static int esilbreak_mem_write(RzAnalEsil *esil, ut64 addr, const ut8 *buf, int return 1; // fallback } -static int esilbreak_reg_read(RzAnalEsil *esil, const char *regname, ut64 *num, int *size) { +static int esilbreak_reg_read(RzAnalysisEsil *esil, const char *regname, ut64 *num, int *size) { EsilBreak *ew; RzListIter *iter; if (regname[0]>='0' && regname[0]<='9') { @@ -188,7 +188,7 @@ static int exprmatchreg (RzDebug *dbg, const char *regname, const char *expr) { return ret; } -static int esilbreak_reg_write(RzAnalEsil *esil, const char *regname, ut64 *num) { +static int esilbreak_reg_write(RzAnalysisEsil *esil, const char *regname, ut64 *num) { EsilBreak *ew; RzListIter *iter; if (regname[0] >= '0' && regname[0] <= '9') { @@ -214,12 +214,12 @@ RZ_API void rz_debug_esil_prestep (RzDebug *d, int p) { } RZ_API int rz_debug_esil_stepi (RzDebug *d) { - RzAnalOp op; + RzAnalysisOp op; ut8 obuf[64]; int ret = 1; dbg = d; if (!ESIL) { - ESIL = rz_anal_esil_new (32, true, 64); + ESIL = rz_analysis_esil_new (32, true, 64); // TODO setup something? if (!ESIL) { return 0; @@ -232,7 +232,7 @@ RZ_API int rz_debug_esil_stepi (RzDebug *d) { //dbg->iob.read_at (dbg->iob.io, npc, buf, sizeof (buf)); - //dbg->anal->reg = dbg->reg; // hack + //dbg->analysis->reg = dbg->reg; // hack ESIL->cb.hook_mem_read = &esilbreak_mem_read; ESIL->cb.hook_mem_write = &esilbreak_mem_write; ESIL->cb.hook_reg_read = &esilbreak_reg_read; @@ -249,16 +249,16 @@ RZ_API int rz_debug_esil_stepi (RzDebug *d) { // npc = rz_debug_reg_get (dbg, dbg->reg->name[RZ_REG_NAME_PC]); } - if (rz_anal_op (dbg->anal, &op, opc, obuf, sizeof (obuf), RZ_ANAL_OP_MASK_ESIL)) { + if (rz_analysis_op (dbg->analysis, &op, opc, obuf, sizeof (obuf), RZ_ANAL_OP_MASK_ESIL)) { if (esilbreak_check_pc (dbg, opc)) { eprintf ("STOP AT 0x%08"PFMT64x"\n", opc); ret = 0; } else { - rz_anal_esil_set_pc (ESIL, opc); + rz_analysis_esil_set_pc (ESIL, opc); eprintf ("0x%08"PFMT64x" %s\n", opc, RZ_STRBUF_SAFEGET (&op.esil)); - (void)rz_anal_esil_parse (ESIL, RZ_STRBUF_SAFEGET (&op.esil)); - //rz_anal_esil_dumpstack (ESIL); - rz_anal_esil_stack_free (ESIL); + (void)rz_analysis_esil_parse (ESIL, RZ_STRBUF_SAFEGET (&op.esil)); + //rz_analysis_esil_dumpstack (ESIL); + rz_analysis_esil_stack_free (ESIL); ret = 1; } } diff --git a/librz/debug/meson.build b/librz/debug/meson.build index 41e96962f3..2196b88011 100644 --- a/librz/debug/meson.build +++ b/librz/debug/meson.build @@ -37,7 +37,7 @@ rz_debug_deps = [ rz_hash_dep, rz_reg_dep, rz_syscall_dep, - rz_anal_dep, + rz_analysis_dep, rz_flag_dep, rz_io_dep, rz_bp_dep, @@ -123,7 +123,7 @@ pkgconfig_mod.generate(rz_debug, 'rz_hash', 'rz_reg', 'rz_syscall', - 'rz_anal', + 'rz_analysis', 'rz_flag', 'rz_io', 'rz_bp', diff --git a/librz/debug/p/bochs.mk b/librz/debug/p/bochs.mk index d31cd8a63d..f57a51b706 100644 --- a/librz/debug/p/bochs.mk +++ b/librz/debug/p/bochs.mk @@ -1,5 +1,5 @@ #include ../../config.mk -#BINDEPS=rz_reg rz_bp rz_util rz_io rz_anal +#BINDEPS=rz_reg rz_bp rz_util rz_io rz_analysis CFLAGS+=-I$(SHLR)/bochs/include/ LIB_PATH=$(SHRL)/bochs/ @@ -17,7 +17,7 @@ endif LDFLAGS+=-L$(LTOP)/util -lrz_util LDFLAGS+=-L$(LTOP)/cons -lrz_cons LDFLAGS+=-L$(LTOP)/parse -lrz_parse -LDFLAGS+=-L$(LTOP)/anal -lrz_anal +LDFLAGS+=-L$(LTOP)/analysis -lrz_analysis LDFLAGS+=-L$(LTOP)/reg -lrz_reg LDFLAGS+=-L$(LTOP)/bp -lrz_bp LDFLAGS+=-L$(LTOP)/io -lrz_io diff --git a/librz/debug/p/debug_bochs.c b/librz/debug/p/debug_bochs.c index 2d355c556f..b71716c8fb 100644 --- a/librz/debug/p/debug_bochs.c +++ b/librz/debug/p/debug_bochs.c @@ -342,7 +342,7 @@ static int rz_debug_bochs_attach(RzDebug *dbg, int pid) { if (!strcmp ("bochs", d->plugin->name)) { RzIOBochs *g = d->data; //int arch = rz_sys_arch_id (dbg->arch); - // int bits = dbg->anal->bits; + // int bits = dbg->analysis->bits; if (( desc = &g->desc )) { eprintf("bochs attach: ok\n"); saveRegs = malloc(1024); @@ -362,7 +362,7 @@ static int rz_debug_bochs_detach(RzDebug *dbg, int pid) { } static const char *rz_debug_bochs_reg_profile(RzDebug *dbg) { - int bits = dbg->anal->bits; + int bits = dbg->analysis->bits; if (bits == 16 || bits == 32 || bits == 64) { return strdup ( diff --git a/librz/debug/p/debug_esil.c b/librz/debug/p/debug_esil.c index d2b9d51d0e..85c63927e6 100644 --- a/librz/debug/p/debug_esil.c +++ b/librz/debug/p/debug_esil.c @@ -23,7 +23,7 @@ static int __esil_step(RzDebug *dbg) { int oplen; ut8 buf[64]; ut64 pc = 0LL; // getreg("pc") - RzAnalOp op = {0}; + RzAnalysisOp op = {0}; rz_debug_reg_sync(dbg, RZ_REG_TYPE_GPR, false); pc = rz_debug_reg_get (dbg, "PC"); @@ -33,14 +33,14 @@ static int __esil_step(RzDebug *dbg) { //memset (buf, 0, sizeof (buf)); dbg->iob.read_at (dbg->iob.io, pc, buf, 64); eprintf ("READ 0x%08"PFMT64x" %02x %02x %02x\n", pc, buf[0], buf[1], buf[2]); - oplen = rz_anal_op (dbg->anal, &op, pc, buf, sizeof (buf), RZ_ANAL_OP_MASK_ESIL); + oplen = rz_analysis_op (dbg->analysis, &op, pc, buf, sizeof (buf), RZ_ANAL_OP_MASK_ESIL); if (oplen > 0) { if (*RZ_STRBUF_SAFEGET (&op.esil)) { eprintf ("ESIL: %s\n", RZ_STRBUF_SAFEGET (&op.esil)); - rz_anal_esil_parse (dbg->anal->esil, RZ_STRBUF_SAFEGET (&op.esil)); + rz_analysis_esil_parse (dbg->analysis->esil, RZ_STRBUF_SAFEGET (&op.esil)); } } - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); eprintf ("TODO: ESIL STEP\n"); return true; } @@ -108,7 +108,7 @@ static char *__esil_reg_profile(RzDebug *dbg) { "gpr memi .32 32 0\n" ); } - return rz_anal_get_reg_profile (dbg->anal); + return rz_analysis_get_reg_profile (dbg->analysis); } static int __esil_breakpoint (RzBreakpoint *bp, RzBreakpointItem *b, bool set) { diff --git a/librz/debug/p/debug_gdb.c b/librz/debug/p/debug_gdb.c index cf09fed178..48673e917b 100644 --- a/librz/debug/p/debug_gdb.c +++ b/librz/debug/p/debug_gdb.c @@ -288,11 +288,11 @@ static int rz_debug_gdb_reg_write(RzDebug *dbg, int type, const ut8 *buf, int si return -1; } int buflen = 0; - int bits = dbg->anal->bits; - const char *pcname = rz_reg_get_name (dbg->anal->reg, RZ_REG_NAME_PC); - RzRegItem *reg = rz_reg_get (dbg->anal->reg, pcname, 0); + int bits = dbg->analysis->bits; + const char *pcname = rz_reg_get_name (dbg->analysis->reg, RZ_REG_NAME_PC); + RzRegItem *reg = rz_reg_get (dbg->analysis->reg, pcname, 0); if (reg) { - if (dbg->anal->bits != reg->size) { + if (dbg->analysis->bits != reg->size) { bits = reg->size; } } @@ -379,7 +379,7 @@ static int rz_debug_gdb_attach(RzDebug *dbg, int pid) { support_hw_bp = UNKNOWN; desc = &g->desc; int arch = rz_sys_arch_id (dbg->arch); - int bits = dbg->anal->bits; + int bits = dbg->analysis->bits; gdbr_set_architecture (desc, arch, bits); } else { eprintf ("ERROR: Underlying IO descriptor is not a GDB one..\n"); @@ -405,7 +405,7 @@ static int rz_debug_gdb_detach(RzDebug *dbg, int pid) { static const char *rz_debug_gdb_reg_profile(RzDebug *dbg) { check_connection (dbg); int arch = rz_sys_arch_id (dbg->arch); - int bits = dbg->anal->bits; + int bits = dbg->analysis->bits; // XXX This happens when rizin set dbg.backend before opening io_gdb if (!desc) { return gdbr_get_reg_profile (arch, bits); diff --git a/librz/debug/p/debug_io.c b/librz/debug/p/debug_io.c index 8da2a45b18..db3b1ca1ee 100644 --- a/librz/debug/p/debug_io.c +++ b/librz/debug/p/debug_io.c @@ -86,7 +86,7 @@ static char *__io_reg_profile(RzDebug *dbg) { rz_cons_pop (); return ret; } - return rz_anal_get_reg_profile (dbg->anal); + return rz_analysis_get_reg_profile (dbg->analysis); } // "dr8" read register state diff --git a/librz/debug/p/debug_native.c b/librz/debug/p/debug_native.c index 92b3d5430b..1e381bc3b6 100644 --- a/librz/debug/p/debug_native.c +++ b/librz/debug/p/debug_native.c @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include #include @@ -801,7 +801,7 @@ static int linux_map_thp (RzDebug *dbg, ut64 addr, int size) { return false; } - int num = rz_syscall_get_num (dbg->anal->syscall, "madvise"); + int num = rz_syscall_get_num (dbg->analysis->syscall, "madvise"); snprintf (code, sizeof (code), "sc_madvise@syscall(%d);\n" @@ -853,7 +853,7 @@ static RzDebugMap* linux_map_alloc (RzDebug *dbg, ut64 addr, int size, bool thp) } else { sc_name = "mmap"; } - num = rz_syscall_get_num (dbg->anal->syscall, sc_name); + num = rz_syscall_get_num (dbg->analysis->syscall, sc_name); #ifndef MAP_ANONYMOUS #define MAP_ANONYMOUS 0x20 #endif @@ -906,7 +906,7 @@ static int linux_map_dealloc(RzDebug *dbg, ut64 addr, int size) { "x64", "x86.as", NULL }; - int num = rz_syscall_get_num (dbg->anal->syscall, "munmap"); + int num = rz_syscall_get_num (dbg->analysis->syscall, "munmap"); snprintf (code, sizeof (code), "sc_munmap@syscall(%d);\n" @@ -1505,7 +1505,7 @@ static int rz_debug_native_map_protect (RzDebug *dbg, ut64 addr, int size, int p char code[1024]; int num; - num = rz_syscall_get_num (dbg->anal->syscall, "mprotect"); + num = rz_syscall_get_num (dbg->analysis->syscall, "mprotect"); snprintf (code, sizeof (code), "sc@syscall(%d);\n" "main@global(0) { sc(%p,%d,%d);\n" diff --git a/librz/debug/p/debug_qnx.c b/librz/debug/p/debug_qnx.c index 03fa791cd4..df67d359a5 100644 --- a/librz/debug/p/debug_qnx.c +++ b/librz/debug/p/debug_qnx.c @@ -113,15 +113,15 @@ static RzList *rz_debug_qnx_map_get (RzDebug *dbg) { static int rz_debug_qnx_reg_write (RzDebug *dbg, int type, const ut8 *buf, int size) { int buflen = 0; - int bits = dbg->anal->bits; - const char *pcname = rz_reg_get_name (dbg->anal->reg, RZ_REG_NAME_PC); - RzRegItem *reg = rz_reg_get (dbg->anal->reg, pcname, 0); + int bits = dbg->analysis->bits; + const char *pcname = rz_reg_get_name (dbg->analysis->reg, RZ_REG_NAME_PC); + RzRegItem *reg = rz_reg_get (dbg->analysis->reg, pcname, 0); if (!reg_buf) { // we cannot write registers before we once read them return -1; } if (reg) { - if (dbg->anal->bits != reg->size) { + if (dbg->analysis->bits != reg->size) { bits = reg->size; } } @@ -186,7 +186,7 @@ static int rz_debug_qnx_attach (RzDebug *dbg, int pid) { if (!strcmp ("qnx", d->plugin->name)) { RzIOQnx *g = d->data; int arch = rz_sys_arch_id (dbg->arch); - int bits = dbg->anal->bits; + int bits = dbg->analysis->bits; if ((desc = &g->desc)) { switch (arch) { case RZ_SYS_ARCH_X86: @@ -228,7 +228,7 @@ static int rz_debug_qnx_detach (RzDebug *dbg, int pid) { static const char *rz_debug_qnx_reg_profile (RzDebug *dbg) { int arch = rz_sys_arch_id (dbg->arch); - int bits = dbg->anal->bits; + int bits = dbg->analysis->bits; switch (arch) { case RZ_SYS_ARCH_X86: return strdup ( diff --git a/librz/debug/p/gdb.mk b/librz/debug/p/gdb.mk index 96b804db65..c3909fcd80 100644 --- a/librz/debug/p/gdb.mk +++ b/librz/debug/p/gdb.mk @@ -17,7 +17,7 @@ LDFLAGS+=-L$(LTOP)/util -lrz_util LDFLAGS+=-L$(LTOP)/cons -lrz_cons LDFLAGS+=-L$(LTOP)/parse -lrz_parse LDFLAGS+=-L$(LTOP)/socket -lrz_socket -LDFLAGS+=-L$(LTOP)/anal -lrz_anal +LDFLAGS+=-L$(LTOP)/analysis -lrz_analysis LDFLAGS+=-L$(LTOP)/reg -lrz_reg LDFLAGS+=-L$(LTOP)/bp -lrz_bp LDFLAGS+=-L$(LTOP)/io -lrz_io diff --git a/librz/debug/p/native.mk b/librz/debug/p/native.mk index dc6ab00508..edef1549bb 100644 --- a/librz/debug/p/native.mk +++ b/librz/debug/p/native.mk @@ -26,7 +26,7 @@ ${TARGET_PTRACE}: ${OBJ_PTRACE} ${LDFLAGS_LINKPATH}.. -L.. -lrz_debug \ ${LDFLAGS_LINKPATH}../../io -L../../io -lrz_io \ ${LDFLAGS_LINKPATH}../../bp -L../../bp -lrz_bp \ - ${LDFLAGS_LINKPATH}../../anal -L../../anal -lrz_anal \ + ${LDFLAGS_LINKPATH}../../analysis -L../../analysis -lrz_analysis \ ${LDFLAGS_LINKPATH}../../reg -L../../reg -lrz_reg \ ${LDFLAGS_LINKPATH}../../util -L../../util -lrz_util \ ${LDFLAGS_LINKPATH}../../syscall -L../../util -lrz_syscall \ diff --git a/librz/debug/p/native/bt.c b/librz/debug/p/native/bt.c index 2271606cb7..ad603b8891 100644 --- a/librz/debug/p/native/bt.c +++ b/librz/debug/p/native/bt.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: LGPL-3.0-only -#include +#include #include "bt/generic-x86.c" #include "bt/generic-x64.c" diff --git a/librz/debug/p/native/bt/fuzzy-all.c b/librz/debug/p/native/bt/fuzzy-all.c index 1dd0e1bf4b..9b13f7fcc4 100644 --- a/librz/debug/p/native/bt/fuzzy-all.c +++ b/librz/debug/p/native/bt/fuzzy-all.c @@ -20,14 +20,14 @@ static int iscallret(RzDebug *dbg, ut64 addr) { } // IMMAMISSINGANYOP } else { - RzAnalOp op; + RzAnalysisOp op; (void) dbg->iob.read_at (dbg->iob.io, addr-8, buf, 8); - (void) rz_anal_op (dbg->anal, &op, addr-8, buf, 8, RZ_ANAL_OP_MASK_BASIC); + (void) rz_analysis_op (dbg->analysis, &op, addr-8, buf, 8, RZ_ANAL_OP_MASK_BASIC); if (op.type == RZ_ANAL_OP_TYPE_CALL || op.type == RZ_ANAL_OP_TYPE_UCALL) { return 1; } /* delay slot */ - (void) rz_anal_op (dbg->anal, &op, addr-4, buf, 4, RZ_ANAL_OP_MASK_BASIC); + (void) rz_analysis_op (dbg->analysis, &op, addr-4, buf, 4, RZ_ANAL_OP_MASK_BASIC); if (op.type == RZ_ANAL_OP_TYPE_CALL || op.type == RZ_ANAL_OP_TYPE_UCALL) { return 1; } diff --git a/librz/debug/p/native/bt/generic-x64.c b/librz/debug/p/native/bt/generic-x64.c index dff92fd989..b3ac4e53c9 100644 --- a/librz/debug/p/native/bt/generic-x64.c +++ b/librz/debug/p/native/bt/generic-x64.c @@ -62,7 +62,7 @@ static RzList *backtrace_x86_64_anal(RzDebug *dbg, ut64 at) { RzList *list; RzReg *reg = dbg->reg; RzIOBind *bio = &dbg->iob; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; _rip = rz_reg_get_value (reg, rz_reg_get (reg, "rip", RZ_REG_TYPE_GPR)); if (at == UT64_MAX) { @@ -77,7 +77,7 @@ static RzList *backtrace_x86_64_anal(RzDebug *dbg, ut64 at) { bio->read_at (bio->io, _rip, (ut8*)&buf, 8); // TODO : frame->size by using esil to emulate first instructions - fcn = rz_anal_get_fcn_in (dbg->anal, _rip, RZ_ANAL_FCN_TYPE_NULL); + fcn = rz_analysis_get_fcn_in (dbg->analysis, _rip, RZ_ANAL_FCN_TYPE_NULL); if (fcn) { frame = RZ_NEW0 (RzDebugFrame); frame->addr = _rip; @@ -95,7 +95,7 @@ static RzList *backtrace_x86_64_anal(RzDebug *dbg, ut64 at) { bio->read_at (bio->io, _rbp+8, (ut8*)&ptr, 8); if (!ptr || !_rbp) break; - //fcn = rz_anal_get_fcn_in (dbg->anal, ptr, RZ_ANAL_FCN_TYPE_NULL); + //fcn = rz_analysis_get_fcn_in (dbg->analysis, ptr, RZ_ANAL_FCN_TYPE_NULL); frame = RZ_NEW0 (RzDebugFrame); frame->addr = ptr; frame->size = 0; diff --git a/librz/debug/p/native/bt/generic-x86.c b/librz/debug/p/native/bt/generic-x86.c index 24e046855f..21c7c1e22d 100644 --- a/librz/debug/p/native/bt/generic-x86.c +++ b/librz/debug/p/native/bt/generic-x86.c @@ -45,7 +45,7 @@ static RzList *backtrace_x86_32_anal(RzDebug *dbg, ut64 at) { ut32 i, _esp, esp, eip, ebp2; RzList *list; RzIOBind *bio = &dbg->iob; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; RzDebugFrame *frame; ut8 buf[4]; @@ -59,7 +59,7 @@ static RzList *backtrace_x86_32_anal(RzDebug *dbg, ut64 at) { esp = _esp; eip = rz_reg_get_value (reg, rz_reg_get (reg, "eip", RZ_REG_TYPE_GPR)); - fcn = rz_anal_get_fcn_in (dbg->anal, eip, RZ_ANAL_FCN_TYPE_NULL); + fcn = rz_analysis_get_fcn_in (dbg->analysis, eip, RZ_ANAL_FCN_TYPE_NULL); if (fcn != NULL) { frame = RZ_NEW0 (RzDebugFrame); frame->addr = eip; diff --git a/librz/debug/p/native/linux/linux_debug.c b/librz/debug/p/native/linux/linux_debug.c index ec63a43c1a..9eb0d8742b 100644 --- a/librz/debug/p/native/linux/linux_debug.c +++ b/librz/debug/p/native/linux/linux_debug.c @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/librz/debug/p/native/maps/darwin.c b/librz/debug/p/native/maps/darwin.c index b3c6fa90ee..b67da27fee 100644 --- a/librz/debug/p/native/maps/darwin.c +++ b/librz/debug/p/native/maps/darwin.c @@ -315,7 +315,7 @@ static RzList *darwin_dbg_maps(RzDebug *dbg) { //return osx_dbg_maps (dbg); return ios_dbg_maps (dbg); #if 0 - const char *osname = dbg->anal->syscall->os; + const char *osname = dbg->analysis->syscall->os; if (osname && !strcmp (osname, "ios")) { return ios_dbg_maps (dbg); } diff --git a/librz/debug/p/native/xnu/xnu_debug.c b/librz/debug/p/native/xnu/xnu_debug.c index 5ee003c2e4..dfecd6a493 100644 --- a/librz/debug/p/native/xnu/xnu_debug.c +++ b/librz/debug/p/native/xnu/xnu_debug.c @@ -14,7 +14,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/librz/debug/p/qnx.mk b/librz/debug/p/qnx.mk index 590325cd9d..446ec1f765 100644 --- a/librz/debug/p/qnx.mk +++ b/librz/debug/p/qnx.mk @@ -1,5 +1,5 @@ #include ../../config.mk -#BINDEPS=rz_reg rz_bp rz_util rz_io rz_anal +#BINDEPS=rz_reg rz_bp rz_util rz_io rz_analysis CFLAGS+=-I$(SHLR)/qnx/include/ LIB_PATH=$(SHRL)/qnx/ @@ -19,7 +19,7 @@ endif LDFLAGS+=-L$(LTOP)/util -lrz_util LDFLAGS+=-L$(LTOP)/cons -lrz_cons LDFLAGS+=-L$(LTOP)/parse -lrz_parse -LDFLAGS+=-L$(LTOP)/anal -lrz_anal +LDFLAGS+=-L$(LTOP)/analysis -lrz_analysis LDFLAGS+=-L$(LTOP)/reg -lrz_reg LDFLAGS+=-L$(LTOP)/bp -lrz_bp LDFLAGS+=-L$(LTOP)/io -lrz_io diff --git a/librz/debug/p/winkd.mk b/librz/debug/p/winkd.mk index a10aeee8bd..e95b8922f7 100644 --- a/librz/debug/p/winkd.mk +++ b/librz/debug/p/winkd.mk @@ -6,7 +6,7 @@ LIB_PATH=$(SHLR)/winkd/ LDFLAGS+=-L$(LTOP)/util -lrz_util LDFLAGS+=-L$(LTOP)/cons -lrz_cons LDFLAGS+=-L$(LTOP)/parse -lrz_parse -LDFLAGS+=-L$(LTOP)/anal -lrz_anal +LDFLAGS+=-L$(LTOP)/analysis -lrz_analysis LDFLAGS+=-L$(LTOP)/reg -lrz_reg LDFLAGS+=-L$(LTOP)/bp -lrz_bp LDFLAGS+=-L$(LTOP)/io -lrz_io diff --git a/librz/debug/pid.c b/librz/debug/pid.c index 5404672a0c..f54c8a3b8d 100644 --- a/librz/debug/pid.c +++ b/librz/debug/pid.c @@ -74,7 +74,7 @@ RZ_API int rz_debug_thread_list(RzDebug *dbg, int pid, char fmt) { RzList *list; RzListIter *iter; RzDebugPid *p; - RzAnalFunction *fcn = NULL; + RzAnalysisFunction *fcn = NULL; RzDebugMap *map = NULL; RzStrBuf *path = NULL; if (pid == -1) { @@ -97,7 +97,7 @@ RZ_API int rz_debug_thread_list(RzDebug *dbg, int pid, char fmt) { rz_strbuf_appendf (path, "(0x%" PFMT64x ")", p->pc); - fcn = rz_anal_get_fcn_in (dbg->anal, p->pc, 0); + fcn = rz_analysis_get_fcn_in (dbg->analysis, p->pc, 0); if (fcn) { rz_strbuf_appendf (path, " in %s+0x%" PFMT64x, fcn->name, (p->pc - fcn->addr)); } diff --git a/librz/debug/plugin.c b/librz/debug/plugin.c index 0a7f5c6b64..c0a362424d 100644 --- a/librz/debug/plugin.c +++ b/librz/debug/plugin.c @@ -22,8 +22,8 @@ RZ_API bool rz_debug_use(RzDebug *dbg, const char *str) { rz_list_foreach (dbg->plugins, iter, h) { if (h->name && !strcmp (str, h->name)) { dbg->h = h; - if (dbg->anal && dbg->anal->cur) { - rz_debug_set_arch (dbg, dbg->anal->cur->arch, dbg->bits); + if (dbg->analysis && dbg->analysis->cur) { + rz_debug_set_arch (dbg, dbg->analysis->cur->arch, dbg->bits); } dbg->bp->breakpoint = dbg->h->breakpoint; dbg->bp->user = dbg; @@ -34,9 +34,9 @@ RZ_API bool rz_debug_use(RzDebug *dbg, const char *str) { char *p = dbg->h->reg_profile (dbg); if (p) { rz_reg_set_profile_string (dbg->reg, p); - if (dbg->anal && dbg->reg != dbg->anal->reg) { - rz_reg_free (dbg->anal->reg); - dbg->anal->reg = dbg->reg; + if (dbg->analysis && dbg->reg != dbg->analysis->reg) { + rz_reg_free (dbg->analysis->reg); + dbg->analysis->reg = dbg->reg; } if (dbg->h->init) { dbg->h->init (dbg); diff --git a/librz/debug/trace.c b/librz/debug/trace.c index d12dadca8f..699c507caf 100644 --- a/librz/debug/trace.c +++ b/librz/debug/trace.c @@ -45,7 +45,7 @@ RZ_API int rz_debug_trace_tag (RzDebug *dbg, int tag) { RZ_API bool rz_debug_trace_ins_before(RzDebug *dbg) { RzListIter *it, *it_tmp; - RzAnalValue *val; + RzAnalysisValue *val; ut8 buf_pc[32]; // Analyze current instruction @@ -56,12 +56,12 @@ RZ_API bool rz_debug_trace_ins_before(RzDebug *dbg) { if (!dbg->iob.read_at (dbg->iob.io, pc, buf_pc, sizeof (buf_pc))) { return false; } - dbg->cur_op = RZ_NEW0 (RzAnalOp); + dbg->cur_op = RZ_NEW0 (RzAnalysisOp); if (!dbg->cur_op) { return false; } - if (!rz_anal_op (dbg->anal, dbg->cur_op, pc, buf_pc, sizeof (buf_pc), RZ_ANAL_OP_MASK_VAL)) { - rz_anal_op_free (dbg->cur_op); + if (!rz_analysis_op (dbg->analysis, dbg->cur_op, pc, buf_pc, sizeof (buf_pc), RZ_ANAL_OP_MASK_VAL)) { + rz_analysis_op_free (dbg->cur_op); dbg->cur_op = NULL; return false; } @@ -109,7 +109,7 @@ RZ_API bool rz_debug_trace_ins_before(RzDebug *dbg) { RZ_API bool rz_debug_trace_ins_after(RzDebug *dbg) { RzListIter *it; - RzAnalValue *val; + RzAnalysisValue *val; // Add reg/mem write change rz_debug_reg_sync (dbg, RZ_REG_TYPE_ALL, false); @@ -146,7 +146,7 @@ RZ_API bool rz_debug_trace_ins_after(RzDebug *dbg) { break; } } - rz_anal_op_free (dbg->cur_op); + rz_analysis_op_free (dbg->cur_op); dbg->cur_op = NULL; return true; } @@ -156,29 +156,29 @@ RZ_API bool rz_debug_trace_ins_after(RzDebug *dbg) { */ RZ_API int rz_debug_trace_pc(RzDebug *dbg, ut64 pc) { ut8 buf[32]; - RzAnalOp op = {0}; + RzAnalysisOp op = {0}; if (!dbg->iob.is_valid_offset (dbg->iob.io, pc, 0)) { eprintf ("trace_pc: cannot read memory at 0x%"PFMT64x"\n", pc); return false; } (void)dbg->iob.read_at (dbg->iob.io, pc, buf, sizeof (buf)); - if (rz_anal_op (dbg->anal, &op, pc, buf, sizeof (buf), RZ_ANAL_OP_MASK_ESIL) < 1) { + if (rz_analysis_op (dbg->analysis, &op, pc, buf, sizeof (buf), RZ_ANAL_OP_MASK_ESIL) < 1) { eprintf ("trace_pc: cannot get opcode size at 0x%"PFMT64x"\n", pc); return false; } rz_debug_trace_op (dbg, &op); - rz_anal_op_fini (&op); + rz_analysis_op_fini (&op); return true; } -RZ_API void rz_debug_trace_op(RzDebug *dbg, RzAnalOp *op) { +RZ_API void rz_debug_trace_op(RzDebug *dbg, RzAnalysisOp *op) { static ut64 oldpc = UT64_MAX; // Must trace the previously traced instruction if (dbg->trace->enabled) { - if (dbg->anal->esil) { - rz_anal_esil_trace_op (dbg->anal->esil, op); + if (dbg->analysis->esil) { + rz_analysis_esil_trace_op (dbg->analysis->esil, op); } else { if (dbg->verbose) { - eprintf ("Run aeim to get dbg->anal->esil initialized\n"); + eprintf ("Run aeim to get dbg->analysis->esil initialized\n"); } } } @@ -276,7 +276,7 @@ RZ_API RzDebugTracepoint *rz_debug_trace_add (RzDebug *dbg, ut64 addr, int size) if (!rz_debug_trace_is_traceable (dbg, addr)) { return NULL; } - rz_anal_trace_bb (dbg->anal, addr); + rz_analysis_trace_bb (dbg->analysis, addr); tp = RZ_NEW0 (RzDebugTracepoint); if (!tp) { return NULL; diff --git a/librz/do-ar-sh b/librz/do-ar-sh index 716175be57..93b8263c32 100644 --- a/librz/do-ar-sh +++ b/librz/do-ar-sh @@ -1,6 +1,6 @@ #!/bin/sh -LIBS="librz/cons/librz_cons.a librz/util/librz_util.a librz/bin/librz_bin.a librz/anal/librz_anal.a librz/bp/librz_bp.a librz/hash/librz_hash.a librz/debug/librz_debug.a shlr/sdb/src/libsdb.a librz/core/librz_core.a librz/main/librz_main.a librz/syscall/librz_syscall.a shlr/java/librz_java.a shlr/zip/librz.a librz/socket/librz_socket.a librz/anal/librz_anal.a librz/flag/librz_flag.a librz/search/librz_search.a librz/reg/librz_reg.a librz/config/librz_config.a librz/io/librz_io.a librz/parse/librz_parse.a librz/bp/librz_bp.a librz/asm/librz_asm.a librz/bp/librz_bp.a librz/egg/librz_egg.a librz/anal/librz_anal.a librz/magic/librz_magic.a librz/lang/librz_lang.a shlr/capstone/libcapstone.a shlr/gdb/lib/libgdbr.a shlr/tree-sitter/libtree-sitter.a shlr/rizin-shell-parser/libshell-parser.a" +LIBS="librz/cons/librz_cons.a librz/util/librz_util.a librz/bin/librz_bin.a librz/analysis/librz_analysis.a librz/bp/librz_bp.a librz/hash/librz_hash.a librz/debug/librz_debug.a shlr/sdb/src/libsdb.a librz/core/librz_core.a librz/main/librz_main.a librz/syscall/librz_syscall.a shlr/java/librz_java.a shlr/zip/librz.a librz/socket/librz_socket.a librz/analysis/librz_analysis.a librz/flag/librz_flag.a librz/search/librz_search.a librz/reg/librz_reg.a librz/config/librz_config.a librz/io/librz_io.a librz/parse/librz_parse.a librz/bp/librz_bp.a librz/asm/librz_asm.a librz/bp/librz_bp.a librz/egg/librz_egg.a librz/analysis/librz_analysis.a librz/magic/librz_magic.a librz/lang/librz_lang.a shlr/capstone/libcapstone.a shlr/gdb/lib/libgdbr.a shlr/tree-sitter/libtree-sitter.a shlr/rizin-shell-parser/libshell-parser.a" cd .. LIB=librz.a diff --git a/librz/include/rz_anal.h b/librz/include/rz_anal.h deleted file mode 100644 index d6fe0054ce..0000000000 --- a/librz/include/rz_anal.h +++ /dev/null @@ -1,2252 +0,0 @@ -/* rizin - LGPL - Copyright 2009-2020 - nibble, pancake, xvilka */ - -#ifndef RZ_ANAL_H -#define RZ_ANAL_H - -/* use old refs and function storage */ -// still required by core in lot of places -#define USE_VARSUBS 0 - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define esilprintf(op, fmt, ...) rz_strbuf_setf (&op->esil, fmt, ##__VA_ARGS__) - -#ifdef __cplusplus -extern "C" { -#endif - -RZ_LIB_VERSION_HEADER(rz_anal); - -/* dwarf processing context */ -typedef struct rz_anal_dwarf_context { - const RzBinDwarfDebugInfo *info; - HtUP/**/ *loc; - // const RzBinDwarfCfa *cfa; TODO -} RzAnalDwarfContext; - -// TODO: save memory2 : fingerprints must be pointers to a buffer -// containing a dupped file in memory - -/* save memory: - bb_has_ops=1 -> 600M - bb_has_ops=0 -> 350MB - */ - -typedef struct { - struct rz_anal_t *anal; - int type; - int rad; - SdbForeachCallback cb; - void *user; - int count; - struct rz_anal_function_t *fcn; - PJ *pj; -} RzAnalMetaUserItem; - -typedef struct rz_anal_range_t { - ut64 from; - ut64 to; - int bits; - ut64 rb_max_addr; - RBNode rb; -} RzAnalRange; - -#define RZ_ANAL_GET_OFFSET(x,y,z) \ - (x && x->binb.bin && x->binb.get_offset)? \ - x->binb.get_offset (x->binb.bin, y, z): -1 -enum { - RZ_ANAL_DATA_TYPE_NULL = 0, - RZ_ANAL_DATA_TYPE_UNKNOWN = 1, - RZ_ANAL_DATA_TYPE_STRING = 2, - RZ_ANAL_DATA_TYPE_WIDE_STRING = 3, - RZ_ANAL_DATA_TYPE_POINTER = 4, - RZ_ANAL_DATA_TYPE_NUMBER = 5, - RZ_ANAL_DATA_TYPE_INVALID = 6, - RZ_ANAL_DATA_TYPE_HEADER = 7, - RZ_ANAL_DATA_TYPE_SEQUENCE = 8, - RZ_ANAL_DATA_TYPE_PATTERN = 9, -}; - -// used from core/anal.c -#define RZ_ANAL_ADDR_TYPE_EXEC 1 -#define RZ_ANAL_ADDR_TYPE_READ 1 << 1 -#define RZ_ANAL_ADDR_TYPE_WRITE 1 << 2 -#define RZ_ANAL_ADDR_TYPE_FLAG 1 << 3 -#define RZ_ANAL_ADDR_TYPE_FUNC 1 << 4 -#define RZ_ANAL_ADDR_TYPE_HEAP 1 << 5 -#define RZ_ANAL_ADDR_TYPE_STACK 1 << 6 -#define RZ_ANAL_ADDR_TYPE_REG 1 << 7 -#define RZ_ANAL_ADDR_TYPE_PROGRAM 1 << 8 -#define RZ_ANAL_ADDR_TYPE_LIBRARY 1 << 9 -#define RZ_ANAL_ADDR_TYPE_ASCII 1 << 10 -#define RZ_ANAL_ADDR_TYPE_SEQUENCE 1 << 11 - -#define RZ_ANAL_ARCHINFO_MIN_OP_SIZE 0 -#define RZ_ANAL_ARCHINFO_MAX_OP_SIZE 1 -#define RZ_ANAL_ARCHINFO_ALIGN 2 -#define RZ_ANAL_ARCHINFO_DATA_ALIGN 4 - -/* copypaste from rz_asm.h */ - -#define RZ_ANAL_GET_OFFSET(x,y,z) \ - (x && x->binb.bin && x->binb.get_offset)? \ - x->binb.get_offset (x->binb.bin, y, z): -1 - -#define RZ_ANAL_GET_NAME(x,y,z) \ - (x && x->binb.bin && x->binb.get_name)? \ - x->binb.get_name (x->binb.bin, y, z): NULL - -/* type = (RZ_ANAL_VAR_TYPE_BYTE & RZ_ANAL_VAR_TYPE_SIZE_MASK) | - * ( RANAL_VAR_TYPE_SIGNED & RANAL_VAR_TYPE_SIGN_MASK) | - * ( RANAL_VAR_TYPE_CONST & RANAL_VAR_TYPE_MODIFIER_MASK) - */ -typedef struct rz_anal_type_var_t { - char *name; - int index; - int scope; - ut16 type; // contain (type || signedness || modifier) - ut8 size; - union { - ut8 v8; - ut16 v16; - ut32 v32; - ut64 v64; - } value; -} RzAnalTypeVar; - -typedef struct rz_anal_type_ptr_t { - char *name; - ut16 type; // contain (type || signedness || modifier) - ut8 size; - union { - ut8 v8; - ut16 v16; - ut32 v32; - ut64 v64; - } value; -} RzAnalTypePtr; - -typedef struct rz_anal_type_array_t { - char *name; - ut16 type; // contain (type || signedness || modifier) - ut8 size; - ut64 count; - union { - ut8 *v8; - ut16 *v16; - ut32 *v32; - ut64 *v64; - } value; -} RzAnalTypeArray; - -typedef struct rz_anal_type_struct_t RzAnalTypeStruct; -typedef struct rz_anal_type_t RzAnalType; - -struct rz_anal_type_struct_t { - char *name; - ut8 type; - ut32 size; - void *parent; - RzAnalType *items; -}; - -typedef struct rz_anal_type_union_t { - char *name; - ut8 type; - ut32 size; - void *parent; - RzAnalType *items; -} RzAnalTypeUnion; - -typedef struct rz_anal_type_alloca_t { - long address; - long size; - void *parent; - RzAnalType *items; -} RzAnalTypeAlloca; - -enum { - RZ_ANAL_FQUALIFIER_NONE = 0, - RZ_ANAL_FQUALIFIER_STATIC = 1, - RZ_ANAL_FQUALIFIER_VOLATILE = 2, - RZ_ANAL_FQUALIFIER_INLINE = 3, - RZ_ANAL_FQUALIFIER_NAKED = 4, - RZ_ANAL_FQUALIFIER_VIRTUAL = 5, -}; - -/*--------------------Function Conventions-----------*/ -//XXX don't use them in the future -#define RZ_ANAL_CC_TYPE_STDCALL 0 -#define RZ_ANAL_CC_TYPE_PASCAL 1 -#define RZ_ANAL_CC_TYPE_FASTCALL 'A' // syscall -#define RZ_ANAL_CC_TYPE_SYSV 8 -#define RZ_ANAL_CC_MAXARG 16 - -enum { - RZ_ANAL_FCN_TYPE_NULL = 0, - RZ_ANAL_FCN_TYPE_FCN = 1 << 0, - RZ_ANAL_FCN_TYPE_LOC = 1 << 1, - RZ_ANAL_FCN_TYPE_SYM = 1 << 2, - RZ_ANAL_FCN_TYPE_IMP = 1 << 3, - RZ_ANAL_FCN_TYPE_INT = 1 << 4, /* privileged function - ends with iret/reti/.. */ - RZ_ANAL_FCN_TYPE_ROOT = 1 << 5, /* matching flag */ - RZ_ANAL_FCN_TYPE_ANY = -1 /* all the bits set */ -}; - -#define RzAnalBlock struct rz_anal_bb_t - -enum { - RZ_ANAL_DIFF_TYPE_NULL = 0, - RZ_ANAL_DIFF_TYPE_MATCH = 'm', - RZ_ANAL_DIFF_TYPE_UNMATCH = 'u' -}; - -typedef struct rz_anal_enum_case_t { - char *name; - int val; -} RzAnalEnumCase; - -typedef struct rz_anal_struct_member_t { - char *name; - char *type; - size_t offset; // in bytes - size_t size; // in bits? -} RzAnalStructMember; - -typedef struct rz_anal_union_member_t { - char *name; - char *type; - size_t offset; // in bytes - size_t size; // in bits? -} RzAnalUnionMember; - -typedef enum { - RZ_ANAL_BASE_TYPE_KIND_STRUCT, - RZ_ANAL_BASE_TYPE_KIND_UNION, - RZ_ANAL_BASE_TYPE_KIND_ENUM, - RZ_ANAL_BASE_TYPE_KIND_TYPEDEF, // probably temporary addition, dev purposes - RZ_ANAL_BASE_TYPE_KIND_ATOMIC, // For real atomic base types -} RzAnalBaseTypeKind; - -typedef struct rz_anal_base_type_struct_t { - RzVector/**/ members; -} RzAnalBaseTypeStruct; - -typedef struct rz_anal_base_type_union_t { - RzVector/**/ members; -} RzAnalBaseTypeUnion; - -typedef struct rz_anal_base_type_enum_t { - RzVector/* bits 0) (set-bits bits)) - int type; - const char *cc; // calling convention, should come from RzAnal.constpool - ut64 addr; - HtUP/**/ *labels; - HtPP/**/ *label_addrs; - RzPVector vars; - HtUP/*>*/ *inst_vars; // offset of instructions => the variables they access - ut64 reg_save_area; // size of stack area pre-reserved for saving registers - st64 bp_off; // offset of bp inside owned stack frame - st64 stack; // stack frame size - int maxstack; - int ninstr; - bool folded; - bool is_pure; - bool is_variadic; - bool has_changed; // true if function may have changed since last anaysis TODO: set this attribute where necessary - bool bp_frame; - bool is_noreturn; // true if function does not return - ut8 *fingerprint; // TODO: make is fuzzy and smarter - size_t fingerprint_size; - RzAnalDiff *diff; - RzList *bbs; // TODO: should be RzPVector - RzAnalFcnMeta meta; - RzList *imports; // maybe bound to class? - struct rz_anal_t *anal; // this function is associated with this instance -} RzAnalFunction; - -typedef struct rz_anal_func_arg_t { - const char *name; - const char *fmt; - const char *cc_source; - char *orig_c_type; - char *c_type; - ut64 size; - ut64 src; //Function-call argument value or pointer to it -} RzAnalFuncArg; - -struct rz_anal_type_t { - char *name; - ut32 type; - ut32 size; - RzList *content; -}; - -typedef enum { - RZ_META_TYPE_ANY = -1, - RZ_META_TYPE_DATA = 'd', - RZ_META_TYPE_CODE = 'c', - RZ_META_TYPE_STRING = 's', - RZ_META_TYPE_FORMAT = 'f', - RZ_META_TYPE_MAGIC = 'm', - RZ_META_TYPE_HIDE = 'h', - RZ_META_TYPE_COMMENT = 'C', - RZ_META_TYPE_RUN = 'r', - RZ_META_TYPE_HIGHLIGHT = 'H', - RZ_META_TYPE_VARTYPE = 't', -} RzAnalMetaType; - -/* meta */ -typedef struct rz_anal_meta_item_t { - RzAnalMetaType type; - int subtype; - char *str; - const RzSpace *space; -} RzAnalMetaItem; - -// anal -typedef enum { - RZ_ANAL_OP_FAMILY_UNKNOWN = -1, - RZ_ANAL_OP_FAMILY_CPU = 0, /* normal cpu instruction */ - RZ_ANAL_OP_FAMILY_FPU, /* fpu (floating point) */ - RZ_ANAL_OP_FAMILY_MMX, /* multimedia instruction (packed data) */ - RZ_ANAL_OP_FAMILY_SSE, /* extended multimedia instruction (packed data) */ - RZ_ANAL_OP_FAMILY_PRIV, /* privileged instruction */ - RZ_ANAL_OP_FAMILY_CRYPTO, /* cryptographic instructions */ - RZ_ANAL_OP_FAMILY_THREAD, /* thread/lock/sync instructions */ - RZ_ANAL_OP_FAMILY_VIRT, /* virtualization instructions */ - RZ_ANAL_OP_FAMILY_SECURITY, /* security instructions */ - RZ_ANAL_OP_FAMILY_IO, /* IO instructions (i.e. IN/OUT) */ - RZ_ANAL_OP_FAMILY_LAST -} RzAnalOpFamily; - -#if 0 -On x86 according to Wikipedia - - Prefix group 1 - 0xF0: LOCK prefix - 0xF2: REPNE/REPNZ prefix - 0xF3: REP or REPE/REPZ prefix - Prefix group 2 - 0x2E: CS segment override - 0x36: SS segment override - 0x3E: DS segment override - 0x26: ES segment override - 0x64: FS segment override - 0x65: GS segment override - 0x2E: Branch not taken (hinting) - 0x3E: Branch taken - Prefix group 3 - 0x66: Operand-size override prefix - Prefix group 4 - 0x67: Address-size override prefix -#endif - typedef enum { - RZ_ANAL_OP_PREFIX_COND = 1, - RZ_ANAL_OP_PREFIX_REP = 1<<1, - RZ_ANAL_OP_PREFIX_REPNE = 1<<2, - RZ_ANAL_OP_PREFIX_LOCK = 1<<3, - RZ_ANAL_OP_PREFIX_LIKELY = 1<<4, - RZ_ANAL_OP_PREFIX_UNLIKELY = 1<<5 - /* TODO: add segment override typemods? */ - } RzAnalOpPrefix; - -// XXX: this definition is plain wrong. use enum or empower bits -#define RZ_ANAL_OP_TYPE_MASK 0x8000ffff -#define RZ_ANAL_OP_HINT_MASK 0xf0000000 -typedef enum { - RZ_ANAL_OP_TYPE_COND = 0x80000000, // TODO must be moved to prefix? - //TODO: MOVE TO PREFIX .. it is used by anal_java.. must be updated - RZ_ANAL_OP_TYPE_REP = 0x40000000, /* repeats next instruction N times */ - RZ_ANAL_OP_TYPE_MEM = 0x20000000, // TODO must be moved to prefix? - RZ_ANAL_OP_TYPE_REG = 0x10000000, // operand is a register - RZ_ANAL_OP_TYPE_IND = 0x08000000, // operand is indirect - RZ_ANAL_OP_TYPE_NULL = 0, - RZ_ANAL_OP_TYPE_JMP = 1, /* mandatory jump */ - RZ_ANAL_OP_TYPE_UJMP = 2, /* unknown jump (register or so) */ - RZ_ANAL_OP_TYPE_RJMP = RZ_ANAL_OP_TYPE_REG | RZ_ANAL_OP_TYPE_UJMP, - RZ_ANAL_OP_TYPE_IJMP = RZ_ANAL_OP_TYPE_IND | RZ_ANAL_OP_TYPE_UJMP, - RZ_ANAL_OP_TYPE_IRJMP = RZ_ANAL_OP_TYPE_IND | RZ_ANAL_OP_TYPE_REG | RZ_ANAL_OP_TYPE_UJMP, - RZ_ANAL_OP_TYPE_CJMP = RZ_ANAL_OP_TYPE_COND | RZ_ANAL_OP_TYPE_JMP, /* conditional jump */ - RZ_ANAL_OP_TYPE_RCJMP = RZ_ANAL_OP_TYPE_REG | RZ_ANAL_OP_TYPE_CJMP, /* conditional jump register */ - RZ_ANAL_OP_TYPE_MJMP = RZ_ANAL_OP_TYPE_MEM | RZ_ANAL_OP_TYPE_JMP, /* memory jump */ - RZ_ANAL_OP_TYPE_MCJMP = RZ_ANAL_OP_TYPE_MEM | RZ_ANAL_OP_TYPE_CJMP, /* memory conditional jump */ - RZ_ANAL_OP_TYPE_UCJMP = RZ_ANAL_OP_TYPE_COND | RZ_ANAL_OP_TYPE_UJMP, /* conditional unknown jump */ - RZ_ANAL_OP_TYPE_CALL = 3, /* call to subroutine (branch+link) */ - RZ_ANAL_OP_TYPE_UCALL = 4, /* unknown call (register or so) */ - RZ_ANAL_OP_TYPE_RCALL = RZ_ANAL_OP_TYPE_REG | RZ_ANAL_OP_TYPE_UCALL, - RZ_ANAL_OP_TYPE_ICALL = RZ_ANAL_OP_TYPE_IND | RZ_ANAL_OP_TYPE_UCALL, - RZ_ANAL_OP_TYPE_IRCALL= RZ_ANAL_OP_TYPE_IND | RZ_ANAL_OP_TYPE_REG | RZ_ANAL_OP_TYPE_UCALL, - RZ_ANAL_OP_TYPE_CCALL = RZ_ANAL_OP_TYPE_COND | RZ_ANAL_OP_TYPE_CALL, /* conditional call to subroutine */ - RZ_ANAL_OP_TYPE_UCCALL= RZ_ANAL_OP_TYPE_COND | RZ_ANAL_OP_TYPE_UCALL, /* conditional unknown call */ - RZ_ANAL_OP_TYPE_RET = 5, /* returns from subroutine */ - RZ_ANAL_OP_TYPE_CRET = RZ_ANAL_OP_TYPE_COND | RZ_ANAL_OP_TYPE_RET, /* conditional return from subroutine */ - RZ_ANAL_OP_TYPE_ILL = 6, /* illegal instruction // trap */ - RZ_ANAL_OP_TYPE_UNK = 7, /* unknown opcode type */ - RZ_ANAL_OP_TYPE_NOP = 8, /* does nothing */ - RZ_ANAL_OP_TYPE_MOV = 9, /* register move */ - RZ_ANAL_OP_TYPE_CMOV = 9 | RZ_ANAL_OP_TYPE_COND, /* conditional move */ - RZ_ANAL_OP_TYPE_TRAP = 10, /* it's a trap! */ - RZ_ANAL_OP_TYPE_SWI = 11, /* syscall, software interrupt */ - RZ_ANAL_OP_TYPE_CSWI = 11 | RZ_ANAL_OP_TYPE_COND, /* syscall, software interrupt */ - RZ_ANAL_OP_TYPE_UPUSH = 12, /* unknown push of data into stack */ - RZ_ANAL_OP_TYPE_RPUSH = RZ_ANAL_OP_TYPE_UPUSH | RZ_ANAL_OP_TYPE_REG, /* push register */ - RZ_ANAL_OP_TYPE_PUSH = 13, /* push value into stack */ - RZ_ANAL_OP_TYPE_POP = 14, /* pop value from stack to register */ - RZ_ANAL_OP_TYPE_CMP = 15, /* compare something */ - RZ_ANAL_OP_TYPE_ACMP = 16, /* compare via and */ - RZ_ANAL_OP_TYPE_ADD = 17, - RZ_ANAL_OP_TYPE_SUB = 18, - RZ_ANAL_OP_TYPE_IO = 19, - RZ_ANAL_OP_TYPE_MUL = 20, - RZ_ANAL_OP_TYPE_DIV = 21, - RZ_ANAL_OP_TYPE_SHR = 22, - RZ_ANAL_OP_TYPE_SHL = 23, - RZ_ANAL_OP_TYPE_SAL = 24, - RZ_ANAL_OP_TYPE_SAR = 25, - RZ_ANAL_OP_TYPE_OR = 26, - RZ_ANAL_OP_TYPE_AND = 27, - RZ_ANAL_OP_TYPE_XOR = 28, - RZ_ANAL_OP_TYPE_NOR = 29, - RZ_ANAL_OP_TYPE_NOT = 30, - RZ_ANAL_OP_TYPE_STORE = 31, /* store from register to memory */ - RZ_ANAL_OP_TYPE_LOAD = 32, /* load from memory to register */ - RZ_ANAL_OP_TYPE_LEA = 33, /* TODO add ulea */ - RZ_ANAL_OP_TYPE_LEAVE = 34, - RZ_ANAL_OP_TYPE_ROR = 35, - RZ_ANAL_OP_TYPE_ROL = 36, - RZ_ANAL_OP_TYPE_XCHG = 37, - RZ_ANAL_OP_TYPE_MOD = 38, - RZ_ANAL_OP_TYPE_SWITCH = 39, - RZ_ANAL_OP_TYPE_CASE = 40, - RZ_ANAL_OP_TYPE_LENGTH = 41, - RZ_ANAL_OP_TYPE_CAST = 42, - RZ_ANAL_OP_TYPE_NEW = 43, - RZ_ANAL_OP_TYPE_ABS = 44, - RZ_ANAL_OP_TYPE_CPL = 45, /* complement */ - RZ_ANAL_OP_TYPE_CRYPTO = 46, - RZ_ANAL_OP_TYPE_SYNC = 47, - //RZ_ANAL_OP_TYPE_DEBUG = 43, // monitor/trace/breakpoint -#if 0 - RZ_ANAL_OP_TYPE_PRIV = 40, /* privileged instruction */ - RZ_ANAL_OP_TYPE_FPU = 41, /* floating point stuff */ -#endif -} _RzAnalOpType; - -typedef enum { - RZ_ANAL_OP_MASK_BASIC = 0, // Just fills basic op info , it's fast - RZ_ANAL_OP_MASK_ESIL = 1, // It fills RzAnalop->esil info - RZ_ANAL_OP_MASK_VAL = 2, // It fills RzAnalop->dst/src info - RZ_ANAL_OP_MASK_HINT = 4, // It calls rz_anal_op_hint to override anal options - RZ_ANAL_OP_MASK_OPEX = 8, // It fills RzAnalop->opex info - RZ_ANAL_OP_MASK_DISASM = 16, // It fills RzAnalop->mnemonic // should be RzAnalOp->disasm // only from rz_core_anal_op() - RZ_ANAL_OP_MASK_ALL = 1 | 2 | 4 | 8 | 16 -} RzAnalOpMask; - -/* TODO: what to do with signed/unsigned conditionals? */ -typedef enum { - RZ_ANAL_COND_AL = 0, // Always executed (no condition) - RZ_ANAL_COND_EQ, // Equal - RZ_ANAL_COND_NE, // Not equal - RZ_ANAL_COND_GE, // Greater or equal - RZ_ANAL_COND_GT, // Greater than - RZ_ANAL_COND_LE, // Less or equal - RZ_ANAL_COND_LT, // Less than - RZ_ANAL_COND_NV, // Never executed must be a nop? :D - RZ_ANAL_COND_HS, // Carry set >, ==, or unordered - RZ_ANAL_COND_LO, // Carry clear Less than - RZ_ANAL_COND_MI, // Minus, negative Less than - RZ_ANAL_COND_PL, // Plus, positive or zero >, ==, or unordered - RZ_ANAL_COND_VS, // Overflow Unordered - RZ_ANAL_COND_VC, // No overflow Not unordered - RZ_ANAL_COND_HI, // Unsigned higher Greater than, or unordered - RZ_ANAL_COND_LS // Unsigned lower or same Less than or equal -} _RzAnalCond; - -typedef enum { - RZ_ANAL_VAR_SCOPE_LOCAL = 0x01 -} _RzAnalVarScope; - -typedef enum { - RZ_ANAL_STACK_NULL = 0, - RZ_ANAL_STACK_NOP, - RZ_ANAL_STACK_INC, - RZ_ANAL_STACK_GET, - RZ_ANAL_STACK_SET, - RZ_ANAL_STACK_RESET, - RZ_ANAL_STACK_ALIGN, -} RzAnalStackOp; - -enum { - RZ_ANAL_REFLINE_TYPE_UTF8 = 1, - RZ_ANAL_REFLINE_TYPE_WIDE = 2, /* reflines have a space between them */ - RZ_ANAL_REFLINE_TYPE_MIDDLE_BEFORE = 4, /* do not consider starts/ends of - * reflines (used for comment lines before disasm) */ - RZ_ANAL_REFLINE_TYPE_MIDDLE_AFTER = 8 /* as above but for lines after disasm */ -}; - -enum { - RZ_ANAL_RET_NOP = 0, - RZ_ANAL_RET_ERROR = -1, - RZ_ANAL_RET_DUP = -2, - RZ_ANAL_RET_NEW = -3, - RZ_ANAL_RET_END = -4 -}; - -typedef struct rz_anal_case_obj_t { - ut64 addr; - ut64 jump; - ut64 value; -} RzAnalCaseOp; - -typedef struct rz_anal_switch_obj_t { - ut64 addr; - ut64 min_val; - ut64 def_val; - ut64 max_val; - RzList/**/ *cases; -} RzAnalSwitchOp; - -struct rz_anal_t; -struct rz_anal_bb_t; -typedef struct rz_anal_callbacks_t { - int (*on_fcn_new) (struct rz_anal_t *, void *user, RzAnalFunction *fcn); - int (*on_fcn_delete) (struct rz_anal_t *, void *user, RzAnalFunction *fcn); - int (*on_fcn_rename) (struct rz_anal_t *, void *user, RzAnalFunction *fcn, const char *oldname); - int (*on_fcn_bb_new) (struct rz_anal_t *, void *user, RzAnalFunction *fcn, struct rz_anal_bb_t *bb); -} RzAnalCallbacks; - -#define RZ_ANAL_ESIL_GOTO_LIMIT 4096 - -typedef struct rz_anal_options_t { - int depth; - int graph_depth; - bool vars; //analyze local var and arguments - bool varname_stack; // name vars based on their offset in the stack - int cjmpref; - int jmpref; - int jmpabove; - bool ijmp; - bool jmpmid; // continue analysis after jmp into middle of insn - bool loads; - bool ignbithints; - int followdatarefs; - int searchstringrefs; - int followbrokenfcnsrefs; - int bb_max_size; - bool trycatch; - bool norevisit; - int afterjmp; // continue analysis after jmp eax or forward jmp // option - int recont; // continue on recurse analysis mode - int noncode; - int nopskip; // skip nops at the beginning of functions - int hpskip; // skip `mov reg,reg` and `lea reg,[reg]` - int jmptbl; // analyze jump tables - int nonull; - bool pushret; // analyze push+ret as jmp - bool armthumb; // - bool endsize; // chop function size which is known to be buggy but goodie too - bool delay; - int tailcall; - bool retpoline; -} RzAnalOptions; - -typedef enum { - RZ_ANAL_CPP_ABI_ITANIUM = 0, - RZ_ANAL_CPP_ABI_MSVC -} RzAnalCPPABI; - -typedef struct rz_anal_hint_cb_t { - //add more cbs as needed - void (*on_bits) (struct rz_anal_t *a, ut64 addr, int bits, bool set); -} RHintCb; - -typedef struct rz_anal_t { - char *cpu; // anal.cpu - char *os; // asm.os - int bits; // asm.bits - int lineswidth; // asm.lines.width - int big_endian; // cfg.bigendian - int sleep; // anal.sleep, sleep some usecs before analyzing more (avoid 100% cpu usages) - RzAnalCPPABI cpp_abi; // anal.cpp.abi - void *user; - ut64 gp; // anal.gp, global pointer. used for mips. but can be used by other arches too in the future - RBTree bb_tree; // all basic blocks by address. They can overlap each other, but must never start at the same address. - RzList *fcns; - HtUP *ht_addr_fun; // address => function - HtPP *ht_name_fun; // name => function - RzReg *reg; - ut8 *last_disasm_reg; - RzSyscall *syscall; - int diff_ops; - double diff_thbb; - double diff_thfcn; - RzIOBind iob; - RzFlagBind flb; - RzFlagSet flg_class_set; - RzFlagGet flg_class_get; - RzFlagSet flg_fcn_set; - RzBinBind binb; // Set only from core when an analysis plugin is called. - RzCoreBind coreb; - int maxreflines; // asm.lines.maxref - int esil_goto_limit; // esil.gotolimit - int pcalign; // asm.pcalign - struct rz_anal_esil_t *esil; - struct rz_anal_plugin_t *cur; - RzAnalRange *limit; // anal.from, anal.to - RzList *plugins; - Sdb *sdb_types; - Sdb *sdb_fmts; - Sdb *sdb_zigns; - HtUP *dict_refs; - HtUP *dict_xrefs; - bool recursive_noreturn; // anal.rnr - RzSpaces zign_spaces; - char *zign_path; // dir.zigns - PrintfCallback cb_printf; - //moved from RzAnalFcn - Sdb *sdb; // root - Sdb *sdb_pins; - HtUP/*>*/ *addr_hints; // all hints that correspond to a single address - RBTree/**/ arch_hints; - RBTree/**/ bits_hints; - RHintCb hint_cbs; - RzIntervalTree meta; - RzSpaces meta_spaces; - Sdb *sdb_cc; // calling conventions - Sdb *sdb_classes; - Sdb *sdb_classes_attrs; - RzAnalCallbacks cb; - RzAnalOptions opt; - RzList *reflines; - //RzList *noreturn; - RzListComparator columnSort; - int stackptr; - bool (*log)(struct rz_anal_t *anal, const char *msg); - bool (*read_at)(struct rz_anal_t *anal, ut64 addr, ut8 *buf, int len); - bool verbose; - int seggrn; - RzFlagGetAtAddr flag_get; - RzEvent *ev; - RzList/**/ *imports; // global imports - SetU *visited; - RzStrConstPool constpool; - RzList *leaddrs; -} RzAnal; - -typedef enum rz_anal_addr_hint_type_t { - RZ_ANAL_ADDR_HINT_TYPE_IMMBASE, - RZ_ANAL_ADDR_HINT_TYPE_JUMP, - RZ_ANAL_ADDR_HINT_TYPE_FAIL, - RZ_ANAL_ADDR_HINT_TYPE_STACKFRAME, - RZ_ANAL_ADDR_HINT_TYPE_PTR, - RZ_ANAL_ADDR_HINT_TYPE_NWORD, - RZ_ANAL_ADDR_HINT_TYPE_RET, - RZ_ANAL_ADDR_HINT_TYPE_NEW_BITS, - RZ_ANAL_ADDR_HINT_TYPE_SIZE, - RZ_ANAL_ADDR_HINT_TYPE_SYNTAX, - RZ_ANAL_ADDR_HINT_TYPE_OPTYPE, - RZ_ANAL_ADDR_HINT_TYPE_OPCODE, - RZ_ANAL_ADDR_HINT_TYPE_TYPE_OFFSET, - RZ_ANAL_ADDR_HINT_TYPE_ESIL, - RZ_ANAL_ADDR_HINT_TYPE_HIGH, - RZ_ANAL_ADDR_HINT_TYPE_VAL -} RzAnalAddrHintType; - -typedef struct rz_anal_addr_hint_record_t { - RzAnalAddrHintType type; - union { - char *type_offset; - int nword; - ut64 jump; - ut64 fail; - int newbits; - int immbase; - ut64 ptr; - ut64 retval; - char *syntax; - char *opcode; - char *esil; - int optype; - ut64 size; - ut64 stackframe; - ut64 val; - }; -} RzAnalAddrHintRecord; - -typedef struct rz_anal_hint_t { - ut64 addr; - ut64 ptr; - ut64 val; // used to hint jmp rax - ut64 jump; - ut64 fail; - ut64 ret; // hint for function ret values - char *arch; - char *opcode; - char *syntax; - char *esil; - char *offset; - ut32 type; - ut64 size; - int bits; - int new_bits; // change asm.bits after evaluating this instruction - int immbase; - bool high; // highlight hint - int nword; - ut64 stackframe; -} RzAnalHint; - -typedef RzAnalFunction *(* RzAnalGetFcnIn)(RzAnal *anal, ut64 addr, int type); -typedef RzAnalHint *(* RzAnalGetHint)(RzAnal *anal, ut64 addr); - -typedef struct rz_anal_bind_t { - RzAnal *anal; - RzAnalGetFcnIn get_fcn_in; - RzAnalGetHint get_hint; -} RzAnalBind; - -typedef const char *(*RzAnalLabelAt) (RzAnalFunction *fcn, ut64); - -typedef enum { - RZ_ANAL_VAR_KIND_REG = 'r', - RZ_ANAL_VAR_KIND_BPV = 'b', - RZ_ANAL_VAR_KIND_SPV = 's' -} RzAnalVarKind; - -#define VARPREFIX "var" -#define ARGPREFIX "arg" - -typedef enum { - RZ_ANAL_VAR_ACCESS_TYPE_PTR = 0, - RZ_ANAL_VAR_ACCESS_TYPE_READ = (1 << 0), - RZ_ANAL_VAR_ACCESS_TYPE_WRITE = (1 << 1) -} RzAnalVarAccessType; - -typedef struct rz_anal_var_access_t { - const char *reg; // register used for access - st64 offset; // relative to the function's entrypoint - st64 stackptr; // delta added to register to get the var, e.g. [rbp - 0x10] - ut8 type; // RzAnalVarAccessType bits -} RzAnalVarAccess; - -typedef struct rz_anal_var_constraint_t { - _RzAnalCond cond; - ut64 val; -} RzAnalVarConstraint; - -// generic for args and locals -typedef struct rz_anal_var_t { - RzAnalFunction *fcn; - char *name; // name of the variable - char *type; // cparse type of the variable - RzAnalVarKind kind; - bool isarg; - int delta; /* delta offset inside stack frame */ - char *regname; // name of the register - RzVector/**/ accesses; // ordered by offset, touch this only through API or expect uaf - char *comment; - RzVector/**/ constraints; - - // below members are just for caching, TODO: remove them and do it better - int argnum; -} RzAnalVar; - -// Refers to a variable or a struct field inside a variable, only for varsub -RZ_DEPRECATE typedef struct rz_anal_var_field_t { - char *name; - st64 delta; - bool field; -} RzAnalVarField; - -typedef enum { - RZ_ANAL_ACC_UNKNOWN = 0, - RZ_ANAL_ACC_R = (1 << 0), - RZ_ANAL_ACC_W = (1 << 1), -} RzAnalValueAccess; - -typedef enum { - RZ_ANAL_VAL_REG, - RZ_ANAL_VAL_MEM, - RZ_ANAL_VAL_IMM, -} RzAnalValueType; - -// base+reg+regdelta*mul+delta -typedef struct rz_anal_value_t { - RzAnalValueType type; - RzAnalValueAccess access; - int absolute; // if true, unsigned cast is used - int memref; // is memory reference? which size? 1, 2 ,4, 8 - ut64 base ; // numeric address - st64 delta; // numeric delta - st64 imm; // immediate value - int mul; // multiplier (reg*4+base) - RzRegItem *seg; // segment selector register - RzRegItem *reg; // register / register base used (-1 if no reg) - RzRegItem *regdelta; // register index used (-1 if no reg) -} RzAnalValue; - -typedef enum { - RZ_ANAL_OP_DIR_READ = 1, - RZ_ANAL_OP_DIR_WRITE = 2, - RZ_ANAL_OP_DIR_EXEC = 4, - RZ_ANAL_OP_DIR_REF = 8, -} RzAnalOpDirection; - -typedef enum rz_anal_data_type_t { - RZ_ANAL_DATATYPE_NULL = 0, - RZ_ANAL_DATATYPE_ARRAY, - RZ_ANAL_DATATYPE_OBJECT, // instance - RZ_ANAL_DATATYPE_STRING, - RZ_ANAL_DATATYPE_CLASS, - RZ_ANAL_DATATYPE_BOOLEAN, - RZ_ANAL_DATATYPE_INT16, - RZ_ANAL_DATATYPE_INT32, - RZ_ANAL_DATATYPE_INT64, - RZ_ANAL_DATATYPE_FLOAT, -} RzAnalDataType; - -typedef struct rz_anal_op_t { - char *mnemonic; /* mnemonic.. it actually contains the args too, we should replace rasm with this */ - ut64 addr; /* address */ - ut32 type; /* type of opcode */ - RzAnalOpPrefix prefix; /* type of opcode prefix (rep,lock,..) */ - ut32 type2; /* used by java */ - RzAnalStackOp stackop; /* operation on stack? */ - _RzAnalCond cond; /* condition type */ - int size; /* size in bytes of opcode */ - int nopcode; /* number of bytes representing the opcode (not the arguments) TODO: find better name */ - int cycles; /* cpu-cycles taken by instruction */ - int failcycles; /* conditional cpu-cycles */ - RzAnalOpFamily family; /* family of opcode */ - int id; /* instruction id */ - bool eob; /* end of block (boolean) */ - bool sign; /* operates on signed values, false by default */ - /* Run N instructions before executing the current one */ - int delay; /* delay N slots (mips, ..)*/ - ut64 jump; /* true jmp */ - ut64 fail; /* false jmp */ - RzAnalOpDirection direction; - st64 ptr; /* reference to memory */ /* XXX signed? */ - ut64 val; /* reference to value */ /* XXX signed? */ - int ptrsize; /* f.ex: zero extends for 8, 16 or 32 bits only */ - st64 stackptr; /* stack pointer */ - int refptr; /* if (0) ptr = "reference" else ptr = "load memory of refptr bytes" */ - RzAnalValue *src[3]; - RzAnalValue *dst; - RzList *access; /* RzAnalValue access information */ - RzStrBuf esil; - RzStrBuf opex; - const char *reg; /* destination register */ - const char *ireg; /* register used for indirect memory computation*/ - int scale; - ut64 disp; - RzAnalSwitchOp *switch_op; - RzAnalHint hint; - RzAnalDataType datatype; -} RzAnalOp; - -#define RZ_ANAL_COND_SINGLE(x) (!x->arg[1] || x->arg[0]==x->arg[1]) - -typedef struct rz_anal_cond_t { - int type; // filled by CJMP opcode - RzAnalValue *arg[2]; // filled by CMP opcode -} RzAnalCond; - -typedef struct rz_anal_bb_t { - RBNode _rb; // private, node in the RBTree - ut64 _max_end; // private, augmented value for RBTree - - ut64 addr; - ut64 size; - ut64 jump; - ut64 fail; - bool traced; - bool folded; - ut32 colorize; - ut8 *fingerprint; - RzAnalDiff *diff; - RzAnalCond *cond; - RzAnalSwitchOp *switch_op; - ut16 *op_pos; // offsets of instructions in this block, count is ninstr - 1 (first is always 0) - ut8 *op_bytes; - ut8 *parent_reg_arena; - int op_pos_size; // size of the op_pos array - int ninstr; - int stackptr; - int parent_stackptr; - ut64 cmpval; - const char *cmpreg; - ut32 bbhash; // calculated with xxhash - - RzList *fcns; - RzAnal *anal; - int ref; -#undef RzAnalBlock -} RzAnalBlock; - -typedef enum { - RZ_ANAL_REF_TYPE_NULL = 0, - RZ_ANAL_REF_TYPE_CODE = 'c', // code ref - RZ_ANAL_REF_TYPE_CALL = 'C', // code ref (call) - RZ_ANAL_REF_TYPE_DATA = 'd', // mem ref - RZ_ANAL_REF_TYPE_STRING='s' // string ref -} RzAnalRefType; - -typedef struct rz_anal_ref_t { - ut64 addr; - ut64 at; - RzAnalRefType type; -} RzAnalRef; -RZ_API const char *rz_anal_ref_type_tostring(RzAnalRefType t); - -/* represents a reference line from one address (from) to another (to) */ -typedef struct rz_anal_refline_t { - ut64 from; - ut64 to; - int index; - int level; - int type; - int direction; -} RzAnalRefline; - -typedef struct rz_anal_cycle_frame_t { - ut64 naddr; //next addr - RzList *hooks; - struct rz_anal_cycle_frame_t *prev; -} RzAnalCycleFrame; - -typedef struct rz_anal_cycle_hook_t { //rename ? - ut64 addr; - int cycles; -} RzAnalCycleHook; - -typedef struct rz_anal_esil_word_t { - int type; - const char *str; -} RzAnalEsilWord; - -// only flags that affect control flow -enum { - RZ_ANAL_ESIL_FLAG_ZERO = 1, - RZ_ANAL_ESIL_FLAG_CARRY = 2, - RZ_ANAL_ESIL_FLAG_OVERFLOW = 4, - RZ_ANAL_ESIL_FLAG_PARITY = 8, - RZ_ANAL_ESIL_FLAG_SIGN = 16, - // ... -}; - -enum { - RZ_ANAL_TRAP_NONE = 0, - RZ_ANAL_TRAP_UNHANDLED = 1, - RZ_ANAL_TRAP_BREAKPOINT = 2, - RZ_ANAL_TRAP_DIVBYZERO = 3, - RZ_ANAL_TRAP_WRITE_ERR = 4, - RZ_ANAL_TRAP_READ_ERR = 5, - RZ_ANAL_TRAP_EXEC_ERR = 6, - RZ_ANAL_TRAP_INVALID = 7, - RZ_ANAL_TRAP_UNALIGNED = 8, - RZ_ANAL_TRAP_TODO = 9, - RZ_ANAL_TRAP_HALT = 10, -}; - -enum { - RZ_ANAL_ESIL_PARM_INVALID = 0, - RZ_ANAL_ESIL_PARM_REG, - RZ_ANAL_ESIL_PARM_NUM, -}; - -/* Constructs to convert from ESIL to REIL */ -#define FOREACHOP(GENERATE) \ -/* No Operation */ GENERATE(NOP) \ -/* Unknown/Undefined */ GENERATE(UNK) \ -/* Conditional Jump */ GENERATE(JCC) \ -/* Store Value to register */ GENERATE(STR) \ -/* Store value to memory */ GENERATE(STM) \ -/* Load value from memory */ GENERATE(LDM) \ -/* Addition */ GENERATE(ADD) \ -/* Subtraction */ GENERATE(SUB) \ -/* Negation */ GENERATE(NEG) \ -/* Multiplication */ GENERATE(MUL) \ -/* Division */ GENERATE(DIV) \ -/* Modulo */ GENERATE(MOD) \ -/* Signed Multiplication */ GENERATE(SMUL) \ -/* Sugned Division */ GENERATE(SDIV) \ -/* Signed Modulus */ GENERATE(SMOD) \ -/* Shift Left */ GENERATE(SHL) \ -/* Shift Right */ GENERATE(SHR) \ -/* Binary and */ GENERATE(AND) \ -/* Binary or */ GENERATE(OR) \ -/* Binary xor */ GENERATE(XOR) \ -/* Binary not */ GENERATE(NOT) \ -/* Equation */ GENERATE(EQ) \ -/* Less Than */ GENERATE(LT) - -#define MAKE_ENUM(OP) REIL_##OP, -#define REIL_OP_STRING(STRING) #STRING, - -typedef enum { - FOREACHOP(MAKE_ENUM) -} RzAnalReilOpcode; - -typedef enum { - ARG_REG, // CPU Register - ARG_TEMP, // Temporary register used by REIL - ARG_CONST, // Constant value - ARG_ESIL_INTERNAL, // Used to resolve ESIL internal flags - ARG_NONE // Operand not used by the instruction -} RzAnalReilArgType; - -// Arguments to a REIL instruction. -typedef struct rz_anal_reil_arg { - RzAnalReilArgType type; // Type of the argument - ut8 size; // Size of the argument in bytes - char name[32]; // Name of the argument -} RzAnalReilArg; - -typedef struct rz_anal_ref_char { - char *str; - char *cols; -} RzAnalRefStr; - -// Instruction arg1, arg2, arg3 -typedef struct rz_anal_reil_inst { - RzAnalReilOpcode opcode; - RzAnalReilArg *arg[3]; -} RzAnalReilInst; - -typedef struct rz_anal_reil { - char old[32]; // Used to compute flags. - char cur[32]; - ut8 lastsz; - ut64 reilNextTemp; // Used to store the index of the next REIL temp register to be used. - ut64 addr; // Used for instruction sequencing. Check esil2reil.c for details. - ut8 seq_num; // Incremented and used when noInc is set to 1. - int skip; - int cmd_count; - char if_buf[64]; - char pc[8]; -} RzAnalReil; - -// must be a char -#define ESIL_INTERNAL_PREFIX '$' -#define ESIL_STACK_NAME "esil.ram" -#define ESIL struct rz_anal_esil_t - -typedef struct rz_anal_esil_source_t { - ut32 id; - ut32 claimed; - void *content; -} RzAnalEsilSource; - -RZ_API void rz_anal_esil_sources_init(ESIL *esil); -RZ_API ut32 rz_anal_esil_load_source(ESIL *esil, const char *path); -RZ_API void *rz_anal_esil_get_source(ESIL *esil, ut32 src_id); -RZ_API bool rz_anal_esil_claim_source(ESIL *esil, ut32 src_id); -RZ_API void rz_anal_esil_release_source(ESIL *esil, ut32 src_id); -RZ_API void rz_anal_esil_sources_fini(ESIL *esil); - -typedef bool (*RzAnalEsilInterruptCB)(ESIL *esil, ut32 interrupt, void *user); - -typedef struct rz_anal_esil_interrupt_handler_t { - const ut32 num; - const char* name; - void *(*init)(ESIL *esil); - RzAnalEsilInterruptCB cb; - void (*fini)(void *user); -} RzAnalEsilInterruptHandler; - -typedef struct rz_anal_esil_interrupt_t { - RzAnalEsilInterruptHandler *handler; - void *user; - ut32 src_id; -} RzAnalEsilInterrupt; - -typedef struct rz_anal_esil_change_reg_t { - int idx; - ut64 data; -} RzAnalEsilRegChange; - -typedef struct rz_anal_esil_change_mem_t { - int idx; - ut8 data; -} RzAnalEsilMemChange; - -typedef struct rz_anal_esil_trace_t { - int idx; - int end_idx; - HtUP *registers; - HtUP *memory; - RzRegArena *arena[RZ_REG_TYPE_LAST]; - ut64 stack_addr; - ut64 stack_size; - ut8 *stack_data; - //TODO remove `db` and reuse info above - Sdb *db; -} RzAnalEsilTrace; - -typedef int (*RzAnalEsilHookRegWriteCB)(ESIL *esil, const char *name, ut64 *val); - -typedef struct rz_anal_esil_callbacks_t { - void *user; - /* callbacks */ - int (*hook_flag_read)(ESIL *esil, const char *flag, ut64 *num); - int (*hook_command)(ESIL *esil, const char *op); - int (*hook_mem_read)(ESIL *esil, ut64 addr, ut8 *buf, int len); - int (*mem_read)(ESIL *esil, ut64 addr, ut8 *buf, int len); - int (*hook_mem_write)(ESIL *esil, ut64 addr, const ut8 *buf, int len); - int (*mem_write)(ESIL *esil, ut64 addr, const ut8 *buf, int len); - int (*hook_reg_read)(ESIL *esil, const char *name, ut64 *res, int *size); - int (*reg_read)(ESIL *esil, const char *name, ut64 *res, int *size); - RzAnalEsilHookRegWriteCB hook_reg_write; - int (*reg_write)(ESIL *esil, const char *name, ut64 val); -} RzAnalEsilCallbacks; - -typedef struct rz_anal_esil_t { - RzAnal *anal; - char **stack; - ut64 addrmask; - int stacksize; - int stackptr; - ut32 skip; - int nowrite; - int iotrap; - int exectrap; - int repeat; - int parse_stop; - int parse_goto; - int parse_goto_count; - int verbose; - ut64 flags; - ut64 address; - ut64 stack_addr; - ut32 stack_size; - int delay; // mapped to $ds in ESIL - ut64 jump_target; // mapped to $jt in ESIL - int jump_target_set; // mapped to $js in ESIL - int trap; - ut32 trap_code; // extend into a struct to store more exception info? - // parity flag? done with cur - ut64 old; //used for carry-flagging and borrow-flagging - ut64 cur; //used for carry-flagging and borrow-flagging - ut8 lastsz; //in bits //used for signature-flag - /* native ops and custom ops */ - HtPP *ops; - char *current_opstr; - RzIDStorage *sources; - SdbMini *interrupts; - //this is a disgusting workaround, because we have no ht-like storage without magic keys, that you cannot use, with int-keys - RzAnalEsilInterrupt *intr0; - /* deep esil parsing fills this */ - Sdb *stats; - RzAnalEsilTrace *trace; - RzAnalEsilCallbacks cb; - RzAnalReil *Reil; - // this is so cursed, can we please remove external commands from esil internals. - // Function pointers are fine, but not commands - char *cmd_step; // rizin (external) command to run before a step is performed - char *cmd_step_out; // rizin (external) command to run after a step is performed - char *cmd_intr; // rizin (external) command to run when an interrupt occurs - char *cmd_trap; // rizin (external) command to run when a trap occurs - char *cmd_mdev; // rizin (external) command to run when an memory mapped device address is used - char *cmd_todo; // rizin (external) command to run when esil expr contains TODO - char *cmd_ioer; // rizin (external) command to run when esil fails to IO - char *mdev_range; // string containing the rz_str_range to match for read/write accesses - bool (*cmd)(ESIL *esil, const char *name, ut64 a0, ut64 a1); - void *user; - int stack_fd; // ahem, let's not do this -} RzAnalEsil; - -#undef ESIL - - -enum { - RZ_ANAL_ESIL_OP_TYPE_UNKNOWN = 0x1, - RZ_ANAL_ESIL_OP_TYPE_CONTROL_FLOW, - RZ_ANAL_ESIL_OP_TYPE_MEM_READ = 0x4, - RZ_ANAL_ESIL_OP_TYPE_MEM_WRITE = 0x8, - RZ_ANAL_ESIL_OP_TYPE_REG_WRITE = 0x10, - RZ_ANAL_ESIL_OP_TYPE_MATH = 0x20, - RZ_ANAL_ESIL_OP_TYPE_CUSTOM = 0x40 -}; - - -typedef bool (*RzAnalEsilOpCb)(RzAnalEsil *esil); - -typedef struct rz_anal_esil_operation_t { - RzAnalEsilOpCb code; - ut32 push; // amount of operands pushed - ut32 pop; // amount of operands popped - ut32 type; -} RzAnalEsilOp; - - -// this is 80-bit offsets so we can address every piece of esil in an instruction -typedef struct rz_anal_esil_expr_offset_t { - ut64 off; - ut16 idx; -} RzAnalEsilEOffset; - -typedef enum { - RZ_ANAL_ESIL_BLOCK_ENTER_NORMAL = 0, - RZ_ANAL_ESIL_BLOCK_ENTER_TRUE, - RZ_ANAL_ESIL_BLOCK_ENTER_FALSE, - RZ_ANAL_ESIL_BLOCK_ENTER_GLUE, -} RzAnalEsilBlockEnterType; - -typedef struct rz_anal_esil_basic_block_t { - RzAnalEsilEOffset first; - RzAnalEsilEOffset last; - char *expr; //synthesized esil-expression for this block - RzAnalEsilBlockEnterType enter; //maybe more type is needed here -} RzAnalEsilBB; - -typedef struct rz_anal_esil_cfg_t { - RzGraphNode *start; - RzGraphNode *end; - RzGraph *g; -} RzAnalEsilCFG; - -typedef enum { - RZ_ANAL_ESIL_DFG_BLOCK_CONST = 1, - RZ_ANAL_ESIL_DFG_BLOCK_VAR = 2, - RZ_ANAL_ESIL_DFG_BLOCK_PTR = 4, - RZ_ANAL_ESIL_DFG_BLOCK_RESULT = 8, - RZ_ANAL_ESIL_DFG_BLOCK_GENERATIVE = 16, -} RzAnalEsilDFGBlockType; - -typedef struct rz_anal_esil_dfg_t { - ut32 idx; - Sdb *regs; //resolves regnames to intervals - RContRBTree *reg_vars; //vars represented in regs - RQueue *todo; //todo-queue allocated in this struct for perf - void *insert; //needed for setting regs in dfg - RzGraph *flow; - RzGraphNode *cur; - RzGraphNode *old; - bool malloc_failed; -} RzAnalEsilDFG; - -typedef struct rz_anal_esil_dfg_node_t { - // add more info here - ut32 idx; - RzStrBuf *content; - RzAnalEsilDFGBlockType type; -} RzAnalEsilDFGNode; - -typedef int (*RzAnalCmdExt)(/* Rcore */RzAnal *anal, const char* input); - -// TODO: rm data + len -typedef int (*RzAnalOpCallback)(RzAnal *a, RzAnalOp *op, ut64 addr, const ut8 *data, int len, RzAnalOpMask mask); - -typedef bool (*RzAnalRegProfCallback)(RzAnal *a); -typedef char*(*RzAnalRegProfGetCallback)(RzAnal *a); -typedef int (*RzAnalFPBBCallback)(RzAnal *a, RzAnalBlock *bb); -typedef int (*RzAnalFPFcnCallback)(RzAnal *a, RzAnalFunction *fcn); -typedef int (*RzAnalDiffBBCallback)(RzAnal *anal, RzAnalFunction *fcn, RzAnalFunction *fcn2); -typedef int (*RzAnalDiffFcnCallback)(RzAnal *anal, RzList *fcns, RzList *fcns2); -typedef int (*RzAnalDiffEvalCallback)(RzAnal *anal); - -typedef int (*RzAnalEsilCB)(RzAnalEsil *esil); -typedef int (*RzAnalEsilLoopCB)(RzAnalEsil *esil, RzAnalOp *op); -typedef int (*RzAnalEsilTrapCB)(RzAnalEsil *esil, int trap_type, int trap_code); - -typedef struct rz_anal_plugin_t { - char *name; - char *desc; - char *license; - char *arch; - char *author; - char *version; - int bits; - int esil; // can do esil or not - int fileformat_type; - int (*init)(void *user); - int (*fini)(void *user); - //int (*reset_counter) (RzAnal *anal, ut64 start_addr); - int (*archinfo)(RzAnal *anal, int query); - ut8* (*anal_mask)(RzAnal *anal, int size, const ut8 *data, ut64 at); - RzList* (*preludes)(RzAnal *anal); - - // legacy rz_anal_functions - RzAnalOpCallback op; - - // command extension to directly call any analysis functions - RzAnalCmdExt cmd_ext; - - RzAnalRegProfCallback set_reg_profile; - RzAnalRegProfGetCallback get_reg_profile; - RzAnalFPBBCallback fingerprint_bb; - RzAnalFPFcnCallback fingerprint_fcn; - RzAnalDiffBBCallback diff_bb; - RzAnalDiffFcnCallback diff_fcn; - RzAnalDiffEvalCallback diff_eval; - - RzAnalEsilCB esil_init; // initialize esil-related stuff - RzAnalEsilLoopCB esil_post_loop; //cycle-counting, firing interrupts, ... - RzAnalEsilTrapCB esil_trap; // traps / exceptions - RzAnalEsilCB esil_fini; // deinitialize -} RzAnalPlugin; - -/*----------------------------------------------------------------------------------------------*/ -int * (rz_anal_compare) (RzAnalFunction , RzAnalFunction ); -/*----------------------------------------------------------------------------------------------*/ - -#ifdef RZ_API -/* --------- */ /* REFACTOR */ /* ---------- */ -RZ_API RzListRange* rz_listrange_new (void); -RZ_API void rz_listrange_free(RzListRange *s); -RZ_API void rz_listrange_add(RzListRange *s, RzAnalFunction *f); -RZ_API void rz_listrange_del(RzListRange *s, RzAnalFunction *f); -RZ_API void rz_listrange_resize(RzListRange *s, RzAnalFunction *f, int newsize); -RZ_API RzAnalFunction *rz_listrange_find_in_range(RzListRange* s, ut64 addr); -RZ_API RzAnalFunction *rz_listrange_find_root(RzListRange* s, ut64 addr); -/* --------- */ /* REFACTOR */ /* ---------- */ -/* type.c */ -RZ_API RzAnalType *rz_anal_type_new(void); -RZ_API void rz_anal_type_add(RzAnal *l, RzAnalType *t); -RZ_API RzAnalType *rz_anal_type_find(RzAnal *a, const char* name); -RZ_API void rz_anal_type_list(RzAnal *a, short category, short enabled); -RZ_API const char *rz_anal_datatype_to_string(RzAnalDataType t); -RZ_API RzAnalType *rz_anal_str_to_type(RzAnal *a, const char* s); -RZ_API bool rz_anal_op_nonlinear(int t); -RZ_API bool rz_anal_op_ismemref(int t); -RZ_API const char *rz_anal_optype_to_string(int t); -RZ_API int rz_anal_optype_from_string(const char *type); -RZ_API const char *rz_anal_op_family_to_string (int n); -RZ_API int rz_anal_op_family_from_string(const char *f); -RZ_API int rz_anal_op_hint(RzAnalOp *op, RzAnalHint *hint); -RZ_API RzAnalType *rz_anal_type_free(RzAnalType *t); -RZ_API RzAnalType *rz_anal_type_loadfile(RzAnal *a, const char *path); - -/* block.c */ -typedef bool (*RzAnalBlockCb)(RzAnalBlock *block, void *user); -typedef bool (*RzAnalAddrCb)(ut64 addr, void *user); - -// lifetime -RZ_API void rz_anal_block_ref(RzAnalBlock *bb); -RZ_API void rz_anal_block_unref(RzAnalBlock *bb); - -// Create one block covering the given range. -// This will fail if the range overlaps any existing blocks. -RZ_API RzAnalBlock *rz_anal_create_block(RzAnal *anal, ut64 addr, ut64 size); - -static inline bool rz_anal_block_contains(RzAnalBlock *bb, ut64 addr) { - return addr >= bb->addr && addr < bb->addr + bb->size; -} - -// Split the block at the given address into two blocks. -// bb will stay the first block, the second block will be returned (or NULL on failure) -// The returned block will always be refd, i.e. it is necessary to always call rz_anal_block_unref() on the return value! -RZ_API RzAnalBlock *rz_anal_block_split(RzAnalBlock *bb, ut64 addr); - -static inline bool rz_anal_block_is_contiguous(RzAnalBlock *a, RzAnalBlock *b) { - return (a->addr + a->size) == b->addr; -} - -// Merge block b into a. -// b will be FREED (not just unrefd) and is NOT VALID anymore if this function is successful! -// This only works if b follows directly after a and their function lists are identical. -// returns true iff the blocks could be merged -RZ_API bool rz_anal_block_merge(RzAnalBlock *a, RzAnalBlock *b); - -// Manually delete a block and remove it from all its functions -// If there are more references to it than from its functions only, it will not be removed immediately! -RZ_API void rz_anal_delete_block(RzAnalBlock *bb); - -RZ_API void rz_anal_block_set_size(RzAnalBlock *block, ut64 size); - -// Set the address and size of the block. -// This can fail (and return false) if there is already another block at the new address -RZ_API bool rz_anal_block_relocate(RzAnalBlock *block, ut64 addr, ut64 size); - -RZ_API RzAnalBlock *rz_anal_get_block_at(RzAnal *anal, ut64 addr); -RZ_API bool rz_anal_blocks_foreach_in(RzAnal *anal, ut64 addr, RzAnalBlockCb cb, void *user); -RZ_API RzList *rz_anal_get_blocks_in(RzAnal *anal, ut64 addr); // values from rz_anal_blocks_foreach_in as a list -RZ_API void rz_anal_blocks_foreach_intersect(RzAnal *anal, ut64 addr, ut64 size, RzAnalBlockCb cb, void *user); -RZ_API RzList *rz_anal_get_blocks_intersect(RzAnal *anal, ut64 addr, ut64 size); // values from rz_anal_blocks_foreach_intersect as a list - -// Call cb on every direct successor address of block -// returns false if the loop was breaked by cb -RZ_API bool rz_anal_block_successor_addrs_foreach(RzAnalBlock *block, RzAnalAddrCb cb, void *user); - -// Call cb on block and every (recursive) successor of it -// returns false if the loop was breaked by cb -RZ_API bool rz_anal_block_recurse(RzAnalBlock *block, RzAnalBlockCb cb, void *user); - -// Call cb on block and every (recursive) successor of it -// If cb returns false, recursion stops only for that block -// returns false if the loop was breaked by cb -RZ_API bool rz_anal_block_recurse_followthrough(RzAnalBlock *block, RzAnalBlockCb cb, void *user); - -// Call cb on block and every (recursive) successor of it -// Call on_exit on block that doesn't have non-visited successors -// returns false if the loop was breaked by cb -RZ_API bool rz_anal_block_recurse_depth_first(RzAnalBlock *block, RzAnalBlockCb cb, RZ_NULLABLE RzAnalBlockCb on_exit, void *user); - -// same as rz_anal_block_recurse, but returns the blocks as a list -RZ_API RzList *rz_anal_block_recurse_list(RzAnalBlock *block); - -// return one shortest path from block to dst or NULL if none exists. -RZ_API RZ_NULLABLE RzList/**/ *rz_anal_block_shortest_path(RzAnalBlock *block, ut64 dst); - -// Add a case to the block's switch_op. -// If block->switch_op is NULL, it will be created with the given switch_addr. -RZ_API void rz_anal_block_add_switch_case(RzAnalBlock *block, ut64 switch_addr, ut64 case_value, ut64 case_addr); - -// Chop off the block at the specified address and remove all destinations. -// Blocks that have become unreachable after this operation will be automatically removed from all functions of block. -// addr must be the address directly AFTER the noreturn call! -// After the chopping, an rz_anal_block_automerge() is performed on the touched blocks. -// IMPORTANT: The automerge might also FREE block! This function returns block iff it is still valid afterwards. -// If this function returns NULL, the pointer to block MUST not be touched anymore! -RZ_API RzAnalBlock *rz_anal_block_chop_noreturn(RzAnalBlock *block, ut64 addr); - -// Merge every block in blocks with their contiguous predecessor, if possible. -// IMPORTANT: Merged blocks will be FREED! The blocks list will be updated to contain only the survived blocks. -RZ_API void rz_anal_block_automerge(RzList *blocks); - -// return true iff an instruction in the given basic block starts at the given address -RZ_API bool rz_anal_block_op_starts_at(RzAnalBlock *block, ut64 addr); - -// Updates bbhash based on current bytes inside the block -RZ_API void rz_anal_block_update_hash(RzAnalBlock *block); - -// returns true if a byte in the given basic block was modified -RZ_API bool rz_anal_block_was_modified(RzAnalBlock *block); - -// --------------------------------------- - -/* function.c */ - -RZ_API RzAnalFunction *rz_anal_function_new(RzAnal *anal); -RZ_API void rz_anal_function_free(void *fcn); - -// Add a function created with rz_anal_function_new() to anal -RZ_API bool rz_anal_add_function(RzAnal *anal, RzAnalFunction *fcn); - -// Create a new function and add it to anal (rz_anal_function_new() + set members + rz_anal_add_function()) -RZ_API RzAnalFunction *rz_anal_create_function(RzAnal *anal, const char *name, ut64 addr, int type, RzAnalDiff *diff); - -// returns all functions that have a basic block containing the given address -RZ_API RzList *rz_anal_get_functions_in(RzAnal *anal, ut64 addr); - -// returns the function that has its entrypoint at addr or NULL -RZ_API RzAnalFunction *rz_anal_get_function_at(RzAnal *anal, ut64 addr); - -RZ_API bool rz_anal_function_delete(RzAnalFunction *fcn); - -// rhange the entrypoint of fcn -// This can fail (and return false) if there is already another function at the new address -RZ_API bool rz_anal_function_relocate(RzAnalFunction *fcn, ut64 addr); - -// rename the given function -// This can fail (and return false) if there is another function with the name given -RZ_API bool rz_anal_function_rename(RzAnalFunction *fcn, const char *name); - -RZ_API void rz_anal_function_add_block(RzAnalFunction *fcn, RzAnalBlock *bb); -RZ_API void rz_anal_function_remove_block(RzAnalFunction *fcn, RzAnalBlock *bb); - - -// size of the entire range that the function spans, including holes. -// this is exactly rz_anal_function_max_addr() - rz_anal_function_min_addr() -RZ_API ut64 rz_anal_function_linear_size(RzAnalFunction *fcn); - -// lowest address covered by the function -RZ_API ut64 rz_anal_function_min_addr(RzAnalFunction *fcn); - -// first address directly after the function -RZ_API ut64 rz_anal_function_max_addr(RzAnalFunction *fcn); - -// size from the function entrypoint (fcn->addr) to the end of the function (rz_anal_function_max_addr) -RZ_API ut64 rz_anal_function_size_from_entry(RzAnalFunction *fcn); - -// the "real" size of the function, that is the sum of the size of the -// basicblocks this function is composed of -RZ_API ut64 rz_anal_function_realsize(const RzAnalFunction *fcn); - -// returns whether the function contains a basic block that contains addr -// This is completely independent of fcn->addr, which is only the entrypoint! -RZ_API bool rz_anal_function_contains(RzAnalFunction *fcn, ut64 addr); - -// returns true if function bytes were modified -RZ_API bool rz_anal_function_was_modified(RzAnalFunction *fcn); - -/* anal.c */ -RZ_API RzAnal *rz_anal_new(void); -RZ_API void rz_anal_purge(RzAnal *anal); -RZ_API RzAnal *rz_anal_free(RzAnal *r); -RZ_API void rz_anal_set_user_ptr(RzAnal *anal, void *user); -RZ_API void rz_anal_plugin_free (RzAnalPlugin *p); -RZ_API int rz_anal_add(RzAnal *anal, RzAnalPlugin *foo); -RZ_API int rz_anal_archinfo(RzAnal *anal, int query); -RZ_API bool rz_anal_use(RzAnal *anal, const char *name); -RZ_API bool rz_anal_set_reg_profile(RzAnal *anal); -RZ_API char *rz_anal_get_reg_profile(RzAnal *anal); -RZ_API ut64 rz_anal_get_bbaddr(RzAnal *anal, ut64 addr); -RZ_API bool rz_anal_set_bits(RzAnal *anal, int bits); -RZ_API bool rz_anal_set_os(RzAnal *anal, const char *os); -RZ_API void rz_anal_set_cpu(RzAnal *anal, const char *cpu); -RZ_API int rz_anal_set_big_endian(RzAnal *anal, int boolean); -RZ_API ut8 *rz_anal_mask(RzAnal *anal, int size, const ut8 *data, ut64 at); -RZ_API void rz_anal_trace_bb(RzAnal *anal, ut64 addr); -RZ_API const char *rz_anal_fcntype_tostring(int type); -RZ_API int rz_anal_fcn_bb (RzAnal *anal, RzAnalFunction *fcn, ut64 addr, int depth); -RZ_API void rz_anal_bind(RzAnal *b, RzAnalBind *bnd); -RZ_API bool rz_anal_set_triplet(RzAnal *anal, const char *os, const char *arch, int bits); -RZ_API void rz_anal_add_import(RzAnal *anal, const char *imp); -RZ_API void rz_anal_remove_import(RzAnal *anal, const char *imp); -RZ_API void rz_anal_purge_imports(RzAnal *anal); - -/* bb.c */ -RZ_API RzAnalBlock *rz_anal_bb_from_offset(RzAnal *anal, ut64 off); -RZ_API bool rz_anal_bb_set_offset(RzAnalBlock *bb, int i, ut16 v); -RZ_API ut16 rz_anal_bb_offset_inst(RzAnalBlock *bb, int i); -RZ_API ut64 rz_anal_bb_opaddr_i(RzAnalBlock *bb, int i); -RZ_API ut64 rz_anal_bb_opaddr_at(RzAnalBlock *bb, ut64 addr); -RZ_API ut64 rz_anal_bb_size_i(RzAnalBlock *bb, int i); - -/* op.c */ -RZ_API const char *rz_anal_stackop_tostring(int s); -RZ_API RzAnalOp *rz_anal_op_new(void); -RZ_API void rz_anal_op_free(void *op); -RZ_API void rz_anal_op_init(RzAnalOp *op); -RZ_API bool rz_anal_op_fini(RzAnalOp *op); -RZ_API int rz_anal_op_reg_delta(RzAnal *anal, ut64 addr, const char *name); -RZ_API bool rz_anal_op_is_eob(RzAnalOp *op); -RZ_API RzList *rz_anal_op_list_new(void); -RZ_API int rz_anal_op(RzAnal *anal, RzAnalOp *op, ut64 addr, const ut8 *data, int len, RzAnalOpMask mask); -RZ_API RzAnalOp *rz_anal_op_hexstr(RzAnal *anal, ut64 addr, const char *hexstr); -RZ_API char *rz_anal_op_to_string(RzAnal *anal, RzAnalOp *op); - -RZ_API RzAnalEsil *rz_anal_esil_new(int stacksize, int iotrap, unsigned int addrsize); -RZ_API bool rz_anal_esil_set_pc(RzAnalEsil *esil, ut64 addr); -RZ_API bool rz_anal_esil_setup(RzAnalEsil *esil, RzAnal *anal, int romem, int stats, int nonull); -RZ_API void rz_anal_esil_free(RzAnalEsil *esil); -RZ_API bool rz_anal_esil_runword(RzAnalEsil *esil, const char *word); -RZ_API bool rz_anal_esil_parse(RzAnalEsil *esil, const char *str); -RZ_API bool rz_anal_esil_dumpstack(RzAnalEsil *esil); -RZ_API int rz_anal_esil_mem_read(RzAnalEsil *esil, ut64 addr, ut8 *buf, int len); -RZ_API int rz_anal_esil_mem_write(RzAnalEsil *esil, ut64 addr, const ut8 *buf, int len); -RZ_API int rz_anal_esil_reg_read(RzAnalEsil *esil, const char *regname, ut64 *num, int *size); -RZ_API int rz_anal_esil_reg_write(RzAnalEsil *esil, const char *dst, ut64 num); -RZ_API bool rz_anal_esil_pushnum(RzAnalEsil *esil, ut64 num); -RZ_API bool rz_anal_esil_push(RzAnalEsil *esil, const char *str); -RZ_API char *rz_anal_esil_pop(RzAnalEsil *esil); -RZ_API bool rz_anal_esil_set_op(RzAnalEsil *esil, const char *op, RzAnalEsilOpCb code, ut32 push, ut32 pop, ut32 type); -RZ_API void rz_anal_esil_stack_free(RzAnalEsil *esil); -RZ_API int rz_anal_esil_get_parm_type(RzAnalEsil *esil, const char *str); -RZ_API int rz_anal_esil_get_parm(RzAnalEsil *esil, const char *str, ut64 *num); -RZ_API int rz_anal_esil_condition(RzAnalEsil *esil, const char *str); - -// esil_interrupt.c -RZ_API void rz_anal_esil_interrupts_init(RzAnalEsil *esil); -RZ_API RzAnalEsilInterrupt *rz_anal_esil_interrupt_new(RzAnalEsil *esil, ut32 src_id, RzAnalEsilInterruptHandler *ih); -RZ_API void rz_anal_esil_interrupt_free(RzAnalEsil *esil, RzAnalEsilInterrupt *intr); -RZ_API bool rz_anal_esil_set_interrupt(RzAnalEsil *esil, RzAnalEsilInterrupt *intr); -RZ_API int rz_anal_esil_fire_interrupt(RzAnalEsil *esil, ut32 intr_num); -RZ_API bool rz_anal_esil_load_interrupts(RzAnalEsil *esil, RzAnalEsilInterruptHandler **handlers, ut32 src_id); -RZ_API bool rz_anal_esil_load_interrupts_from_lib(RzAnalEsil *esil, const char *path); -RZ_API void rz_anal_esil_interrupts_fini(RzAnalEsil *esil); - -RZ_API void rz_anal_esil_mem_ro(RzAnalEsil *esil, int mem_readonly); -RZ_API void rz_anal_esil_stats(RzAnalEsil *esil, int enable); - -/* trace */ -RZ_API RzAnalEsilTrace *rz_anal_esil_trace_new(RzAnalEsil *esil); -RZ_API void rz_anal_esil_trace_free(RzAnalEsilTrace *trace); -RZ_API void rz_anal_esil_trace_op(RzAnalEsil *esil, RzAnalOp *op); -RZ_API void rz_anal_esil_trace_list(RzAnalEsil *esil); -RZ_API void rz_anal_esil_trace_show(RzAnalEsil *esil, int idx); -RZ_API void rz_anal_esil_trace_restore(RzAnalEsil *esil, int idx); - -/* pin */ -RZ_API void rz_anal_pin_init(RzAnal *a); -RZ_API void rz_anal_pin_fini(RzAnal *a); -RZ_API void rz_anal_pin(RzAnal *a, ut64 addr, const char *name); -RZ_API void rz_anal_pin_unset(RzAnal *a, ut64 addr); -RZ_API const char *rz_anal_pin_call(RzAnal *a, ut64 addr); -RZ_API void rz_anal_pin_list(RzAnal *a); - -/* fcn.c */ -RZ_API ut32 rz_anal_function_cost(RzAnalFunction *fcn); -RZ_API int rz_anal_function_count_edges(const RzAnalFunction *fcn, RZ_NULLABLE int *ebbs); - -// Use rz_anal_get_functions_in¿() instead -RZ_DEPRECATE RZ_API RzAnalFunction *rz_anal_get_fcn_in(RzAnal *anal, ut64 addr, int type); -RZ_DEPRECATE RZ_API RzAnalFunction *rz_anal_get_fcn_in_bounds(RzAnal *anal, ut64 addr, int type); - -RZ_API RzAnalFunction *rz_anal_get_function_byname(RzAnal *anal, const char *name); - -RZ_API int rz_anal_fcn(RzAnal *anal, RzAnalFunction *fcn, ut64 addr, ut64 len, int reftype); -RZ_API int rz_anal_fcn_del(RzAnal *anal, ut64 addr); -RZ_API int rz_anal_fcn_del_locs(RzAnal *anal, ut64 addr); -RZ_API bool rz_anal_fcn_add_bb(RzAnal *anal, RzAnalFunction *fcn, - ut64 addr, ut64 size, - ut64 jump, ut64 fail, RZ_BORROW RzAnalDiff *diff); -RZ_API bool rz_anal_check_fcn(RzAnal *anal, ut8 *buf, ut16 bufsz, ut64 addr, ut64 low, ut64 high); -RZ_API void rz_anal_fcn_invalidate_read_ahead_cache(void); - -RZ_API void rz_anal_function_check_bp_use(RzAnalFunction *fcn); -RZ_API void rz_anal_update_analysis_range(RzAnal *anal, ut64 addr, int size); -RZ_API void rz_anal_function_update_analysis(RzAnalFunction *fcn); - -#define RZ_ANAL_FCN_VARKIND_LOCAL 'v' - - -RZ_API int rz_anal_fcn_var_del_byindex (RzAnal *a, ut64 fna, const char kind, int scope, ut32 idx); -/* args */ -RZ_API int rz_anal_var_count(RzAnal *a, RzAnalFunction *fcn, int kind, int type); - -/* vars // globals. not here */ -RZ_API bool rz_anal_var_display(RzAnal *anal, RzAnalVar *var); - -RZ_API int rz_anal_function_complexity(RzAnalFunction *fcn); -RZ_API int rz_anal_function_loops(RzAnalFunction *fcn); -RZ_API void rz_anal_trim_jmprefs(RzAnal *anal, RzAnalFunction *fcn); -RZ_API void rz_anal_del_jmprefs(RzAnal *anal, RzAnalFunction *fcn); -RZ_API char *rz_anal_function_get_json(RzAnalFunction *function); -RZ_API RzAnalFunction *rz_anal_fcn_next(RzAnal *anal, ut64 addr); -RZ_API char *rz_anal_function_get_signature(RzAnalFunction *function); -RZ_API int rz_anal_str_to_fcn(RzAnal *a, RzAnalFunction *f, const char *_str); -RZ_API int rz_anal_fcn_count (RzAnal *a, ut64 from, ut64 to); -RZ_API RzAnalBlock *rz_anal_fcn_bbget_in(const RzAnal *anal, RzAnalFunction *fcn, ut64 addr); -RZ_API RzAnalBlock *rz_anal_fcn_bbget_at(RzAnal *anal, RzAnalFunction *fcn, ut64 addr); -RZ_API bool rz_anal_fcn_bbadd(RzAnalFunction *fcn, RzAnalBlock *bb); -RZ_API int rz_anal_function_resize(RzAnalFunction *fcn, int newsize); -RZ_API bool rz_anal_function_purity(RzAnalFunction *fcn); - -typedef bool (* RzAnalRefCmp)(RzAnalRef *ref, void *data); -RZ_API RzList *rz_anal_ref_list_new(void); -RZ_API ut64 rz_anal_xrefs_count(RzAnal *anal); -RZ_API const char *rz_anal_xrefs_type_tostring(RzAnalRefType type); -RZ_API RzAnalRefType rz_anal_xrefs_type(char ch); -RZ_API RzList *rz_anal_xrefs_get(RzAnal *anal, ut64 to); -RZ_API RzList *rz_anal_refs_get(RzAnal *anal, ut64 to); -RZ_API RzList *rz_anal_xrefs_get_from(RzAnal *anal, ut64 from); -RZ_API void rz_anal_xrefs_list(RzAnal *anal, int rad); -RZ_API RzList *rz_anal_function_get_refs(RzAnalFunction *fcn); -RZ_API RzList *rz_anal_function_get_xrefs(RzAnalFunction *fcn); -RZ_API int rz_anal_xrefs_from(RzAnal *anal, RzList *list, const char *kind, const RzAnalRefType type, ut64 addr); -RZ_API int rz_anal_xrefs_set(RzAnal *anal, ut64 from, ut64 to, const RzAnalRefType type); -RZ_API int rz_anal_xrefs_deln(RzAnal *anal, ut64 from, ut64 to, const RzAnalRefType type); -RZ_API int rz_anal_xref_del(RzAnal *anal, ut64 at, ut64 addr); - -RZ_API RzList *rz_anal_get_fcns(RzAnal *anal); - -/* type.c */ -RZ_API void rz_anal_remove_parsed_type(RzAnal *anal, const char *name); -RZ_API void rz_anal_save_parsed_type(RzAnal *anal, const char *parsed); - -/* var.c */ -RZ_API RZ_OWN char *rz_anal_function_autoname_var(RzAnalFunction *fcn, char kind, const char *pfx, int ptr); -RZ_API RZ_BORROW RzAnalVar *rz_anal_function_set_var(RzAnalFunction *fcn, int delta, char kind, RZ_NULLABLE const char *type, int size, bool isarg, RZ_NONNULL const char *name); -RZ_API RZ_BORROW RzAnalVar *rz_anal_function_get_var(RzAnalFunction *fcn, char kind, int delta); -RZ_API RZ_BORROW RzAnalVar *rz_anal_function_get_var_byname(RzAnalFunction *fcn, const char *name); -RZ_API void rz_anal_function_delete_vars_by_kind(RzAnalFunction *fcn, RzAnalVarKind kind); -RZ_API void rz_anal_function_delete_all_vars(RzAnalFunction *fcn); -RZ_API void rz_anal_function_delete_unused_vars(RzAnalFunction *fcn); -RZ_API void rz_anal_function_delete_var(RzAnalFunction *fcn, RzAnalVar *var); -RZ_API bool rz_anal_function_rebase_vars(RzAnal *a, RzAnalFunction *fcn); -RZ_API st64 rz_anal_function_get_var_stackptr_at(RzAnalFunction *fcn, st64 delta, ut64 addr); -RZ_API const char *rz_anal_function_get_var_reg_at(RzAnalFunction *fcn, st64 delta, ut64 addr); -RZ_API RZ_BORROW RzPVector *rz_anal_function_get_vars_used_at(RzAnalFunction *fcn, ut64 op_addr); - -// There could be multiple vars used in multiple functions. Use rz_anal_get_functions_in()+rz_anal_function_get_vars_used_at() instead. -RZ_API RZ_DEPRECATE RzAnalVar *rz_anal_get_used_function_var(RzAnal *anal, ut64 addr); - -RZ_API bool rz_anal_var_rename(RzAnalVar *var, const char *new_name, bool verbose); -RZ_API void rz_anal_var_set_type(RzAnalVar *var, const char *type); -RZ_API void rz_anal_var_delete(RzAnalVar *var); -RZ_API ut64 rz_anal_var_addr(RzAnalVar *var); -RZ_API void rz_anal_var_set_access(RzAnalVar *var, const char *reg, ut64 access_addr, int access_type, st64 stackptr); -RZ_API void rz_anal_var_remove_access_at(RzAnalVar *var, ut64 address); -RZ_API void rz_anal_var_clear_accesses(RzAnalVar *var); -RZ_API void rz_anal_var_add_constraint(RzAnalVar *var, RZ_BORROW RzAnalVarConstraint *constraint); -RZ_API char *rz_anal_var_get_constraints_readable(RzAnalVar *var); - -// Get the access to var at exactly addr if there is one -RZ_API RzAnalVarAccess *rz_anal_var_get_access_at(RzAnalVar *var, ut64 addr); - -RZ_API int rz_anal_var_get_argnum(RzAnalVar *var); - -RZ_API void rz_anal_extract_vars(RzAnal *anal, RzAnalFunction *fcn, RzAnalOp *op); -RZ_API void rz_anal_extract_rarg(RzAnal *anal, RzAnalOp *op, RzAnalFunction *fcn, int *reg_set, int *count); - -// Get the variable that var is written to at one of its accesses -// Useful for cases where a register-based argument is written away into a stack variable, -// so if var is the reg arg then this will return the stack var. -RZ_API RzAnalVar *rz_anal_var_get_dst_var(RzAnalVar *var); - -typedef struct rz_anal_fcn_vars_cache { - RzList *bvars; - RzList *rvars; - RzList *svars; -} RzAnalFcnVarsCache; -RZ_API void rz_anal_fcn_vars_cache_init(RzAnal *anal, RzAnalFcnVarsCache *cache, RzAnalFunction *fcn); -RZ_API void rz_anal_fcn_vars_cache_fini(RzAnalFcnVarsCache *cache); - -RZ_API char *rz_anal_fcn_format_sig(RZ_NONNULL RzAnal *anal, RZ_NONNULL RzAnalFunction *fcn, RZ_NULLABLE char *fcn_name, - RZ_NULLABLE RzAnalFcnVarsCache *reuse_cache, RZ_NULLABLE const char *fcn_name_pre, RZ_NULLABLE const char *fcn_name_post); - - -/* project */ -RZ_API bool rz_anal_xrefs_init (RzAnal *anal); - -#define RZ_ANAL_THRESHOLDFCN 0.7F -#define RZ_ANAL_THRESHOLDBB 0.7F - -/* diff.c */ -RZ_API RzAnalDiff *rz_anal_diff_new(void); -RZ_API void rz_anal_diff_setup(RzAnal *anal, int doops, double thbb, double thfcn); -RZ_API void rz_anal_diff_setup_i(RzAnal *anal, int doops, int thbb, int thfcn); -RZ_API void* rz_anal_diff_free(RzAnalDiff *diff); -RZ_API int rz_anal_diff_fingerprint_bb(RzAnal *anal, RzAnalBlock *bb); -RZ_API size_t rz_anal_diff_fingerprint_fcn(RzAnal *anal, RzAnalFunction *fcn); -RZ_API bool rz_anal_diff_bb(RzAnal *anal, RzAnalFunction *fcn, RzAnalFunction *fcn2); -RZ_API int rz_anal_diff_fcn(RzAnal *anal, RzList *fcns, RzList *fcns2); -RZ_API int rz_anal_diff_eval(RzAnal *anal); - -/* value.c */ -RZ_API RzAnalValue *rz_anal_value_new(void); -RZ_API RzAnalValue *rz_anal_value_copy (RzAnalValue *ov); -RZ_API RzAnalValue *rz_anal_value_new_from_string(const char *str); -RZ_API st64 rz_anal_value_eval(RzAnalValue *value); -RZ_API char *rz_anal_value_to_string (RzAnalValue *value); -RZ_API ut64 rz_anal_value_to_ut64(RzAnal *anal, RzAnalValue *val); -RZ_API int rz_anal_value_set_ut64(RzAnal *anal, RzAnalValue *val, ut64 num); -RZ_API void rz_anal_value_free(RzAnalValue *value); - -RZ_API RzAnalCond *rz_anal_cond_new(void); -RZ_API RzAnalCond *rz_anal_cond_new_from_op(RzAnalOp *op); -RZ_API void rz_anal_cond_fini(RzAnalCond *c); -RZ_API void rz_anal_cond_free(RzAnalCond *c); -RZ_API char *rz_anal_cond_to_string(RzAnalCond *cond); -RZ_API int rz_anal_cond_eval(RzAnal *anal, RzAnalCond *cond); -RZ_API RzAnalCond *rz_anal_cond_new_from_string(const char *str); -RZ_API const char *rz_anal_cond_tostring(int cc); - -/* jmptbl */ -RZ_API bool rz_anal_jmptbl(RzAnal *anal, RzAnalFunction *fcn, RzAnalBlock *block, ut64 jmpaddr, ut64 table, ut64 tablesize, ut64 default_addr); - -// TODO: should be renamed -RZ_API bool try_get_delta_jmptbl_info(RzAnal *anal, RzAnalFunction *fcn, ut64 jmp_addr, ut64 lea_addr, ut64 *table_size, ut64 *default_case); -RZ_API bool try_walkthrough_jmptbl(RzAnal *anal, RzAnalFunction *fcn, RzAnalBlock *block, int depth, ut64 ip, ut64 jmptbl_loc, ut64 jmptbl_off, ut64 sz, ut64 jmptbl_size, ut64 default_case, bool ret0); -RZ_API bool try_walkthrough_casetbl(RzAnal *anal, RzAnalFunction *fcn, RzAnalBlock *block, int depth, ut64 ip, ut64 jmptbl_loc, ut64 casetbl_loc, ut64 jmptbl_off, ut64 sz, ut64 jmptbl_size, ut64 default_case, bool ret0); -RZ_API bool try_get_jmptbl_info(RzAnal *anal, RzAnalFunction *fcn, ut64 addr, RzAnalBlock *my_bb, ut64 *table_size, ut64 *default_case); -RZ_API int walkthrough_arm_jmptbl_style(RzAnal *anal, RzAnalFunction *fcn, RzAnalBlock *block, int depth, ut64 ip, ut64 jmptbl_loc, ut64 sz, ut64 jmptbl_size, ut64 default_case, int ret0); - -/* reflines.c */ -RZ_API RzList* /**/ rz_anal_reflines_get(RzAnal *anal, - ut64 addr, const ut8 *buf, ut64 len, int nlines, int linesout, int linescall); -RZ_API int rz_anal_reflines_middle(RzAnal *anal, RzList *list, ut64 addr, int len); -RZ_API RzAnalRefStr *rz_anal_reflines_str(void *core, ut64 addr, int opts); -RZ_API void rz_anal_reflines_str_free(RzAnalRefStr *refstr); -/* TODO move to rz_core */ -RZ_API void rz_anal_var_list_show(RzAnal *anal, RzAnalFunction *fcn, int kind, int mode, PJ* pj); -RZ_API RzList *rz_anal_var_list(RzAnal *anal, RzAnalFunction *fcn, int kind); -RZ_API RZ_DEPRECATE RzList/**/ *rz_anal_var_all_list(RzAnal *anal, RzAnalFunction *fcn); -RZ_API RZ_DEPRECATE RzList/**/ *rz_anal_function_get_var_fields(RzAnalFunction *fcn, int kind); - -// calling conventions API -RZ_API bool rz_anal_cc_exist(RzAnal *anal, const char *convention); -RZ_API void rz_anal_cc_del(RzAnal *anal, const char *name); -RZ_API bool rz_anal_cc_set(RzAnal *anal, const char *expr); -RZ_API char *rz_anal_cc_get(RzAnal *anal, const char *name); -RZ_API const char *rz_anal_cc_arg(RzAnal *anal, const char *convention, int n); -RZ_API const char *rz_anal_cc_self(RzAnal *anal, const char *convention); -RZ_API void rz_anal_cc_set_self(RzAnal *anal, const char *convention, const char *self); -RZ_API const char *rz_anal_cc_error(RzAnal *anal, const char *convention); -RZ_API void rz_anal_cc_set_error(RzAnal *anal, const char *convention, const char *error); -RZ_API int rz_anal_cc_max_arg(RzAnal *anal, const char *cc); -RZ_API const char *rz_anal_cc_ret(RzAnal *anal, const char *convention); -RZ_API const char *rz_anal_cc_default(RzAnal *anal); -RZ_API const char *rz_anal_cc_func(RzAnal *anal, const char *func_name); -RZ_API bool rz_anal_noreturn_at(RzAnal *anal, ut64 addr); - -typedef struct rz_anal_data_t { - ut64 addr; - int type; - ut64 ptr; - char *str; - int len; - ut8 *buf; - ut8 sbuf[8]; -} RzAnalData; - -RZ_API RzAnalData *rz_anal_data (RzAnal *anal, ut64 addr, const ut8 *buf, int size, int wordsize); -RZ_API const char *rz_anal_data_kind (RzAnal *anal, ut64 addr, const ut8 *buf, int len); -RZ_API RzAnalData *rz_anal_data_new_string (ut64 addr, const char *p, int size, int wide); -RZ_API RzAnalData *rz_anal_data_new (ut64 addr, int type, ut64 n, const ut8 *buf, int len); -RZ_API void rz_anal_data_free (RzAnalData *d); -#include -RZ_API char *rz_anal_data_to_string(RzAnalData *d, RzConsPrintablePalette *pal); - -/* meta - * - * Meta uses Condret's Klemmbaustein Priciple, i.e. intervals are defined inclusive/inclusive. - * A meta item from 0x42 to 0x42 has a size of 1. Items with size 0 do not exist. - * Meta items are allowed to overlap and the internal data structure allows for multiple meta items - * starting at the same address. - * Meta items are saved in an RzIntervalTree. To access the interval of an item, use the members of RzIntervalNode. - */ - -static inline ut64 rz_meta_item_size(ut64 start, ut64 end) { - // meta items use inclusive/inclusive intervals - return end - start + 1; -} - -static inline ut64 rz_meta_node_size(RzIntervalNode *node) { - return rz_meta_item_size (node->start, node->end); -} - -// Set a meta item at addr with the given contents in the current space. -// If there already exists an item with this type and space at addr (regardless of its size) it will be overwritten. -RZ_API bool rz_meta_set(RzAnal *a, RzAnalMetaType type, ut64 addr, ut64 size, const char *str); - -// Same as rz_meta_set() but also sets the subtype. -RZ_API bool rz_meta_set_with_subtype(RzAnal *m, RzAnalMetaType type, int subtype, ut64 addr, ut64 size, const char *str); - -// Delete all meta items in the current space that intersect with the given interval. -// If size == UT64_MAX, everything in the current space will be deleted. -RZ_API void rz_meta_del(RzAnal *a, RzAnalMetaType type, ut64 addr, ut64 size); - -// Same as rz_meta_set() with a size of 1. -RZ_API bool rz_meta_set_string(RzAnal *a, RzAnalMetaType type, ut64 addr, const char *s); - -// Convenience function to get the str content of the item at addr with given type in the current space. -RZ_API const char *rz_meta_get_string(RzAnal *a, RzAnalMetaType type, ut64 addr); - -// Convenience function to add an RZ_META_TYPE_DATA item at the given addr in the current space. -RZ_API void rz_meta_set_data_at(RzAnal *a, ut64 addr, ut64 wordsz); - -// Returns the item with given type that starts at addr in the current space or NULL. The size of this item optionally returned through size. -RZ_API RzAnalMetaItem *rz_meta_get_at(RzAnal *a, ut64 addr, RzAnalMetaType type, RZ_OUT RZ_NULLABLE ut64 *size); - -// Returns the node for one meta item with the given type that contains addr in the current space or NULL. -// To get all the nodes, use rz_meta_get_all_in(). -RZ_API RzIntervalNode *rz_meta_get_in(RzAnal *a, ut64 addr, RzAnalMetaType type); - -// Returns all nodes for items starting at the given address in the current space. -RZ_API RzPVector/* *>*/ *rz_meta_get_all_at(RzAnal *a, ut64 at); - -// Returns all nodes for items with the given type containing the given address in the current space. -RZ_API RzPVector/* *>*/ *rz_meta_get_all_in(RzAnal *a, ut64 at, RzAnalMetaType type); - -// Returns all nodes for items with the given type intersecting the given interval in the current space. -RZ_API RzPVector/* *>*/ *rz_meta_get_all_intersect(RzAnal *a, ut64 start, ut64 size, RzAnalMetaType type); - -// Delete all meta items in the given space -RZ_API void rz_meta_space_unset_for(RzAnal *a, const RzSpace *space); - -// Returns the number of meta items in the given space -RZ_API int rz_meta_space_count_for(RzAnal *a, const RzSpace *space); - -// Shift all meta items by the given delta, for rebasing between different memory layouts. -RZ_API void rz_meta_rebase(RzAnal *anal, ut64 diff); - -// Calculate the total size covered by meta items of the given type. -RZ_API ut64 rz_meta_get_size(RzAnal *a, RzAnalMetaType type); - -RZ_API const char *rz_meta_type_to_string(int type); -RZ_API void rz_meta_print(RzAnal *a, RzAnalMetaItem *d, ut64 start, ut64 size, int rad, PJ *pj, bool show_full); -RZ_API void rz_meta_print_list_all(RzAnal *a, int type, int rad); -RZ_API void rz_meta_print_list_at(RzAnal *a, ut64 addr, int rad); -RZ_API void rz_meta_print_list_in_function(RzAnal *a, int type, int rad, ut64 addr); - -/* hints */ - -RZ_API void rz_anal_hint_del(RzAnal *anal, ut64 addr, ut64 size); // delete all hints that are contained within the given range, if size > 1, this operation is quite heavy! -RZ_API void rz_anal_hint_clear (RzAnal *a); -RZ_API void rz_anal_hint_free (RzAnalHint *h); -RZ_API void rz_anal_hint_set_syntax (RzAnal *a, ut64 addr, const char *syn); -RZ_API void rz_anal_hint_set_type(RzAnal *a, ut64 addr, int type); -RZ_API void rz_anal_hint_set_jump(RzAnal *a, ut64 addr, ut64 jump); -RZ_API void rz_anal_hint_set_fail(RzAnal *a, ut64 addr, ut64 fail); -RZ_API void rz_anal_hint_set_newbits(RzAnal *a, ut64 addr, int bits); -RZ_API void rz_anal_hint_set_nword(RzAnal *a, ut64 addr, int nword); -RZ_API void rz_anal_hint_set_offset(RzAnal *a, ut64 addr, const char *typeoff); -RZ_API void rz_anal_hint_set_immbase(RzAnal *a, ut64 addr, int base); -RZ_API void rz_anal_hint_set_size(RzAnal *a, ut64 addr, ut64 size); -RZ_API void rz_anal_hint_set_opcode(RzAnal *a, ut64 addr, const char *str); -RZ_API void rz_anal_hint_set_esil(RzAnal *a, ut64 addr, const char *str); -RZ_API void rz_anal_hint_set_pointer(RzAnal *a, ut64 addr, ut64 ptr); -RZ_API void rz_anal_hint_set_ret(RzAnal *a, ut64 addr, ut64 val); -RZ_API void rz_anal_hint_set_high(RzAnal *a, ut64 addr); -RZ_API void rz_anal_hint_set_stackframe(RzAnal *a, ut64 addr, ut64 size); -RZ_API void rz_anal_hint_set_val(RzAnal *a, ut64 addr, ut64 v); -RZ_API void rz_anal_hint_set_arch(RzAnal *a, ut64 addr, RZ_NULLABLE const char *arch); // arch == NULL => use global default -RZ_API void rz_anal_hint_set_bits(RzAnal *a, ut64 addr, int bits); // bits == NULL => use global default -RZ_API void rz_anal_hint_unset_val (RzAnal *a, ut64 addr); -RZ_API void rz_anal_hint_unset_high(RzAnal *a, ut64 addr); -RZ_API void rz_anal_hint_unset_immbase(RzAnal *a, ut64 addr); -RZ_API void rz_anal_hint_unset_nword(RzAnal *a, ut64 addr); -RZ_API void rz_anal_hint_unset_size(RzAnal *a, ut64 addr); -RZ_API void rz_anal_hint_unset_type(RzAnal *a, ut64 addr); -RZ_API void rz_anal_hint_unset_esil(RzAnal *a, ut64 addr); -RZ_API void rz_anal_hint_unset_opcode(RzAnal *a, ut64 addr); -RZ_API void rz_anal_hint_unset_syntax(RzAnal *a, ut64 addr); -RZ_API void rz_anal_hint_unset_pointer(RzAnal *a, ut64 addr); -RZ_API void rz_anal_hint_unset_ret(RzAnal *a, ut64 addr); -RZ_API void rz_anal_hint_unset_offset(RzAnal *a, ut64 addr); -RZ_API void rz_anal_hint_unset_jump(RzAnal *a, ut64 addr); -RZ_API void rz_anal_hint_unset_fail(RzAnal *a, ut64 addr); -RZ_API void rz_anal_hint_unset_newbits(RzAnal *a, ut64 addr); -RZ_API void rz_anal_hint_unset_stackframe(RzAnal *a, ut64 addr); -RZ_API void rz_anal_hint_unset_arch(RzAnal *a, ut64 addr); -RZ_API void rz_anal_hint_unset_bits(RzAnal *a, ut64 addr); -RZ_API RZ_NULLABLE const RzVector/**/ *rz_anal_addr_hints_at(RzAnal *anal, ut64 addr); -typedef bool (*RzAnalAddrHintRecordsCb)(ut64 addr, const RzVector/**/ *records, void *user); -RZ_API void rz_anal_addr_hints_foreach(RzAnal *anal, RzAnalAddrHintRecordsCb cb, void *user); -typedef bool (*RzAnalArchHintCb)(ut64 addr, RZ_NULLABLE const char *arch, void *user); -RZ_API void rz_anal_arch_hints_foreach(RzAnal *anal, RzAnalArchHintCb cb, void *user); -typedef bool (*RzAnalBitsHintCb)(ut64 addr, int bits, void *user); -RZ_API void rz_anal_bits_hints_foreach(RzAnal *anal, RzAnalBitsHintCb cb, void *user); - -// get the hint-specified arch value to be considered at addr -// hint_addr will optionally be set to the address where the hint that specifies this arch is placed or UT64_MAX -// if there is no hint affecting addr. -RZ_API RZ_NULLABLE RZ_BORROW const char *rz_anal_hint_arch_at(RzAnal *anal, ut64 addr, RZ_NULLABLE ut64 *hint_addr); - -// get the hint-specified bits value to be considered at addr -// hint_addr will optionally be set to the address where the hint that specifies this arch is placed or UT64_MAX -// if there is no hint affecting addr. -RZ_API int rz_anal_hint_bits_at(RzAnal *anal, ut64 addr, RZ_NULLABLE ut64 *hint_addr); - -RZ_API RzAnalHint *rz_anal_hint_get(RzAnal *anal, ut64 addr); // accumulate all available hints affecting the given address - -/* switch.c APIs */ -RZ_API RzAnalSwitchOp *rz_anal_switch_op_new(ut64 addr, ut64 min_val, ut64 max_val, ut64 def_val); -RZ_API void rz_anal_switch_op_free(RzAnalSwitchOp * swop); -RZ_API RzAnalCaseOp* rz_anal_switch_op_add_case(RzAnalSwitchOp * swop, ut64 addr, ut64 value, ut64 jump); - -/* cycles.c */ -RZ_API RzAnalCycleFrame* rz_anal_cycle_frame_new (void); -RZ_API void rz_anal_cycle_frame_free (RzAnalCycleFrame *cf); - -/* labels */ -RZ_API ut64 rz_anal_function_get_label(RzAnalFunction *fcn, const char *name); -RZ_API const char *rz_anal_function_get_label_at(RzAnalFunction *fcn, ut64 addr); -RZ_API bool rz_anal_function_set_label(RzAnalFunction *fcn, const char *name, ut64 addr); -RZ_API bool rz_anal_function_delete_label(RzAnalFunction *fcn, const char *name); -RZ_API bool rz_anal_function_delete_label_at(RzAnalFunction *fcn, ut64 addr); - -/* limits */ -RZ_API void rz_anal_set_limits(RzAnal *anal, ut64 from, ut64 to); -RZ_API void rz_anal_unset_limits(RzAnal *anal); - -/* ESIL to REIL */ -RZ_API int rz_anal_esil_to_reil_setup (RzAnalEsil *esil, RzAnal *anal, int romem, int stats); - -/* no-return stuff */ -RZ_API void rz_anal_noreturn_list(RzAnal *anal, int mode); -RZ_API bool rz_anal_noreturn_add(RzAnal *anal, const char *name, ut64 addr); -RZ_API bool rz_anal_noreturn_drop(RzAnal *anal, const char *expr); -RZ_API bool rz_anal_noreturn_at_addr(RzAnal *anal, ut64 addr); - -/* zign spaces */ -RZ_API int rz_sign_space_count_for(RzAnal *a, const RzSpace *space); -RZ_API void rz_sign_space_unset_for(RzAnal *a, const RzSpace *space); -RZ_API void rz_sign_space_rename_for(RzAnal *a, const RzSpace *space, const char *oname, const char *nname); - -/* vtables */ -typedef struct { - RzAnal *anal; - RzAnalCPPABI abi; - ut8 word_size; - bool (*read_addr) (RzAnal *anal, ut64 addr, ut64 *buf); -} RVTableContext; - -typedef struct vtable_info_t { - ut64 saddr; //starting address - RzVector methods; -} RVTableInfo; - -typedef struct vtable_method_info_t { - ut64 addr; // addr of the function - ut64 vtable_offset; // offset inside the vtable -} RVTableMethodInfo; - -RZ_API void rz_anal_vtable_info_free(RVTableInfo *vtable); -RZ_API ut64 rz_anal_vtable_info_get_size(RVTableContext *context, RVTableInfo *vtable); -RZ_API bool rz_anal_vtable_begin(RzAnal *anal, RVTableContext *context); -RZ_API RVTableInfo *rz_anal_vtable_parse_at(RVTableContext *context, ut64 addr); -RZ_API RzList *rz_anal_vtable_search(RVTableContext *context); -RZ_API void rz_anal_list_vtables(RzAnal *anal, int rad); - -/* rtti */ -RZ_API char *rz_anal_rtti_msvc_demangle_class_name(RVTableContext *context, const char *name); -RZ_API void rz_anal_rtti_msvc_print_complete_object_locator(RVTableContext *context, ut64 addr, int mode); -RZ_API void rz_anal_rtti_msvc_print_type_descriptor(RVTableContext *context, ut64 addr, int mode); -RZ_API void rz_anal_rtti_msvc_print_class_hierarchy_descriptor(RVTableContext *context, ut64 addr, int mode); -RZ_API void rz_anal_rtti_msvc_print_base_class_descriptor(RVTableContext *context, ut64 addr, int mode); -RZ_API bool rz_anal_rtti_msvc_print_at_vtable(RVTableContext *context, ut64 addr, int mode, bool strict); -RZ_API void rz_anal_rtti_msvc_recover_all(RVTableContext *vt_context, RzList *vtables); - -RZ_API char *rz_anal_rtti_itanium_demangle_class_name(RVTableContext *context, const char *name); -RZ_API void rz_anal_rtti_itanium_print_class_type_info(RVTableContext *context, ut64 addr, int mode); -RZ_API void rz_anal_rtti_itanium_print_si_class_type_info(RVTableContext *context, ut64 addr, int mode); -RZ_API void rz_anal_rtti_itanium_print_vmi_class_type_info(RVTableContext *context, ut64 addr, int mode); -RZ_API bool rz_anal_rtti_itanium_print_at_vtable(RVTableContext *context, ut64 addr, int mode); -RZ_API void rz_anal_rtti_itanium_recover_all(RVTableContext *vt_context, RzList *vtables); - -RZ_API char *rz_anal_rtti_demangle_class_name(RzAnal *anal, const char *name); -RZ_API void rz_anal_rtti_print_at_vtable(RzAnal *anal, ut64 addr, int mode); -RZ_API void rz_anal_rtti_print_all(RzAnal *anal, int mode); -RZ_API void rz_anal_rtti_recover_all(RzAnal *anal); - -RZ_API void rz_anal_colorize_bb(RzAnal *anal, ut64 addr, ut32 color); - -RZ_API RzList *rz_anal_preludes(RzAnal *anal); -RZ_API bool rz_anal_is_prelude(RzAnal *anal, const ut8 *data, int len); - -/* classes */ -typedef struct rz_anal_method_t { - char *name; - ut64 addr; - st64 vtable_offset; // >= 0 if method is virtual, else -1 -} RzAnalMethod; - -typedef struct rz_anal_base_class_t { - char *id; // id to identify the class attr - ut64 offset; // offset of the base class inside the derived class - char *class_name; -} RzAnalBaseClass; - -typedef struct rz_anal_vtable_t { - char *id; // id to identify the class attr - ut64 offset; // offset inside the class - ut64 addr; // where the content of the vtable is - ut64 size; // size (in bytes) of the vtable -} RzAnalVTable; - -typedef enum { - RZ_ANAL_CLASS_ERR_SUCCESS = 0, - RZ_ANAL_CLASS_ERR_CLASH, - RZ_ANAL_CLASS_ERR_NONEXISTENT_ATTR, - RZ_ANAL_CLASS_ERR_NONEXISTENT_CLASS, - RZ_ANAL_CLASS_ERR_OTHER -} RzAnalClassErr; - -RZ_API void rz_anal_class_create(RzAnal *anal, const char *name); -RZ_API void rz_anal_class_delete(RzAnal *anal, const char *name); -RZ_API bool rz_anal_class_exists(RzAnal *anal, const char *name); -RZ_API SdbList *rz_anal_class_get_all(RzAnal *anal, bool sorted); -RZ_API void rz_anal_class_foreach(RzAnal *anal, SdbForeachCallback cb, void *user); -RZ_API RzAnalClassErr rz_anal_class_rename(RzAnal *anal, const char *old_name, const char *new_name); - -RZ_API void rz_anal_class_method_fini(RzAnalMethod *meth); -RZ_API RzAnalClassErr rz_anal_class_method_get(RzAnal *anal, const char *class_name, const char *meth_name, RzAnalMethod *meth); -RZ_API RzVector/**/ *rz_anal_class_method_get_all(RzAnal *anal, const char *class_name); -RZ_API RzAnalClassErr rz_anal_class_method_set(RzAnal *anal, const char *class_name, RzAnalMethod *meth); -RZ_API RzAnalClassErr rz_anal_class_method_rename(RzAnal *anal, const char *class_name, const char *old_meth_name, const char *new_meth_name); -RZ_API RzAnalClassErr rz_anal_class_method_delete(RzAnal *anal, const char *class_name, const char *meth_name); - -RZ_API void rz_anal_class_base_fini(RzAnalBaseClass *base); -RZ_API RzAnalClassErr rz_anal_class_base_get(RzAnal *anal, const char *class_name, const char *base_id, RzAnalBaseClass *base); -RZ_API RzVector/**/ *rz_anal_class_base_get_all(RzAnal *anal, const char *class_name); -RZ_API RzAnalClassErr rz_anal_class_base_set(RzAnal *anal, const char *class_name, RzAnalBaseClass *base); -RZ_API RzAnalClassErr rz_anal_class_base_delete(RzAnal *anal, const char *class_name, const char *base_id); - -RZ_API void rz_anal_class_vtable_fini(RzAnalVTable *vtable); -RZ_API RzAnalClassErr rz_anal_class_vtable_get(RzAnal *anal, const char *class_name, const char *vtable_id, RzAnalVTable *vtable); -RZ_API RzVector/**/ *rz_anal_class_vtable_get_all(RzAnal *anal, const char *class_name); -RZ_API RzAnalClassErr rz_anal_class_vtable_set(RzAnal *anal, const char *class_name, RzAnalVTable *vtable); -RZ_API RzAnalClassErr rz_anal_class_vtable_delete(RzAnal *anal, const char *class_name, const char *vtable_id); - -RZ_API void rz_anal_class_print(RzAnal *anal, const char *class_name, bool detailed); -RZ_API void rz_anal_class_json(RzAnal *anal, PJ *j, const char *class_name); -RZ_API void rz_anal_class_list(RzAnal *anal, int mode); -RZ_API void rz_anal_class_list_bases(RzAnal *anal, const char *class_name); -RZ_API void rz_anal_class_list_vtables(RzAnal *anal, const char *class_name); -RZ_API void rz_anal_class_list_vtable_offset_functions(RzAnal *anal, const char *class_name, ut64 offset); -RZ_API RzGraph/**/ *rz_anal_class_get_inheritance_graph(RzAnal *anal); - -RZ_API RzAnalEsilCFG *rz_anal_esil_cfg_expr(RzAnalEsilCFG *cfg, RzAnal *anal, const ut64 off, char *expr); -RZ_API RzAnalEsilCFG *rz_anal_esil_cfg_op(RzAnalEsilCFG *cfg, RzAnal *anal, RzAnalOp *op); -RZ_API void rz_anal_esil_cfg_merge_blocks(RzAnalEsilCFG *cfg); -RZ_API void rz_anal_esil_cfg_free(RzAnalEsilCFG *cfg); - -RZ_API RzAnalEsilDFGNode *rz_anal_esil_dfg_node_new (RzAnalEsilDFG *edf, const char *c); -RZ_API RzAnalEsilDFG *rz_anal_esil_dfg_new(RzReg *regs); -RZ_API void rz_anal_esil_dfg_free(RzAnalEsilDFG *dfg); -RZ_API RzAnalEsilDFG *rz_anal_esil_dfg_expr(RzAnal *anal, RzAnalEsilDFG *dfg, const char *expr); -RZ_API RzStrBuf *rz_anal_esil_dfg_filter(RzAnalEsilDFG *dfg, const char *reg); -RZ_API RzStrBuf *rz_anal_esil_dfg_filter_expr(RzAnal *anal, const char *expr, const char *reg); -RZ_API RzList *rz_anal_types_from_fcn(RzAnal *anal, RzAnalFunction *fcn); - -RZ_API RzAnalBaseType *rz_anal_get_base_type(RzAnal *anal, const char *name); -RZ_API void rz_parse_pdb_types(const RzAnal *anal, const RzPdb *pdb); -RZ_API void rz_anal_save_base_type(const RzAnal *anal, const RzAnalBaseType *type); -RZ_API void rz_anal_base_type_free(RzAnalBaseType *type); -RZ_API RzAnalBaseType *rz_anal_base_type_new(RzAnalBaseTypeKind kind); -RZ_API void rz_anal_dwarf_process_info(const RzAnal *anal, RzAnalDwarfContext *ctx); -RZ_API void rz_anal_dwarf_integrate_functions(RzAnal *anal, RzFlag *flags, Sdb *dwarf_sdb); - -/* serialize */ -RZ_API void rz_serialize_anal_case_op_save(RZ_NONNULL PJ *j, RZ_NONNULL RzAnalCaseOp *op); -RZ_API void rz_serialize_anal_switch_op_save(RZ_NONNULL PJ *j, RZ_NONNULL RzAnalSwitchOp *op); -RZ_API RzAnalSwitchOp *rz_serialize_anal_switch_op_load(RZ_NONNULL const RJson *json); - -typedef void *RzSerializeAnalDiffParser; -RZ_API RzSerializeAnalDiffParser rz_serialize_anal_diff_parser_new(void); -RZ_API void rz_serialize_anal_diff_parser_free(RzSerializeAnalDiffParser parser); -RZ_API RZ_NULLABLE RzAnalDiff *rz_serialize_anal_diff_load(RZ_NONNULL RzSerializeAnalDiffParser parser, RZ_NONNULL const RJson *json); -RZ_API void rz_serialize_anal_diff_save(RZ_NONNULL PJ *j, RZ_NONNULL RzAnalDiff *diff); -RZ_API void rz_serialize_anal_blocks_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal); - -/** - * RzAnal must not contain any blocks when calling this function! - * All loaded blocks will have a ref of 1 after this function and should be unrefd once after loading functions. - */ -RZ_API bool rz_serialize_anal_blocks_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal, RzSerializeAnalDiffParser diff_parser, RZ_NULLABLE RzSerializeResultInfo *res); - -typedef void *RzSerializeAnalVarParser; -RZ_API RzSerializeAnalVarParser rz_serialize_anal_var_parser_new(void); -RZ_API void rz_serialize_anal_var_parser_free(RzSerializeAnalVarParser parser); -RZ_API RZ_NULLABLE RzAnalVar *rz_serialize_anal_var_load(RZ_NONNULL RzAnalFunction *fcn, RZ_NONNULL RzSerializeAnalVarParser parser, RZ_NONNULL const RJson *json); - -RZ_API void rz_serialize_anal_functions_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal); -RZ_API bool rz_serialize_anal_functions_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal, RzSerializeAnalDiffParser diff_parser, RZ_NULLABLE RzSerializeResultInfo *res); -RZ_API void rz_serialize_anal_xrefs_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal); -RZ_API bool rz_serialize_anal_xrefs_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal, RZ_NULLABLE RzSerializeResultInfo *res); -RZ_API void rz_serialize_anal_meta_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal); -RZ_API bool rz_serialize_anal_meta_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal, RZ_NULLABLE RzSerializeResultInfo *res); -RZ_API void rz_serialize_anal_hints_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal); -RZ_API bool rz_serialize_anal_hints_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal, RZ_NULLABLE RzSerializeResultInfo *res); -RZ_API void rz_serialize_anal_classes_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal); -RZ_API bool rz_serialize_anal_classes_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal, RZ_NULLABLE RzSerializeResultInfo *res); -RZ_API void rz_serialize_anal_types_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal); -RZ_API bool rz_serialize_anal_types_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal, RZ_NULLABLE RzSerializeResultInfo *res); -RZ_API void rz_serialize_anal_sign_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal); -RZ_API bool rz_serialize_anal_sign_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal, RZ_NULLABLE RzSerializeResultInfo *res); -RZ_API void rz_serialize_anal_imports_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal); -RZ_API bool rz_serialize_anal_imports_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal, RZ_NULLABLE RzSerializeResultInfo *res); -RZ_API void rz_serialize_anal_pin_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal); -RZ_API bool rz_serialize_anal_pin_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal, RZ_NULLABLE RzSerializeResultInfo *res); -RZ_API void rz_serialize_anal_cc_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal); -RZ_API bool rz_serialize_anal_cc_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal, RZ_NULLABLE RzSerializeResultInfo *res); - -RZ_API void rz_serialize_anal_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal); -RZ_API bool rz_serialize_anal_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnal *anal, RZ_NULLABLE RzSerializeResultInfo *res); - -/* plugin pointers */ -extern RzAnalPlugin rz_anal_plugin_null; -extern RzAnalPlugin rz_anal_plugin_6502; -extern RzAnalPlugin rz_anal_plugin_6502_cs; -extern RzAnalPlugin rz_anal_plugin_8051; -extern RzAnalPlugin rz_anal_plugin_amd29k; -extern RzAnalPlugin rz_anal_plugin_arc; -extern RzAnalPlugin rz_anal_plugin_arm_cs; -extern RzAnalPlugin rz_anal_plugin_arm_gnu; -extern RzAnalPlugin rz_anal_plugin_avr; -extern RzAnalPlugin rz_anal_plugin_bf; -extern RzAnalPlugin rz_anal_plugin_chip8; -extern RzAnalPlugin rz_anal_plugin_cr16; -extern RzAnalPlugin rz_anal_plugin_cris; -extern RzAnalPlugin rz_anal_plugin_dalvik; -extern RzAnalPlugin rz_anal_plugin_ebc; -extern RzAnalPlugin rz_anal_plugin_gb; -extern RzAnalPlugin rz_anal_plugin_h8300; -extern RzAnalPlugin rz_anal_plugin_hexagon; -extern RzAnalPlugin rz_anal_plugin_i4004; -extern RzAnalPlugin rz_anal_plugin_i8080; -extern RzAnalPlugin rz_anal_plugin_java; -extern RzAnalPlugin rz_anal_plugin_m68k_cs; -extern RzAnalPlugin rz_anal_plugin_m680x_cs; -extern RzAnalPlugin rz_anal_plugin_malbolge; -extern RzAnalPlugin rz_anal_plugin_mcore; -extern RzAnalPlugin rz_anal_plugin_mips_cs; -extern RzAnalPlugin rz_anal_plugin_mips_gnu; -extern RzAnalPlugin rz_anal_plugin_msp430; -extern RzAnalPlugin rz_anal_plugin_nios2; -extern RzAnalPlugin rz_anal_plugin_or1k; -extern RzAnalPlugin rz_anal_plugin_pic; -extern RzAnalPlugin rz_anal_plugin_ppc_cs; -extern RzAnalPlugin rz_anal_plugin_ppc_gnu; -extern RzAnalPlugin rz_anal_plugin_propeller; -extern RzAnalPlugin rz_anal_plugin_riscv; -extern RzAnalPlugin rz_anal_plugin_riscv_cs; -extern RzAnalPlugin rz_anal_plugin_rsp; -extern RzAnalPlugin rz_anal_plugin_sh; -extern RzAnalPlugin rz_anal_plugin_snes; -extern RzAnalPlugin rz_anal_plugin_sparc_cs; -extern RzAnalPlugin rz_anal_plugin_sparc_gnu; -extern RzAnalPlugin rz_anal_plugin_sysz; -extern RzAnalPlugin rz_anal_plugin_tms320; -extern RzAnalPlugin rz_anal_plugin_tms320c64x; -extern RzAnalPlugin rz_anal_plugin_tricore; -extern RzAnalPlugin rz_anal_plugin_v810; -extern RzAnalPlugin rz_anal_plugin_v850; -extern RzAnalPlugin rz_anal_plugin_vax; -extern RzAnalPlugin rz_anal_plugin_wasm; -extern RzAnalPlugin rz_anal_plugin_ws; -extern RzAnalPlugin rz_anal_plugin_x86; -extern RzAnalPlugin rz_anal_plugin_x86_cs; -extern RzAnalPlugin rz_anal_plugin_x86_im; -extern RzAnalPlugin rz_anal_plugin_x86_simple; -extern RzAnalPlugin rz_anal_plugin_x86_udis; -extern RzAnalPlugin rz_anal_plugin_xap; -extern RzAnalPlugin rz_anal_plugin_xcore_cs; -extern RzAnalPlugin rz_anal_plugin_xtensa; -extern RzAnalPlugin rz_anal_plugin_z80; -extern RzAnalPlugin rz_anal_plugin_pyc; -#ifdef __cplusplus -} -#endif - -#endif -#endif diff --git a/librz/include/rz_analysis.h b/librz/include/rz_analysis.h new file mode 100644 index 0000000000..7046203b6e --- /dev/null +++ b/librz/include/rz_analysis.h @@ -0,0 +1,2252 @@ +/* rizin - LGPL - Copyright 2009-2020 - nibble, pancake, xvilka */ + +#ifndef RZ_ANALYSIS_H +#define RZ_ANALYSIS_H + +/* use old refs and function storage */ +// still required by core in lot of places +#define USE_VARSUBS 0 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define esilprintf(op, fmt, ...) rz_strbuf_setf (&op->esil, fmt, ##__VA_ARGS__) + +#ifdef __cplusplus +extern "C" { +#endif + +RZ_LIB_VERSION_HEADER(rz_analysis); + +/* dwarf processing context */ +typedef struct rz_analysis_dwarf_context { + const RzBinDwarfDebugInfo *info; + HtUP/**/ *loc; + // const RzBinDwarfCfa *cfa; TODO +} RzAnalysisDwarfContext; + +// TODO: save memory2 : fingerprints must be pointers to a buffer +// containing a dupped file in memory + +/* save memory: + bb_has_ops=1 -> 600M + bb_has_ops=0 -> 350MB + */ + +typedef struct { + struct rz_analysis_t *analysis; + int type; + int rad; + SdbForeachCallback cb; + void *user; + int count; + struct rz_analysis_function_t *fcn; + PJ *pj; +} RzAnalysisMetaUserItem; + +typedef struct rz_analysis_range_t { + ut64 from; + ut64 to; + int bits; + ut64 rb_max_addr; + RBNode rb; +} RzAnalysisRange; + +#define RZ_ANAL_GET_OFFSET(x,y,z) \ + (x && x->binb.bin && x->binb.get_offset)? \ + x->binb.get_offset (x->binb.bin, y, z): -1 +enum { + RZ_ANAL_DATA_TYPE_NULL = 0, + RZ_ANAL_DATA_TYPE_UNKNOWN = 1, + RZ_ANAL_DATA_TYPE_STRING = 2, + RZ_ANAL_DATA_TYPE_WIDE_STRING = 3, + RZ_ANAL_DATA_TYPE_POINTER = 4, + RZ_ANAL_DATA_TYPE_NUMBER = 5, + RZ_ANAL_DATA_TYPE_INVALID = 6, + RZ_ANAL_DATA_TYPE_HEADER = 7, + RZ_ANAL_DATA_TYPE_SEQUENCE = 8, + RZ_ANAL_DATA_TYPE_PATTERN = 9, +}; + +// used from core/analysis.c +#define RZ_ANAL_ADDR_TYPE_EXEC 1 +#define RZ_ANAL_ADDR_TYPE_READ 1 << 1 +#define RZ_ANAL_ADDR_TYPE_WRITE 1 << 2 +#define RZ_ANAL_ADDR_TYPE_FLAG 1 << 3 +#define RZ_ANAL_ADDR_TYPE_FUNC 1 << 4 +#define RZ_ANAL_ADDR_TYPE_HEAP 1 << 5 +#define RZ_ANAL_ADDR_TYPE_STACK 1 << 6 +#define RZ_ANAL_ADDR_TYPE_REG 1 << 7 +#define RZ_ANAL_ADDR_TYPE_PROGRAM 1 << 8 +#define RZ_ANAL_ADDR_TYPE_LIBRARY 1 << 9 +#define RZ_ANAL_ADDR_TYPE_ASCII 1 << 10 +#define RZ_ANAL_ADDR_TYPE_SEQUENCE 1 << 11 + +#define RZ_ANAL_ARCHINFO_MIN_OP_SIZE 0 +#define RZ_ANAL_ARCHINFO_MAX_OP_SIZE 1 +#define RZ_ANAL_ARCHINFO_ALIGN 2 +#define RZ_ANAL_ARCHINFO_DATA_ALIGN 4 + +/* copypaste from rz_asm.h */ + +#define RZ_ANAL_GET_OFFSET(x,y,z) \ + (x && x->binb.bin && x->binb.get_offset)? \ + x->binb.get_offset (x->binb.bin, y, z): -1 + +#define RZ_ANAL_GET_NAME(x,y,z) \ + (x && x->binb.bin && x->binb.get_name)? \ + x->binb.get_name (x->binb.bin, y, z): NULL + +/* type = (RZ_ANAL_VAR_TYPE_BYTE & RZ_ANAL_VAR_TYPE_SIZE_MASK) | + * ( RANAL_VAR_TYPE_SIGNED & RANAL_VAR_TYPE_SIGN_MASK) | + * ( RANAL_VAR_TYPE_CONST & RANAL_VAR_TYPE_MODIFIER_MASK) + */ +typedef struct rz_analysis_type_var_t { + char *name; + int index; + int scope; + ut16 type; // contain (type || signedness || modifier) + ut8 size; + union { + ut8 v8; + ut16 v16; + ut32 v32; + ut64 v64; + } value; +} RzAnalysisTypeVar; + +typedef struct rz_analysis_type_ptr_t { + char *name; + ut16 type; // contain (type || signedness || modifier) + ut8 size; + union { + ut8 v8; + ut16 v16; + ut32 v32; + ut64 v64; + } value; +} RzAnalysisTypePtr; + +typedef struct rz_analysis_type_array_t { + char *name; + ut16 type; // contain (type || signedness || modifier) + ut8 size; + ut64 count; + union { + ut8 *v8; + ut16 *v16; + ut32 *v32; + ut64 *v64; + } value; +} RzAnalysisTypeArray; + +typedef struct rz_analysis_type_struct_t RzAnalysisTypeStruct; +typedef struct rz_analysis_type_t RzAnalysisType; + +struct rz_analysis_type_struct_t { + char *name; + ut8 type; + ut32 size; + void *parent; + RzAnalysisType *items; +}; + +typedef struct rz_analysis_type_union_t { + char *name; + ut8 type; + ut32 size; + void *parent; + RzAnalysisType *items; +} RzAnalysisTypeUnion; + +typedef struct rz_analysis_type_alloca_t { + long address; + long size; + void *parent; + RzAnalysisType *items; +} RzAnalysisTypeAlloca; + +enum { + RZ_ANAL_FQUALIFIER_NONE = 0, + RZ_ANAL_FQUALIFIER_STATIC = 1, + RZ_ANAL_FQUALIFIER_VOLATILE = 2, + RZ_ANAL_FQUALIFIER_INLINE = 3, + RZ_ANAL_FQUALIFIER_NAKED = 4, + RZ_ANAL_FQUALIFIER_VIRTUAL = 5, +}; + +/*--------------------Function Conventions-----------*/ +//XXX don't use them in the future +#define RZ_ANAL_CC_TYPE_STDCALL 0 +#define RZ_ANAL_CC_TYPE_PASCAL 1 +#define RZ_ANAL_CC_TYPE_FASTCALL 'A' // syscall +#define RZ_ANAL_CC_TYPE_SYSV 8 +#define RZ_ANAL_CC_MAXARG 16 + +enum { + RZ_ANAL_FCN_TYPE_NULL = 0, + RZ_ANAL_FCN_TYPE_FCN = 1 << 0, + RZ_ANAL_FCN_TYPE_LOC = 1 << 1, + RZ_ANAL_FCN_TYPE_SYM = 1 << 2, + RZ_ANAL_FCN_TYPE_IMP = 1 << 3, + RZ_ANAL_FCN_TYPE_INT = 1 << 4, /* privileged function - ends with iret/reti/.. */ + RZ_ANAL_FCN_TYPE_ROOT = 1 << 5, /* matching flag */ + RZ_ANAL_FCN_TYPE_ANY = -1 /* all the bits set */ +}; + +#define RzAnalysisBlock struct rz_analysis_bb_t + +enum { + RZ_ANAL_DIFF_TYPE_NULL = 0, + RZ_ANAL_DIFF_TYPE_MATCH = 'm', + RZ_ANAL_DIFF_TYPE_UNMATCH = 'u' +}; + +typedef struct rz_analysis_enum_case_t { + char *name; + int val; +} RzAnalysisEnumCase; + +typedef struct rz_analysis_struct_member_t { + char *name; + char *type; + size_t offset; // in bytes + size_t size; // in bits? +} RzAnalysisStructMember; + +typedef struct rz_analysis_union_member_t { + char *name; + char *type; + size_t offset; // in bytes + size_t size; // in bits? +} RzAnalysisUnionMember; + +typedef enum { + RZ_ANAL_BASE_TYPE_KIND_STRUCT, + RZ_ANAL_BASE_TYPE_KIND_UNION, + RZ_ANAL_BASE_TYPE_KIND_ENUM, + RZ_ANAL_BASE_TYPE_KIND_TYPEDEF, // probably temporary addition, dev purposes + RZ_ANAL_BASE_TYPE_KIND_ATOMIC, // For real atomic base types +} RzAnalysisBaseTypeKind; + +typedef struct rz_analysis_base_type_struct_t { + RzVector/**/ members; +} RzAnalysisBaseTypeStruct; + +typedef struct rz_analysis_base_type_union_t { + RzVector/**/ members; +} RzAnalysisBaseTypeUnion; + +typedef struct rz_analysis_base_type_enum_t { + RzVector/* bits 0) (set-bits bits)) + int type; + const char *cc; // calling convention, should come from RzAnalysis.constpool + ut64 addr; + HtUP/**/ *labels; + HtPP/**/ *label_addrs; + RzPVector vars; + HtUP/*>*/ *inst_vars; // offset of instructions => the variables they access + ut64 reg_save_area; // size of stack area pre-reserved for saving registers + st64 bp_off; // offset of bp inside owned stack frame + st64 stack; // stack frame size + int maxstack; + int ninstr; + bool folded; + bool is_pure; + bool is_variadic; + bool has_changed; // true if function may have changed since last anaysis TODO: set this attribute where necessary + bool bp_frame; + bool is_noreturn; // true if function does not return + ut8 *fingerprint; // TODO: make is fuzzy and smarter + size_t fingerprint_size; + RzAnalysisDiff *diff; + RzList *bbs; // TODO: should be RzPVector + RzAnalysisFcnMeta meta; + RzList *imports; // maybe bound to class? + struct rz_analysis_t *analysis; // this function is associated with this instance +} RzAnalysisFunction; + +typedef struct rz_analysis_func_arg_t { + const char *name; + const char *fmt; + const char *cc_source; + char *orig_c_type; + char *c_type; + ut64 size; + ut64 src; //Function-call argument value or pointer to it +} RzAnalysisFuncArg; + +struct rz_analysis_type_t { + char *name; + ut32 type; + ut32 size; + RzList *content; +}; + +typedef enum { + RZ_META_TYPE_ANY = -1, + RZ_META_TYPE_DATA = 'd', + RZ_META_TYPE_CODE = 'c', + RZ_META_TYPE_STRING = 's', + RZ_META_TYPE_FORMAT = 'f', + RZ_META_TYPE_MAGIC = 'm', + RZ_META_TYPE_HIDE = 'h', + RZ_META_TYPE_COMMENT = 'C', + RZ_META_TYPE_RUN = 'r', + RZ_META_TYPE_HIGHLIGHT = 'H', + RZ_META_TYPE_VARTYPE = 't', +} RzAnalysisMetaType; + +/* meta */ +typedef struct rz_analysis_meta_item_t { + RzAnalysisMetaType type; + int subtype; + char *str; + const RzSpace *space; +} RzAnalysisMetaItem; + +// anal +typedef enum { + RZ_ANAL_OP_FAMILY_UNKNOWN = -1, + RZ_ANAL_OP_FAMILY_CPU = 0, /* normal cpu instruction */ + RZ_ANAL_OP_FAMILY_FPU, /* fpu (floating point) */ + RZ_ANAL_OP_FAMILY_MMX, /* multimedia instruction (packed data) */ + RZ_ANAL_OP_FAMILY_SSE, /* extended multimedia instruction (packed data) */ + RZ_ANAL_OP_FAMILY_PRIV, /* privileged instruction */ + RZ_ANAL_OP_FAMILY_CRYPTO, /* cryptographic instructions */ + RZ_ANAL_OP_FAMILY_THREAD, /* thread/lock/sync instructions */ + RZ_ANAL_OP_FAMILY_VIRT, /* virtualization instructions */ + RZ_ANAL_OP_FAMILY_SECURITY, /* security instructions */ + RZ_ANAL_OP_FAMILY_IO, /* IO instructions (i.e. IN/OUT) */ + RZ_ANAL_OP_FAMILY_LAST +} RzAnalysisOpFamily; + +#if 0 +On x86 according to Wikipedia + + Prefix group 1 + 0xF0: LOCK prefix + 0xF2: REPNE/REPNZ prefix + 0xF3: REP or REPE/REPZ prefix + Prefix group 2 + 0x2E: CS segment override + 0x36: SS segment override + 0x3E: DS segment override + 0x26: ES segment override + 0x64: FS segment override + 0x65: GS segment override + 0x2E: Branch not taken (hinting) + 0x3E: Branch taken + Prefix group 3 + 0x66: Operand-size override prefix + Prefix group 4 + 0x67: Address-size override prefix +#endif + typedef enum { + RZ_ANAL_OP_PREFIX_COND = 1, + RZ_ANAL_OP_PREFIX_REP = 1<<1, + RZ_ANAL_OP_PREFIX_REPNE = 1<<2, + RZ_ANAL_OP_PREFIX_LOCK = 1<<3, + RZ_ANAL_OP_PREFIX_LIKELY = 1<<4, + RZ_ANAL_OP_PREFIX_UNLIKELY = 1<<5 + /* TODO: add segment override typemods? */ + } RzAnalysisOpPrefix; + +// XXX: this definition is plain wrong. use enum or empower bits +#define RZ_ANAL_OP_TYPE_MASK 0x8000ffff +#define RZ_ANAL_OP_HINT_MASK 0xf0000000 +typedef enum { + RZ_ANAL_OP_TYPE_COND = 0x80000000, // TODO must be moved to prefix? + //TODO: MOVE TO PREFIX .. it is used by anal_java.. must be updated + RZ_ANAL_OP_TYPE_REP = 0x40000000, /* repeats next instruction N times */ + RZ_ANAL_OP_TYPE_MEM = 0x20000000, // TODO must be moved to prefix? + RZ_ANAL_OP_TYPE_REG = 0x10000000, // operand is a register + RZ_ANAL_OP_TYPE_IND = 0x08000000, // operand is indirect + RZ_ANAL_OP_TYPE_NULL = 0, + RZ_ANAL_OP_TYPE_JMP = 1, /* mandatory jump */ + RZ_ANAL_OP_TYPE_UJMP = 2, /* unknown jump (register or so) */ + RZ_ANAL_OP_TYPE_RJMP = RZ_ANAL_OP_TYPE_REG | RZ_ANAL_OP_TYPE_UJMP, + RZ_ANAL_OP_TYPE_IJMP = RZ_ANAL_OP_TYPE_IND | RZ_ANAL_OP_TYPE_UJMP, + RZ_ANAL_OP_TYPE_IRJMP = RZ_ANAL_OP_TYPE_IND | RZ_ANAL_OP_TYPE_REG | RZ_ANAL_OP_TYPE_UJMP, + RZ_ANAL_OP_TYPE_CJMP = RZ_ANAL_OP_TYPE_COND | RZ_ANAL_OP_TYPE_JMP, /* conditional jump */ + RZ_ANAL_OP_TYPE_RCJMP = RZ_ANAL_OP_TYPE_REG | RZ_ANAL_OP_TYPE_CJMP, /* conditional jump register */ + RZ_ANAL_OP_TYPE_MJMP = RZ_ANAL_OP_TYPE_MEM | RZ_ANAL_OP_TYPE_JMP, /* memory jump */ + RZ_ANAL_OP_TYPE_MCJMP = RZ_ANAL_OP_TYPE_MEM | RZ_ANAL_OP_TYPE_CJMP, /* memory conditional jump */ + RZ_ANAL_OP_TYPE_UCJMP = RZ_ANAL_OP_TYPE_COND | RZ_ANAL_OP_TYPE_UJMP, /* conditional unknown jump */ + RZ_ANAL_OP_TYPE_CALL = 3, /* call to subroutine (branch+link) */ + RZ_ANAL_OP_TYPE_UCALL = 4, /* unknown call (register or so) */ + RZ_ANAL_OP_TYPE_RCALL = RZ_ANAL_OP_TYPE_REG | RZ_ANAL_OP_TYPE_UCALL, + RZ_ANAL_OP_TYPE_ICALL = RZ_ANAL_OP_TYPE_IND | RZ_ANAL_OP_TYPE_UCALL, + RZ_ANAL_OP_TYPE_IRCALL= RZ_ANAL_OP_TYPE_IND | RZ_ANAL_OP_TYPE_REG | RZ_ANAL_OP_TYPE_UCALL, + RZ_ANAL_OP_TYPE_CCALL = RZ_ANAL_OP_TYPE_COND | RZ_ANAL_OP_TYPE_CALL, /* conditional call to subroutine */ + RZ_ANAL_OP_TYPE_UCCALL= RZ_ANAL_OP_TYPE_COND | RZ_ANAL_OP_TYPE_UCALL, /* conditional unknown call */ + RZ_ANAL_OP_TYPE_RET = 5, /* returns from subroutine */ + RZ_ANAL_OP_TYPE_CRET = RZ_ANAL_OP_TYPE_COND | RZ_ANAL_OP_TYPE_RET, /* conditional return from subroutine */ + RZ_ANAL_OP_TYPE_ILL = 6, /* illegal instruction // trap */ + RZ_ANAL_OP_TYPE_UNK = 7, /* unknown opcode type */ + RZ_ANAL_OP_TYPE_NOP = 8, /* does nothing */ + RZ_ANAL_OP_TYPE_MOV = 9, /* register move */ + RZ_ANAL_OP_TYPE_CMOV = 9 | RZ_ANAL_OP_TYPE_COND, /* conditional move */ + RZ_ANAL_OP_TYPE_TRAP = 10, /* it's a trap! */ + RZ_ANAL_OP_TYPE_SWI = 11, /* syscall, software interrupt */ + RZ_ANAL_OP_TYPE_CSWI = 11 | RZ_ANAL_OP_TYPE_COND, /* syscall, software interrupt */ + RZ_ANAL_OP_TYPE_UPUSH = 12, /* unknown push of data into stack */ + RZ_ANAL_OP_TYPE_RPUSH = RZ_ANAL_OP_TYPE_UPUSH | RZ_ANAL_OP_TYPE_REG, /* push register */ + RZ_ANAL_OP_TYPE_PUSH = 13, /* push value into stack */ + RZ_ANAL_OP_TYPE_POP = 14, /* pop value from stack to register */ + RZ_ANAL_OP_TYPE_CMP = 15, /* compare something */ + RZ_ANAL_OP_TYPE_ACMP = 16, /* compare via and */ + RZ_ANAL_OP_TYPE_ADD = 17, + RZ_ANAL_OP_TYPE_SUB = 18, + RZ_ANAL_OP_TYPE_IO = 19, + RZ_ANAL_OP_TYPE_MUL = 20, + RZ_ANAL_OP_TYPE_DIV = 21, + RZ_ANAL_OP_TYPE_SHR = 22, + RZ_ANAL_OP_TYPE_SHL = 23, + RZ_ANAL_OP_TYPE_SAL = 24, + RZ_ANAL_OP_TYPE_SAR = 25, + RZ_ANAL_OP_TYPE_OR = 26, + RZ_ANAL_OP_TYPE_AND = 27, + RZ_ANAL_OP_TYPE_XOR = 28, + RZ_ANAL_OP_TYPE_NOR = 29, + RZ_ANAL_OP_TYPE_NOT = 30, + RZ_ANAL_OP_TYPE_STORE = 31, /* store from register to memory */ + RZ_ANAL_OP_TYPE_LOAD = 32, /* load from memory to register */ + RZ_ANAL_OP_TYPE_LEA = 33, /* TODO add ulea */ + RZ_ANAL_OP_TYPE_LEAVE = 34, + RZ_ANAL_OP_TYPE_ROR = 35, + RZ_ANAL_OP_TYPE_ROL = 36, + RZ_ANAL_OP_TYPE_XCHG = 37, + RZ_ANAL_OP_TYPE_MOD = 38, + RZ_ANAL_OP_TYPE_SWITCH = 39, + RZ_ANAL_OP_TYPE_CASE = 40, + RZ_ANAL_OP_TYPE_LENGTH = 41, + RZ_ANAL_OP_TYPE_CAST = 42, + RZ_ANAL_OP_TYPE_NEW = 43, + RZ_ANAL_OP_TYPE_ABS = 44, + RZ_ANAL_OP_TYPE_CPL = 45, /* complement */ + RZ_ANAL_OP_TYPE_CRYPTO = 46, + RZ_ANAL_OP_TYPE_SYNC = 47, + //RZ_ANAL_OP_TYPE_DEBUG = 43, // monitor/trace/breakpoint +#if 0 + RZ_ANAL_OP_TYPE_PRIV = 40, /* privileged instruction */ + RZ_ANAL_OP_TYPE_FPU = 41, /* floating point stuff */ +#endif +} _RzAnalysisOpType; + +typedef enum { + RZ_ANAL_OP_MASK_BASIC = 0, // Just fills basic op info , it's fast + RZ_ANAL_OP_MASK_ESIL = 1, // It fills RzAnalysisop->esil info + RZ_ANAL_OP_MASK_VAL = 2, // It fills RzAnalysisop->dst/src info + RZ_ANAL_OP_MASK_HINT = 4, // It calls rz_analysis_op_hint to override anal options + RZ_ANAL_OP_MASK_OPEX = 8, // It fills RzAnalysisop->opex info + RZ_ANAL_OP_MASK_DISASM = 16, // It fills RzAnalysisop->mnemonic // should be RzAnalysisOp->disasm // only from rz_core_analysis_op() + RZ_ANAL_OP_MASK_ALL = 1 | 2 | 4 | 8 | 16 +} RzAnalysisOpMask; + +/* TODO: what to do with signed/unsigned conditionals? */ +typedef enum { + RZ_ANAL_COND_AL = 0, // Always executed (no condition) + RZ_ANAL_COND_EQ, // Equal + RZ_ANAL_COND_NE, // Not equal + RZ_ANAL_COND_GE, // Greater or equal + RZ_ANAL_COND_GT, // Greater than + RZ_ANAL_COND_LE, // Less or equal + RZ_ANAL_COND_LT, // Less than + RZ_ANAL_COND_NV, // Never executed must be a nop? :D + RZ_ANAL_COND_HS, // Carry set >, ==, or unordered + RZ_ANAL_COND_LO, // Carry clear Less than + RZ_ANAL_COND_MI, // Minus, negative Less than + RZ_ANAL_COND_PL, // Plus, positive or zero >, ==, or unordered + RZ_ANAL_COND_VS, // Overflow Unordered + RZ_ANAL_COND_VC, // No overflow Not unordered + RZ_ANAL_COND_HI, // Unsigned higher Greater than, or unordered + RZ_ANAL_COND_LS // Unsigned lower or same Less than or equal +} _RzAnalysisCond; + +typedef enum { + RZ_ANAL_VAR_SCOPE_LOCAL = 0x01 +} _RzAnalysisVarScope; + +typedef enum { + RZ_ANAL_STACK_NULL = 0, + RZ_ANAL_STACK_NOP, + RZ_ANAL_STACK_INC, + RZ_ANAL_STACK_GET, + RZ_ANAL_STACK_SET, + RZ_ANAL_STACK_RESET, + RZ_ANAL_STACK_ALIGN, +} RzAnalysisStackOp; + +enum { + RZ_ANAL_REFLINE_TYPE_UTF8 = 1, + RZ_ANAL_REFLINE_TYPE_WIDE = 2, /* reflines have a space between them */ + RZ_ANAL_REFLINE_TYPE_MIDDLE_BEFORE = 4, /* do not consider starts/ends of + * reflines (used for comment lines before disasm) */ + RZ_ANAL_REFLINE_TYPE_MIDDLE_AFTER = 8 /* as above but for lines after disasm */ +}; + +enum { + RZ_ANAL_RET_NOP = 0, + RZ_ANAL_RET_ERROR = -1, + RZ_ANAL_RET_DUP = -2, + RZ_ANAL_RET_NEW = -3, + RZ_ANAL_RET_END = -4 +}; + +typedef struct rz_analysis_case_obj_t { + ut64 addr; + ut64 jump; + ut64 value; +} RzAnalysisCaseOp; + +typedef struct rz_analysis_switch_obj_t { + ut64 addr; + ut64 min_val; + ut64 def_val; + ut64 max_val; + RzList/**/ *cases; +} RzAnalysisSwitchOp; + +struct rz_analysis_t; +struct rz_analysis_bb_t; +typedef struct rz_analysis_callbacks_t { + int (*on_fcn_new) (struct rz_analysis_t *, void *user, RzAnalysisFunction *fcn); + int (*on_fcn_delete) (struct rz_analysis_t *, void *user, RzAnalysisFunction *fcn); + int (*on_fcn_rename) (struct rz_analysis_t *, void *user, RzAnalysisFunction *fcn, const char *oldname); + int (*on_fcn_bb_new) (struct rz_analysis_t *, void *user, RzAnalysisFunction *fcn, struct rz_analysis_bb_t *bb); +} RzAnalysisCallbacks; + +#define RZ_ANAL_ESIL_GOTO_LIMIT 4096 + +typedef struct rz_analysis_options_t { + int depth; + int graph_depth; + bool vars; //analysisyze local var and arguments + bool varname_stack; // name vars based on their offset in the stack + int cjmpref; + int jmpref; + int jmpabove; + bool ijmp; + bool jmpmid; // continue analysis after jmp into middle of insn + bool loads; + bool ignbithints; + int followdatarefs; + int searchstringrefs; + int followbrokenfcnsrefs; + int bb_max_size; + bool trycatch; + bool norevisit; + int afterjmp; // continue analysis after jmp eax or forward jmp // option + int recont; // continue on recurse analysis mode + int noncode; + int nopskip; // skip nops at the beginning of functions + int hpskip; // skip `mov reg,reg` and `lea reg,[reg]` + int jmptbl; // analyze jump tables + int nonull; + bool pushret; // analyze push+ret as jmp + bool armthumb; // + bool endsize; // chop function size which is known to be buggy but goodie too + bool delay; + int tailcall; + bool retpoline; +} RzAnalysisOptions; + +typedef enum { + RZ_ANAL_CPP_ABI_ITANIUM = 0, + RZ_ANAL_CPP_ABI_MSVC +} RzAnalysisCPPABI; + +typedef struct rz_analysis_hint_cb_t { + //add more cbs as needed + void (*on_bits) (struct rz_analysis_t *a, ut64 addr, int bits, bool set); +} RHintCb; + +typedef struct rz_analysis_t { + char *cpu; // anal.cpu + char *os; // asm.os + int bits; // asm.bits + int lineswidth; // asm.lines.width + int big_endian; // cfg.bigendian + int sleep; // anal.sleep, sleep some usecs before analyzing more (avoid 100% cpu usages) + RzAnalysisCPPABI cpp_abi; // anal.cpp.abi + void *user; + ut64 gp; // anal.gp, global pointer. used for mips. but can be used by other arches too in the future + RBTree bb_tree; // all basic blocks by address. They can overlap each other, but must never start at the same address. + RzList *fcns; + HtUP *ht_addr_fun; // address => function + HtPP *ht_name_fun; // name => function + RzReg *reg; + ut8 *last_disasm_reg; + RzSyscall *syscall; + int diff_ops; + double diff_thbb; + double diff_thfcn; + RzIOBind iob; + RzFlagBind flb; + RzFlagSet flg_class_set; + RzFlagGet flg_class_get; + RzFlagSet flg_fcn_set; + RzBinBind binb; // Set only from core when an analysis plugin is called. + RzCoreBind coreb; + int maxreflines; // asm.lines.maxref + int esil_goto_limit; // esil.gotolimit + int pcalign; // asm.pcalign + struct rz_analysis_esil_t *esil; + struct rz_analysis_plugin_t *cur; + RzAnalysisRange *limit; // anal.from, anal.to + RzList *plugins; + Sdb *sdb_types; + Sdb *sdb_fmts; + Sdb *sdb_zigns; + HtUP *dict_refs; + HtUP *dict_xrefs; + bool recursive_noreturn; // anal.rnr + RzSpaces zign_spaces; + char *zign_path; // dir.zigns + PrintfCallback cb_printf; + //moved from RzAnalysisFcn + Sdb *sdb; // root + Sdb *sdb_pins; + HtUP/*>*/ *addr_hints; // all hints that correspond to a single address + RBTree/**/ arch_hints; + RBTree/**/ bits_hints; + RHintCb hint_cbs; + RzIntervalTree meta; + RzSpaces meta_spaces; + Sdb *sdb_cc; // calling conventions + Sdb *sdb_classes; + Sdb *sdb_classes_attrs; + RzAnalysisCallbacks cb; + RzAnalysisOptions opt; + RzList *reflines; + //RzList *noreturn; + RzListComparator columnSort; + int stackptr; + bool (*log)(struct rz_analysis_t *analysis, const char *msg); + bool (*read_at)(struct rz_analysis_t *analysis, ut64 addr, ut8 *buf, int len); + bool verbose; + int seggrn; + RzFlagGetAtAddr flag_get; + RzEvent *ev; + RzList/**/ *imports; // global imports + SetU *visited; + RzStrConstPool constpool; + RzList *leaddrs; +} RzAnalysis; + +typedef enum rz_analysis_addr_hint_type_t { + RZ_ANAL_ADDR_HINT_TYPE_IMMBASE, + RZ_ANAL_ADDR_HINT_TYPE_JUMP, + RZ_ANAL_ADDR_HINT_TYPE_FAIL, + RZ_ANAL_ADDR_HINT_TYPE_STACKFRAME, + RZ_ANAL_ADDR_HINT_TYPE_PTR, + RZ_ANAL_ADDR_HINT_TYPE_NWORD, + RZ_ANAL_ADDR_HINT_TYPE_RET, + RZ_ANAL_ADDR_HINT_TYPE_NEW_BITS, + RZ_ANAL_ADDR_HINT_TYPE_SIZE, + RZ_ANAL_ADDR_HINT_TYPE_SYNTAX, + RZ_ANAL_ADDR_HINT_TYPE_OPTYPE, + RZ_ANAL_ADDR_HINT_TYPE_OPCODE, + RZ_ANAL_ADDR_HINT_TYPE_TYPE_OFFSET, + RZ_ANAL_ADDR_HINT_TYPE_ESIL, + RZ_ANAL_ADDR_HINT_TYPE_HIGH, + RZ_ANAL_ADDR_HINT_TYPE_VAL +} RzAnalysisAddrHintType; + +typedef struct rz_analysis_addr_hint_record_t { + RzAnalysisAddrHintType type; + union { + char *type_offset; + int nword; + ut64 jump; + ut64 fail; + int newbits; + int immbase; + ut64 ptr; + ut64 retval; + char *syntax; + char *opcode; + char *esil; + int optype; + ut64 size; + ut64 stackframe; + ut64 val; + }; +} RzAnalysisAddrHintRecord; + +typedef struct rz_analysis_hint_t { + ut64 addr; + ut64 ptr; + ut64 val; // used to hint jmp rax + ut64 jump; + ut64 fail; + ut64 ret; // hint for function ret values + char *arch; + char *opcode; + char *syntax; + char *esil; + char *offset; + ut32 type; + ut64 size; + int bits; + int new_bits; // change asm.bits after evaluating this instruction + int immbase; + bool high; // highlight hint + int nword; + ut64 stackframe; +} RzAnalysisHint; + +typedef RzAnalysisFunction *(* RzAnalysisGetFcnIn)(RzAnalysis *analysis, ut64 addr, int type); +typedef RzAnalysisHint *(* RzAnalysisGetHint)(RzAnalysis *analysis, ut64 addr); + +typedef struct rz_analysis_bind_t { + RzAnalysis *analysis; + RzAnalysisGetFcnIn get_fcn_in; + RzAnalysisGetHint get_hint; +} RzAnalysisBind; + +typedef const char *(*RzAnalysisLabelAt) (RzAnalysisFunction *fcn, ut64); + +typedef enum { + RZ_ANAL_VAR_KIND_REG = 'r', + RZ_ANAL_VAR_KIND_BPV = 'b', + RZ_ANAL_VAR_KIND_SPV = 's' +} RzAnalysisVarKind; + +#define VARPREFIX "var" +#define ARGPREFIX "arg" + +typedef enum { + RZ_ANAL_VAR_ACCESS_TYPE_PTR = 0, + RZ_ANAL_VAR_ACCESS_TYPE_READ = (1 << 0), + RZ_ANAL_VAR_ACCESS_TYPE_WRITE = (1 << 1) +} RzAnalysisVarAccessType; + +typedef struct rz_analysis_var_access_t { + const char *reg; // register used for access + st64 offset; // relative to the function's entrypoint + st64 stackptr; // delta added to register to get the var, e.g. [rbp - 0x10] + ut8 type; // RzAnalysisVarAccessType bits +} RzAnalysisVarAccess; + +typedef struct rz_analysis_var_constraint_t { + _RzAnalysisCond cond; + ut64 val; +} RzAnalysisVarConstraint; + +// generic for args and locals +typedef struct rz_analysis_var_t { + RzAnalysisFunction *fcn; + char *name; // name of the variable + char *type; // cparse type of the variable + RzAnalysisVarKind kind; + bool isarg; + int delta; /* delta offset inside stack frame */ + char *regname; // name of the register + RzVector/**/ accesses; // ordered by offset, touch this only through API or expect uaf + char *comment; + RzVector/**/ constraints; + + // below members are just for caching, TODO: remove them and do it better + int argnum; +} RzAnalysisVar; + +// Refers to a variable or a struct field inside a variable, only for varsub +RZ_DEPRECATE typedef struct rz_analysis_var_field_t { + char *name; + st64 delta; + bool field; +} RzAnalysisVarField; + +typedef enum { + RZ_ANAL_ACC_UNKNOWN = 0, + RZ_ANAL_ACC_R = (1 << 0), + RZ_ANAL_ACC_W = (1 << 1), +} RzAnalysisValueAccess; + +typedef enum { + RZ_ANAL_VAL_REG, + RZ_ANAL_VAL_MEM, + RZ_ANAL_VAL_IMM, +} RzAnalysisValueType; + +// base+reg+regdelta*mul+delta +typedef struct rz_analysis_value_t { + RzAnalysisValueType type; + RzAnalysisValueAccess access; + int absolute; // if true, unsigned cast is used + int memref; // is memory reference? which size? 1, 2 ,4, 8 + ut64 base ; // numeric address + st64 delta; // numeric delta + st64 imm; // immediate value + int mul; // multiplier (reg*4+base) + RzRegItem *seg; // segment selector register + RzRegItem *reg; // register / register base used (-1 if no reg) + RzRegItem *regdelta; // register index used (-1 if no reg) +} RzAnalysisValue; + +typedef enum { + RZ_ANAL_OP_DIR_READ = 1, + RZ_ANAL_OP_DIR_WRITE = 2, + RZ_ANAL_OP_DIR_EXEC = 4, + RZ_ANAL_OP_DIR_REF = 8, +} RzAnalysisOpDirection; + +typedef enum rz_analysis_data_type_t { + RZ_ANAL_DATATYPE_NULL = 0, + RZ_ANAL_DATATYPE_ARRAY, + RZ_ANAL_DATATYPE_OBJECT, // instance + RZ_ANAL_DATATYPE_STRING, + RZ_ANAL_DATATYPE_CLASS, + RZ_ANAL_DATATYPE_BOOLEAN, + RZ_ANAL_DATATYPE_INT16, + RZ_ANAL_DATATYPE_INT32, + RZ_ANAL_DATATYPE_INT64, + RZ_ANAL_DATATYPE_FLOAT, +} RzAnalysisDataType; + +typedef struct rz_analysis_op_t { + char *mnemonic; /* mnemonic.. it actually contains the args too, we should replace rasm with this */ + ut64 addr; /* address */ + ut32 type; /* type of opcode */ + RzAnalysisOpPrefix prefix; /* type of opcode prefix (rep,lock,..) */ + ut32 type2; /* used by java */ + RzAnalysisStackOp stackop; /* operation on stack? */ + _RzAnalysisCond cond; /* condition type */ + int size; /* size in bytes of opcode */ + int nopcode; /* number of bytes representing the opcode (not the arguments) TODO: find better name */ + int cycles; /* cpu-cycles taken by instruction */ + int failcycles; /* conditional cpu-cycles */ + RzAnalysisOpFamily family; /* family of opcode */ + int id; /* instruction id */ + bool eob; /* end of block (boolean) */ + bool sign; /* operates on signed values, false by default */ + /* Run N instructions before executing the current one */ + int delay; /* delay N slots (mips, ..)*/ + ut64 jump; /* true jmp */ + ut64 fail; /* false jmp */ + RzAnalysisOpDirection direction; + st64 ptr; /* reference to memory */ /* XXX signed? */ + ut64 val; /* reference to value */ /* XXX signed? */ + int ptrsize; /* f.ex: zero extends for 8, 16 or 32 bits only */ + st64 stackptr; /* stack pointer */ + int refptr; /* if (0) ptr = "reference" else ptr = "load memory of refptr bytes" */ + RzAnalysisValue *src[3]; + RzAnalysisValue *dst; + RzList *access; /* RzAnalysisValue access information */ + RzStrBuf esil; + RzStrBuf opex; + const char *reg; /* destination register */ + const char *ireg; /* register used for indirect memory computation*/ + int scale; + ut64 disp; + RzAnalysisSwitchOp *switch_op; + RzAnalysisHint hint; + RzAnalysisDataType datatype; +} RzAnalysisOp; + +#define RZ_ANAL_COND_SINGLE(x) (!x->arg[1] || x->arg[0]==x->arg[1]) + +typedef struct rz_analysis_cond_t { + int type; // filled by CJMP opcode + RzAnalysisValue *arg[2]; // filled by CMP opcode +} RzAnalysisCond; + +typedef struct rz_analysis_bb_t { + RBNode _rb; // private, node in the RBTree + ut64 _max_end; // private, augmented value for RBTree + + ut64 addr; + ut64 size; + ut64 jump; + ut64 fail; + bool traced; + bool folded; + ut32 colorize; + ut8 *fingerprint; + RzAnalysisDiff *diff; + RzAnalysisCond *cond; + RzAnalysisSwitchOp *switch_op; + ut16 *op_pos; // offsets of instructions in this block, count is ninstr - 1 (first is always 0) + ut8 *op_bytes; + ut8 *parent_reg_arena; + int op_pos_size; // size of the op_pos array + int ninstr; + int stackptr; + int parent_stackptr; + ut64 cmpval; + const char *cmpreg; + ut32 bbhash; // calculated with xxhash + + RzList *fcns; + RzAnalysis *analysis; + int ref; +#undef RzAnalysisBlock +} RzAnalysisBlock; + +typedef enum { + RZ_ANAL_REF_TYPE_NULL = 0, + RZ_ANAL_REF_TYPE_CODE = 'c', // code ref + RZ_ANAL_REF_TYPE_CALL = 'C', // code ref (call) + RZ_ANAL_REF_TYPE_DATA = 'd', // mem ref + RZ_ANAL_REF_TYPE_STRING='s' // string ref +} RzAnalysisRefType; + +typedef struct rz_analysis_ref_t { + ut64 addr; + ut64 at; + RzAnalysisRefType type; +} RzAnalysisRef; +RZ_API const char *rz_analysis_ref_type_tostring(RzAnalysisRefType t); + +/* represents a reference line from one address (from) to another (to) */ +typedef struct rz_analysis_refline_t { + ut64 from; + ut64 to; + int index; + int level; + int type; + int direction; +} RzAnalysisRefline; + +typedef struct rz_analysis_cycle_frame_t { + ut64 naddr; //next addr + RzList *hooks; + struct rz_analysis_cycle_frame_t *prev; +} RzAnalysisCycleFrame; + +typedef struct rz_analysis_cycle_hook_t { //rename ? + ut64 addr; + int cycles; +} RzAnalysisCycleHook; + +typedef struct rz_analysis_esil_word_t { + int type; + const char *str; +} RzAnalysisEsilWord; + +// only flags that affect control flow +enum { + RZ_ANAL_ESIL_FLAG_ZERO = 1, + RZ_ANAL_ESIL_FLAG_CARRY = 2, + RZ_ANAL_ESIL_FLAG_OVERFLOW = 4, + RZ_ANAL_ESIL_FLAG_PARITY = 8, + RZ_ANAL_ESIL_FLAG_SIGN = 16, + // ... +}; + +enum { + RZ_ANAL_TRAP_NONE = 0, + RZ_ANAL_TRAP_UNHANDLED = 1, + RZ_ANAL_TRAP_BREAKPOINT = 2, + RZ_ANAL_TRAP_DIVBYZERO = 3, + RZ_ANAL_TRAP_WRITE_ERR = 4, + RZ_ANAL_TRAP_READ_ERR = 5, + RZ_ANAL_TRAP_EXEC_ERR = 6, + RZ_ANAL_TRAP_INVALID = 7, + RZ_ANAL_TRAP_UNALIGNED = 8, + RZ_ANAL_TRAP_TODO = 9, + RZ_ANAL_TRAP_HALT = 10, +}; + +enum { + RZ_ANAL_ESIL_PARM_INVALID = 0, + RZ_ANAL_ESIL_PARM_REG, + RZ_ANAL_ESIL_PARM_NUM, +}; + +/* Constructs to convert from ESIL to REIL */ +#define FOREACHOP(GENERATE) \ +/* No Operation */ GENERATE(NOP) \ +/* Unknown/Undefined */ GENERATE(UNK) \ +/* Conditional Jump */ GENERATE(JCC) \ +/* Store Value to register */ GENERATE(STR) \ +/* Store value to memory */ GENERATE(STM) \ +/* Load value from memory */ GENERATE(LDM) \ +/* Addition */ GENERATE(ADD) \ +/* Subtraction */ GENERATE(SUB) \ +/* Negation */ GENERATE(NEG) \ +/* Multiplication */ GENERATE(MUL) \ +/* Division */ GENERATE(DIV) \ +/* Modulo */ GENERATE(MOD) \ +/* Signed Multiplication */ GENERATE(SMUL) \ +/* Sugned Division */ GENERATE(SDIV) \ +/* Signed Modulus */ GENERATE(SMOD) \ +/* Shift Left */ GENERATE(SHL) \ +/* Shift Right */ GENERATE(SHR) \ +/* Binary and */ GENERATE(AND) \ +/* Binary or */ GENERATE(OR) \ +/* Binary xor */ GENERATE(XOR) \ +/* Binary not */ GENERATE(NOT) \ +/* Equation */ GENERATE(EQ) \ +/* Less Than */ GENERATE(LT) + +#define MAKE_ENUM(OP) REIL_##OP, +#define REIL_OP_STRING(STRING) #STRING, + +typedef enum { + FOREACHOP(MAKE_ENUM) +} RzAnalysisReilOpcode; + +typedef enum { + ARG_REG, // CPU Register + ARG_TEMP, // Temporary register used by REIL + ARG_CONST, // Constant value + ARG_ESIL_INTERNAL, // Used to resolve ESIL internal flags + ARG_NONE // Operand not used by the instruction +} RzAnalysisReilArgType; + +// Arguments to a REIL instruction. +typedef struct rz_analysis_reil_arg { + RzAnalysisReilArgType type; // Type of the argument + ut8 size; // Size of the argument in bytes + char name[32]; // Name of the argument +} RzAnalysisReilArg; + +typedef struct rz_analysis_ref_char { + char *str; + char *cols; +} RzAnalysisRefStr; + +// Instruction arg1, arg2, arg3 +typedef struct rz_analysis_reil_inst { + RzAnalysisReilOpcode opcode; + RzAnalysisReilArg *arg[3]; +} RzAnalysisReilInst; + +typedef struct rz_analysis_reil { + char old[32]; // Used to compute flags. + char cur[32]; + ut8 lastsz; + ut64 reilNextTemp; // Used to store the index of the next REIL temp register to be used. + ut64 addr; // Used for instruction sequencing. Check esil2reil.c for details. + ut8 seq_num; // Incremented and used when noInc is set to 1. + int skip; + int cmd_count; + char if_buf[64]; + char pc[8]; +} RzAnalysisReil; + +// must be a char +#define ESIL_INTERNAL_PREFIX '$' +#define ESIL_STACK_NAME "esil.ram" +#define ESIL struct rz_analysis_esil_t + +typedef struct rz_analysis_esil_source_t { + ut32 id; + ut32 claimed; + void *content; +} RzAnalysisEsilSource; + +RZ_API void rz_analysis_esil_sources_init(ESIL *esil); +RZ_API ut32 rz_analysis_esil_load_source(ESIL *esil, const char *path); +RZ_API void *rz_analysis_esil_get_source(ESIL *esil, ut32 src_id); +RZ_API bool rz_analysis_esil_claim_source(ESIL *esil, ut32 src_id); +RZ_API void rz_analysis_esil_release_source(ESIL *esil, ut32 src_id); +RZ_API void rz_analysis_esil_sources_fini(ESIL *esil); + +typedef bool (*RzAnalysisEsilInterruptCB)(ESIL *esil, ut32 interrupt, void *user); + +typedef struct rz_analysis_esil_interrupt_handler_t { + const ut32 num; + const char* name; + void *(*init)(ESIL *esil); + RzAnalysisEsilInterruptCB cb; + void (*fini)(void *user); +} RzAnalysisEsilInterruptHandler; + +typedef struct rz_analysis_esil_interrupt_t { + RzAnalysisEsilInterruptHandler *handler; + void *user; + ut32 src_id; +} RzAnalysisEsilInterrupt; + +typedef struct rz_analysis_esil_change_reg_t { + int idx; + ut64 data; +} RzAnalysisEsilRegChange; + +typedef struct rz_analysis_esil_change_mem_t { + int idx; + ut8 data; +} RzAnalysisEsilMemChange; + +typedef struct rz_analysis_esil_trace_t { + int idx; + int end_idx; + HtUP *registers; + HtUP *memory; + RzRegArena *arena[RZ_REG_TYPE_LAST]; + ut64 stack_addr; + ut64 stack_size; + ut8 *stack_data; + //TODO remove `db` and reuse info above + Sdb *db; +} RzAnalysisEsilTrace; + +typedef int (*RzAnalysisEsilHookRegWriteCB)(ESIL *esil, const char *name, ut64 *val); + +typedef struct rz_analysis_esil_callbacks_t { + void *user; + /* callbacks */ + int (*hook_flag_read)(ESIL *esil, const char *flag, ut64 *num); + int (*hook_command)(ESIL *esil, const char *op); + int (*hook_mem_read)(ESIL *esil, ut64 addr, ut8 *buf, int len); + int (*mem_read)(ESIL *esil, ut64 addr, ut8 *buf, int len); + int (*hook_mem_write)(ESIL *esil, ut64 addr, const ut8 *buf, int len); + int (*mem_write)(ESIL *esil, ut64 addr, const ut8 *buf, int len); + int (*hook_reg_read)(ESIL *esil, const char *name, ut64 *res, int *size); + int (*reg_read)(ESIL *esil, const char *name, ut64 *res, int *size); + RzAnalysisEsilHookRegWriteCB hook_reg_write; + int (*reg_write)(ESIL *esil, const char *name, ut64 val); +} RzAnalysisEsilCallbacks; + +typedef struct rz_analysis_esil_t { + RzAnalysis *analysis; + char **stack; + ut64 addrmask; + int stacksize; + int stackptr; + ut32 skip; + int nowrite; + int iotrap; + int exectrap; + int repeat; + int parse_stop; + int parse_goto; + int parse_goto_count; + int verbose; + ut64 flags; + ut64 address; + ut64 stack_addr; + ut32 stack_size; + int delay; // mapped to $ds in ESIL + ut64 jump_target; // mapped to $jt in ESIL + int jump_target_set; // mapped to $js in ESIL + int trap; + ut32 trap_code; // extend into a struct to store more exception info? + // parity flag? done with cur + ut64 old; //used for carry-flagging and borrow-flagging + ut64 cur; //used for carry-flagging and borrow-flagging + ut8 lastsz; //in bits //used for signature-flag + /* native ops and custom ops */ + HtPP *ops; + char *current_opstr; + RzIDStorage *sources; + SdbMini *interrupts; + //this is a disgusting workaround, because we have no ht-like storage without magic keys, that you cannot use, with int-keys + RzAnalysisEsilInterrupt *intr0; + /* deep esil parsing fills this */ + Sdb *stats; + RzAnalysisEsilTrace *trace; + RzAnalysisEsilCallbacks cb; + RzAnalysisReil *Reil; + // this is so cursed, can we please remove external commands from esil internals. + // Function pointers are fine, but not commands + char *cmd_step; // rizin (external) command to run before a step is performed + char *cmd_step_out; // rizin (external) command to run after a step is performed + char *cmd_intr; // rizin (external) command to run when an interrupt occurs + char *cmd_trap; // rizin (external) command to run when a trap occurs + char *cmd_mdev; // rizin (external) command to run when an memory mapped device address is used + char *cmd_todo; // rizin (external) command to run when esil expr contains TODO + char *cmd_ioer; // rizin (external) command to run when esil fails to IO + char *mdev_range; // string containing the rz_str_range to match for read/write accesses + bool (*cmd)(ESIL *esil, const char *name, ut64 a0, ut64 a1); + void *user; + int stack_fd; // ahem, let's not do this +} RzAnalysisEsil; + +#undef ESIL + + +enum { + RZ_ANAL_ESIL_OP_TYPE_UNKNOWN = 0x1, + RZ_ANAL_ESIL_OP_TYPE_CONTROL_FLOW, + RZ_ANAL_ESIL_OP_TYPE_MEM_READ = 0x4, + RZ_ANAL_ESIL_OP_TYPE_MEM_WRITE = 0x8, + RZ_ANAL_ESIL_OP_TYPE_REG_WRITE = 0x10, + RZ_ANAL_ESIL_OP_TYPE_MATH = 0x20, + RZ_ANAL_ESIL_OP_TYPE_CUSTOM = 0x40 +}; + + +typedef bool (*RzAnalysisEsilOpCb)(RzAnalysisEsil *esil); + +typedef struct rz_analysis_esil_operation_t { + RzAnalysisEsilOpCb code; + ut32 push; // amount of operands pushed + ut32 pop; // amount of operands popped + ut32 type; +} RzAnalysisEsilOp; + + +// this is 80-bit offsets so we can address every piece of esil in an instruction +typedef struct rz_analysis_esil_expr_offset_t { + ut64 off; + ut16 idx; +} RzAnalysisEsilEOffset; + +typedef enum { + RZ_ANAL_ESIL_BLOCK_ENTER_NORMAL = 0, + RZ_ANAL_ESIL_BLOCK_ENTER_TRUE, + RZ_ANAL_ESIL_BLOCK_ENTER_FALSE, + RZ_ANAL_ESIL_BLOCK_ENTER_GLUE, +} RzAnalysisEsilBlockEnterType; + +typedef struct rz_analysis_esil_basic_block_t { + RzAnalysisEsilEOffset first; + RzAnalysisEsilEOffset last; + char *expr; //synthesized esil-expression for this block + RzAnalysisEsilBlockEnterType enter; //maybe more type is needed here +} RzAnalysisEsilBB; + +typedef struct rz_analysis_esil_cfg_t { + RzGraphNode *start; + RzGraphNode *end; + RzGraph *g; +} RzAnalysisEsilCFG; + +typedef enum { + RZ_ANAL_ESIL_DFG_BLOCK_CONST = 1, + RZ_ANAL_ESIL_DFG_BLOCK_VAR = 2, + RZ_ANAL_ESIL_DFG_BLOCK_PTR = 4, + RZ_ANAL_ESIL_DFG_BLOCK_RESULT = 8, + RZ_ANAL_ESIL_DFG_BLOCK_GENERATIVE = 16, +} RzAnalysisEsilDFGBlockType; + +typedef struct rz_analysis_esil_dfg_t { + ut32 idx; + Sdb *regs; //resolves regnames to intervals + RContRBTree *reg_vars; //vars represented in regs + RQueue *todo; //todo-queue allocated in this struct for perf + void *insert; //needed for setting regs in dfg + RzGraph *flow; + RzGraphNode *cur; + RzGraphNode *old; + bool malloc_failed; +} RzAnalysisEsilDFG; + +typedef struct rz_analysis_esil_dfg_node_t { + // add more info here + ut32 idx; + RzStrBuf *content; + RzAnalysisEsilDFGBlockType type; +} RzAnalysisEsilDFGNode; + +typedef int (*RzAnalysisCmdExt)(/* Rcore */RzAnalysis *analysis, const char* input); + +// TODO: rm data + len +typedef int (*RzAnalysisOpCallback)(RzAnalysis *a, RzAnalysisOp *op, ut64 addr, const ut8 *data, int len, RzAnalysisOpMask mask); + +typedef bool (*RzAnalysisRegProfCallback)(RzAnalysis *a); +typedef char*(*RzAnalysisRegProfGetCallback)(RzAnalysis *a); +typedef int (*RzAnalysisFPBBCallback)(RzAnalysis *a, RzAnalysisBlock *bb); +typedef int (*RzAnalysisFPFcnCallback)(RzAnalysis *a, RzAnalysisFunction *fcn); +typedef int (*RzAnalysisDiffBBCallback)(RzAnalysis *analysis, RzAnalysisFunction *fcn, RzAnalysisFunction *fcn2); +typedef int (*RzAnalysisDiffFcnCallback)(RzAnalysis *analysis, RzList *fcns, RzList *fcns2); +typedef int (*RzAnalysisDiffEvalCallback)(RzAnalysis *analysis); + +typedef int (*RzAnalysisEsilCB)(RzAnalysisEsil *esil); +typedef int (*RzAnalysisEsilLoopCB)(RzAnalysisEsil *esil, RzAnalysisOp *op); +typedef int (*RzAnalysisEsilTrapCB)(RzAnalysisEsil *esil, int trap_type, int trap_code); + +typedef struct rz_analysis_plugin_t { + char *name; + char *desc; + char *license; + char *arch; + char *author; + char *version; + int bits; + int esil; // can do esil or not + int fileformat_type; + int (*init)(void *user); + int (*fini)(void *user); + //int (*reset_counter) (RzAnalysis *analysis, ut64 start_addr); + int (*archinfo)(RzAnalysis *analysis, int query); + ut8* (*analysis_mask)(RzAnalysis *analysis, int size, const ut8 *data, ut64 at); + RzList* (*preludes)(RzAnalysis *analysis); + + // legacy rz_analysis_functions + RzAnalysisOpCallback op; + + // command extension to directly call any analysis functions + RzAnalysisCmdExt cmd_ext; + + RzAnalysisRegProfCallback set_reg_profile; + RzAnalysisRegProfGetCallback get_reg_profile; + RzAnalysisFPBBCallback fingerprint_bb; + RzAnalysisFPFcnCallback fingerprint_fcn; + RzAnalysisDiffBBCallback diff_bb; + RzAnalysisDiffFcnCallback diff_fcn; + RzAnalysisDiffEvalCallback diff_eval; + + RzAnalysisEsilCB esil_init; // initialize esil-related stuff + RzAnalysisEsilLoopCB esil_post_loop; //cycle-counting, firing interrupts, ... + RzAnalysisEsilTrapCB esil_trap; // traps / exceptions + RzAnalysisEsilCB esil_fini; // deinitialize +} RzAnalysisPlugin; + +/*----------------------------------------------------------------------------------------------*/ +int * (rz_analysis_compare) (RzAnalysisFunction , RzAnalysisFunction ); +/*----------------------------------------------------------------------------------------------*/ + +#ifdef RZ_API +/* --------- */ /* REFACTOR */ /* ---------- */ +RZ_API RzListRange* rz_listrange_new (void); +RZ_API void rz_listrange_free(RzListRange *s); +RZ_API void rz_listrange_add(RzListRange *s, RzAnalysisFunction *f); +RZ_API void rz_listrange_del(RzListRange *s, RzAnalysisFunction *f); +RZ_API void rz_listrange_resize(RzListRange *s, RzAnalysisFunction *f, int newsize); +RZ_API RzAnalysisFunction *rz_listrange_find_in_range(RzListRange* s, ut64 addr); +RZ_API RzAnalysisFunction *rz_listrange_find_root(RzListRange* s, ut64 addr); +/* --------- */ /* REFACTOR */ /* ---------- */ +/* type.c */ +RZ_API RzAnalysisType *rz_analysis_type_new(void); +RZ_API void rz_analysis_type_add(RzAnalysis *l, RzAnalysisType *t); +RZ_API RzAnalysisType *rz_analysis_type_find(RzAnalysis *a, const char* name); +RZ_API void rz_analysis_type_list(RzAnalysis *a, short category, short enabled); +RZ_API const char *rz_analysis_datatype_to_string(RzAnalysisDataType t); +RZ_API RzAnalysisType *rz_analysis_str_to_type(RzAnalysis *a, const char* s); +RZ_API bool rz_analysis_op_nonlinear(int t); +RZ_API bool rz_analysis_op_ismemref(int t); +RZ_API const char *rz_analysis_optype_to_string(int t); +RZ_API int rz_analysis_optype_from_string(const char *type); +RZ_API const char *rz_analysis_op_family_to_string (int n); +RZ_API int rz_analysis_op_family_from_string(const char *f); +RZ_API int rz_analysis_op_hint(RzAnalysisOp *op, RzAnalysisHint *hint); +RZ_API RzAnalysisType *rz_analysis_type_free(RzAnalysisType *t); +RZ_API RzAnalysisType *rz_analysis_type_loadfile(RzAnalysis *a, const char *path); + +/* block.c */ +typedef bool (*RzAnalysisBlockCb)(RzAnalysisBlock *block, void *user); +typedef bool (*RzAnalysisAddrCb)(ut64 addr, void *user); + +// lifetime +RZ_API void rz_analysis_block_ref(RzAnalysisBlock *bb); +RZ_API void rz_analysis_block_unref(RzAnalysisBlock *bb); + +// Create one block covering the given range. +// This will fail if the range overlaps any existing blocks. +RZ_API RzAnalysisBlock *rz_analysis_create_block(RzAnalysis *analysis, ut64 addr, ut64 size); + +static inline bool rz_analysis_block_contains(RzAnalysisBlock *bb, ut64 addr) { + return addr >= bb->addr && addr < bb->addr + bb->size; +} + +// Split the block at the given address into two blocks. +// bb will stay the first block, the second block will be returned (or NULL on failure) +// The returned block will always be refd, i.e. it is necessary to always call rz_analysis_block_unref() on the return value! +RZ_API RzAnalysisBlock *rz_analysis_block_split(RzAnalysisBlock *bb, ut64 addr); + +static inline bool rz_analysis_block_is_contiguous(RzAnalysisBlock *a, RzAnalysisBlock *b) { + return (a->addr + a->size) == b->addr; +} + +// Merge block b into a. +// b will be FREED (not just unrefd) and is NOT VALID anymore if this function is successful! +// This only works if b follows directly after a and their function lists are identical. +// returns true iff the blocks could be merged +RZ_API bool rz_analysis_block_merge(RzAnalysisBlock *a, RzAnalysisBlock *b); + +// Manually delete a block and remove it from all its functions +// If there are more references to it than from its functions only, it will not be removed immediately! +RZ_API void rz_analysis_delete_block(RzAnalysisBlock *bb); + +RZ_API void rz_analysis_block_set_size(RzAnalysisBlock *block, ut64 size); + +// Set the address and size of the block. +// This can fail (and return false) if there is already another block at the new address +RZ_API bool rz_analysis_block_relocate(RzAnalysisBlock *block, ut64 addr, ut64 size); + +RZ_API RzAnalysisBlock *rz_analysis_get_block_at(RzAnalysis *analysis, ut64 addr); +RZ_API bool rz_analysis_blocks_foreach_in(RzAnalysis *analysis, ut64 addr, RzAnalysisBlockCb cb, void *user); +RZ_API RzList *rz_analysis_get_blocks_in(RzAnalysis *analysis, ut64 addr); // values from rz_analysis_blocks_foreach_in as a list +RZ_API void rz_analysis_blocks_foreach_intersect(RzAnalysis *analysis, ut64 addr, ut64 size, RzAnalysisBlockCb cb, void *user); +RZ_API RzList *rz_analysis_get_blocks_intersect(RzAnalysis *analysis, ut64 addr, ut64 size); // values from rz_analysis_blocks_foreach_intersect as a list + +// Call cb on every direct successor address of block +// returns false if the loop was breaked by cb +RZ_API bool rz_analysis_block_successor_addrs_foreach(RzAnalysisBlock *block, RzAnalysisAddrCb cb, void *user); + +// Call cb on block and every (recursive) successor of it +// returns false if the loop was breaked by cb +RZ_API bool rz_analysis_block_recurse(RzAnalysisBlock *block, RzAnalysisBlockCb cb, void *user); + +// Call cb on block and every (recursive) successor of it +// If cb returns false, recursion stops only for that block +// returns false if the loop was breaked by cb +RZ_API bool rz_analysis_block_recurse_followthrough(RzAnalysisBlock *block, RzAnalysisBlockCb cb, void *user); + +// Call cb on block and every (recursive) successor of it +// Call on_exit on block that doesn't have non-visited successors +// returns false if the loop was breaked by cb +RZ_API bool rz_analysis_block_recurse_depth_first(RzAnalysisBlock *block, RzAnalysisBlockCb cb, RZ_NULLABLE RzAnalysisBlockCb on_exit, void *user); + +// same as rz_analysis_block_recurse, but returns the blocks as a list +RZ_API RzList *rz_analysis_block_recurse_list(RzAnalysisBlock *block); + +// return one shortest path from block to dst or NULL if none exists. +RZ_API RZ_NULLABLE RzList/**/ *rz_analysis_block_shortest_path(RzAnalysisBlock *block, ut64 dst); + +// Add a case to the block's switch_op. +// If block->switch_op is NULL, it will be created with the given switch_addr. +RZ_API void rz_analysis_block_add_switch_case(RzAnalysisBlock *block, ut64 switch_addr, ut64 case_value, ut64 case_addr); + +// Chop off the block at the specified address and remove all destinations. +// Blocks that have become unreachable after this operation will be automatically removed from all functions of block. +// addr must be the address directly AFTER the noreturn call! +// After the chopping, an rz_analysis_block_automerge() is performed on the touched blocks. +// IMPORTANT: The automerge might also FREE block! This function returns block iff it is still valid afterwards. +// If this function returns NULL, the pointer to block MUST not be touched anymore! +RZ_API RzAnalysisBlock *rz_analysis_block_chop_noreturn(RzAnalysisBlock *block, ut64 addr); + +// Merge every block in blocks with their contiguous predecessor, if possible. +// IMPORTANT: Merged blocks will be FREED! The blocks list will be updated to contain only the survived blocks. +RZ_API void rz_analysis_block_automerge(RzList *blocks); + +// return true iff an instruction in the given basic block starts at the given address +RZ_API bool rz_analysis_block_op_starts_at(RzAnalysisBlock *block, ut64 addr); + +// Updates bbhash based on current bytes inside the block +RZ_API void rz_analysis_block_update_hash(RzAnalysisBlock *block); + +// returns true if a byte in the given basic block was modified +RZ_API bool rz_analysis_block_was_modified(RzAnalysisBlock *block); + +// --------------------------------------- + +/* function.c */ + +RZ_API RzAnalysisFunction *rz_analysis_function_new(RzAnalysis *analysis); +RZ_API void rz_analysis_function_free(void *fcn); + +// Add a function created with rz_analysis_function_new() to anal +RZ_API bool rz_analysis_add_function(RzAnalysis *analysis, RzAnalysisFunction *fcn); + +// Create a new function and add it to anal (rz_analysis_function_new() + set members + rz_analysis_add_function()) +RZ_API RzAnalysisFunction *rz_analysis_create_function(RzAnalysis *analysis, const char *name, ut64 addr, int type, RzAnalysisDiff *diff); + +// returns all functions that have a basic block containing the given address +RZ_API RzList *rz_analysis_get_functions_in(RzAnalysis *analysis, ut64 addr); + +// returns the function that has its entrypoint at addr or NULL +RZ_API RzAnalysisFunction *rz_analysis_get_function_at(RzAnalysis *analysis, ut64 addr); + +RZ_API bool rz_analysis_function_delete(RzAnalysisFunction *fcn); + +// rhange the entrypoint of fcn +// This can fail (and return false) if there is already another function at the new address +RZ_API bool rz_analysis_function_relocate(RzAnalysisFunction *fcn, ut64 addr); + +// rename the given function +// This can fail (and return false) if there is another function with the name given +RZ_API bool rz_analysis_function_rename(RzAnalysisFunction *fcn, const char *name); + +RZ_API void rz_analysis_function_add_block(RzAnalysisFunction *fcn, RzAnalysisBlock *bb); +RZ_API void rz_analysis_function_remove_block(RzAnalysisFunction *fcn, RzAnalysisBlock *bb); + + +// size of the entire range that the function spans, including holes. +// this is exactly rz_analysis_function_max_addr() - rz_analysis_function_min_addr() +RZ_API ut64 rz_analysis_function_linear_size(RzAnalysisFunction *fcn); + +// lowest address covered by the function +RZ_API ut64 rz_analysis_function_min_addr(RzAnalysisFunction *fcn); + +// first address directly after the function +RZ_API ut64 rz_analysis_function_max_addr(RzAnalysisFunction *fcn); + +// size from the function entrypoint (fcn->addr) to the end of the function (rz_analysis_function_max_addr) +RZ_API ut64 rz_analysis_function_size_from_entry(RzAnalysisFunction *fcn); + +// the "real" size of the function, that is the sum of the size of the +// basicblocks this function is composed of +RZ_API ut64 rz_analysis_function_realsize(const RzAnalysisFunction *fcn); + +// returns whether the function contains a basic block that contains addr +// This is completely independent of fcn->addr, which is only the entrypoint! +RZ_API bool rz_analysis_function_contains(RzAnalysisFunction *fcn, ut64 addr); + +// returns true if function bytes were modified +RZ_API bool rz_analysis_function_was_modified(RzAnalysisFunction *fcn); + +/* anal.c */ +RZ_API RzAnalysis *rz_analysis_new(void); +RZ_API void rz_analysis_purge(RzAnalysis *analysis); +RZ_API RzAnalysis *rz_analysis_free(RzAnalysis *r); +RZ_API void rz_analysis_set_user_ptr(RzAnalysis *analysis, void *user); +RZ_API void rz_analysis_plugin_free (RzAnalysisPlugin *p); +RZ_API int rz_analysis_add(RzAnalysis *analysis, RzAnalysisPlugin *foo); +RZ_API int rz_analysis_archinfo(RzAnalysis *analysis, int query); +RZ_API bool rz_analysis_use(RzAnalysis *analysis, const char *name); +RZ_API bool rz_analysis_set_reg_profile(RzAnalysis *analysis); +RZ_API char *rz_analysis_get_reg_profile(RzAnalysis *analysis); +RZ_API ut64 rz_analysis_get_bbaddr(RzAnalysis *analysis, ut64 addr); +RZ_API bool rz_analysis_set_bits(RzAnalysis *analysis, int bits); +RZ_API bool rz_analysis_set_os(RzAnalysis *analysis, const char *os); +RZ_API void rz_analysis_set_cpu(RzAnalysis *analysis, const char *cpu); +RZ_API int rz_analysis_set_big_endian(RzAnalysis *analysis, int boolean); +RZ_API ut8 *rz_analysis_mask(RzAnalysis *analysis, int size, const ut8 *data, ut64 at); +RZ_API void rz_analysis_trace_bb(RzAnalysis *analysis, ut64 addr); +RZ_API const char *rz_analysis_fcntype_tostring(int type); +RZ_API int rz_analysis_fcn_bb (RzAnalysis *analysis, RzAnalysisFunction *fcn, ut64 addr, int depth); +RZ_API void rz_analysis_bind(RzAnalysis *b, RzAnalysisBind *bnd); +RZ_API bool rz_analysis_set_triplet(RzAnalysis *analysis, const char *os, const char *arch, int bits); +RZ_API void rz_analysis_add_import(RzAnalysis *analysis, const char *imp); +RZ_API void rz_analysis_remove_import(RzAnalysis *analysis, const char *imp); +RZ_API void rz_analysis_purge_imports(RzAnalysis *analysis); + +/* bb.c */ +RZ_API RzAnalysisBlock *rz_analysis_bb_from_offset(RzAnalysis *analysis, ut64 off); +RZ_API bool rz_analysis_bb_set_offset(RzAnalysisBlock *bb, int i, ut16 v); +RZ_API ut16 rz_analysis_bb_offset_inst(RzAnalysisBlock *bb, int i); +RZ_API ut64 rz_analysis_bb_opaddr_i(RzAnalysisBlock *bb, int i); +RZ_API ut64 rz_analysis_bb_opaddr_at(RzAnalysisBlock *bb, ut64 addr); +RZ_API ut64 rz_analysis_bb_size_i(RzAnalysisBlock *bb, int i); + +/* op.c */ +RZ_API const char *rz_analysis_stackop_tostring(int s); +RZ_API RzAnalysisOp *rz_analysis_op_new(void); +RZ_API void rz_analysis_op_free(void *op); +RZ_API void rz_analysis_op_init(RzAnalysisOp *op); +RZ_API bool rz_analysis_op_fini(RzAnalysisOp *op); +RZ_API int rz_analysis_op_reg_delta(RzAnalysis *analysis, ut64 addr, const char *name); +RZ_API bool rz_analysis_op_is_eob(RzAnalysisOp *op); +RZ_API RzList *rz_analysis_op_list_new(void); +RZ_API int rz_analysis_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *data, int len, RzAnalysisOpMask mask); +RZ_API RzAnalysisOp *rz_analysis_op_hexstr(RzAnalysis *analysis, ut64 addr, const char *hexstr); +RZ_API char *rz_analysis_op_to_string(RzAnalysis *analysis, RzAnalysisOp *op); + +RZ_API RzAnalysisEsil *rz_analysis_esil_new(int stacksize, int iotrap, unsigned int addrsize); +RZ_API bool rz_analysis_esil_set_pc(RzAnalysisEsil *esil, ut64 addr); +RZ_API bool rz_analysis_esil_setup(RzAnalysisEsil *esil, RzAnalysis *analysis, int romem, int stats, int nonull); +RZ_API void rz_analysis_esil_free(RzAnalysisEsil *esil); +RZ_API bool rz_analysis_esil_runword(RzAnalysisEsil *esil, const char *word); +RZ_API bool rz_analysis_esil_parse(RzAnalysisEsil *esil, const char *str); +RZ_API bool rz_analysis_esil_dumpstack(RzAnalysisEsil *esil); +RZ_API int rz_analysis_esil_mem_read(RzAnalysisEsil *esil, ut64 addr, ut8 *buf, int len); +RZ_API int rz_analysis_esil_mem_write(RzAnalysisEsil *esil, ut64 addr, const ut8 *buf, int len); +RZ_API int rz_analysis_esil_reg_read(RzAnalysisEsil *esil, const char *regname, ut64 *num, int *size); +RZ_API int rz_analysis_esil_reg_write(RzAnalysisEsil *esil, const char *dst, ut64 num); +RZ_API bool rz_analysis_esil_pushnum(RzAnalysisEsil *esil, ut64 num); +RZ_API bool rz_analysis_esil_push(RzAnalysisEsil *esil, const char *str); +RZ_API char *rz_analysis_esil_pop(RzAnalysisEsil *esil); +RZ_API bool rz_analysis_esil_set_op(RzAnalysisEsil *esil, const char *op, RzAnalysisEsilOpCb code, ut32 push, ut32 pop, ut32 type); +RZ_API void rz_analysis_esil_stack_free(RzAnalysisEsil *esil); +RZ_API int rz_analysis_esil_get_parm_type(RzAnalysisEsil *esil, const char *str); +RZ_API int rz_analysis_esil_get_parm(RzAnalysisEsil *esil, const char *str, ut64 *num); +RZ_API int rz_analysis_esil_condition(RzAnalysisEsil *esil, const char *str); + +// esil_interrupt.c +RZ_API void rz_analysis_esil_interrupts_init(RzAnalysisEsil *esil); +RZ_API RzAnalysisEsilInterrupt *rz_analysis_esil_interrupt_new(RzAnalysisEsil *esil, ut32 src_id, RzAnalysisEsilInterruptHandler *ih); +RZ_API void rz_analysis_esil_interrupt_free(RzAnalysisEsil *esil, RzAnalysisEsilInterrupt *intr); +RZ_API bool rz_analysis_esil_set_interrupt(RzAnalysisEsil *esil, RzAnalysisEsilInterrupt *intr); +RZ_API int rz_analysis_esil_fire_interrupt(RzAnalysisEsil *esil, ut32 intr_num); +RZ_API bool rz_analysis_esil_load_interrupts(RzAnalysisEsil *esil, RzAnalysisEsilInterruptHandler **handlers, ut32 src_id); +RZ_API bool rz_analysis_esil_load_interrupts_from_lib(RzAnalysisEsil *esil, const char *path); +RZ_API void rz_analysis_esil_interrupts_fini(RzAnalysisEsil *esil); + +RZ_API void rz_analysis_esil_mem_ro(RzAnalysisEsil *esil, int mem_readonly); +RZ_API void rz_analysis_esil_stats(RzAnalysisEsil *esil, int enable); + +/* trace */ +RZ_API RzAnalysisEsilTrace *rz_analysis_esil_trace_new(RzAnalysisEsil *esil); +RZ_API void rz_analysis_esil_trace_free(RzAnalysisEsilTrace *trace); +RZ_API void rz_analysis_esil_trace_op(RzAnalysisEsil *esil, RzAnalysisOp *op); +RZ_API void rz_analysis_esil_trace_list(RzAnalysisEsil *esil); +RZ_API void rz_analysis_esil_trace_show(RzAnalysisEsil *esil, int idx); +RZ_API void rz_analysis_esil_trace_restore(RzAnalysisEsil *esil, int idx); + +/* pin */ +RZ_API void rz_analysis_pin_init(RzAnalysis *a); +RZ_API void rz_analysis_pin_fini(RzAnalysis *a); +RZ_API void rz_analysis_pin(RzAnalysis *a, ut64 addr, const char *name); +RZ_API void rz_analysis_pin_unset(RzAnalysis *a, ut64 addr); +RZ_API const char *rz_analysis_pin_call(RzAnalysis *a, ut64 addr); +RZ_API void rz_analysis_pin_list(RzAnalysis *a); + +/* fcn.c */ +RZ_API ut32 rz_analysis_function_cost(RzAnalysisFunction *fcn); +RZ_API int rz_analysis_function_count_edges(const RzAnalysisFunction *fcn, RZ_NULLABLE int *ebbs); + +// Use rz_analysis_get_functions_in¿() instead +RZ_DEPRECATE RZ_API RzAnalysisFunction *rz_analysis_get_fcn_in(RzAnalysis *analysis, ut64 addr, int type); +RZ_DEPRECATE RZ_API RzAnalysisFunction *rz_analysis_get_fcn_in_bounds(RzAnalysis *analysis, ut64 addr, int type); + +RZ_API RzAnalysisFunction *rz_analysis_get_function_byname(RzAnalysis *analysis, const char *name); + +RZ_API int rz_analysis_fcn(RzAnalysis *analysis, RzAnalysisFunction *fcn, ut64 addr, ut64 len, int reftype); +RZ_API int rz_analysis_fcn_del(RzAnalysis *analysis, ut64 addr); +RZ_API int rz_analysis_fcn_del_locs(RzAnalysis *analysis, ut64 addr); +RZ_API bool rz_analysis_fcn_add_bb(RzAnalysis *analysis, RzAnalysisFunction *fcn, + ut64 addr, ut64 size, + ut64 jump, ut64 fail, RZ_BORROW RzAnalysisDiff *diff); +RZ_API bool rz_analysis_check_fcn(RzAnalysis *analysis, ut8 *buf, ut16 bufsz, ut64 addr, ut64 low, ut64 high); +RZ_API void rz_analysis_fcn_invalidate_read_ahead_cache(void); + +RZ_API void rz_analysis_function_check_bp_use(RzAnalysisFunction *fcn); +RZ_API void rz_analysis_update_analysis_range(RzAnalysis *analysis, ut64 addr, int size); +RZ_API void rz_analysis_function_update_analysis(RzAnalysisFunction *fcn); + +#define RZ_ANAL_FCN_VARKIND_LOCAL 'v' + + +RZ_API int rz_analysis_fcn_var_del_byindex (RzAnalysis *a, ut64 fna, const char kind, int scope, ut32 idx); +/* args */ +RZ_API int rz_analysis_var_count(RzAnalysis *a, RzAnalysisFunction *fcn, int kind, int type); + +/* vars // globals. not here */ +RZ_API bool rz_analysis_var_display(RzAnalysis *analysis, RzAnalysisVar *var); + +RZ_API int rz_analysis_function_complexity(RzAnalysisFunction *fcn); +RZ_API int rz_analysis_function_loops(RzAnalysisFunction *fcn); +RZ_API void rz_analysis_trim_jmprefs(RzAnalysis *analysis, RzAnalysisFunction *fcn); +RZ_API void rz_analysis_del_jmprefs(RzAnalysis *analysis, RzAnalysisFunction *fcn); +RZ_API char *rz_analysis_function_get_json(RzAnalysisFunction *function); +RZ_API RzAnalysisFunction *rz_analysis_fcn_next(RzAnalysis *analysis, ut64 addr); +RZ_API char *rz_analysis_function_get_signature(RzAnalysisFunction *function); +RZ_API int rz_analysis_str_to_fcn(RzAnalysis *a, RzAnalysisFunction *f, const char *_str); +RZ_API int rz_analysis_fcn_count (RzAnalysis *a, ut64 from, ut64 to); +RZ_API RzAnalysisBlock *rz_analysis_fcn_bbget_in(const RzAnalysis *analysis, RzAnalysisFunction *fcn, ut64 addr); +RZ_API RzAnalysisBlock *rz_analysis_fcn_bbget_at(RzAnalysis *analysis, RzAnalysisFunction *fcn, ut64 addr); +RZ_API bool rz_analysis_fcn_bbadd(RzAnalysisFunction *fcn, RzAnalysisBlock *bb); +RZ_API int rz_analysis_function_resize(RzAnalysisFunction *fcn, int newsize); +RZ_API bool rz_analysis_function_purity(RzAnalysisFunction *fcn); + +typedef bool (* RzAnalysisRefCmp)(RzAnalysisRef *ref, void *data); +RZ_API RzList *rz_analysis_ref_list_new(void); +RZ_API ut64 rz_analysis_xrefs_count(RzAnalysis *analysis); +RZ_API const char *rz_analysis_xrefs_type_tostring(RzAnalysisRefType type); +RZ_API RzAnalysisRefType rz_analysis_xrefs_type(char ch); +RZ_API RzList *rz_analysis_xrefs_get(RzAnalysis *analysis, ut64 to); +RZ_API RzList *rz_analysis_refs_get(RzAnalysis *analysis, ut64 to); +RZ_API RzList *rz_analysis_xrefs_get_from(RzAnalysis *analysis, ut64 from); +RZ_API void rz_analysis_xrefs_list(RzAnalysis *analysis, int rad); +RZ_API RzList *rz_analysis_function_get_refs(RzAnalysisFunction *fcn); +RZ_API RzList *rz_analysis_function_get_xrefs(RzAnalysisFunction *fcn); +RZ_API int rz_analysis_xrefs_from(RzAnalysis *analysis, RzList *list, const char *kind, const RzAnalysisRefType type, ut64 addr); +RZ_API int rz_analysis_xrefs_set(RzAnalysis *analysis, ut64 from, ut64 to, const RzAnalysisRefType type); +RZ_API int rz_analysis_xrefs_deln(RzAnalysis *analysis, ut64 from, ut64 to, const RzAnalysisRefType type); +RZ_API int rz_analysis_xref_del(RzAnalysis *analysis, ut64 at, ut64 addr); + +RZ_API RzList *rz_analysis_get_fcns(RzAnalysis *analysis); + +/* type.c */ +RZ_API void rz_analysis_remove_parsed_type(RzAnalysis *analysis, const char *name); +RZ_API void rz_analysis_save_parsed_type(RzAnalysis *analysis, const char *parsed); + +/* var.c */ +RZ_API RZ_OWN char *rz_analysis_function_autoname_var(RzAnalysisFunction *fcn, char kind, const char *pfx, int ptr); +RZ_API RZ_BORROW RzAnalysisVar *rz_analysis_function_set_var(RzAnalysisFunction *fcn, int delta, char kind, RZ_NULLABLE const char *type, int size, bool isarg, RZ_NONNULL const char *name); +RZ_API RZ_BORROW RzAnalysisVar *rz_analysis_function_get_var(RzAnalysisFunction *fcn, char kind, int delta); +RZ_API RZ_BORROW RzAnalysisVar *rz_analysis_function_get_var_byname(RzAnalysisFunction *fcn, const char *name); +RZ_API void rz_analysis_function_delete_vars_by_kind(RzAnalysisFunction *fcn, RzAnalysisVarKind kind); +RZ_API void rz_analysis_function_delete_all_vars(RzAnalysisFunction *fcn); +RZ_API void rz_analysis_function_delete_unused_vars(RzAnalysisFunction *fcn); +RZ_API void rz_analysis_function_delete_var(RzAnalysisFunction *fcn, RzAnalysisVar *var); +RZ_API bool rz_analysis_function_rebase_vars(RzAnalysis *a, RzAnalysisFunction *fcn); +RZ_API st64 rz_analysis_function_get_var_stackptr_at(RzAnalysisFunction *fcn, st64 delta, ut64 addr); +RZ_API const char *rz_analysis_function_get_var_reg_at(RzAnalysisFunction *fcn, st64 delta, ut64 addr); +RZ_API RZ_BORROW RzPVector *rz_analysis_function_get_vars_used_at(RzAnalysisFunction *fcn, ut64 op_addr); + +// There could be multiple vars used in multiple functions. Use rz_analysis_get_functions_in()+rz_analysis_function_get_vars_used_at() instead. +RZ_API RZ_DEPRECATE RzAnalysisVar *rz_analysis_get_used_function_var(RzAnalysis *analysis, ut64 addr); + +RZ_API bool rz_analysis_var_rename(RzAnalysisVar *var, const char *new_name, bool verbose); +RZ_API void rz_analysis_var_set_type(RzAnalysisVar *var, const char *type); +RZ_API void rz_analysis_var_delete(RzAnalysisVar *var); +RZ_API ut64 rz_analysis_var_addr(RzAnalysisVar *var); +RZ_API void rz_analysis_var_set_access(RzAnalysisVar *var, const char *reg, ut64 access_addr, int access_type, st64 stackptr); +RZ_API void rz_analysis_var_remove_access_at(RzAnalysisVar *var, ut64 address); +RZ_API void rz_analysis_var_clear_accesses(RzAnalysisVar *var); +RZ_API void rz_analysis_var_add_constraint(RzAnalysisVar *var, RZ_BORROW RzAnalysisVarConstraint *constraint); +RZ_API char *rz_analysis_var_get_constraints_readable(RzAnalysisVar *var); + +// Get the access to var at exactly addr if there is one +RZ_API RzAnalysisVarAccess *rz_analysis_var_get_access_at(RzAnalysisVar *var, ut64 addr); + +RZ_API int rz_analysis_var_get_argnum(RzAnalysisVar *var); + +RZ_API void rz_analysis_extract_vars(RzAnalysis *analysis, RzAnalysisFunction *fcn, RzAnalysisOp *op); +RZ_API void rz_analysis_extract_rarg(RzAnalysis *analysis, RzAnalysisOp *op, RzAnalysisFunction *fcn, int *reg_set, int *count); + +// Get the variable that var is written to at one of its accesses +// Useful for cases where a register-based argument is written away into a stack variable, +// so if var is the reg arg then this will return the stack var. +RZ_API RzAnalysisVar *rz_analysis_var_get_dst_var(RzAnalysisVar *var); + +typedef struct rz_analysis_fcn_vars_cache { + RzList *bvars; + RzList *rvars; + RzList *svars; +} RzAnalysisFcnVarsCache; +RZ_API void rz_analysis_fcn_vars_cache_init(RzAnalysis *analysis, RzAnalysisFcnVarsCache *cache, RzAnalysisFunction *fcn); +RZ_API void rz_analysis_fcn_vars_cache_fini(RzAnalysisFcnVarsCache *cache); + +RZ_API char *rz_analysis_fcn_format_sig(RZ_NONNULL RzAnalysis *analysis, RZ_NONNULL RzAnalysisFunction *fcn, RZ_NULLABLE char *fcn_name, + RZ_NULLABLE RzAnalysisFcnVarsCache *reuse_cache, RZ_NULLABLE const char *fcn_name_pre, RZ_NULLABLE const char *fcn_name_post); + + +/* project */ +RZ_API bool rz_analysis_xrefs_init (RzAnalysis *analysis); + +#define RZ_ANAL_THRESHOLDFCN 0.7F +#define RZ_ANAL_THRESHOLDBB 0.7F + +/* diff.c */ +RZ_API RzAnalysisDiff *rz_analysis_diff_new(void); +RZ_API void rz_analysis_diff_setup(RzAnalysis *analysis, int doops, double thbb, double thfcn); +RZ_API void rz_analysis_diff_setup_i(RzAnalysis *analysis, int doops, int thbb, int thfcn); +RZ_API void* rz_analysis_diff_free(RzAnalysisDiff *diff); +RZ_API int rz_analysis_diff_fingerprint_bb(RzAnalysis *analysis, RzAnalysisBlock *bb); +RZ_API size_t rz_analysis_diff_fingerprint_fcn(RzAnalysis *analysis, RzAnalysisFunction *fcn); +RZ_API bool rz_analysis_diff_bb(RzAnalysis *analysis, RzAnalysisFunction *fcn, RzAnalysisFunction *fcn2); +RZ_API int rz_analysis_diff_fcn(RzAnalysis *analysis, RzList *fcns, RzList *fcns2); +RZ_API int rz_analysis_diff_eval(RzAnalysis *analysis); + +/* value.c */ +RZ_API RzAnalysisValue *rz_analysis_value_new(void); +RZ_API RzAnalysisValue *rz_analysis_value_copy (RzAnalysisValue *ov); +RZ_API RzAnalysisValue *rz_analysis_value_new_from_string(const char *str); +RZ_API st64 rz_analysis_value_eval(RzAnalysisValue *value); +RZ_API char *rz_analysis_value_to_string (RzAnalysisValue *value); +RZ_API ut64 rz_analysis_value_to_ut64(RzAnalysis *analysis, RzAnalysisValue *val); +RZ_API int rz_analysis_value_set_ut64(RzAnalysis *analysis, RzAnalysisValue *val, ut64 num); +RZ_API void rz_analysis_value_free(RzAnalysisValue *value); + +RZ_API RzAnalysisCond *rz_analysis_cond_new(void); +RZ_API RzAnalysisCond *rz_analysis_cond_new_from_op(RzAnalysisOp *op); +RZ_API void rz_analysis_cond_fini(RzAnalysisCond *c); +RZ_API void rz_analysis_cond_free(RzAnalysisCond *c); +RZ_API char *rz_analysis_cond_to_string(RzAnalysisCond *cond); +RZ_API int rz_analysis_cond_eval(RzAnalysis *analysis, RzAnalysisCond *cond); +RZ_API RzAnalysisCond *rz_analysis_cond_new_from_string(const char *str); +RZ_API const char *rz_analysis_cond_tostring(int cc); + +/* jmptbl */ +RZ_API bool rz_analysis_jmptbl(RzAnalysis *analysis, RzAnalysisFunction *fcn, RzAnalysisBlock *block, ut64 jmpaddr, ut64 table, ut64 tablesize, ut64 default_addr); + +// TODO: should be renamed +RZ_API bool try_get_delta_jmptbl_info(RzAnalysis *analysis, RzAnalysisFunction *fcn, ut64 jmp_addr, ut64 lea_addr, ut64 *table_size, ut64 *default_case); +RZ_API bool try_walkthrough_jmptbl(RzAnalysis *analysis, RzAnalysisFunction *fcn, RzAnalysisBlock *block, int depth, ut64 ip, ut64 jmptbl_loc, ut64 jmptbl_off, ut64 sz, ut64 jmptbl_size, ut64 default_case, bool ret0); +RZ_API bool try_walkthrough_casetbl(RzAnalysis *analysis, RzAnalysisFunction *fcn, RzAnalysisBlock *block, int depth, ut64 ip, ut64 jmptbl_loc, ut64 casetbl_loc, ut64 jmptbl_off, ut64 sz, ut64 jmptbl_size, ut64 default_case, bool ret0); +RZ_API bool try_get_jmptbl_info(RzAnalysis *analysis, RzAnalysisFunction *fcn, ut64 addr, RzAnalysisBlock *my_bb, ut64 *table_size, ut64 *default_case); +RZ_API int walkthrough_arm_jmptbl_style(RzAnalysis *analysis, RzAnalysisFunction *fcn, RzAnalysisBlock *block, int depth, ut64 ip, ut64 jmptbl_loc, ut64 sz, ut64 jmptbl_size, ut64 default_case, int ret0); + +/* reflines.c */ +RZ_API RzList* /**/ rz_analysis_reflines_get(RzAnalysis *analysis, + ut64 addr, const ut8 *buf, ut64 len, int nlines, int linesout, int linescall); +RZ_API int rz_analysis_reflines_middle(RzAnalysis *analysis, RzList *list, ut64 addr, int len); +RZ_API RzAnalysisRefStr *rz_analysis_reflines_str(void *core, ut64 addr, int opts); +RZ_API void rz_analysis_reflines_str_free(RzAnalysisRefStr *refstr); +/* TODO move to rz_core */ +RZ_API void rz_analysis_var_list_show(RzAnalysis *analysis, RzAnalysisFunction *fcn, int kind, int mode, PJ* pj); +RZ_API RzList *rz_analysis_var_list(RzAnalysis *analysis, RzAnalysisFunction *fcn, int kind); +RZ_API RZ_DEPRECATE RzList/**/ *rz_analysis_var_all_list(RzAnalysis *analysis, RzAnalysisFunction *fcn); +RZ_API RZ_DEPRECATE RzList/**/ *rz_analysis_function_get_var_fields(RzAnalysisFunction *fcn, int kind); + +// calling conventions API +RZ_API bool rz_analysis_cc_exist(RzAnalysis *analysis, const char *convention); +RZ_API void rz_analysis_cc_del(RzAnalysis *analysis, const char *name); +RZ_API bool rz_analysis_cc_set(RzAnalysis *analysis, const char *expr); +RZ_API char *rz_analysis_cc_get(RzAnalysis *analysis, const char *name); +RZ_API const char *rz_analysis_cc_arg(RzAnalysis *analysis, const char *convention, int n); +RZ_API const char *rz_analysis_cc_self(RzAnalysis *analysis, const char *convention); +RZ_API void rz_analysis_cc_set_self(RzAnalysis *analysis, const char *convention, const char *self); +RZ_API const char *rz_analysis_cc_error(RzAnalysis *analysis, const char *convention); +RZ_API void rz_analysis_cc_set_error(RzAnalysis *analysis, const char *convention, const char *error); +RZ_API int rz_analysis_cc_max_arg(RzAnalysis *analysis, const char *cc); +RZ_API const char *rz_analysis_cc_ret(RzAnalysis *analysis, const char *convention); +RZ_API const char *rz_analysis_cc_default(RzAnalysis *analysis); +RZ_API const char *rz_analysis_cc_func(RzAnalysis *analysis, const char *func_name); +RZ_API bool rz_analysis_noreturn_at(RzAnalysis *analysis, ut64 addr); + +typedef struct rz_analysis_data_t { + ut64 addr; + int type; + ut64 ptr; + char *str; + int len; + ut8 *buf; + ut8 sbuf[8]; +} RzAnalysisData; + +RZ_API RzAnalysisData *rz_analysis_data (RzAnalysis *analysis, ut64 addr, const ut8 *buf, int size, int wordsize); +RZ_API const char *rz_analysis_data_kind (RzAnalysis *analysis, ut64 addr, const ut8 *buf, int len); +RZ_API RzAnalysisData *rz_analysis_data_new_string (ut64 addr, const char *p, int size, int wide); +RZ_API RzAnalysisData *rz_analysis_data_new (ut64 addr, int type, ut64 n, const ut8 *buf, int len); +RZ_API void rz_analysis_data_free (RzAnalysisData *d); +#include +RZ_API char *rz_analysis_data_to_string(RzAnalysisData *d, RzConsPrintablePalette *pal); + +/* meta + * + * Meta uses Condret's Klemmbaustein Priciple, i.e. intervals are defined inclusive/inclusive. + * A meta item from 0x42 to 0x42 has a size of 1. Items with size 0 do not exist. + * Meta items are allowed to overlap and the internal data structure allows for multiple meta items + * starting at the same address. + * Meta items are saved in an RzIntervalTree. To access the interval of an item, use the members of RzIntervalNode. + */ + +static inline ut64 rz_meta_item_size(ut64 start, ut64 end) { + // meta items use inclusive/inclusive intervals + return end - start + 1; +} + +static inline ut64 rz_meta_node_size(RzIntervalNode *node) { + return rz_meta_item_size (node->start, node->end); +} + +// Set a meta item at addr with the given contents in the current space. +// If there already exists an item with this type and space at addr (regardless of its size) it will be overwritten. +RZ_API bool rz_meta_set(RzAnalysis *a, RzAnalysisMetaType type, ut64 addr, ut64 size, const char *str); + +// Same as rz_meta_set() but also sets the subtype. +RZ_API bool rz_meta_set_with_subtype(RzAnalysis *m, RzAnalysisMetaType type, int subtype, ut64 addr, ut64 size, const char *str); + +// Delete all meta items in the current space that intersect with the given interval. +// If size == UT64_MAX, everything in the current space will be deleted. +RZ_API void rz_meta_del(RzAnalysis *a, RzAnalysisMetaType type, ut64 addr, ut64 size); + +// Same as rz_meta_set() with a size of 1. +RZ_API bool rz_meta_set_string(RzAnalysis *a, RzAnalysisMetaType type, ut64 addr, const char *s); + +// Convenience function to get the str content of the item at addr with given type in the current space. +RZ_API const char *rz_meta_get_string(RzAnalysis *a, RzAnalysisMetaType type, ut64 addr); + +// Convenience function to add an RZ_META_TYPE_DATA item at the given addr in the current space. +RZ_API void rz_meta_set_data_at(RzAnalysis *a, ut64 addr, ut64 wordsz); + +// Returns the item with given type that starts at addr in the current space or NULL. The size of this item optionally returned through size. +RZ_API RzAnalysisMetaItem *rz_meta_get_at(RzAnalysis *a, ut64 addr, RzAnalysisMetaType type, RZ_OUT RZ_NULLABLE ut64 *size); + +// Returns the node for one meta item with the given type that contains addr in the current space or NULL. +// To get all the nodes, use rz_meta_get_all_in(). +RZ_API RzIntervalNode *rz_meta_get_in(RzAnalysis *a, ut64 addr, RzAnalysisMetaType type); + +// Returns all nodes for items starting at the given address in the current space. +RZ_API RzPVector/* *>*/ *rz_meta_get_all_at(RzAnalysis *a, ut64 at); + +// Returns all nodes for items with the given type containing the given address in the current space. +RZ_API RzPVector/* *>*/ *rz_meta_get_all_in(RzAnalysis *a, ut64 at, RzAnalysisMetaType type); + +// Returns all nodes for items with the given type intersecting the given interval in the current space. +RZ_API RzPVector/* *>*/ *rz_meta_get_all_intersect(RzAnalysis *a, ut64 start, ut64 size, RzAnalysisMetaType type); + +// Delete all meta items in the given space +RZ_API void rz_meta_space_unset_for(RzAnalysis *a, const RzSpace *space); + +// Returns the number of meta items in the given space +RZ_API int rz_meta_space_count_for(RzAnalysis *a, const RzSpace *space); + +// Shift all meta items by the given delta, for rebasing between different memory layouts. +RZ_API void rz_meta_rebase(RzAnalysis *analysis, ut64 diff); + +// Calculate the total size covered by meta items of the given type. +RZ_API ut64 rz_meta_get_size(RzAnalysis *a, RzAnalysisMetaType type); + +RZ_API const char *rz_meta_type_to_string(int type); +RZ_API void rz_meta_print(RzAnalysis *a, RzAnalysisMetaItem *d, ut64 start, ut64 size, int rad, PJ *pj, bool show_full); +RZ_API void rz_meta_print_list_all(RzAnalysis *a, int type, int rad); +RZ_API void rz_meta_print_list_at(RzAnalysis *a, ut64 addr, int rad); +RZ_API void rz_meta_print_list_in_function(RzAnalysis *a, int type, int rad, ut64 addr); + +/* hints */ + +RZ_API void rz_analysis_hint_del(RzAnalysis *analysis, ut64 addr, ut64 size); // delete all hints that are contained within the given range, if size > 1, this operation is quite heavy! +RZ_API void rz_analysis_hint_clear (RzAnalysis *a); +RZ_API void rz_analysis_hint_free (RzAnalysisHint *h); +RZ_API void rz_analysis_hint_set_syntax (RzAnalysis *a, ut64 addr, const char *syn); +RZ_API void rz_analysis_hint_set_type(RzAnalysis *a, ut64 addr, int type); +RZ_API void rz_analysis_hint_set_jump(RzAnalysis *a, ut64 addr, ut64 jump); +RZ_API void rz_analysis_hint_set_fail(RzAnalysis *a, ut64 addr, ut64 fail); +RZ_API void rz_analysis_hint_set_newbits(RzAnalysis *a, ut64 addr, int bits); +RZ_API void rz_analysis_hint_set_nword(RzAnalysis *a, ut64 addr, int nword); +RZ_API void rz_analysis_hint_set_offset(RzAnalysis *a, ut64 addr, const char *typeoff); +RZ_API void rz_analysis_hint_set_immbase(RzAnalysis *a, ut64 addr, int base); +RZ_API void rz_analysis_hint_set_size(RzAnalysis *a, ut64 addr, ut64 size); +RZ_API void rz_analysis_hint_set_opcode(RzAnalysis *a, ut64 addr, const char *str); +RZ_API void rz_analysis_hint_set_esil(RzAnalysis *a, ut64 addr, const char *str); +RZ_API void rz_analysis_hint_set_pointer(RzAnalysis *a, ut64 addr, ut64 ptr); +RZ_API void rz_analysis_hint_set_ret(RzAnalysis *a, ut64 addr, ut64 val); +RZ_API void rz_analysis_hint_set_high(RzAnalysis *a, ut64 addr); +RZ_API void rz_analysis_hint_set_stackframe(RzAnalysis *a, ut64 addr, ut64 size); +RZ_API void rz_analysis_hint_set_val(RzAnalysis *a, ut64 addr, ut64 v); +RZ_API void rz_analysis_hint_set_arch(RzAnalysis *a, ut64 addr, RZ_NULLABLE const char *arch); // arch == NULL => use global default +RZ_API void rz_analysis_hint_set_bits(RzAnalysis *a, ut64 addr, int bits); // bits == NULL => use global default +RZ_API void rz_analysis_hint_unset_val (RzAnalysis *a, ut64 addr); +RZ_API void rz_analysis_hint_unset_high(RzAnalysis *a, ut64 addr); +RZ_API void rz_analysis_hint_unset_immbase(RzAnalysis *a, ut64 addr); +RZ_API void rz_analysis_hint_unset_nword(RzAnalysis *a, ut64 addr); +RZ_API void rz_analysis_hint_unset_size(RzAnalysis *a, ut64 addr); +RZ_API void rz_analysis_hint_unset_type(RzAnalysis *a, ut64 addr); +RZ_API void rz_analysis_hint_unset_esil(RzAnalysis *a, ut64 addr); +RZ_API void rz_analysis_hint_unset_opcode(RzAnalysis *a, ut64 addr); +RZ_API void rz_analysis_hint_unset_syntax(RzAnalysis *a, ut64 addr); +RZ_API void rz_analysis_hint_unset_pointer(RzAnalysis *a, ut64 addr); +RZ_API void rz_analysis_hint_unset_ret(RzAnalysis *a, ut64 addr); +RZ_API void rz_analysis_hint_unset_offset(RzAnalysis *a, ut64 addr); +RZ_API void rz_analysis_hint_unset_jump(RzAnalysis *a, ut64 addr); +RZ_API void rz_analysis_hint_unset_fail(RzAnalysis *a, ut64 addr); +RZ_API void rz_analysis_hint_unset_newbits(RzAnalysis *a, ut64 addr); +RZ_API void rz_analysis_hint_unset_stackframe(RzAnalysis *a, ut64 addr); +RZ_API void rz_analysis_hint_unset_arch(RzAnalysis *a, ut64 addr); +RZ_API void rz_analysis_hint_unset_bits(RzAnalysis *a, ut64 addr); +RZ_API RZ_NULLABLE const RzVector/**/ *rz_analysis_addr_hints_at(RzAnalysis *analysis, ut64 addr); +typedef bool (*RzAnalysisAddrHintRecordsCb)(ut64 addr, const RzVector/**/ *records, void *user); +RZ_API void rz_analysis_addr_hints_foreach(RzAnalysis *analysis, RzAnalysisAddrHintRecordsCb cb, void *user); +typedef bool (*RzAnalysisArchHintCb)(ut64 addr, RZ_NULLABLE const char *arch, void *user); +RZ_API void rz_analysis_arch_hints_foreach(RzAnalysis *analysis, RzAnalysisArchHintCb cb, void *user); +typedef bool (*RzAnalysisBitsHintCb)(ut64 addr, int bits, void *user); +RZ_API void rz_analysis_bits_hints_foreach(RzAnalysis *analysis, RzAnalysisBitsHintCb cb, void *user); + +// get the hint-specified arch value to be considered at addr +// hint_addr will optionally be set to the address where the hint that specifies this arch is placed or UT64_MAX +// if there is no hint affecting addr. +RZ_API RZ_NULLABLE RZ_BORROW const char *rz_analysis_hint_arch_at(RzAnalysis *analysis, ut64 addr, RZ_NULLABLE ut64 *hint_addr); + +// get the hint-specified bits value to be considered at addr +// hint_addr will optionally be set to the address where the hint that specifies this arch is placed or UT64_MAX +// if there is no hint affecting addr. +RZ_API int rz_analysis_hint_bits_at(RzAnalysis *analysis, ut64 addr, RZ_NULLABLE ut64 *hint_addr); + +RZ_API RzAnalysisHint *rz_analysis_hint_get(RzAnalysis *analysis, ut64 addr); // accumulate all available hints affecting the given address + +/* switch.c APIs */ +RZ_API RzAnalysisSwitchOp *rz_analysis_switch_op_new(ut64 addr, ut64 min_val, ut64 max_val, ut64 def_val); +RZ_API void rz_analysis_switch_op_free(RzAnalysisSwitchOp * swop); +RZ_API RzAnalysisCaseOp* rz_analysis_switch_op_add_case(RzAnalysisSwitchOp * swop, ut64 addr, ut64 value, ut64 jump); + +/* cycles.c */ +RZ_API RzAnalysisCycleFrame* rz_analysis_cycle_frame_new (void); +RZ_API void rz_analysis_cycle_frame_free (RzAnalysisCycleFrame *cf); + +/* labels */ +RZ_API ut64 rz_analysis_function_get_label(RzAnalysisFunction *fcn, const char *name); +RZ_API const char *rz_analysis_function_get_label_at(RzAnalysisFunction *fcn, ut64 addr); +RZ_API bool rz_analysis_function_set_label(RzAnalysisFunction *fcn, const char *name, ut64 addr); +RZ_API bool rz_analysis_function_delete_label(RzAnalysisFunction *fcn, const char *name); +RZ_API bool rz_analysis_function_delete_label_at(RzAnalysisFunction *fcn, ut64 addr); + +/* limits */ +RZ_API void rz_analysis_set_limits(RzAnalysis *analysis, ut64 from, ut64 to); +RZ_API void rz_analysis_unset_limits(RzAnalysis *analysis); + +/* ESIL to REIL */ +RZ_API int rz_analysis_esil_to_reil_setup (RzAnalysisEsil *esil, RzAnalysis *analysis, int romem, int stats); + +/* no-return stuff */ +RZ_API void rz_analysis_noreturn_list(RzAnalysis *analysis, int mode); +RZ_API bool rz_analysis_noreturn_add(RzAnalysis *analysis, const char *name, ut64 addr); +RZ_API bool rz_analysis_noreturn_drop(RzAnalysis *analysis, const char *expr); +RZ_API bool rz_analysis_noreturn_at_addr(RzAnalysis *analysis, ut64 addr); + +/* zign spaces */ +RZ_API int rz_sign_space_count_for(RzAnalysis *a, const RzSpace *space); +RZ_API void rz_sign_space_unset_for(RzAnalysis *a, const RzSpace *space); +RZ_API void rz_sign_space_rename_for(RzAnalysis *a, const RzSpace *space, const char *oname, const char *nname); + +/* vtables */ +typedef struct { + RzAnalysis *analysis; + RzAnalysisCPPABI abi; + ut8 word_size; + bool (*read_addr) (RzAnalysis *analysis, ut64 addr, ut64 *buf); +} RVTableContext; + +typedef struct vtable_info_t { + ut64 saddr; //starting address + RzVector methods; +} RVTableInfo; + +typedef struct vtable_method_info_t { + ut64 addr; // addr of the function + ut64 vtable_offset; // offset inside the vtable +} RVTableMethodInfo; + +RZ_API void rz_analysis_vtable_info_free(RVTableInfo *vtable); +RZ_API ut64 rz_analysis_vtable_info_get_size(RVTableContext *context, RVTableInfo *vtable); +RZ_API bool rz_analysis_vtable_begin(RzAnalysis *analysis, RVTableContext *context); +RZ_API RVTableInfo *rz_analysis_vtable_parse_at(RVTableContext *context, ut64 addr); +RZ_API RzList *rz_analysis_vtable_search(RVTableContext *context); +RZ_API void rz_analysis_list_vtables(RzAnalysis *analysis, int rad); + +/* rtti */ +RZ_API char *rz_analysis_rtti_msvc_demangle_class_name(RVTableContext *context, const char *name); +RZ_API void rz_analysis_rtti_msvc_print_complete_object_locator(RVTableContext *context, ut64 addr, int mode); +RZ_API void rz_analysis_rtti_msvc_print_type_descriptor(RVTableContext *context, ut64 addr, int mode); +RZ_API void rz_analysis_rtti_msvc_print_class_hierarchy_descriptor(RVTableContext *context, ut64 addr, int mode); +RZ_API void rz_analysis_rtti_msvc_print_base_class_descriptor(RVTableContext *context, ut64 addr, int mode); +RZ_API bool rz_analysis_rtti_msvc_print_at_vtable(RVTableContext *context, ut64 addr, int mode, bool strict); +RZ_API void rz_analysis_rtti_msvc_recover_all(RVTableContext *vt_context, RzList *vtables); + +RZ_API char *rz_analysis_rtti_itanium_demangle_class_name(RVTableContext *context, const char *name); +RZ_API void rz_analysis_rtti_itanium_print_class_type_info(RVTableContext *context, ut64 addr, int mode); +RZ_API void rz_analysis_rtti_itanium_print_si_class_type_info(RVTableContext *context, ut64 addr, int mode); +RZ_API void rz_analysis_rtti_itanium_print_vmi_class_type_info(RVTableContext *context, ut64 addr, int mode); +RZ_API bool rz_analysis_rtti_itanium_print_at_vtable(RVTableContext *context, ut64 addr, int mode); +RZ_API void rz_analysis_rtti_itanium_recover_all(RVTableContext *vt_context, RzList *vtables); + +RZ_API char *rz_analysis_rtti_demangle_class_name(RzAnalysis *analysis, const char *name); +RZ_API void rz_analysis_rtti_print_at_vtable(RzAnalysis *analysis, ut64 addr, int mode); +RZ_API void rz_analysis_rtti_print_all(RzAnalysis *analysis, int mode); +RZ_API void rz_analysis_rtti_recover_all(RzAnalysis *analysis); + +RZ_API void rz_analysis_colorize_bb(RzAnalysis *analysis, ut64 addr, ut32 color); + +RZ_API RzList *rz_analysis_preludes(RzAnalysis *analysis); +RZ_API bool rz_analysis_is_prelude(RzAnalysis *analysis, const ut8 *data, int len); + +/* classes */ +typedef struct rz_analysis_method_t { + char *name; + ut64 addr; + st64 vtable_offset; // >= 0 if method is virtual, else -1 +} RzAnalysisMethod; + +typedef struct rz_analysis_base_class_t { + char *id; // id to identify the class attr + ut64 offset; // offset of the base class inside the derived class + char *class_name; +} RzAnalysisBaseClass; + +typedef struct rz_analysis_vtable_t { + char *id; // id to identify the class attr + ut64 offset; // offset inside the class + ut64 addr; // where the content of the vtable is + ut64 size; // size (in bytes) of the vtable +} RzAnalysisVTable; + +typedef enum { + RZ_ANAL_CLASS_ERR_SUCCESS = 0, + RZ_ANAL_CLASS_ERR_CLASH, + RZ_ANAL_CLASS_ERR_NONEXISTENT_ATTR, + RZ_ANAL_CLASS_ERR_NONEXISTENT_CLASS, + RZ_ANAL_CLASS_ERR_OTHER +} RzAnalysisClassErr; + +RZ_API void rz_analysis_class_create(RzAnalysis *analysis, const char *name); +RZ_API void rz_analysis_class_delete(RzAnalysis *analysis, const char *name); +RZ_API bool rz_analysis_class_exists(RzAnalysis *analysis, const char *name); +RZ_API SdbList *rz_analysis_class_get_all(RzAnalysis *analysis, bool sorted); +RZ_API void rz_analysis_class_foreach(RzAnalysis *analysis, SdbForeachCallback cb, void *user); +RZ_API RzAnalysisClassErr rz_analysis_class_rename(RzAnalysis *analysis, const char *old_name, const char *new_name); + +RZ_API void rz_analysis_class_method_fini(RzAnalysisMethod *meth); +RZ_API RzAnalysisClassErr rz_analysis_class_method_get(RzAnalysis *analysis, const char *class_name, const char *meth_name, RzAnalysisMethod *meth); +RZ_API RzVector/**/ *rz_analysis_class_method_get_all(RzAnalysis *analysis, const char *class_name); +RZ_API RzAnalysisClassErr rz_analysis_class_method_set(RzAnalysis *analysis, const char *class_name, RzAnalysisMethod *meth); +RZ_API RzAnalysisClassErr rz_analysis_class_method_rename(RzAnalysis *analysis, const char *class_name, const char *old_meth_name, const char *new_meth_name); +RZ_API RzAnalysisClassErr rz_analysis_class_method_delete(RzAnalysis *analysis, const char *class_name, const char *meth_name); + +RZ_API void rz_analysis_class_base_fini(RzAnalysisBaseClass *base); +RZ_API RzAnalysisClassErr rz_analysis_class_base_get(RzAnalysis *analysis, const char *class_name, const char *base_id, RzAnalysisBaseClass *base); +RZ_API RzVector/**/ *rz_analysis_class_base_get_all(RzAnalysis *analysis, const char *class_name); +RZ_API RzAnalysisClassErr rz_analysis_class_base_set(RzAnalysis *analysis, const char *class_name, RzAnalysisBaseClass *base); +RZ_API RzAnalysisClassErr rz_analysis_class_base_delete(RzAnalysis *analysis, const char *class_name, const char *base_id); + +RZ_API void rz_analysis_class_vtable_fini(RzAnalysisVTable *vtable); +RZ_API RzAnalysisClassErr rz_analysis_class_vtable_get(RzAnalysis *analysis, const char *class_name, const char *vtable_id, RzAnalysisVTable *vtable); +RZ_API RzVector/**/ *rz_analysis_class_vtable_get_all(RzAnalysis *analysis, const char *class_name); +RZ_API RzAnalysisClassErr rz_analysis_class_vtable_set(RzAnalysis *analysis, const char *class_name, RzAnalysisVTable *vtable); +RZ_API RzAnalysisClassErr rz_analysis_class_vtable_delete(RzAnalysis *analysis, const char *class_name, const char *vtable_id); + +RZ_API void rz_analysis_class_print(RzAnalysis *analysis, const char *class_name, bool detailed); +RZ_API void rz_analysis_class_json(RzAnalysis *analysis, PJ *j, const char *class_name); +RZ_API void rz_analysis_class_list(RzAnalysis *analysis, int mode); +RZ_API void rz_analysis_class_list_bases(RzAnalysis *analysis, const char *class_name); +RZ_API void rz_analysis_class_list_vtables(RzAnalysis *analysis, const char *class_name); +RZ_API void rz_analysis_class_list_vtable_offset_functions(RzAnalysis *analysis, const char *class_name, ut64 offset); +RZ_API RzGraph/**/ *rz_analysis_class_get_inheritance_graph(RzAnalysis *analysis); + +RZ_API RzAnalysisEsilCFG *rz_analysis_esil_cfg_expr(RzAnalysisEsilCFG *cfg, RzAnalysis *analysis, const ut64 off, char *expr); +RZ_API RzAnalysisEsilCFG *rz_analysis_esil_cfg_op(RzAnalysisEsilCFG *cfg, RzAnalysis *analysis, RzAnalysisOp *op); +RZ_API void rz_analysis_esil_cfg_merge_blocks(RzAnalysisEsilCFG *cfg); +RZ_API void rz_analysis_esil_cfg_free(RzAnalysisEsilCFG *cfg); + +RZ_API RzAnalysisEsilDFGNode *rz_analysis_esil_dfg_node_new (RzAnalysisEsilDFG *edf, const char *c); +RZ_API RzAnalysisEsilDFG *rz_analysis_esil_dfg_new(RzReg *regs); +RZ_API void rz_analysis_esil_dfg_free(RzAnalysisEsilDFG *dfg); +RZ_API RzAnalysisEsilDFG *rz_analysis_esil_dfg_expr(RzAnalysis *analysis, RzAnalysisEsilDFG *dfg, const char *expr); +RZ_API RzStrBuf *rz_analysis_esil_dfg_filter(RzAnalysisEsilDFG *dfg, const char *reg); +RZ_API RzStrBuf *rz_analysis_esil_dfg_filter_expr(RzAnalysis *analysis, const char *expr, const char *reg); +RZ_API RzList *rz_analysis_types_from_fcn(RzAnalysis *analysis, RzAnalysisFunction *fcn); + +RZ_API RzAnalysisBaseType *rz_analysis_get_base_type(RzAnalysis *analysis, const char *name); +RZ_API void rz_parse_pdb_types(const RzAnalysis *analysis, const RzPdb *pdb); +RZ_API void rz_analysis_save_base_type(const RzAnalysis *analysis, const RzAnalysisBaseType *type); +RZ_API void rz_analysis_base_type_free(RzAnalysisBaseType *type); +RZ_API RzAnalysisBaseType *rz_analysis_base_type_new(RzAnalysisBaseTypeKind kind); +RZ_API void rz_analysis_dwarf_process_info(const RzAnalysis *analysis, RzAnalysisDwarfContext *ctx); +RZ_API void rz_analysis_dwarf_integrate_functions(RzAnalysis *analysis, RzFlag *flags, Sdb *dwarf_sdb); + +/* serialize */ +RZ_API void rz_serialize_anal_case_op_save(RZ_NONNULL PJ *j, RZ_NONNULL RzAnalysisCaseOp *op); +RZ_API void rz_serialize_anal_switch_op_save(RZ_NONNULL PJ *j, RZ_NONNULL RzAnalysisSwitchOp *op); +RZ_API RzAnalysisSwitchOp *rz_serialize_anal_switch_op_load(RZ_NONNULL const RJson *json); + +typedef void *RzSerializeAnalDiffParser; +RZ_API RzSerializeAnalDiffParser rz_serialize_anal_diff_parser_new(void); +RZ_API void rz_serialize_anal_diff_parser_free(RzSerializeAnalDiffParser parser); +RZ_API RZ_NULLABLE RzAnalysisDiff *rz_serialize_anal_diff_load(RZ_NONNULL RzSerializeAnalDiffParser parser, RZ_NONNULL const RJson *json); +RZ_API void rz_serialize_anal_diff_save(RZ_NONNULL PJ *j, RZ_NONNULL RzAnalysisDiff *diff); +RZ_API void rz_serialize_anal_blocks_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis); + +/** + * RzAnalysis must not contain any blocks when calling this function! + * All loaded blocks will have a ref of 1 after this function and should be unrefd once after loading functions. + */ +RZ_API bool rz_serialize_anal_blocks_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis, RzSerializeAnalDiffParser diff_parser, RZ_NULLABLE RzSerializeResultInfo *res); + +typedef void *RzSerializeAnalVarParser; +RZ_API RzSerializeAnalVarParser rz_serialize_anal_var_parser_new(void); +RZ_API void rz_serialize_anal_var_parser_free(RzSerializeAnalVarParser parser); +RZ_API RZ_NULLABLE RzAnalysisVar *rz_serialize_anal_var_load(RZ_NONNULL RzAnalysisFunction *fcn, RZ_NONNULL RzSerializeAnalVarParser parser, RZ_NONNULL const RJson *json); + +RZ_API void rz_serialize_anal_functions_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis); +RZ_API bool rz_serialize_anal_functions_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis, RzSerializeAnalDiffParser diff_parser, RZ_NULLABLE RzSerializeResultInfo *res); +RZ_API void rz_serialize_anal_xrefs_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis); +RZ_API bool rz_serialize_anal_xrefs_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis, RZ_NULLABLE RzSerializeResultInfo *res); +RZ_API void rz_serialize_anal_meta_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis); +RZ_API bool rz_serialize_anal_meta_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis, RZ_NULLABLE RzSerializeResultInfo *res); +RZ_API void rz_serialize_anal_hints_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis); +RZ_API bool rz_serialize_anal_hints_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis, RZ_NULLABLE RzSerializeResultInfo *res); +RZ_API void rz_serialize_anal_classes_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis); +RZ_API bool rz_serialize_anal_classes_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis, RZ_NULLABLE RzSerializeResultInfo *res); +RZ_API void rz_serialize_anal_types_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis); +RZ_API bool rz_serialize_anal_types_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis, RZ_NULLABLE RzSerializeResultInfo *res); +RZ_API void rz_serialize_anal_sign_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis); +RZ_API bool rz_serialize_anal_sign_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis, RZ_NULLABLE RzSerializeResultInfo *res); +RZ_API void rz_serialize_anal_imports_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis); +RZ_API bool rz_serialize_anal_imports_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis, RZ_NULLABLE RzSerializeResultInfo *res); +RZ_API void rz_serialize_anal_pin_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis); +RZ_API bool rz_serialize_anal_pin_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis, RZ_NULLABLE RzSerializeResultInfo *res); +RZ_API void rz_serialize_anal_cc_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis); +RZ_API bool rz_serialize_anal_cc_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis, RZ_NULLABLE RzSerializeResultInfo *res); + +RZ_API void rz_serialize_anal_save(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis); +RZ_API bool rz_serialize_anal_load(RZ_NONNULL Sdb *db, RZ_NONNULL RzAnalysis *analysis, RZ_NULLABLE RzSerializeResultInfo *res); + +/* plugin pointers */ +extern RzAnalysisPlugin rz_analysis_plugin_null; +extern RzAnalysisPlugin rz_analysis_plugin_6502; +extern RzAnalysisPlugin rz_analysis_plugin_6502_cs; +extern RzAnalysisPlugin rz_analysis_plugin_8051; +extern RzAnalysisPlugin rz_analysis_plugin_amd29k; +extern RzAnalysisPlugin rz_analysis_plugin_arc; +extern RzAnalysisPlugin rz_analysis_plugin_arm_cs; +extern RzAnalysisPlugin rz_analysis_plugin_arm_gnu; +extern RzAnalysisPlugin rz_analysis_plugin_avr; +extern RzAnalysisPlugin rz_analysis_plugin_bf; +extern RzAnalysisPlugin rz_analysis_plugin_chip8; +extern RzAnalysisPlugin rz_analysis_plugin_cr16; +extern RzAnalysisPlugin rz_analysis_plugin_cris; +extern RzAnalysisPlugin rz_analysis_plugin_dalvik; +extern RzAnalysisPlugin rz_analysis_plugin_ebc; +extern RzAnalysisPlugin rz_analysis_plugin_gb; +extern RzAnalysisPlugin rz_analysis_plugin_h8300; +extern RzAnalysisPlugin rz_analysis_plugin_hexagon; +extern RzAnalysisPlugin rz_analysis_plugin_i4004; +extern RzAnalysisPlugin rz_analysis_plugin_i8080; +extern RzAnalysisPlugin rz_analysis_plugin_java; +extern RzAnalysisPlugin rz_analysis_plugin_m68k_cs; +extern RzAnalysisPlugin rz_analysis_plugin_m680x_cs; +extern RzAnalysisPlugin rz_analysis_plugin_malbolge; +extern RzAnalysisPlugin rz_analysis_plugin_mcore; +extern RzAnalysisPlugin rz_analysis_plugin_mips_cs; +extern RzAnalysisPlugin rz_analysis_plugin_mips_gnu; +extern RzAnalysisPlugin rz_analysis_plugin_msp430; +extern RzAnalysisPlugin rz_analysis_plugin_nios2; +extern RzAnalysisPlugin rz_analysis_plugin_or1k; +extern RzAnalysisPlugin rz_analysis_plugin_pic; +extern RzAnalysisPlugin rz_analysis_plugin_ppc_cs; +extern RzAnalysisPlugin rz_analysis_plugin_ppc_gnu; +extern RzAnalysisPlugin rz_analysis_plugin_propeller; +extern RzAnalysisPlugin rz_analysis_plugin_riscv; +extern RzAnalysisPlugin rz_analysis_plugin_riscv_cs; +extern RzAnalysisPlugin rz_analysis_plugin_rsp; +extern RzAnalysisPlugin rz_analysis_plugin_sh; +extern RzAnalysisPlugin rz_analysis_plugin_snes; +extern RzAnalysisPlugin rz_analysis_plugin_sparc_cs; +extern RzAnalysisPlugin rz_analysis_plugin_sparc_gnu; +extern RzAnalysisPlugin rz_analysis_plugin_sysz; +extern RzAnalysisPlugin rz_analysis_plugin_tms320; +extern RzAnalysisPlugin rz_analysis_plugin_tms320c64x; +extern RzAnalysisPlugin rz_analysis_plugin_tricore; +extern RzAnalysisPlugin rz_analysis_plugin_v810; +extern RzAnalysisPlugin rz_analysis_plugin_v850; +extern RzAnalysisPlugin rz_analysis_plugin_vax; +extern RzAnalysisPlugin rz_analysis_plugin_wasm; +extern RzAnalysisPlugin rz_analysis_plugin_ws; +extern RzAnalysisPlugin rz_analysis_plugin_x86; +extern RzAnalysisPlugin rz_analysis_plugin_x86_cs; +extern RzAnalysisPlugin rz_analysis_plugin_x86_im; +extern RzAnalysisPlugin rz_analysis_plugin_x86_simple; +extern RzAnalysisPlugin rz_analysis_plugin_x86_udis; +extern RzAnalysisPlugin rz_analysis_plugin_xap; +extern RzAnalysisPlugin rz_analysis_plugin_xcore_cs; +extern RzAnalysisPlugin rz_analysis_plugin_xtensa; +extern RzAnalysisPlugin rz_analysis_plugin_z80; +extern RzAnalysisPlugin rz_analysis_plugin_pyc; +#ifdef __cplusplus +} +#endif + +#endif +#endif diff --git a/librz/include/rz_core.h b/librz/include/rz_core.h index bc2714f858..1aca92d0da 100644 --- a/librz/include/rz_core.h +++ b/librz/include/rz_core.h @@ -15,7 +15,7 @@ #include "rz_lang.h" #include "rz_asm.h" #include "rz_parse.h" -#include "rz_anal.h" +#include "rz_analysis.h" #include "rz_cmd.h" #include "rz_cons.h" #include "rz_search.h" @@ -247,7 +247,7 @@ struct rz_core_t { RzCmd *rcmd; RzCmdDescriptor root_cmd_descriptor; RzList/**/ *cmd_descriptors; - RzAnal *anal; + RzAnalysis *analysis; RzAsm *rasm; /* ^^ */ RzCoreTimes *times; @@ -327,7 +327,7 @@ struct rz_core_t { int (*rz_main_rz_ax)(int argc, const char **argv); }; -// maybe move into RzAnal +// maybe move into RzAnalysis typedef struct rz_core_item_t { const char *type; ut64 addr; @@ -432,7 +432,7 @@ RZ_API int rz_core_visual_classes(RzCore *core); RZ_API int rz_core_visual_anal_classes(RzCore *core); RZ_API int rz_core_visual_types(RzCore *core); RZ_API int rz_core_visual(RzCore *core, const char *input); -RZ_API int rz_core_visual_graph(RzCore *core, RzAGraph *g, RzAnalFunction *_fcn, int is_interactive); +RZ_API int rz_core_visual_graph(RzCore *core, RzAGraph *g, RzAnalysisFunction *_fcn, int is_interactive); RZ_API bool rz_core_visual_panels_root(RzCore *core, RzPanelsRoot *panels_root); RZ_API void rz_core_visual_browse(RzCore *core, const char *arg); RZ_API int rz_core_visual_cmd(RzCore *core, const char *arg); @@ -452,13 +452,13 @@ RZ_API ut64 rz_core_get_asmqjmps(RzCore *core, const char *str); RZ_API void rz_core_set_asmqjmps(RzCore *core, char *str, size_t len, int i); RZ_API char* rz_core_add_asmqjmp(RzCore *core, ut64 addr); -RZ_API void rz_core_anal_type_init(RzCore *core); -RZ_API void rz_core_link_stroff(RzCore *core, RzAnalFunction *fcn); -RZ_API void rz_core_anal_inflags (RzCore *core, const char *glob); -RZ_API bool cmd_anal_objc (RzCore *core, const char *input, bool auto_anal); -RZ_API void rz_core_anal_cc_init(RzCore *core); -RZ_API void rz_core_anal_paths(RzCore *core, ut64 from, ut64 to, bool followCalls, int followDepth, bool is_json); -RZ_API void rz_core_anal_esil_graph(RzCore *core, const char *expr); +RZ_API void rz_core_analysis_type_init(RzCore *core); +RZ_API void rz_core_link_stroff(RzCore *core, RzAnalysisFunction *fcn); +RZ_API void rz_core_analysis_inflags (RzCore *core, const char *glob); +RZ_API bool cmd_anal_objc (RzCore *core, const char *input, bool auto_analysis); +RZ_API void rz_core_analysis_cc_init(RzCore *core); +RZ_API void rz_core_analysis_paths(RzCore *core, ut64 from, ut64 to, bool followCalls, int followDepth, bool is_json); +RZ_API void rz_core_analysis_esil_graph(RzCore *core, const char *expr); RZ_API void rz_core_list_io(RzCore *core); RZ_API RzListInfo *rz_listinfo_new (const char *name, RzInterval pitv, RzInterval vitv, int perm, const char *extra); @@ -543,61 +543,61 @@ RZ_API char *rz_core_cmd_str(RzCore *core, const char *cmd); RZ_API int rz_core_cmd_foreach(RzCore *core, const char *cmd, char *each); RZ_API int rz_core_cmd_foreach3(RzCore *core, const char *cmd, char *each); RZ_API char *rz_core_op_str(RzCore *core, ut64 addr); -RZ_API RzAnalOp *rz_core_op_anal(RzCore *core, ut64 addr, RzAnalOpMask mask); +RZ_API RzAnalysisOp *rz_core_op_anal(RzCore *core, ut64 addr, RzAnalysisOpMask mask); RZ_API char *rz_core_disassemble_instr(RzCore *core, ut64 addr, int l); RZ_API char *rz_core_disassemble_bytes(RzCore *core, ut64 addr, int b); /* carg.c */ RZ_API RzList *rz_core_get_func_args(RzCore *core, const char *func_name); RZ_API void rz_core_print_func_args(RzCore *core); -RZ_API char *resolve_fcn_name(RzAnal *anal, const char * func_name); +RZ_API char *resolve_fcn_name(RzAnalysis *analysis, const char * func_name); RZ_API int rz_core_get_stacksz(RzCore *core, ut64 from, ut64 to); /* anal.c */ -RZ_API RzAnalOp* rz_core_anal_op(RzCore *core, ut64 addr, int mask); -RZ_API void rz_core_anal_esil(RzCore *core, const char *str, const char *addr); -RZ_API void rz_core_anal_fcn_merge(RzCore *core, ut64 addr, ut64 addr2); -RZ_API const char *rz_core_anal_optype_colorfor(RzCore *core, ut64 addr, bool verbose); -RZ_API ut64 rz_core_anal_address(RzCore *core, ut64 addr); -RZ_API void rz_core_anal_undefine(RzCore *core, ut64 off); -RZ_API void rz_core_anal_hint_print(RzAnal* a, ut64 addr, int mode); -RZ_API void rz_core_anal_hint_list(RzAnal *a, int mode); -RZ_API int rz_core_anal_search(RzCore *core, ut64 from, ut64 to, ut64 ref, int mode); -RZ_API int rz_core_anal_search_xrefs(RzCore *core, ut64 from, ut64 to, int rad); -RZ_API int rz_core_anal_data(RzCore *core, ut64 addr, int count, int depth, int wordsize); -RZ_API void rz_core_anal_datarefs(RzCore *core, ut64 addr); -RZ_API void rz_core_anal_coderefs(RzCore *core, ut64 addr); -RZ_API RzGraph/*RzGraphNodeInfo*/ *rz_core_anal_codexrefs(RzCore *core, ut64 addr); -RZ_API RzGraph/*RzGraphNodeInfo*/ *rz_core_anal_importxrefs(RzCore *core); -RZ_API void rz_core_anal_callgraph(RzCore *core, ut64 addr, int fmt); -RZ_API int rz_core_anal_refs(RzCore *core, const char *input); +RZ_API RzAnalysisOp* rz_core_analysis_op(RzCore *core, ut64 addr, int mask); +RZ_API void rz_core_analysis_esil(RzCore *core, const char *str, const char *addr); +RZ_API void rz_core_analysis_fcn_merge(RzCore *core, ut64 addr, ut64 addr2); +RZ_API const char *rz_core_analysis_optype_colorfor(RzCore *core, ut64 addr, bool verbose); +RZ_API ut64 rz_core_analysis_address(RzCore *core, ut64 addr); +RZ_API void rz_core_analysis_undefine(RzCore *core, ut64 off); +RZ_API void rz_core_analysis_hint_print(RzAnalysis* a, ut64 addr, int mode); +RZ_API void rz_core_analysis_hint_list(RzAnalysis *a, int mode); +RZ_API int rz_core_analysis_search(RzCore *core, ut64 from, ut64 to, ut64 ref, int mode); +RZ_API int rz_core_analysis_search_xrefs(RzCore *core, ut64 from, ut64 to, int rad); +RZ_API int rz_core_analysis_data(RzCore *core, ut64 addr, int count, int depth, int wordsize); +RZ_API void rz_core_analysis_datarefs(RzCore *core, ut64 addr); +RZ_API void rz_core_analysis_coderefs(RzCore *core, ut64 addr); +RZ_API RzGraph/*RzGraphNodeInfo*/ *rz_core_analysis_codexrefs(RzCore *core, ut64 addr); +RZ_API RzGraph/*RzGraphNodeInfo*/ *rz_core_analysis_importxrefs(RzCore *core); +RZ_API void rz_core_analysis_callgraph(RzCore *core, ut64 addr, int fmt); +RZ_API int rz_core_analysis_refs(RzCore *core, const char *input); RZ_API void rz_core_agraph_print(RzCore *core, int use_utf, const char *input); -RZ_API bool rz_core_esil_cmd(RzAnalEsil *esil, const char *cmd, ut64 a1, ut64 a2); +RZ_API bool rz_core_esil_cmd(RzAnalysisEsil *esil, const char *cmd, ut64 a1, ut64 a2); RZ_API int rz_core_esil_step(RzCore *core, ut64 until_addr, const char *until_expr, ut64 *prev_addr, bool stepOver); RZ_API int rz_core_esil_step_back(RzCore *core); -RZ_API ut64 rz_core_anal_get_bbaddr(RzCore *core, ut64 addr); -RZ_API bool rz_core_anal_bb_seek(RzCore *core, ut64 addr); -RZ_API int rz_core_anal_fcn(RzCore *core, ut64 at, ut64 from, int reftype, int depth); -RZ_API char *rz_core_anal_fcn_autoname(RzCore *core, ut64 addr, int dump, int mode); -RZ_API void rz_core_anal_autoname_all_fcns(RzCore *core); -RZ_API void rz_core_anal_autoname_all_golang_fcns(RzCore *core); -RZ_API int rz_core_anal_fcn_list(RzCore *core, const char *input, const char *rad); -RZ_API char *rz_core_anal_fcn_name(RzCore *core, RzAnalFunction *fcn); -RZ_API ut64 rz_core_anal_fcn_list_size(RzCore *core); -RZ_API void rz_core_anal_fcn_labels(RzCore *core, RzAnalFunction *fcn, int rad); -RZ_API int rz_core_anal_fcn_clean(RzCore *core, ut64 addr); -RZ_API int rz_core_print_bb_custom(RzCore *core, RzAnalFunction *fcn); -RZ_API int rz_core_print_bb_gml(RzCore *core, RzAnalFunction *fcn); -RZ_API int rz_core_anal_graph(RzCore *core, ut64 addr, int opts); -RZ_API int rz_core_anal_graph_fcn(RzCore *core, char *input, int opts); -RZ_API RzList* rz_core_anal_graph_to(RzCore *core, ut64 addr, int n); -RZ_API int rz_core_anal_ref_list(RzCore *core, int rad); -RZ_API int rz_core_anal_all(RzCore *core); -RZ_API RzList* rz_core_anal_cycles (RzCore *core, int ccl); -RZ_API RzList *rz_core_anal_fcn_get_calls (RzCore *core, RzAnalFunction *fcn); // get all calls from a function +RZ_API ut64 rz_core_analysis_get_bbaddr(RzCore *core, ut64 addr); +RZ_API bool rz_core_analysis_bb_seek(RzCore *core, ut64 addr); +RZ_API int rz_core_analysis_fcn(RzCore *core, ut64 at, ut64 from, int reftype, int depth); +RZ_API char *rz_core_analysis_fcn_autoname(RzCore *core, ut64 addr, int dump, int mode); +RZ_API void rz_core_analysis_autoname_all_fcns(RzCore *core); +RZ_API void rz_core_analysis_autoname_all_golang_fcns(RzCore *core); +RZ_API int rz_core_analysis_fcn_list(RzCore *core, const char *input, const char *rad); +RZ_API char *rz_core_analysis_fcn_name(RzCore *core, RzAnalysisFunction *fcn); +RZ_API ut64 rz_core_analysis_fcn_list_size(RzCore *core); +RZ_API void rz_core_analysis_fcn_labels(RzCore *core, RzAnalysisFunction *fcn, int rad); +RZ_API int rz_core_analysis_fcn_clean(RzCore *core, ut64 addr); +RZ_API int rz_core_print_bb_custom(RzCore *core, RzAnalysisFunction *fcn); +RZ_API int rz_core_print_bb_gml(RzCore *core, RzAnalysisFunction *fcn); +RZ_API int rz_core_analysis_graph(RzCore *core, ut64 addr, int opts); +RZ_API int rz_core_analysis_graph_fcn(RzCore *core, char *input, int opts); +RZ_API RzList* rz_core_analysis_graph_to(RzCore *core, ut64 addr, int n); +RZ_API int rz_core_analysis_ref_list(RzCore *core, int rad); +RZ_API int rz_core_analysis_all(RzCore *core); +RZ_API RzList* rz_core_analysis_cycles (RzCore *core, int ccl); +RZ_API RzList *rz_core_analysis_fcn_get_calls (RzCore *core, RzAnalysisFunction *fcn); // get all calls from a function /*tp.c*/ -RZ_API void rz_core_anal_type_match(RzCore *core, RzAnalFunction *fcn); +RZ_API void rz_core_analysis_type_match(RzCore *core, RzAnalysisFunction *fcn); /* asm.c */ #define RZ_MIDFLAGS_SHOW 1 @@ -623,7 +623,7 @@ RZ_API RzList *rz_core_asm_bwdisassemble (RzCore *core, ut64 addr, int n, int le RZ_API RzList *rz_core_asm_back_disassemble_instr (RzCore *core, ut64 addr, int len, ut32 hit_count, ut32 extra_padding); RZ_API RzList *rz_core_asm_back_disassemble_byte (RzCore *core, ut64 addr, int len, ut32 hit_count, ut32 extra_padding); RZ_API ut32 rz_core_asm_bwdis_len (RzCore* core, int* len, ut64* start_addr, ut32 l); -RZ_API int rz_core_print_disasm(RzPrint *p, RzCore *core, ut64 addr, ut8 *buf, int len, int lines, int invbreak, int nbytes, bool json, PJ *pj, RzAnalFunction *pdf); +RZ_API int rz_core_print_disasm(RzPrint *p, RzCore *core, ut64 addr, ut8 *buf, int len, int lines, int invbreak, int nbytes, bool json, PJ *pj, RzAnalysisFunction *pdf); RZ_API int rz_core_print_disasm_json(RzCore *core, ut64 addr, ut8 *buf, int len, int lines, PJ *pj); RZ_API int rz_core_print_disasm_instructions_with_buf(RzCore *core, ut64 address, ut8 *buf, int nb_bytes, int nb_opcodes); RZ_API int rz_core_print_disasm_instructions(RzCore *core, int nb_bytes, int nb_opcodes); @@ -661,7 +661,7 @@ RZ_API int rz_core_gdiff_fcn(RzCore *c, ut64 addr, ut64 addr2); RZ_API char *rz_core_sysenv_begin(RzCore *core, const char *cmd); RZ_API void rz_core_sysenv_end(RzCore *core, const char *cmd); -RZ_API void rz_core_recover_vars(RzCore *core, RzAnalFunction *fcn, bool argonly); +RZ_API void rz_core_recover_vars(RzCore *core, RzAnalysisFunction *fcn, bool argonly); // XXX dupe from rz_bin.h /* bin.c */ #define RZ_CORE_BIN_ACC_STRINGS 0x001 @@ -794,10 +794,10 @@ typedef struct { RZ_API bool core_anal_bbs(RzCore *core, const char* input); RZ_API bool core_anal_bbs_range (RzCore *core, const char* input); -RZ_API char *rz_core_anal_hasrefs(RzCore *core, ut64 value, bool verbose); -RZ_API char *rz_core_anal_get_comments(RzCore *core, ut64 addr); -RZ_API RzCoreAnalStats* rz_core_anal_get_stats (RzCore *a, ut64 from, ut64 to, ut64 step); -RZ_API void rz_core_anal_stats_free (RzCoreAnalStats *s); +RZ_API char *rz_core_analysis_hasrefs(RzCore *core, ut64 value, bool verbose); +RZ_API char *rz_core_analysis_get_comments(RzCore *core, ut64 addr); +RZ_API RzCoreAnalStats* rz_core_analysis_get_stats (RzCore *a, ut64 from, ut64 to, ut64 step); +RZ_API void rz_core_analysis_stats_free (RzCoreAnalStats *s); RZ_API void rz_core_syscmd_ls(const char *input); RZ_API void rz_core_syscmd_cat(const char *file); @@ -879,7 +879,7 @@ RZ_API void rz_core_autocomplete_free(RzCoreAutocomplete *obj); RZ_API void rz_core_autocomplete_reload (RzCore *core); RZ_API RzCoreAutocomplete *rz_core_autocomplete_find(RzCoreAutocomplete *parent, const char* cmd, bool exact); RZ_API bool rz_core_autocomplete_remove(RzCoreAutocomplete *parent, const char* cmd); -RZ_API void rz_core_anal_propagate_noreturn(RzCore *core, ut64 addr); +RZ_API void rz_core_analysis_propagate_noreturn(RzCore *core, ut64 addr); /* PLUGINS */ extern RzCorePlugin rz_core_plugin_java; diff --git a/librz/include/rz_debug.h b/librz/include/rz_debug.h index c8d7f6fa6d..60bb73c22b 100644 --- a/librz/include/rz_debug.h +++ b/librz/include/rz_debug.h @@ -2,7 +2,7 @@ #define RZ_DEBUG_H #include -#include +#include #include #include #include @@ -117,7 +117,7 @@ typedef enum { } RzDebugReasonType; -/* TODO: move to rz_anal */ +/* TODO: move to rz_analysis */ typedef struct rz_debug_frame_t { ut64 addr; int size; @@ -304,12 +304,12 @@ typedef struct rz_debug_t { RzEvent *ev; - RzAnal *anal; + RzAnalysis *analysis; RzList *maps; // RzList *maps_user; // bool trace_continue; - RzAnalOp *cur_op; + RzAnalysisOp *cur_op; RzDebugSession *session; Sdb *sgnls; @@ -549,7 +549,7 @@ RZ_API void rz_debug_tracenodes_reset(RzDebug *dbg); RZ_API void rz_debug_trace_reset(RzDebug *dbg); RZ_API int rz_debug_trace_pc(RzDebug *dbg, ut64 pc); -RZ_API void rz_debug_trace_op(RzDebug *dbg, RzAnalOp *op); +RZ_API void rz_debug_trace_op(RzDebug *dbg, RzAnalysisOp *op); RZ_API void rz_debug_trace_at(RzDebug *dbg, const char *str); RZ_API RzDebugTracepoint *rz_debug_trace_get(RzDebug *dbg, ut64 addr); RZ_API void rz_debug_trace_list(RzDebug *dbg, int mode, ut64 offset); diff --git a/librz/include/rz_parse.h b/librz/include/rz_parse.h index 38d8d93026..50e4464ee1 100644 --- a/librz/include/rz_parse.h +++ b/librz/include/rz_parse.h @@ -5,7 +5,7 @@ #include #include -#include +#include #ifdef __cplusplus extern "C" { @@ -13,7 +13,7 @@ extern "C" { RZ_LIB_VERSION_HEADER(rz_parse); -typedef RzList* (*RzAnalVarList)(RzAnalFunction *fcn, int kind); +typedef RzList* (*RzAnalysisVarList)(RzAnalysisFunction *fcn, int kind); typedef struct rz_parse_t { void *user; @@ -29,15 +29,15 @@ typedef struct rz_parse_t { int minval; char *retleave_asm; struct rz_parse_plugin_t *cur; - // RzAnal *anal; // weak anal ref XXX do not use. use analb.anal + // RzAnalysis *analysis; // weak anal ref XXX do not use. use analb.anal RzList *parsers; - RzAnalVarList varlist; - st64 (*get_ptr_at)(RzAnalFunction *fcn, st64 delta, ut64 addr); - const char *(*get_reg_at)(RzAnalFunction *fcn, st64 delta, ut64 addr); + RzAnalysisVarList varlist; + st64 (*get_ptr_at)(RzAnalysisFunction *fcn, st64 delta, ut64 addr); + const char *(*get_reg_at)(RzAnalysisFunction *fcn, st64 delta, ut64 addr); char* (*get_op_ireg)(void *user, ut64 addr); - RzAnalBind analb; + RzAnalysisBind analb; RzFlagGetAtAddr flag_get; // XXX - RzAnalLabelAt label_get; + RzAnalysisLabelAt label_get; } RzParse; typedef struct rz_parse_plugin_t { @@ -48,7 +48,7 @@ typedef struct rz_parse_plugin_t { int (*parse)(RzParse *p, const char *data, char *str); bool (*assemble)(RzParse *p, char *data, char *str); int (*filter)(RzParse *p, ut64 addr, RzFlag *f, char *data, char *str, int len, bool big_endian); - bool (*subvar)(RzParse *p, RzAnalFunction *f, ut64 addr, int oplen, char *data, char *str, int len); + bool (*subvar)(RzParse *p, RzAnalysisFunction *f, ut64 addr, int oplen, char *data, char *str, int len); int (*replace)(int argc, const char *argv[], char *newstr); } RzParsePlugin; @@ -66,14 +66,14 @@ RZ_API bool rz_parse_use(RzParse *p, const char *name); /* action */ RZ_API bool rz_parse_parse(RzParse *p, const char *data, char *str); RZ_API bool rz_parse_assemble(RzParse *p, char *data, char *str); // XXX deprecate, unused and probably useless, related to write-hack -RZ_API bool rz_parse_filter(RzParse *p, ut64 addr, RzFlag *f, RzAnalHint *hint, char *data, char *str, int len, bool big_endian); -RZ_API bool rz_parse_subvar(RzParse *p, RzAnalFunction *f, ut64 addr, int oplen, char *data, char *str, int len); +RZ_API bool rz_parse_filter(RzParse *p, ut64 addr, RzFlag *f, RzAnalysisHint *hint, char *data, char *str, int len, bool big_endian); +RZ_API bool rz_parse_subvar(RzParse *p, RzAnalysisFunction *f, ut64 addr, int oplen, char *data, char *str, int len); RZ_API char *rz_parse_immtrim(char *opstr); /* c */ // why we have anal scoped things in rparse -RZ_API char *rz_parse_c_string(RzAnal *anal, const char *code, char **error_msg); -RZ_API char *rz_parse_c_file(RzAnal *anal, const char *path, const char *dir, char **error_msg); +RZ_API char *rz_parse_c_string(RzAnalysis *analysis, const char *code, char **error_msg); +RZ_API char *rz_parse_c_file(RzAnalysis *analysis, const char *path, const char *dir, char **error_msg); RZ_API void rz_parse_c_reset(RzParse *p); /* ctype */ diff --git a/librz/include/rz_sign.h b/librz/include/rz_sign.h index f84400cd54..a686f5b2d0 100644 --- a/librz/include/rz_sign.h +++ b/librz/include/rz_sign.h @@ -2,7 +2,7 @@ #define RZ_SIGN_H #include -#include +#include #include #ifdef __cplusplus @@ -70,7 +70,7 @@ typedef struct rz_sign_item_t { typedef int (*RzSignForeachCallback)(RzSignItem *it, void *user); typedef int (*RzSignSearchCallback)(RzSignItem *it, RzSearchKeyword *kw, ut64 addr, void *user); -typedef int (*RzSignMatchCallback)(RzSignItem *it, RzAnalFunction *fcn, RzSignType type, bool seen, void *user); +typedef int (*RzSignMatchCallback)(RzSignItem *it, RzAnalysisFunction *fcn, RzSignType type, bool seen, void *user); typedef struct rz_sign_search_met { /* types is an 0 terminated array of RzSignTypes that are going to be @@ -78,10 +78,10 @@ typedef struct rz_sign_search_met { */ RzSignType types[7]; int mincc; // min complexity for graph search - RzAnal *anal; + RzAnalysis *analysis; void *user; // user data for callback function RzSignMatchCallback cb; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; } RzSignSearchMetrics; typedef struct rz_sign_search_t { @@ -104,59 +104,59 @@ typedef struct { } RzSignCloseMatch; #ifdef RZ_API -RZ_API bool rz_sign_add_bytes(RzAnal *a, const char *name, ut64 size, const ut8 *bytes, const ut8 *mask); -RZ_API bool rz_sign_add_anal(RzAnal *a, const char *name, ut64 size, const ut8 *bytes, ut64 at); -RZ_API bool rz_sign_add_graph(RzAnal *a, const char *name, RzSignGraph graph); -RZ_API bool rz_sign_addto_item(RzAnal *a, RzSignItem *it, RzAnalFunction *fcn, RzSignType type); -RZ_API bool rz_sign_add_addr(RzAnal *a, const char *name, ut64 addr); -RZ_API bool rz_sign_add_name(RzAnal *a, const char *name, const char *realname); -RZ_API bool rz_sign_add_comment(RzAnal *a, const char *name, const char *comment); -RZ_API bool rz_sign_add_refs(RzAnal *a, const char *name, RzList *refs); -RZ_API bool rz_sign_add_xrefs(RzAnal *a, const char *name, RzList *xrefs); -RZ_API bool rz_sign_add_vars(RzAnal *a, const char *name, RzList *vars); -RZ_API bool rz_sign_add_types(RzAnal *a, const char *name, RzList *vars); -RZ_API bool rz_sign_delete(RzAnal *a, const char *name); -RZ_API void rz_sign_list(RzAnal *a, int format); -RZ_API RzList *rz_sign_get_list(RzAnal *a); -RZ_API bool rz_sign_add_hash(RzAnal *a, const char *name, int type, const char *val, int len); -RZ_API bool rz_sign_add_bb_hash(RzAnal *a, RzAnalFunction *fcn, const char *name); -RZ_API char *rz_sign_calc_bbhash(RzAnal *a, RzAnalFunction *fcn); -RZ_API bool rz_sign_deserialize(RzAnal *a, RzSignItem *it, const char *k, const char *v); -RZ_API RzSignItem *rz_sign_get_item(RzAnal *a, const char *name); -RZ_API bool rz_sign_add_item(RzAnal *a, RzSignItem *it); +RZ_API bool rz_sign_add_bytes(RzAnalysis *a, const char *name, ut64 size, const ut8 *bytes, const ut8 *mask); +RZ_API bool rz_sign_add_anal(RzAnalysis *a, const char *name, ut64 size, const ut8 *bytes, ut64 at); +RZ_API bool rz_sign_add_graph(RzAnalysis *a, const char *name, RzSignGraph graph); +RZ_API bool rz_sign_addto_item(RzAnalysis *a, RzSignItem *it, RzAnalysisFunction *fcn, RzSignType type); +RZ_API bool rz_sign_add_addr(RzAnalysis *a, const char *name, ut64 addr); +RZ_API bool rz_sign_add_name(RzAnalysis *a, const char *name, const char *realname); +RZ_API bool rz_sign_add_comment(RzAnalysis *a, const char *name, const char *comment); +RZ_API bool rz_sign_add_refs(RzAnalysis *a, const char *name, RzList *refs); +RZ_API bool rz_sign_add_xrefs(RzAnalysis *a, const char *name, RzList *xrefs); +RZ_API bool rz_sign_add_vars(RzAnalysis *a, const char *name, RzList *vars); +RZ_API bool rz_sign_add_types(RzAnalysis *a, const char *name, RzList *vars); +RZ_API bool rz_sign_delete(RzAnalysis *a, const char *name); +RZ_API void rz_sign_list(RzAnalysis *a, int format); +RZ_API RzList *rz_sign_get_list(RzAnalysis *a); +RZ_API bool rz_sign_add_hash(RzAnalysis *a, const char *name, int type, const char *val, int len); +RZ_API bool rz_sign_add_bb_hash(RzAnalysis *a, RzAnalysisFunction *fcn, const char *name); +RZ_API char *rz_sign_calc_bbhash(RzAnalysis *a, RzAnalysisFunction *fcn); +RZ_API bool rz_sign_deserialize(RzAnalysis *a, RzSignItem *it, const char *k, const char *v); +RZ_API RzSignItem *rz_sign_get_item(RzAnalysis *a, const char *name); +RZ_API bool rz_sign_add_item(RzAnalysis *a, RzSignItem *it); -RZ_API bool rz_sign_foreach(RzAnal *a, RzSignForeachCallback cb, void *user); +RZ_API bool rz_sign_foreach(RzAnalysis *a, RzSignForeachCallback cb, void *user); RZ_API RzSignSearch *rz_sign_search_new(void); RZ_API void rz_sign_search_free(RzSignSearch *ss); -RZ_API void rz_sign_search_init(RzAnal *a, RzSignSearch *ss, int minsz, RzSignSearchCallback cb, void *user); -RZ_API int rz_sign_search_update(RzAnal *a, RzSignSearch *ss, ut64 *at, const ut8 *buf, int len); +RZ_API void rz_sign_search_init(RzAnalysis *a, RzSignSearch *ss, int minsz, RzSignSearchCallback cb, void *user); +RZ_API int rz_sign_search_update(RzAnalysis *a, RzSignSearch *ss, ut64 *at, const ut8 *buf, int len); RZ_API int rz_sign_fcn_match_metrics(RzSignSearchMetrics *sm); -RZ_API bool rz_sign_load(RzAnal *a, const char *file); -RZ_API bool rz_sign_load_gz(RzAnal *a, const char *filename); -RZ_API char *rz_sign_path(RzAnal *a, const char *file); -RZ_API bool rz_sign_save(RzAnal *a, const char *file); +RZ_API bool rz_sign_load(RzAnalysis *a, const char *file); +RZ_API bool rz_sign_load_gz(RzAnalysis *a, const char *filename); +RZ_API char *rz_sign_path(RzAnalysis *a, const char *file); +RZ_API bool rz_sign_save(RzAnalysis *a, const char *file); RZ_API RzSignItem *rz_sign_item_new(void); RZ_API void rz_sign_item_free(RzSignItem *item); RZ_API void rz_sign_graph_free(RzSignGraph *graph); RZ_API void rz_sign_bytes_free(RzSignBytes *bytes); -RZ_API RzList *rz_sign_fcn_refs(RzAnal *a, RzAnalFunction *fcn); -RZ_API RzList *rz_sign_fcn_xrefs(RzAnal *a, RzAnalFunction *fcn); -RZ_API RzList *rz_sign_fcn_vars(RzAnal *a, RzAnalFunction *fcn); -RZ_API RzList *rz_sign_fcn_types(RzAnal *a, RzAnalFunction *fcn); +RZ_API RzList *rz_sign_fcn_refs(RzAnalysis *a, RzAnalysisFunction *fcn); +RZ_API RzList *rz_sign_fcn_xrefs(RzAnalysis *a, RzAnalysisFunction *fcn); +RZ_API RzList *rz_sign_fcn_vars(RzAnalysis *a, RzAnalysisFunction *fcn); +RZ_API RzList *rz_sign_fcn_types(RzAnalysis *a, RzAnalysisFunction *fcn); RZ_API int rz_sign_is_flirt(RzBuffer *buf); -RZ_API void rz_sign_flirt_dump(const RzAnal *anal, const char *flirt_file); -RZ_API void rz_sign_flirt_scan(RzAnal *anal, const char *flirt_file); +RZ_API void rz_sign_flirt_dump(const RzAnalysis *analysis, const char *flirt_file); +RZ_API void rz_sign_flirt_scan(RzAnalysis *analysis, const char *flirt_file); -RZ_API RzList *rz_sign_find_closest_sig(RzAnal *a, RzSignItem *it, int count, double score_threshold); -RZ_API RzList *rz_sign_find_closest_fcn(RzAnal *a, RzSignItem *it, int count, double score_threshold); +RZ_API RzList *rz_sign_find_closest_sig(RzAnalysis *a, RzSignItem *it, int count, double score_threshold); +RZ_API RzList *rz_sign_find_closest_fcn(RzAnalysis *a, RzSignItem *it, int count, double score_threshold); RZ_API void rz_sign_close_match_free(RzSignCloseMatch *match); -RZ_API bool rz_sign_diff(RzAnal *a, RzSignOptions *options, const char *other_space_name); -RZ_API bool rz_sign_diff_by_name(RzAnal *a, RzSignOptions *options, const char *other_space_name, bool not_matching); +RZ_API bool rz_sign_diff(RzAnalysis *a, RzSignOptions *options, const char *other_space_name); +RZ_API bool rz_sign_diff_by_name(RzAnalysis *a, RzSignOptions *options, const char *other_space_name, bool not_matching); RZ_API RzSignOptions *rz_sign_options_new(const char *bytes_thresh, const char *graph_thresh); RZ_API void rz_sign_options_free(RzSignOptions *options); diff --git a/librz/include/rz_types.h b/librz/include/rz_types.h index 1cd48f48d5..bb604a83ba 100644 --- a/librz/include/rz_types.h +++ b/librz/include/rz_types.h @@ -71,7 +71,7 @@ typedef enum { #undef RZ_NEWCOPY #endif -// used in debug, io, bin, anal, ... +// used in debug, io, bin, analysis, ... #define RZ_PERM_R 4 #define RZ_PERM_W 2 #define RZ_PERM_X 1 diff --git a/librz/include/rz_util/rz_event.h b/librz/include/rz_util/rz_event.h index 59879cada7..b8a3febe89 100644 --- a/librz/include/rz_util/rz_event.h +++ b/librz/include/rz_util/rz_event.h @@ -58,7 +58,7 @@ typedef struct rz_event_class_rename_t { typedef struct rz_event_class_attr_t { const char *class_name; - int attr_type; // RzAnalClassAttrType + int attr_type; // RzAnalysisClassAttrType const char *attr_id; } RzEventClassAttr; diff --git a/librz/include/rz_util/rz_graph_drawable.h b/librz/include/rz_util/rz_graph_drawable.h index d953472d82..9ebed76bba 100644 --- a/librz/include/rz_util/rz_graph_drawable.h +++ b/librz/include/rz_util/rz_graph_drawable.h @@ -14,7 +14,7 @@ extern "C" { * * Provides minimal information to draw something without output format specific details. */ -typedef struct rz_anal_graph_node_info_t { +typedef struct rz_analysis_graph_node_info_t { char *title; char *body; /** diff --git a/librz/libs.mk b/librz/libs.mk index f5011676dd..fe40be9c75 100644 --- a/librz/libs.mk +++ b/librz/libs.mk @@ -6,7 +6,7 @@ LIBS1=socket hash reg cons magic bp search config LIBS2=syscall lang crypto flag LIBS3=parse io LIBS4=asm bin -LIBS5=anal egg +LIBS5=analysis egg LIBS6=debug LIBS7=core LIBS8=main diff --git a/librz/main/deps.mk b/librz/main/deps.mk index aa4aee925f..3a13b443ca 100644 --- a/librz/main/deps.mk +++ b/librz/main/deps.mk @@ -2,7 +2,7 @@ MAIN_LINK_ALL=1 ifeq ($(MAIN_LINK_ALL),1) RZ_DEPS=rz_config rz_cons rz_io rz_util rz_flag rz_asm rz_core -RZ_DEPS+=rz_debug rz_hash rz_bin rz_lang rz_io rz_anal rz_parse rz_bp rz_egg +RZ_DEPS+=rz_debug rz_hash rz_bin rz_lang rz_io rz_analysis rz_parse rz_bp rz_egg RZ_DEPS+=rz_reg rz_search rz_syscall rz_socket rz_magic rz_crypto else # only works diff --git a/librz/main/meson.build b/librz/main/meson.build index 0c2903d08d..bc0cca7712 100644 --- a/librz/main/meson.build +++ b/librz/main/meson.build @@ -26,7 +26,7 @@ rz_main_deps = [ rz_bin_dep, rz_lang_dep, rz_io_dep, - rz_anal_dep, + rz_analysis_dep, rz_parse_dep, rz_bp_dep, rz_egg_dep, diff --git a/librz/main/rizin.c b/librz/main/rizin.c index 1c4c7df12f..f686f86753 100644 --- a/librz/main/rizin.c +++ b/librz/main/rizin.c @@ -33,7 +33,7 @@ static int rz_main_version_verify(int show) { const char *name; vc callback; } vcs[] = { - { "rz_anal", rz_anal_version }, + { "rz_analysis", rz_analysis_version }, { "rz_lib", rz_lib_version }, { "rz_egg", rz_egg_version }, { "rz_asm", rz_asm_version }, @@ -853,9 +853,9 @@ RZ_API int rz_main_rizin(int argc, const char **argv) { if (file && *file && *file != '.') { complete_path = rz_str_newf ("%s"RZ_SYS_DIR"%s", path, file); if (rz_str_endswith (complete_path, "gz")) { - rz_sign_load_gz (r->anal, complete_path); + rz_sign_load_gz (r->analysis, complete_path); } else { - rz_sign_load (r->anal, complete_path); + rz_sign_load (r->analysis, complete_path); } free (complete_path); } diff --git a/librz/main/rz_asm.c b/librz/main/rz_asm.c index 42ed79cacd..5a5322238f 100644 --- a/librz/main/rz_asm.c +++ b/librz/main/rz_asm.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: LGPL-3.0-only -#include +#include #include #include #include @@ -12,7 +12,7 @@ typedef struct { RzLib *l; RzAsm *a; - RzAnal *anal; + RzAnalysis *analysis; bool oneliner; bool coutput; bool json; @@ -23,10 +23,10 @@ static void __load_plugins(RzAsmState *as); static void __as_set_archbits(RzAsmState *as) { rz_asm_use (as->a, RZ_SYS_ARCH); - rz_anal_use (as->anal, RZ_SYS_ARCH); + rz_analysis_use (as->analysis, RZ_SYS_ARCH); int sysbits = (RZ_SYS_BITS & RZ_SYS_BITS_64)? 64: 32; rz_asm_set_bits (as->a, sysbits); - rz_anal_set_bits (as->anal, sysbits); + rz_analysis_set_bits (as->analysis, sysbits); } static RzAsmState *__as_new(void) { @@ -37,7 +37,7 @@ static RzAsmState *__as_new(void) { if (as->a) { as->a->num = rz_num_new (NULL, NULL, NULL); } - as->anal = rz_anal_new (); + as->analysis = rz_analysis_new (); __load_plugins (as); __as_set_archbits (as); } @@ -49,7 +49,7 @@ static void __as_free(RzAsmState *as) { rz_num_free (as->a->num); } rz_asm_free (as->a); - rz_anal_free (as->anal); + rz_analysis_free (as->analysis); rz_lib_free (as->l); free (as); } @@ -65,13 +65,13 @@ static char *stackop2str(int type) { return strdup ("unknown"); } -static int showanal(RzAsmState *as, RzAnalOp *op, ut64 offset, ut8 *buf, int len, PJ *pj) { - int ret = rz_anal_op (as->anal, op, offset, buf, len, RZ_ANAL_OP_MASK_ESIL); +static int showanal(RzAsmState *as, RzAnalysisOp *op, ut64 offset, ut8 *buf, int len, PJ *pj) { + int ret = rz_analysis_op (as->analysis, op, offset, buf, len, RZ_ANAL_OP_MASK_ESIL); if (ret < 1) { return ret; } char *stackop = stackop2str (op->stackop); - const char *optype = rz_anal_optype_to_string (op->type); + const char *optype = rz_analysis_optype_to_string (op->type); char *bytes = rz_hex_bin2strdup (buf, ret); if (as->json) { pj_o (pj); @@ -112,7 +112,7 @@ static int showanal(RzAsmState *as, RzAnalOp *op, ut64 offset, ut8 *buf, int len printf ("stackop: %s\n", stackop); printf ("esil: %s\n", rz_strbuf_get (&op->esil)); printf ("stackptr: %" PFMT64d "\n", op->stackptr); - // produces (null) printf ("decode str: %s\n", rz_anal_op_to_string (anal, op)); + // produces (null) printf ("decode str: %s\n", rz_analysis_op_to_string (analysis, op)); printf ("\n"); } free (stackop); @@ -130,14 +130,14 @@ static int show_analinfo(RzAsmState *as, const char *arg, ut64 offset) { return 0; } - RzAnalOp aop = { 0 }; + RzAnalysisOp aop = { 0 }; if (as->json) { pj_a (pj); } for (ret = 0; ret < len;) { aop.size = 0; - if (rz_anal_op (as->anal, &aop, offset, buf + ret, len - ret, RZ_ANAL_OP_MASK_BASIC) < 1) { + if (rz_analysis_op (as->analysis, &aop, offset, buf + ret, len - ret, RZ_ANAL_OP_MASK_BASIC) < 1) { eprintf ("Error analyzing instruction at 0x%08"PFMT64x"\n", offset); break; } @@ -154,7 +154,7 @@ static int show_analinfo(RzAsmState *as, const char *arg, ut64 offset) { } showanal (as, &aop, offset, buf + ret, len - ret, pj); ret += aop.size; - rz_anal_op_fini (&aop); + rz_analysis_op_fini (&aop); } if (as->json) { pj_end (pj); @@ -167,8 +167,8 @@ static int show_analinfo(RzAsmState *as, const char *arg, ut64 offset) { static const char *has_esil(RzAsmState *as, const char *name) { RzListIter *iter; - RzAnalPlugin *h; - rz_list_foreach (as->anal->plugins, iter, h) { + RzAnalysisPlugin *h; + rz_list_foreach (as->analysis->plugins, iter, h) { if (h->name && !strcmp (name, h->name)) { return h->esil? "Ae": "A_"; } @@ -346,10 +346,10 @@ static int rasm_disasm(RzAsmState *as, ut64 addr, const char *buf, int len, int } if (hex == 2) { - RzAnalOp aop = { 0 }; + RzAnalysisOp aop = { 0 }; while (ret < len) { aop.size = 0; - if (rz_anal_op (as->anal, &aop, addr, data + ret, len - ret, RZ_ANAL_OP_MASK_ESIL) > 0) { + if (rz_analysis_op (as->analysis, &aop, addr, data + ret, len - ret, RZ_ANAL_OP_MASK_ESIL) > 0) { printf ("%s\n", RZ_STRBUF_SAFEGET (&aop.esil)); } if (aop.size < 1) { @@ -357,7 +357,7 @@ static int rasm_disasm(RzAsmState *as, ut64 addr, const char *buf, int len, int break; } ret += aop.size; - rz_anal_op_fini (&aop); + rz_analysis_op_fini (&aop); } } else if (hex) { RzAsmOp op; @@ -479,9 +479,9 @@ static int __lib_asm_cb(RzLibPlugin *pl, void *user, void *data) { /* anal callback */ static int __lib_anal_cb(RzLibPlugin *pl, void *user, void *data) { - RzAnalPlugin *hand = (RzAnalPlugin *)data; + RzAnalysisPlugin *hand = (RzAnalysisPlugin *)data; RzAsmState *as = (RzAsmState *)user; - rz_anal_add (as->anal, hand); + rz_analysis_add (as->analysis, hand); return true; } @@ -695,7 +695,7 @@ RZ_API int rz_main_rz_asm(int argc, const char *argv[]) { ret = 0; goto beach; } - rz_anal_use (as->anal, arch); + rz_analysis_use (as->analysis, arch); } else if (env_arch) { if (!rz_asm_use (as->a, env_arch)) { eprintf ("rz_asm: Unknown asm plugin '%s'\n", env_arch); @@ -709,7 +709,7 @@ RZ_API int rz_main_rz_asm(int argc, const char *argv[]) { } rz_asm_set_cpu (as->a, cpu); rz_asm_set_bits (as->a, (env_bits && *env_bits)? atoi (env_bits): bits); - rz_anal_set_bits (as->anal, (env_bits && *env_bits)? atoi (env_bits): bits); + rz_analysis_set_bits (as->analysis, (env_bits && *env_bits)? atoi (env_bits): bits); as->a->syscall = rz_syscall_new (); rz_syscall_setup (as->a->syscall, arch, bits, cpu, kernel); { @@ -717,7 +717,7 @@ RZ_API int rz_main_rz_asm(int argc, const char *argv[]) { if (isbig && !canbebig) { eprintf ("Warning: This architecture can't swap to big endian.\n"); } - rz_anal_set_big_endian (as->anal, canbebig); + rz_analysis_set_big_endian (as->analysis, canbebig); } if (whatsop) { const char *s = rz_asm_describe (as->a, opt.argv[opt.ind]); diff --git a/librz/main/rz_diff.c b/librz/main/rz_diff.c index 18a3001bb9..a094f867a8 100644 --- a/librz/main/rz_diff.c +++ b/librz/main/rz_diff.c @@ -833,7 +833,7 @@ static char *get_graph_commands(RzCore *c, ut64 off) { bool tmp_html = rz_cons_singleton ()->is_html; rz_cons_singleton ()->is_html = false; rz_cons_push (); - rz_core_anal_graph (c, off, RZ_CORE_ANAL_GRAPHBODY | RZ_CORE_ANAL_GRAPHDIFF | RZ_CORE_ANAL_STAR); + rz_core_analysis_graph (c, off, RZ_CORE_ANAL_GRAPHBODY | RZ_CORE_ANAL_GRAPHDIFF | RZ_CORE_ANAL_STAR); const char *static_str = rz_cons_get_buffer (); char *retstr = strdup (static_str? static_str: ""); rz_cons_pop (); @@ -881,10 +881,10 @@ static void __print_diff_graph(RzCore *c, ut64 off, int gmode) { rz_agraph_reset(c->graph); switch (gmode) { case GRAPH_DOT_MODE: - rz_core_anal_graph (c, off, opts); + rz_core_analysis_graph (c, off, opts); break; case GRAPH_STAR_MODE: - rz_core_anal_graph (c, off, opts | RZ_CORE_ANAL_STAR); + rz_core_analysis_graph (c, off, opts | RZ_CORE_ANAL_STAR); break; case GRAPH_TINY_MODE: __generate_graph (c, off); @@ -904,10 +904,10 @@ static void __print_diff_graph(RzCore *c, ut64 off, int gmode) { rz_core_agraph_print (c, use_utf8, "g"); break; case GRAPH_JSON_MODE: - rz_core_anal_graph (c, off, opts | RZ_CORE_ANAL_JSON); + rz_core_analysis_graph (c, off, opts | RZ_CORE_ANAL_JSON); break; case GRAPH_JSON_DIS_MODE: - rz_core_anal_graph (c, off, opts | RZ_CORE_ANAL_JSON | RZ_CORE_ANAL_JSON_FORMAT_DISASM); + rz_core_analysis_graph (c, off, opts | RZ_CORE_ANAL_JSON | RZ_CORE_ANAL_JSON_FORMAT_DISASM); break; case GRAPH_DEFAULT_MODE: default: @@ -1101,8 +1101,8 @@ RZ_API int rz_main_rz_diff(int argc, const char **argv) { } rz_config_set_i (c->config, "diff.bare", showbare); rz_config_set_i (c2->config, "diff.bare", showbare); - rz_anal_diff_setup_i (c->anal, diffops, threshold, threshold); - rz_anal_diff_setup_i (c2->anal, diffops, threshold, threshold); + rz_analysis_diff_setup_i (c->analysis, diffops, threshold, threshold); + rz_analysis_diff_setup_i (c2->analysis, diffops, threshold, threshold); if (pdc) { if (!addr) { //addr = "entry0"; @@ -1131,15 +1131,15 @@ RZ_API int rz_main_rz_diff(int argc, const char **argv) { *second++ = 0; ut64 off = rz_num_math (c->num, words); // define the same function at each offset - rz_core_anal_fcn (c, off, UT64_MAX, RZ_ANAL_REF_TYPE_NULL, depth); - rz_core_anal_fcn (c2, rz_num_math (c2->num, second), + rz_core_analysis_fcn (c, off, UT64_MAX, RZ_ANAL_REF_TYPE_NULL, depth); + rz_core_analysis_fcn (c2, rz_num_math (c2->num, second), UT64_MAX, RZ_ANAL_REF_TYPE_NULL, depth); rz_core_gdiff (c, c2); __print_diff_graph (c, off, gmode); } else { - rz_core_anal_fcn (c, rz_num_math (c->num, words), + rz_core_analysis_fcn (c, rz_num_math (c->num, words), UT64_MAX, RZ_ANAL_REF_TYPE_NULL, depth); - rz_core_anal_fcn (c2, rz_num_math (c2->num, words), + rz_core_analysis_fcn (c2, rz_num_math (c2->num, words), UT64_MAX, RZ_ANAL_REF_TYPE_NULL, depth); rz_core_gdiff (c, c2); __print_diff_graph (c, rz_num_math (c->num, addr), gmode); diff --git a/librz/main/rz_sign.c b/librz/main/rz_sign.c index e714009aa0..7e747663f5 100644 --- a/librz/main/rz_sign.c +++ b/librz/main/rz_sign.c @@ -124,7 +124,7 @@ RZ_API int rz_main_rz_sign(int argc, const char **argv) { return -1; } core = opencore (NULL); - rz_sign_flirt_dump (core->anal, ifile); + rz_sign_flirt_dump (core->analysis, ifile); rz_cons_flush (); rz_core_free (core); return 0; @@ -145,7 +145,7 @@ RZ_API int rz_main_rz_sign(int argc, const char **argv) { } if (space) { - rz_spaces_set (&core->anal->zign_spaces, space); + rz_spaces_set (&core->analysis->zign_spaces, space); } // run analysis to find functions diff --git a/librz/meson.build b/librz/meson.build index 04d38cf1aa..9f05a95e97 100644 --- a/librz/meson.build +++ b/librz/meson.build @@ -1,4 +1,4 @@ -anal_plugins = [ +analysis_plugins = [ '6502', '8051', 'amd29k', @@ -317,7 +317,7 @@ parse_plugins = [ include_files =[ 'include/rznaked.h', 'include/rz_agraph.h', - 'include/rz_anal.h', + 'include/rz_analysis.h', 'include/rz_asm.h', 'include/rz_bind.h', 'include/rz_getopt.h', diff --git a/librz/parse/code.c b/librz/parse/code.c index a4cb26f26c..ceacd76c85 100644 --- a/librz/parse/code.c +++ b/librz/parse/code.c @@ -30,7 +30,7 @@ static bool __typeLoad(void *p, const char *k, const char *v) { return false; } int btype = 0; - RzAnal *anal = (RzAnal*)p; + RzAnalysis *analysis = (RzAnalysis*)p; //rz_cons_printf ("tk %s=%s\n", k, v); // TODO: Add unions support if (!strncmp (v, "struct", 6) && strncmp (k, "struct.", 7)) { @@ -40,7 +40,7 @@ static bool __typeLoad(void *p, const char *k, const char *v) { int typesize = 0; // TODO: Add typesize here char* query = sdb_fmt ("struct.%s", k); - char *members = sdb_get (anal->sdb_types, query, 0); + char *members = sdb_get (analysis->sdb_types, query, 0); char *next, *ptr = members; if (members) { do { @@ -49,7 +49,7 @@ static bool __typeLoad(void *p, const char *k, const char *v) { break; } query = sdb_fmt ("struct.%s.%s", k, name); - char *subtype = sdb_get (anal->sdb_types, query, 0); + char *subtype = sdb_get (analysis->sdb_types, query, 0); if (!subtype) { break; } @@ -63,7 +63,7 @@ static bool __typeLoad(void *p, const char *k, const char *v) { char *subname = tmp; // TODO: Go recurse here query = sdb_fmt ("struct.%s.%s.meta", subtype, subname); - btype = sdb_num_get (anal->sdb_types, query, 0); + btype = sdb_num_get (analysis->sdb_types, query, 0); tcc_sym_push (subtype, 0, btype); } free (subtype); @@ -93,15 +93,15 @@ static void __errorFunc(void *opaque, const char *msg) { } } -RZ_API char *rz_parse_c_file(RzAnal *anal, const char *path, const char *dir, char **error_msg) { +RZ_API char *rz_parse_c_file(RzAnalysis *analysis, const char *path, const char *dir, char **error_msg) { char *str = NULL; - TCCState *T = tcc_new (anal->cpu, anal->bits, anal->os); + TCCState *T = tcc_new (analysis->cpu, analysis->bits, analysis->os); if (!T) { return NULL; } tcc_set_callback (T, &__appendString, &str); tcc_set_error_func (T, (void *)error_msg, __errorFunc); - sdb_foreach (anal->sdb_types, __typeLoad, anal); + sdb_foreach (analysis->sdb_types, __typeLoad, analysis); if (tcc_add_file (T, path, dir) == -1) { free (str); str = NULL; @@ -110,15 +110,15 @@ RZ_API char *rz_parse_c_file(RzAnal *anal, const char *path, const char *dir, ch return str; } -RZ_API char *rz_parse_c_string(RzAnal *anal, const char *code, char **error_msg) { +RZ_API char *rz_parse_c_string(RzAnalysis *analysis, const char *code, char **error_msg) { char *str = NULL; - TCCState *T = tcc_new (anal->cpu, anal->bits, anal->os); + TCCState *T = tcc_new (analysis->cpu, analysis->bits, analysis->os); if (!T) { return NULL; } tcc_set_callback (T, &__appendString, &str); tcc_set_error_func (T, (void *)error_msg, __errorFunc); - sdb_foreach (anal->sdb_types, __typeLoad, NULL); + sdb_foreach (analysis->sdb_types, __typeLoad, NULL); if (tcc_compile_string (T, code) != 0) { free (str); str = NULL; diff --git a/librz/parse/filter.c b/librz/parse/filter.c index d577026f75..5b3d2ca775 100644 --- a/librz/parse/filter.c +++ b/librz/parse/filter.c @@ -138,9 +138,9 @@ static void __replaceRegisters(RzReg *reg, char *s, bool x86) { } } -static bool filter(RzParse *p, ut64 addr, RzFlag *f, RzAnalHint *hint, char *data, char *str, int len, bool big_endian) { +static bool filter(RzParse *p, ut64 addr, RzFlag *f, RzAnalysisHint *hint, char *data, char *str, int len, bool big_endian) { char *ptr = data, *ptr2, *ptr_backup; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; RzFlagItem *flag; ut64 off; bool x86 = false; @@ -164,9 +164,9 @@ static bool filter(RzParse *p, ut64 addr, RzFlag *f, RzAnalHint *hint, char *dat replaceWords (ptr, "qword ", src); #endif if (p->subreg) { - __replaceRegisters (p->analb.anal->reg, ptr, false); + __replaceRegisters (p->analb.analysis->reg, ptr, false); if (x86) { - __replaceRegisters (p->analb.anal->reg, ptr, true); + __replaceRegisters (p->analb.analysis->reg, ptr, true); } } ptr2 = NULL; @@ -186,7 +186,7 @@ static bool filter(RzParse *p, ut64 addr, RzFlag *f, RzAnalHint *hint, char *dat } off = rz_num_math (NULL, ptr); if (off >= p->minval) { - fcn = p->analb.get_fcn_in (p->analb.anal, off, 0); + fcn = p->analb.get_fcn_in (p->analb.analysis, off, 0); if (fcn && fcn->addr == off) { *ptr = 0; // hack to realign pointer for colours @@ -485,7 +485,7 @@ static bool filter(RzParse *p, ut64 addr, RzFlag *f, RzAnalHint *hint, char *dat break; case 10: { - RzList *regs = rz_reg_get_list (p->analb.anal->reg, RZ_REG_TYPE_GPR); + RzList *regs = rz_reg_get_list (p->analb.analysis->reg, RZ_REG_TYPE_GPR); RzRegItem *reg; RzListIter *iter; bool imm32 = false; @@ -513,9 +513,9 @@ static bool filter(RzParse *p, ut64 addr, RzFlag *f, RzAnalHint *hint, char *dat } break; case 80: - if (p && p->analb.anal && p->analb.anal->syscall) { + if (p && p->analb.analysis && p->analb.analysis->syscall) { RzSyscallItem *si; - si = rz_syscall_get (p->analb.anal->syscall, off, -1); + si = rz_syscall_get (p->analb.analysis->syscall, off, -1); if (si) { snprintf (num, sizeof (num), "%s()", si->name); } else { @@ -549,7 +549,7 @@ static bool filter(RzParse *p, ut64 addr, RzFlag *f, RzAnalHint *hint, char *dat // TODO we shouhld use RzCoreBind and use the hintGet/flagGet methods, but we can also have rflagbind+ranalbind, but kiss pls // TODO: NEW SIGNATURE: RZ_API char *rz_parse_filter(RzParse *p, ut64 addr, const char *str) // DEPRECATE -RZ_API bool rz_parse_filter(RzParse *p, ut64 addr, RzFlag *f, RzAnalHint *hint, char *data, char *str, int len, bool big_endian) { +RZ_API bool rz_parse_filter(RzParse *p, ut64 addr, RzFlag *f, RzAnalysisHint *hint, char *data, char *str, int len, bool big_endian) { filter (p, addr, f, hint, data, str, len, big_endian); if (p->cur && p->cur->filter) { return p->cur->filter (p, addr, f, data, str, len, big_endian); diff --git a/librz/parse/p/parse_6502_pseudo.c b/librz/parse/p/parse_6502_pseudo.c index c6b33d3976..e26b89fe16 100644 --- a/librz/parse/p/parse_6502_pseudo.c +++ b/librz/parse/p/parse_6502_pseudo.c @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include typedef enum { diff --git a/librz/parse/p/parse_arm_pseudo.c b/librz/parse/p/parse_arm_pseudo.c index aaf685f7a2..6559c83f9e 100644 --- a/librz/parse/p/parse_arm_pseudo.c +++ b/librz/parse/p/parse_arm_pseudo.c @@ -6,7 +6,7 @@ #include #include #include -#include +#include #include static int replace(int argc, const char *argv[], char *newstr) { @@ -277,7 +277,7 @@ static int parse(RzParse *p, const char *data, char *str) { return true; } -static char *subs_var_string(RzParse *p, RzAnalVarField *var, char *tstr, const char *oldstr, const char *reg, int delta) { +static char *subs_var_string(RzParse *p, RzAnalysisVarField *var, char *tstr, const char *oldstr, const char *reg, int delta) { char *newstr = p->localvar_only ? rz_str_newf ("%s", var->name) : rz_str_newf ("%s %c %s", reg, delta > 0 ? '+' : '-', var->name); @@ -325,11 +325,11 @@ static char *mount_oldstr(RzParse* p, const char *reg, st64 delta, bool ucase) { return oldstr; } -static bool subvar(RzParse *p, RzAnalFunction *f, ut64 addr, int oplen, char *data, char *str, int len) { +static bool subvar(RzParse *p, RzAnalysisFunction *f, ut64 addr, int oplen, char *data, char *str, int len) { RzList *spargs = NULL; RzList *bpargs = NULL; RzListIter *iter; - RzAnal *anal = p->analb.anal; + RzAnalysis *analysis = p->analb.analysis; char *oldstr; char *tstr = strdup (data); if (!tstr) { @@ -376,7 +376,7 @@ static bool subvar(RzParse *p, RzAnalFunction *f, ut64 addr, int oplen, char *da bpargs = p->varlist (f, 'b'); spargs = p->varlist (f, 's'); bool ucase = IS_UPPER (*tstr); - RzAnalVarField *var; + RzAnalysisVarField *var; rz_list_foreach (bpargs, iter, var) { st64 delta = p->get_ptr_at ? p->get_ptr_at (f, var->delta, addr) @@ -391,7 +391,7 @@ static bool subvar(RzParse *p, RzAnalFunction *f, ut64 addr, int oplen, char *da reg = p->get_reg_at (f, var->delta, addr); } if (!reg) { - reg = anal->reg->name[RZ_REG_NAME_BP]; + reg = analysis->reg->name[RZ_REG_NAME_BP]; } oldstr = mount_oldstr (p, reg, delta, ucase); if (strstr (tstr, oldstr)) { @@ -415,7 +415,7 @@ static bool subvar(RzParse *p, RzAnalFunction *f, ut64 addr, int oplen, char *da reg = p->get_reg_at (f, var->delta, addr); } if (!reg) { - reg = anal->reg->name[RZ_REG_NAME_SP]; + reg = analysis->reg->name[RZ_REG_NAME_SP]; } oldstr = mount_oldstr (p, reg, delta, ucase); if (strstr (tstr, oldstr)) { diff --git a/librz/parse/p/parse_att2intel.c b/librz/parse/p/parse_att2intel.c index 535e71cadf..55af55c711 100644 --- a/librz/parse/p/parse_att2intel.c +++ b/librz/parse/p/parse_att2intel.c @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include static int replace(int argc, const char *argv[], char *newstr) { diff --git a/librz/parse/p/parse_avr_pseudo.c b/librz/parse/p/parse_avr_pseudo.c index 63ce8bc7e3..26dc62523f 100644 --- a/librz/parse/p/parse_avr_pseudo.c +++ b/librz/parse/p/parse_avr_pseudo.c @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include static bool replace(int argc, const char *argv[], char *newstr) { diff --git a/librz/parse/p/parse_chip8_pseudo.c b/librz/parse/p/parse_chip8_pseudo.c index 080e014033..af1f4abf68 100644 --- a/librz/parse/p/parse_chip8_pseudo.c +++ b/librz/parse/p/parse_chip8_pseudo.c @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include #define MAXARGS 4 diff --git a/librz/parse/p/parse_dalvik_pseudo.c b/librz/parse/p/parse_dalvik_pseudo.c index 2a610baefd..89df4a4ec7 100644 --- a/librz/parse/p/parse_dalvik_pseudo.c +++ b/librz/parse/p/parse_dalvik_pseudo.c @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include static int replace(int argc, const char *argv[], char *newstr) { diff --git a/librz/parse/p/parse_m68k_pseudo.c b/librz/parse/p/parse_m68k_pseudo.c index 46691e5945..1f4eb94e35 100644 --- a/librz/parse/p/parse_m68k_pseudo.c +++ b/librz/parse/p/parse_m68k_pseudo.c @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include static bool can_replace(const char *str, int idx, int max_operands) { diff --git a/librz/parse/p/parse_mips_pseudo.c b/librz/parse/p/parse_mips_pseudo.c index cb80a44b33..3fed4c8754 100644 --- a/librz/parse/p/parse_mips_pseudo.c +++ b/librz/parse/p/parse_mips_pseudo.c @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include static int can_replace(const char *str, int idx, int max_operands) { @@ -250,11 +250,11 @@ static int parse(RzParse *p, const char *data, char *str) { return true; } -static bool subvar(RzParse *p, RzAnalFunction *f, ut64 addr, int oplen, char *data, char *str, int len) { +static bool subvar(RzParse *p, RzAnalysisFunction *f, ut64 addr, int oplen, char *data, char *str, int len) { RzListIter *iter; char *oldstr; char *tstr = strdup (data); - RzAnal *anal = p->analb.anal; + RzAnalysis *analysis = p->analb.analysis; if (!p->varlist) { free (tstr); @@ -263,7 +263,7 @@ static bool subvar(RzParse *p, RzAnalFunction *f, ut64 addr, int oplen, char *da RzList *bpargs = p->varlist (f, 'b'); RzList *spargs = p->varlist (f, 's'); const bool ucase = IS_UPPER (*tstr); - RzAnalVarField *var; + RzAnalysisVarField *var; rz_list_foreach (spargs, iter, var) { st64 delta = p->get_ptr_at ? p->get_ptr_at (f, var->delta, addr) @@ -278,7 +278,7 @@ static bool subvar(RzParse *p, RzAnalFunction *f, ut64 addr, int oplen, char *da reg = p->get_reg_at (f, var->delta, addr); } if (!reg) { - reg = anal->reg->name[RZ_REG_NAME_SP]; + reg = analysis->reg->name[RZ_REG_NAME_SP]; } char *tmpf; //TODO: honor asm pseudo @@ -324,7 +324,7 @@ static bool subvar(RzParse *p, RzAnalFunction *f, ut64 addr, int oplen, char *da reg = p->get_reg_at (f, var->delta, addr); } if (!reg) { - reg = anal->reg->name[RZ_REG_NAME_BP]; + reg = analysis->reg->name[RZ_REG_NAME_BP]; } if (RZ_ABS (delta) < 10) { tmpf = "%d(%s)"; diff --git a/librz/parse/p/parse_ppc_pseudo.c b/librz/parse/p/parse_ppc_pseudo.c index bc98ac199c..d894c8a462 100644 --- a/librz/parse/p/parse_ppc_pseudo.c +++ b/librz/parse/p/parse_ppc_pseudo.c @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include #ifndef PFMT32x diff --git a/librz/parse/p/parse_riscv_pseudo.c b/librz/parse/p/parse_riscv_pseudo.c index 67dd949c54..11a7c1c9f3 100644 --- a/librz/parse/p/parse_riscv_pseudo.c +++ b/librz/parse/p/parse_riscv_pseudo.c @@ -2,7 +2,7 @@ #include #include -#include +#include #include static int replace(int argc, const char *argv[], char *newstr) { diff --git a/librz/parse/p/parse_sh_pseudo.c b/librz/parse/p/parse_sh_pseudo.c index 80b0739e19..e92545ed1e 100644 --- a/librz/parse/p/parse_sh_pseudo.c +++ b/librz/parse/p/parse_sh_pseudo.c @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include static int replace(int argc, const char *argv[], char *newstr) { diff --git a/librz/parse/p/parse_tms320_pseudo.c b/librz/parse/p/parse_tms320_pseudo.c index 1bed1323f1..be51f42831 100644 --- a/librz/parse/p/parse_tms320_pseudo.c +++ b/librz/parse/p/parse_tms320_pseudo.c @@ -2,7 +2,7 @@ #include #include -#include +#include #include // https://www.ti.com/lit/ug/spru732j/spru732j.pdf diff --git a/librz/parse/p/parse_v850_pseudo.c b/librz/parse/p/parse_v850_pseudo.c index d2045b0964..16136055c4 100644 --- a/librz/parse/p/parse_v850_pseudo.c +++ b/librz/parse/p/parse_v850_pseudo.c @@ -2,7 +2,7 @@ #include #include -#include +#include #include // https://www.renesas.com/us/en/doc/products/mpumcu/doc/v850/r01us0037ej0100_v850e2.pdf diff --git a/librz/parse/p/parse_wasm_pseudo.c b/librz/parse/p/parse_wasm_pseudo.c index 1c16f3560b..282ef8a510 100644 --- a/librz/parse/p/parse_wasm_pseudo.c +++ b/librz/parse/p/parse_wasm_pseudo.c @@ -6,12 +6,12 @@ #include #include #include -#include +#include #include -static char* get_fcn_name(RzAnal *anal, ut32 fcn_id) { +static char* get_fcn_name(RzAnalysis *analysis, ut32 fcn_id) { rz_cons_push (); - char *s = anal->coreb.cmdstrf (anal->coreb.core, "is~FUNC[6:%u]", fcn_id); + char *s = analysis->coreb.cmdstrf (analysis->coreb.core, "is~FUNC[6:%u]", fcn_id); rz_cons_pop (); if (s) { size_t namelen = strlen (s); @@ -20,12 +20,12 @@ static char* get_fcn_name(RzAnal *anal, ut32 fcn_id) { return s; } -static bool subvar(RzParse *p, RzAnalFunction *f, ut64 addr, int oplen, char *data, char *str, int len) { +static bool subvar(RzParse *p, RzAnalysisFunction *f, ut64 addr, int oplen, char *data, char *str, int len) { char *fcn_name = NULL; str[0] = 0; if (!strncmp (data, "call ", 5)) { ut32 fcn_id = (ut32) rz_num_get (NULL, data + 5); - if (!(fcn_name = get_fcn_name (p->analb.anal, fcn_id))) { + if (!(fcn_name = get_fcn_name (p->analb.analysis, fcn_id))) { return false; } snprintf (str, len, "call sym.%s", fcn_name); diff --git a/librz/parse/p/parse_x86_pseudo.c b/librz/parse/p/parse_x86_pseudo.c index 4f5a28133a..2000c7b087 100644 --- a/librz/parse/p/parse_x86_pseudo.c +++ b/librz/parse/p/parse_x86_pseudo.c @@ -6,7 +6,7 @@ #include #include -#include +#include #include // 16 bit examples // 0x0001f3a4 9a67620eca call word 0xca0e:0x6267 @@ -344,9 +344,9 @@ static inline void mk_reg_str(const char *regname, int delta, bool sign, bool at rz_strbuf_free (sb); } -static bool subvar(RzParse *p, RzAnalFunction *f, ut64 addr, int oplen, char *data, char *str, int len) { +static bool subvar(RzParse *p, RzAnalysisFunction *f, ut64 addr, int oplen, char *data, char *str, int len) { RzList *bpargs, *spargs; - RzAnal *anal = p->analb.anal; + RzAnalysis *analysis = p->analb.analysis; RzListIter *bpargiter, *spiter; char oldstr[64], newstr[64]; char *tstr = strdup (data); @@ -421,7 +421,7 @@ static bool subvar(RzParse *p, RzAnalFunction *f, ut64 addr, int oplen, char *da if (p->get_op_ireg) { ireg = p->get_op_ireg(p->user, addr); } - RzAnalVarField *bparg, *sparg; + RzAnalysisVarField *bparg, *sparg; rz_list_foreach (spargs, spiter, sparg) { char sign = '+'; st64 delta = p->get_ptr_at @@ -441,7 +441,7 @@ static bool subvar(RzParse *p, RzAnalFunction *f, ut64 addr, int oplen, char *da reg = p->get_reg_at (f, sparg->delta, addr); } if (!reg) { - reg = anal->reg->name[RZ_REG_NAME_SP]; + reg = analysis->reg->name[RZ_REG_NAME_SP]; } mk_reg_str (reg, delta, sign == '+', att, ireg, oldstr, sizeof (oldstr)); @@ -488,7 +488,7 @@ static bool subvar(RzParse *p, RzAnalFunction *f, ut64 addr, int oplen, char *da reg = p->get_reg_at (f, bparg->delta, addr); } if (!reg) { - reg = anal->reg->name[RZ_REG_NAME_BP]; + reg = analysis->reg->name[RZ_REG_NAME_BP]; } mk_reg_str (reg, delta, sign == '+', att, ireg, oldstr, sizeof (oldstr)); if (ucase) { @@ -522,8 +522,8 @@ static bool subvar(RzParse *p, RzAnalFunction *f, ut64 addr, int oplen, char *da } char bp[32]; - if (anal->reg->name[RZ_REG_NAME_BP]) { - strncpy (bp, anal->reg->name[RZ_REG_NAME_BP], sizeof (bp) - 1); + if (analysis->reg->name[RZ_REG_NAME_BP]) { + strncpy (bp, analysis->reg->name[RZ_REG_NAME_BP], sizeof (bp) - 1); if (isupper ((ut8)*str)) { rz_str_case (bp, true); } diff --git a/librz/parse/p/parse_z80_pseudo.c b/librz/parse/p/parse_z80_pseudo.c index 8c1a73d6f3..b216c72f47 100644 --- a/librz/parse/p/parse_z80_pseudo.c +++ b/librz/parse/p/parse_z80_pseudo.c @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include static int replace(int argc, const char *argv[], char *newstr) { diff --git a/librz/parse/parse.c b/librz/parse/parse.c index ae4b96bd66..e812941a58 100644 --- a/librz/parse/parse.c +++ b/librz/parse/parse.c @@ -134,7 +134,7 @@ RZ_API char *rz_parse_immtrim(char *opstr) { return opstr; } -RZ_API bool rz_parse_subvar(RzParse *p, RzAnalFunction *f, ut64 addr, int oplen, char *data, char *str, int len) { +RZ_API bool rz_parse_subvar(RzParse *p, RzAnalysisFunction *f, ut64 addr, int oplen, char *data, char *str, int len) { if (p->cur && p->cur->subvar) { return p->cur->subvar (p, f, addr, oplen, data, str, len); } diff --git a/librz/util/print.c b/librz/util/print.c index 17f1ca8382..8467af4421 100644 --- a/librz/util/print.c +++ b/librz/util/print.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: LGPL-3.0-only #include -#include +#include #define DFLT_ROWS 16 diff --git a/meson.build b/meson.build index 4d497c2856..1ad4d2bbae 100644 --- a/meson.build +++ b/meson.build @@ -220,7 +220,7 @@ subdir('librz') conf_data = configuration_data() conf_data.set('plugins_core', '&rz_core_plugin_' + ', &rz_core_plugin_'.join(core_plugins) + ', 0') -conf_data.set('plugins_anal', '&rz_anal_plugin_' + ', &rz_anal_plugin_'.join(anal_plugins) + ', 0') +conf_data.set('plugins_analysis', '&rz_analysis_plugin_' + ', &rz_analysis_plugin_'.join(analysis_plugins) + ', 0') conf_data.set('plugins_asm', '&rz_asm_plugin_' + ', &rz_asm_plugin_'.join(asm_plugins) + ', 0') conf_data.set('plugins_bp', '&rz_bp_plugin_' + ', &rz_bp_plugin_'.join(bp_plugins) + ', 0') conf_data.set('plugins_bin', '&rz_bin_plugin_' + ', &rz_bin_plugin_'.join(bin_plugins) + ', 0') @@ -585,12 +585,12 @@ subdir('librz/config') subdir('librz/parse') subdir('librz/lang') subdir('librz/asm') -subdir('librz/anal') +subdir('librz/analysis') subdir('librz/egg') subdir('librz/debug') subdir('librz/core') -subdir('librz/anal/d') +subdir('librz/analysis/d') subdir('librz/asm/d') subdir('librz/bin/d') subdir('librz/syscall/d') @@ -628,7 +628,7 @@ endif if meson.is_subproject() librz_dep = declare_dependency( dependencies: [ - rz_anal_dep, + rz_analysis_dep, rz_asm_dep, rz_bin_dep, rz_bp_dep, diff --git a/pkgcfg/rz_anal.pc.acr b/pkgcfg/rz_analysis.pc.acr similarity index 82% rename from pkgcfg/rz_anal.pc.acr rename to pkgcfg/rz_analysis.pc.acr index ba071ca3e7..47baf0380f 100644 --- a/pkgcfg/rz_anal.pc.acr +++ b/pkgcfg/rz_analysis.pc.acr @@ -3,9 +3,9 @@ exec_prefix=${prefix} libdir=@LIBDIR@ includedir=${prefix}/include -Name: rz_anal +Name: rz_analysis Description: rizin foundation libraries Version: @VERSION@ Requires: rz_util rz_reg rz_syscall rz_search rz_cons rz_flag rz_crypto -Libs: -L${libdir} -lrz_anal +Libs: -L${libdir} -lrz_analysis Cflags: -I${includedir}/librz diff --git a/pkgcfg/rz_core.pc.acr b/pkgcfg/rz_core.pc.acr index f2de749a98..6b3a6a8593 100644 --- a/pkgcfg/rz_core.pc.acr +++ b/pkgcfg/rz_core.pc.acr @@ -6,6 +6,6 @@ includedir=${prefix}/include Name: rz_core Description: rizin foundation libraries Version: @VERSION@ -Requires: rz_config rz_cons rz_io rz_util rz_flag rz_asm rz_debug rz_hash rz_bin rz_lang rz_io rz_anal rz_parse rz_bp rz_egg rz_reg rz_search rz_syscall rz_socket rz_magic rz_crypto +Requires: rz_config rz_cons rz_io rz_util rz_flag rz_asm rz_debug rz_hash rz_bin rz_lang rz_io rz_analysis rz_parse rz_bp rz_egg rz_reg rz_search rz_syscall rz_socket rz_magic rz_crypto Libs: -L${libdir} -lrz_core @SSL_LDFLAGS@ @CAPSTONE_LDFLAGS@ Cflags: -I${includedir}/librz @SSL_CFLAGS@ @CAPSTONE_CFLAGS@ diff --git a/pkgcfg/rz_debug.pc.acr b/pkgcfg/rz_debug.pc.acr index 3811af56b2..a3163125e7 100644 --- a/pkgcfg/rz_debug.pc.acr +++ b/pkgcfg/rz_debug.pc.acr @@ -6,6 +6,6 @@ includedir=${prefix}/include Name: rz_debug Description: rizin foundation libraries Version: @VERSION@ -Requires: rz_reg rz_anal rz_bp rz_io rz_parse rz_cons rz_syscall rz_hash rz_flag rz_util rz_egg rz_socket +Requires: rz_reg rz_analysis rz_bp rz_io rz_parse rz_cons rz_syscall rz_hash rz_flag rz_util rz_egg rz_socket Libs: -L${libdir} -lrz_debug Cflags: -I${includedir}/librz diff --git a/plugins.android.cfg b/plugins.android.cfg index aee08fa326..8126c4c400 100644 --- a/plugins.android.cfg +++ b/plugins.android.cfg @@ -9,16 +9,16 @@ asm.mips_cs asm.x86_nz asm.x86_cs asm.gb -anal.bf -anal.avr -anal.null -anal.x86_cs -anal.arm_cs -anal.mips_cs -anal.java -anal.wasm -anal.dalvik -anal.gb +analysis.bf +analysis.avr +analysis.null +analysis.x86_cs +analysis.arm_cs +analysis.mips_cs +analysis.java +analysis.wasm +analysis.dalvik +analysis.gb bin.any bin.bios bin.elf diff --git a/plugins.bin.cfg b/plugins.bin.cfg index 7475434416..9d4bedf6c5 100644 --- a/plugins.bin.cfg +++ b/plugins.bin.cfg @@ -37,7 +37,7 @@ parse.6502_pseudo parse.wasm_pseudo asm.arc asm.ppc_cs -anal.ppc_cs +analysis.ppc_cs io.mach io.debug io.mmap @@ -72,25 +72,25 @@ asm.x86_cs asm.x86_nz asm.mips_cs asm.avr -anal.avr -anal.mips_cs -anal.x86_cs -anal.arm_cs -anal.java -anal.dalvik -anal.ppc -anal.sparc -anal.8051 -anal.i8080 -anal.arc -anal.bf -anal.z80 -anal.xap -anal.tms320 -anal.m68k -anal.sh -anal.x86_im -anal.x86_simple +analysis.avr +analysis.mips_cs +analysis.x86_cs +analysis.arm_cs +analysis.java +analysis.dalvik +analysis.ppc +analysis.sparc +analysis.8051 +analysis.i8080 +analysis.arc +analysis.bf +analysis.z80 +analysis.xap +analysis.tms320 +analysis.m68k +analysis.sh +analysis.x86_im +analysis.x86_simple bin.p9 bin.rar bin.te diff --git a/plugins.def.cfg b/plugins.def.cfg index 8442c5b879..db4e18c7bf 100644 --- a/plugins.def.cfg +++ b/plugins.def.cfg @@ -1,57 +1,57 @@ -STATIC="anal.8051 -anal.amd29k -anal.arc -anal.arm_cs -anal.arm_gnu -anal.avr -anal.i4004 -anal.bf -anal.chip8 -anal.cr16 -anal.cris -anal.dalvik -anal.ebc -anal.gb -anal.h8300 -anal.hexagon -anal.i8080 -anal.java -anal.m68k_cs -anal.m680x_cs -anal.xtensa -anal.malbolge -anal.mcore -anal.mips_cs -anal.mips_gnu -anal.msp430 -anal.nios2 -anal.null -anal.or1k -anal.ppc_cs -anal.ppc_gnu -anal.sh -anal.sparc_cs -anal.sparc_gnu -anal.sysz -anal.tms320 -anal.tricore -anal.v850 -anal.ws -anal.xap -anal.x86_cs -anal.xcore_cs -anal.z80 -anal.v810 -anal.vax -anal.6502 -anal.6502_cs -anal.snes -anal.riscv -anal.riscv_cs -anal.pic -anal.rsp -anal.wasm -anal.pyc +STATIC="analysis.8051 +analysis.amd29k +analysis.arc +analysis.arm_cs +analysis.arm_gnu +analysis.avr +analysis.i4004 +analysis.bf +analysis.chip8 +analysis.cr16 +analysis.cris +analysis.dalvik +analysis.ebc +analysis.gb +analysis.h8300 +analysis.hexagon +analysis.i8080 +analysis.java +analysis.m68k_cs +analysis.m680x_cs +analysis.xtensa +analysis.malbolge +analysis.mcore +analysis.mips_cs +analysis.mips_gnu +analysis.msp430 +analysis.nios2 +analysis.null +analysis.or1k +analysis.ppc_cs +analysis.ppc_gnu +analysis.sh +analysis.sparc_cs +analysis.sparc_gnu +analysis.sysz +analysis.tms320 +analysis.tricore +analysis.v850 +analysis.ws +analysis.xap +analysis.x86_cs +analysis.xcore_cs +analysis.z80 +analysis.v810 +analysis.vax +analysis.6502 +analysis.6502_cs +analysis.snes +analysis.riscv +analysis.riscv_cs +analysis.pic +analysis.rsp +analysis.wasm +analysis.pyc asm.8051 asm.6502 asm.6502_cs diff --git a/plugins.emscripten.cfg b/plugins.emscripten.cfg index cba5905200..5d91fe1361 100644 --- a/plugins.emscripten.cfg +++ b/plugins.emscripten.cfg @@ -6,12 +6,12 @@ asm.x86_nz asm.mips_cs asm.avr asm.wasm -anal.avr -anal.mips_cs -anal.x86_cs -anal.arm_cs -anal.dalvik -anal.wasm +analysis.avr +analysis.mips_cs +analysis.x86_cs +analysis.arm_cs +analysis.dalvik +analysis.wasm fs.posix bin.any bin.elf @@ -46,7 +46,7 @@ parse.6502_pseudo parse.tms320_pseudo asm.arc asm.ppc_cs -anal.ppc_cs +analysis.ppc_cs io.mach io.debug io.mmap @@ -74,19 +74,19 @@ asm.sh asm.xap asm.arm_winedbg asm.sparc -anal.ppc -anal.sparc -anal.8051 -anal.i8080 -anal.arc -anal.bf -anal.z80 -anal.xap -anal.tms320 -anal.m68k -anal.sh -anal.x86_im -anal.x86_simple +analysis.ppc +analysis.sparc +analysis.8051 +analysis.i8080 +analysis.arc +analysis.bf +analysis.z80 +analysis.xap +analysis.tms320 +analysis.m68k +analysis.sh +analysis.x86_im +analysis.x86_simple bin.fs bin.p9 bin.rar diff --git a/plugins.ios-store.cfg b/plugins.ios-store.cfg index abce4658ec..cd610bc3ef 100644 --- a/plugins.ios-store.cfg +++ b/plugins.ios-store.cfg @@ -9,15 +9,15 @@ asm.mips_cs asm.x86_nz asm.x86_cs asm.gb -anal.bf -anal.avr -anal.null -anal.x86_cs -anal.arm_cs -anal.mips_cs -anal.java -anal.dalvik -anal.gb +analysis.bf +analysis.avr +analysis.null +analysis.x86_cs +analysis.arm_cs +analysis.mips_cs +analysis.java +analysis.dalvik +analysis.gb bin.any bin.bios bin.elf diff --git a/plugins.ios.cfg b/plugins.ios.cfg index 173d890a61..63628edbf2 100644 --- a/plugins.ios.cfg +++ b/plugins.ios.cfg @@ -1,7 +1,7 @@ # do not build : asm.x86_as # do not build : asm.x86_nasm -# MIPS="asm.mips_gnu anal.mips_gnu" -# MIPS_CS="asm.mips_cs anal.mips_cs" +# MIPS="asm.mips_gnu analysis.mips_gnu" +# MIPS_CS="asm.mips_cs analysis.mips_cs" STATIC=" asm.bf @@ -13,15 +13,15 @@ asm.mips_cs asm.x86_nz asm.x86_cs asm.gb -anal.bf -anal.avr -anal.null -anal.x86_cs -anal.arm_cs -anal.mips_cs -anal.java -anal.dalvik -anal.gb +analysis.bf +analysis.avr +analysis.null +analysis.x86_cs +analysis.arm_cs +analysis.mips_cs +analysis.java +analysis.dalvik +analysis.gb bin.any bin.bios bin.elf diff --git a/plugins.nogpl.cfg b/plugins.nogpl.cfg index 2adfa224d4..491434c28e 100644 --- a/plugins.nogpl.cfg +++ b/plugins.nogpl.cfg @@ -1,31 +1,31 @@ -STATIC="anal.8051 -anal.arc -anal.arm_cs -anal.bf -anal.cr16 -anal.xap -anal.dalvik -anal.ebc -anal.gb -anal.h8300 -anal.i8080 -anal.java -anal.hexagon -anal.m68k_cs -anal.m680x_cs -anal.malbolge -anal.mips_cs -anal.msp430 -anal.null -anal.ppc_cs -anal.sparc_cs -anal.sysz -anal.tms320 -anal.v850 -anal.ws -anal.x86_cs -anal.xcore_cs -anal.z80 +STATIC="analysis.8051 +analysis.arc +analysis.arm_cs +analysis.bf +analysis.cr16 +analysis.xap +analysis.dalvik +analysis.ebc +analysis.gb +analysis.h8300 +analysis.i8080 +analysis.java +analysis.hexagon +analysis.m68k_cs +analysis.m680x_cs +analysis.malbolge +analysis.mips_cs +analysis.msp430 +analysis.null +analysis.ppc_cs +analysis.sparc_cs +analysis.sysz +analysis.tms320 +analysis.v850 +analysis.ws +analysis.x86_cs +analysis.xcore_cs +analysis.z80 asm.8051 asm.arm_cs asm.arm_winedbg diff --git a/plugins.static.cfg b/plugins.static.cfg index f8255f557a..e8e06549f2 100644 --- a/plugins.static.cfg +++ b/plugins.static.cfg @@ -1,40 +1,40 @@ # same as default, but removing some plugins to avoid dupped symbols (use diff) # this file should be removed as soon as those 2 plugins get built properly -STATIC="anal.8051 -anal.arc -anal.arm_cs -anal.arm_gnu -anal.avr -anal.i4004 -anal.bf -anal.chip8 -anal.cris -anal.dalvik -anal.gb -anal.i8080 -anal.java -anal.m68k_cs -anal.malbolge -anal.mips_cs -anal.mips_gnu -anal.nios2 -anal.null -anal.ppc_cs -anal.ppc_gnu -anal.sh -anal.sparc_cs -anal.sparc_gnu -anal.sysz -anal.m680x_cs -anal.ws -anal.xap -anal.x86_cs -anal.xcore_cs -anal.z80 -anal.vax -anal.6502 -anal.snes -anal.riscv +STATIC="analysis.8051 +analysis.arc +analysis.arm_cs +analysis.arm_gnu +analysis.avr +analysis.i4004 +analysis.bf +analysis.chip8 +analysis.cris +analysis.dalvik +analysis.gb +analysis.i8080 +analysis.java +analysis.m68k_cs +analysis.malbolge +analysis.mips_cs +analysis.mips_gnu +analysis.nios2 +analysis.null +analysis.ppc_cs +analysis.ppc_gnu +analysis.sh +analysis.sparc_cs +analysis.sparc_gnu +analysis.sysz +analysis.m680x_cs +analysis.ws +analysis.xap +analysis.x86_cs +analysis.xcore_cs +analysis.z80 +analysis.vax +analysis.6502 +analysis.snes +analysis.riscv asm.6502 asm.8051 asm.arc @@ -212,5 +212,5 @@ parse.x86_pseudo parse.z80_pseudo" SHARED="io.shm asm.pic -anal.pic +analysis.pic " diff --git a/plugins.static.nogpl.cfg b/plugins.static.nogpl.cfg index a3f75129f9..d8a4527b9c 100644 --- a/plugins.static.nogpl.cfg +++ b/plugins.static.nogpl.cfg @@ -1,39 +1,39 @@ # same as default, but removing some plugins to avoid dupped symbols (use diff) # this file should be removed as soon as those 2 plugins get built properly -STATIC="anal.8051 -anal.arc -anal.arm_cs -anal.arm_gnu -anal.avr -anal.i4004 -anal.bf -anal.chip8 -anal.cris -anal.dalvik -anal.gb -anal.i8080 -anal.java -anal.m68k_cs -anal.malbolge -anal.mips_cs -anal.mips_gnu -anal.nios2 -anal.null -anal.ppc_cs -anal.ppc_gnu -anal.sh -anal.sparc_cs -anal.sparc_gnu -anal.sysz -anal.ws -anal.xap -anal.x86_cs -anal.xcore_cs -anal.z80 -anal.vax -anal.6502 -anal.snes -anal.riscv +STATIC="analysis.8051 +analysis.arc +analysis.arm_cs +analysis.arm_gnu +analysis.avr +analysis.i4004 +analysis.bf +analysis.chip8 +analysis.cris +analysis.dalvik +analysis.gb +analysis.i8080 +analysis.java +analysis.m68k_cs +analysis.malbolge +analysis.mips_cs +analysis.mips_gnu +analysis.nios2 +analysis.null +analysis.ppc_cs +analysis.ppc_gnu +analysis.sh +analysis.sparc_cs +analysis.sparc_gnu +analysis.sysz +analysis.ws +analysis.xap +analysis.x86_cs +analysis.xcore_cs +analysis.z80 +analysis.vax +analysis.6502 +analysis.snes +analysis.riscv asm.6502 asm.8051 asm.arc @@ -211,4 +211,4 @@ parse.x86_pseudo parse.z80_pseudo" SHARED="io.shm asm.pic -anal.pic" +analysis.pic" diff --git a/plugins.tiny.cfg b/plugins.tiny.cfg index ed640ca200..821a8ce065 100644 --- a/plugins.tiny.cfg +++ b/plugins.tiny.cfg @@ -1,7 +1,7 @@ # do not build : asm.x86_as # do not build : asm.x86_nasm -# MIPS="asm.mips_gnu anal.mips_gnu" -# MIPS_CS="asm.mips_cs anal.mips_cs" +# MIPS="asm.mips_gnu analysis.mips_gnu" +# MIPS_CS="asm.mips_cs analysis.mips_cs" STATIC=" asm.java @@ -11,13 +11,13 @@ asm.mips_cs asm.x86_nz asm.x86_cs asm.gb -anal.null -anal.x86_cs -anal.arm_cs -anal.mips_cs -anal.java -anal.dalvik -anal.gb +analysis.null +analysis.x86_cs +analysis.arm_cs +analysis.mips_cs +analysis.java +analysis.dalvik +analysis.gb bin.any bin.bios bin.elf diff --git a/shlr/java/code.c b/shlr/java/code.c index 9d6d6b1125..2a10ca3e3b 100644 --- a/shlr/java/code.c +++ b/shlr/java/code.c @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include #include diff --git a/shlr/java/ops.h b/shlr/java/ops.h index a67ca5ccd1..cb4a0e9fa5 100644 --- a/shlr/java/ops.h +++ b/shlr/java/ops.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: Apache-2.0 -#include +#include #ifndef RZ_JAVA_OPS_H #define RZ_JAVA_OPS_H diff --git a/shlr/tcc/tcc.h b/shlr/tcc/tcc.h index 0dc0bc26a3..8673e3376e 100644 --- a/shlr/tcc/tcc.h +++ b/shlr/tcc/tcc.h @@ -101,7 +101,7 @@ typedef long long int int64_t; #endif #endif -// TODO: Make it dependable from the r2 asm/anal settings +// TODO: Make it dependable from the r2 asm/analysis settings #define LDOUBLE_SIZE 12 #define LDOUBLE_ALIGN 4 #define MAX_ALIGN 8 diff --git a/sys/indent-whitelist.sh b/sys/indent-whitelist.sh index 884d932b5f..94a5669b6c 100755 --- a/sys/indent-whitelist.sh +++ b/sys/indent-whitelist.sh @@ -32,13 +32,13 @@ librz/include/r_list.h librz/include/r_reg.h librz/include/r_util.h -librz/anal/var.c -librz/anal/fcn.c -librz/anal/cycles.c -librz/anal/esil.c -librz/anal/data.c -librz/anal/flirt.c -librz/anal/p/anal_arc.c +librz/analysis/var.c +librz/analysis/fcn.c +librz/analysis/cycles.c +librz/analysis/esil.c +librz/analysis/data.c +librz/analysis/flirt.c +librz/analysis/p/analysis_arc.c librz/config/config.c librz/config/callback.c diff --git a/sys/rebuild.sh b/sys/rebuild.sh index ce4b6b8b9f..9ef9a2086f 100755 --- a/sys/rebuild.sh +++ b/sys/rebuild.sh @@ -49,7 +49,7 @@ RebuildSpp() { RebuildJava() { Rebuild shlr/java Rebuild librz/asm - Rebuild librz/anal + Rebuild librz/analysis Rebuild librz/bin Rebuild librz/core } @@ -60,7 +60,7 @@ RebuildCapstone() { fi Rebuild shlr/capstone Rebuild librz/asm - Rebuild librz/anal + Rebuild librz/analysis } RebuildSdb() { diff --git a/test/db/anal/classes b/test/db/anal/classes index 271765bac1..49261a250c 100644 --- a/test/db/anal/classes +++ b/test/db/anal/classes @@ -1,4 +1,4 @@ -NAME=anal classes +NAME=classes analysis FILE=bins/pe/cpp_sample.exe CMDS=< -#include +#include #include #include #include "minunit.h" @@ -15,7 +15,7 @@ bool test_graph_to_agraph() { rz_core_cmd0 (core, "acb D B"); rz_core_cmd0 (core, "acb D C"); - RzGraph *graph = rz_anal_class_get_inheritance_graph (core->anal); + RzGraph *graph = rz_analysis_class_get_inheritance_graph (core->analysis); mu_assert_notnull (graph, "Couldn't create the graph"); mu_assert_eq (graph->nodes->length, 4, "Wrong node count"); diff --git a/test/unit/test_anal_block.c b/test/unit/test_anal_block.c index 6a345a87ca..91d845df09 100644 --- a/test/unit/test_anal_block.c +++ b/test/unit/test_anal_block.c @@ -1,4 +1,4 @@ -#include +#include #include #include "minunit.h" @@ -6,11 +6,11 @@ #define check_invariants block_check_invariants #define check_leaks block_check_leaks -static size_t blocks_count(RzAnal *anal) { +static size_t blocks_count(RzAnalysis *analysis) { size_t count = 0; RBIter iter; - RzAnalBlock *block; - rz_rbtree_foreach(anal->bb_tree, iter, block, RzAnalBlock, _rb) { + RzAnalysisBlock *block; + rz_rbtree_foreach(analysis->bb_tree, iter, block, RzAnalysisBlock, _rb) { count++; } return count; @@ -18,79 +18,79 @@ static size_t blocks_count(RzAnal *anal) { bool test_r_anal_block_create() { - RzAnal *anal = rz_anal_new (); - assert_block_invariants (anal); + RzAnalysis *analysis = rz_analysis_new (); + assert_block_invariants (analysis); - mu_assert_eq (blocks_count (anal), 0, "initial count"); + mu_assert_eq (blocks_count (analysis), 0, "initial count"); - RzAnalBlock *block = rz_anal_create_block (anal, 0x1337, 42); - assert_block_invariants (anal); + RzAnalysisBlock *block = rz_analysis_create_block (analysis, 0x1337, 42); + assert_block_invariants (analysis); mu_assert ("created block", block); mu_assert_eq (block->addr, 0x1337, "created addr"); mu_assert_eq (block->size, 42, "created size"); mu_assert_eq (block->ref, 1, "created initial ref"); - mu_assert_eq (blocks_count (anal), 1, "count after create"); + mu_assert_eq (blocks_count (analysis), 1, "count after create"); - RzAnalBlock *block2 = rz_anal_create_block (anal, 0x133f, 100); - assert_block_invariants (anal); + RzAnalysisBlock *block2 = rz_analysis_create_block (analysis, 0x133f, 100); + assert_block_invariants (analysis); mu_assert ("created block (overlap)", block2); mu_assert_eq (block2->addr, 0x133f, "created addr"); mu_assert_eq (block2->size, 100, "created size"); mu_assert_eq (block2->ref, 1, "created initial ref"); - mu_assert_eq (blocks_count (anal), 2, "count after create"); + mu_assert_eq (blocks_count (analysis), 2, "count after create"); - RzAnalBlock *block3 = rz_anal_create_block (anal, 0x1337, 5); - assert_block_invariants (anal); + RzAnalysisBlock *block3 = rz_analysis_create_block (analysis, 0x1337, 5); + assert_block_invariants (analysis); mu_assert ("no double create on same start", !block3); - mu_assert_eq (blocks_count (anal), 2, "count after failed create"); + mu_assert_eq (blocks_count (analysis), 2, "count after failed create"); - rz_anal_block_unref (block); - rz_anal_block_unref (block2); + rz_analysis_block_unref (block); + rz_analysis_block_unref (block2); - assert_block_leaks (anal); - rz_anal_free (anal); + assert_block_leaks (analysis); + rz_analysis_free (analysis); mu_end; } bool test_r_anal_block_contains() { - RzAnalBlock dummy = { 0 }; + RzAnalysisBlock dummy = { 0 }; dummy.addr = 0x1337; dummy.size = 42; - mu_assert ("contains before", !rz_anal_block_contains (&dummy, 100)); - mu_assert ("contains start", rz_anal_block_contains (&dummy, 0x1337)); - mu_assert ("contains inside", rz_anal_block_contains (&dummy, 0x1339)); - mu_assert ("contains last", rz_anal_block_contains (&dummy, 0x1337 + 42 - 1)); - mu_assert ("contains after", !rz_anal_block_contains (&dummy, 0x1337 + 42)); + mu_assert ("contains before", !rz_analysis_block_contains (&dummy, 100)); + mu_assert ("contains start", rz_analysis_block_contains (&dummy, 0x1337)); + mu_assert ("contains inside", rz_analysis_block_contains (&dummy, 0x1339)); + mu_assert ("contains last", rz_analysis_block_contains (&dummy, 0x1337 + 42 - 1)); + mu_assert ("contains after", !rz_analysis_block_contains (&dummy, 0x1337 + 42)); mu_end; } bool test_r_anal_block_split() { - RzAnal *anal = rz_anal_new (); - assert_block_invariants (anal); + RzAnalysis *analysis = rz_analysis_new (); + assert_block_invariants (analysis); - RzAnalBlock *block = rz_anal_create_block (anal, 0x1337, 42); - assert_block_invariants (anal); - mu_assert_eq (blocks_count (anal), 1, "count after create"); + RzAnalysisBlock *block = rz_analysis_create_block (analysis, 0x1337, 42); + assert_block_invariants (analysis); + mu_assert_eq (blocks_count (analysis), 1, "count after create"); block->jump = 0xdeadbeef; block->fail = 0xc0ffee; block->ninstr = 5; - rz_anal_bb_set_offset (block, 0, 0); - rz_anal_bb_set_offset (block, 1, 1); - rz_anal_bb_set_offset (block, 2, 2); - rz_anal_bb_set_offset (block, 3, 4); - rz_anal_bb_set_offset (block, 4, 30); + rz_analysis_bb_set_offset (block, 0, 0); + rz_analysis_bb_set_offset (block, 1, 1); + rz_analysis_bb_set_offset (block, 2, 2); + rz_analysis_bb_set_offset (block, 3, 4); + rz_analysis_bb_set_offset (block, 4, 30); - RzAnalBlock *second = rz_anal_block_split (block, 0x1337); - assert_block_invariants (anal); + RzAnalysisBlock *second = rz_analysis_block_split (block, 0x1337); + assert_block_invariants (analysis); mu_assert_ptreq (second, block, "nop split on first addr"); - mu_assert_eq (blocks_count (anal), 1, "count after nop split"); + mu_assert_eq (blocks_count (analysis), 1, "count after nop split"); mu_assert_eq (block->ref, 2, "ref after nop split"); - rz_anal_block_unref (block); + rz_analysis_block_unref (block); - second = rz_anal_block_split (block, 0x1339); - assert_block_invariants (anal); + second = rz_analysis_block_split (block, 0x1339); + assert_block_invariants (analysis); mu_assert_ptrneq (second, block, "non-nop split"); - mu_assert_eq (blocks_count (anal), 2, "count after non-nop split"); + mu_assert_eq (blocks_count (analysis), 2, "count after non-nop split"); mu_assert_eq (block->addr, 0x1337, "first addr after split"); mu_assert_eq (block->size, 2, "first size after split"); @@ -103,40 +103,40 @@ bool test_r_anal_block_split() { mu_assert_eq (second->fail, 0xc0ffee, "second fail"); mu_assert_eq (block->ninstr, 2, "first ninstr after split"); - mu_assert_eq (rz_anal_bb_offset_inst (block, 0), 0, "first op_pos[0]"); - mu_assert_eq (rz_anal_bb_offset_inst (block, 1), 1, "first op_pos[1]"); + mu_assert_eq (rz_analysis_bb_offset_inst (block, 0), 0, "first op_pos[0]"); + mu_assert_eq (rz_analysis_bb_offset_inst (block, 1), 1, "first op_pos[1]"); mu_assert_eq (second->ninstr, 3, "second ninstr after split"); - mu_assert_eq (rz_anal_bb_offset_inst (second, 0), 0, "second op_pos[0]"); - mu_assert_eq (rz_anal_bb_offset_inst (second, 1), 2, "second op_pos[1]"); - mu_assert_eq (rz_anal_bb_offset_inst (second, 2), 28, "second op_pos[2]"); + mu_assert_eq (rz_analysis_bb_offset_inst (second, 0), 0, "second op_pos[0]"); + mu_assert_eq (rz_analysis_bb_offset_inst (second, 1), 2, "second op_pos[1]"); + mu_assert_eq (rz_analysis_bb_offset_inst (second, 2), 28, "second op_pos[2]"); - rz_anal_block_unref (block); - rz_anal_block_unref (second); + rz_analysis_block_unref (block); + rz_analysis_block_unref (second); - assert_block_leaks (anal); - rz_anal_free (anal); + assert_block_leaks (analysis); + rz_analysis_free (analysis); mu_end; } bool test_r_anal_block_split_in_function() { - RzAnal *anal = rz_anal_new (); - assert_block_invariants (anal); + RzAnalysis *analysis = rz_analysis_new (); + assert_block_invariants (analysis); - RzAnalFunction *fcn = rz_anal_create_function (anal, "bbowner", 0x1337, 0, NULL); - assert_block_invariants (anal); + RzAnalysisFunction *fcn = rz_analysis_create_function (analysis, "bbowner", 0x1337, 0, NULL); + assert_block_invariants (analysis); - RzAnalBlock *block = rz_anal_create_block (anal, 0x1337, 42); - assert_block_invariants (anal); - mu_assert_eq (blocks_count (anal), 1, "count after create"); - rz_anal_function_add_block (fcn, block); - assert_block_invariants (anal); + RzAnalysisBlock *block = rz_analysis_create_block (analysis, 0x1337, 42); + assert_block_invariants (analysis); + mu_assert_eq (blocks_count (analysis), 1, "count after create"); + rz_analysis_function_add_block (fcn, block); + assert_block_invariants (analysis); mu_assert_eq (block->ref, 2, "block refs after adding to function"); - RzAnalBlock *second = rz_anal_block_split (block, 0x1339); - assert_block_invariants (anal); + RzAnalysisBlock *second = rz_analysis_block_split (block, 0x1339); + assert_block_invariants (analysis); mu_assert_ptrneq (second, block, "non-nop split"); - mu_assert_eq (blocks_count (anal), 2, "count after non-nop split"); + mu_assert_eq (blocks_count (analysis), 2, "count after non-nop split"); mu_assert_eq (block->ref, 2, "first block refs after adding to function"); mu_assert_eq (second->ref, 2, "second block refs after adding to function"); @@ -145,260 +145,260 @@ bool test_r_anal_block_split_in_function() { mu_assert ("second block is in function after split", rz_list_contains (block->fcns, fcn)); mu_assert ("second block is in function after split", rz_list_contains (second->fcns, fcn)); - rz_anal_block_unref (block); - rz_anal_block_unref (second); + rz_analysis_block_unref (block); + rz_analysis_block_unref (second); - assert_block_leaks (anal); - rz_anal_free (anal); + assert_block_leaks (analysis); + rz_analysis_free (analysis); mu_end; } bool test_r_anal_block_merge() { - RzAnal *anal = rz_anal_new (); - assert_block_invariants (anal); + RzAnalysis *analysis = rz_analysis_new (); + assert_block_invariants (analysis); - RzAnalBlock *first = rz_anal_create_block (anal, 0x1337, 42); - RzAnalBlock *second = rz_anal_create_block (anal, 0x1337 + 42, 624); - assert_block_invariants (anal); - mu_assert_eq (blocks_count (anal), 2, "count after create"); + RzAnalysisBlock *first = rz_analysis_create_block (analysis, 0x1337, 42); + RzAnalysisBlock *second = rz_analysis_create_block (analysis, 0x1337 + 42, 624); + assert_block_invariants (analysis); + mu_assert_eq (blocks_count (analysis), 2, "count after create"); second->jump = 0xdeadbeef; second->fail = 0xc0ffee; first->ninstr = 3; - rz_anal_bb_set_offset (first, 0, 0); - rz_anal_bb_set_offset (first, 1, 13); - rz_anal_bb_set_offset (first, 2, 16); + rz_analysis_bb_set_offset (first, 0, 0); + rz_analysis_bb_set_offset (first, 1, 13); + rz_analysis_bb_set_offset (first, 2, 16); second->ninstr = 4; - rz_anal_bb_set_offset (second, 0, 0); - rz_anal_bb_set_offset (second, 1, 4); - rz_anal_bb_set_offset (second, 2, 9); - rz_anal_bb_set_offset (second, 3, 30); + rz_analysis_bb_set_offset (second, 0, 0); + rz_analysis_bb_set_offset (second, 1, 4); + rz_analysis_bb_set_offset (second, 2, 9); + rz_analysis_bb_set_offset (second, 3, 30); - bool success = rz_anal_block_merge (first, second); - assert_block_invariants (anal); + bool success = rz_analysis_block_merge (first, second); + assert_block_invariants (analysis); mu_assert ("merge success", success); - mu_assert_eq (blocks_count (anal), 1, "count after merge"); + mu_assert_eq (blocks_count (analysis), 1, "count after merge"); mu_assert_eq (first->addr, 0x1337, "addr after merge"); mu_assert_eq (first->size, 666, "size after merge"); mu_assert_eq (first->jump, 0xdeadbeef, "jump after merge"); mu_assert_eq (first->fail, 0xc0ffee, "fail after merge"); mu_assert_eq (first->ninstr, 3+4, "ninstr after merge"); - mu_assert_eq (rz_anal_bb_offset_inst (first, 0), 0, "offset 0 after merge"); - mu_assert_eq (rz_anal_bb_offset_inst (first, 1), 13, "offset 1 after merge"); - mu_assert_eq (rz_anal_bb_offset_inst (first, 2), 16, "offset 2 after merge"); - mu_assert_eq (rz_anal_bb_offset_inst (first, 3), 42+0, "offset 3 after merge"); - mu_assert_eq (rz_anal_bb_offset_inst (first, 4), 42+4, "offset 4 after merge"); - mu_assert_eq (rz_anal_bb_offset_inst (first, 5), 42+9, "offset 5 after merge"); - mu_assert_eq (rz_anal_bb_offset_inst (first, 6), 42+30, "offset 6 after merge"); + mu_assert_eq (rz_analysis_bb_offset_inst (first, 0), 0, "offset 0 after merge"); + mu_assert_eq (rz_analysis_bb_offset_inst (first, 1), 13, "offset 1 after merge"); + mu_assert_eq (rz_analysis_bb_offset_inst (first, 2), 16, "offset 2 after merge"); + mu_assert_eq (rz_analysis_bb_offset_inst (first, 3), 42+0, "offset 3 after merge"); + mu_assert_eq (rz_analysis_bb_offset_inst (first, 4), 42+4, "offset 4 after merge"); + mu_assert_eq (rz_analysis_bb_offset_inst (first, 5), 42+9, "offset 5 after merge"); + mu_assert_eq (rz_analysis_bb_offset_inst (first, 6), 42+30, "offset 6 after merge"); - rz_anal_block_unref (first); + rz_analysis_block_unref (first); // second must be already freed by the merge! - assert_block_invariants (anal); - rz_anal_free (anal); + assert_block_invariants (analysis); + rz_analysis_free (analysis); mu_end; } bool test_r_anal_block_merge_in_function() { - RzAnal *anal = rz_anal_new (); - assert_block_invariants (anal); + RzAnalysis *analysis = rz_analysis_new (); + assert_block_invariants (analysis); - RzAnalFunction *fcn = rz_anal_create_function (anal, "bbowner", 0x1337, 0, NULL); + RzAnalysisFunction *fcn = rz_analysis_create_function (analysis, "bbowner", 0x1337, 0, NULL); - RzAnalBlock *first = rz_anal_create_block (anal, 0x1337, 42); - RzAnalBlock *second = rz_anal_create_block (anal, 0x1337 + 42, 624); - assert_block_invariants (anal); - mu_assert_eq (blocks_count (anal), 2, "count after create"); + RzAnalysisBlock *first = rz_analysis_create_block (analysis, 0x1337, 42); + RzAnalysisBlock *second = rz_analysis_create_block (analysis, 0x1337 + 42, 624); + assert_block_invariants (analysis); + mu_assert_eq (blocks_count (analysis), 2, "count after create"); - rz_anal_function_add_block (fcn, first); - assert_block_invariants (anal); - rz_anal_function_add_block (fcn, second); - assert_block_invariants (anal); + rz_analysis_function_add_block (fcn, first); + assert_block_invariants (analysis); + rz_analysis_function_add_block (fcn, second); + assert_block_invariants (analysis); - bool success = rz_anal_block_merge (first, second); - assert_block_invariants (anal); + bool success = rz_analysis_block_merge (first, second); + assert_block_invariants (analysis); mu_assert ("merge success", success); - mu_assert_eq (blocks_count (anal), 1, "count after merge"); + mu_assert_eq (blocks_count (analysis), 1, "count after merge"); mu_assert_eq (rz_list_length (fcn->bbs), 1, "fcn bbs after merge"); mu_assert_eq (rz_list_length (first->fcns), 1, "bb functions after merge"); mu_assert ("function has merged block", rz_list_contains (fcn->bbs, first)); mu_assert ("merged block is in function", rz_list_contains (first->fcns, fcn)); - rz_anal_block_unref (first); + rz_analysis_block_unref (first); // second must be already freed by the merge! - assert_block_invariants (anal); - rz_anal_free (anal); + assert_block_invariants (analysis); + rz_analysis_free (analysis); mu_end; } bool test_r_anal_block_delete() { - RzAnal *anal = rz_anal_new (); - assert_block_invariants (anal); + RzAnalysis *analysis = rz_analysis_new (); + assert_block_invariants (analysis); - RzAnalFunction *fcn = rz_anal_create_function (anal, "bbowner", 0x1337, 0, NULL); + RzAnalysisFunction *fcn = rz_analysis_create_function (analysis, "bbowner", 0x1337, 0, NULL); - RzAnalBlock *block = rz_anal_create_block (anal, 0x1337, 42); - assert_block_invariants (anal); - mu_assert_eq (blocks_count (anal), 1, "count after create"); + RzAnalysisBlock *block = rz_analysis_create_block (analysis, 0x1337, 42); + assert_block_invariants (analysis); + mu_assert_eq (blocks_count (analysis), 1, "count after create"); - rz_anal_function_add_block (fcn, block); - assert_block_invariants (anal); + rz_analysis_function_add_block (fcn, block); + assert_block_invariants (analysis); mu_assert_eq (block->ref, 2, "refs after adding"); mu_assert_eq (rz_list_length (fcn->bbs), 1, "fcn bbs after add"); mu_assert_eq (rz_list_length (block->fcns), 1, "bb fcns after add"); - rz_anal_delete_block (block); - assert_block_invariants (anal); + rz_analysis_delete_block (block); + assert_block_invariants (analysis); mu_assert_eq (block->ref, 1, "refs after delete"); mu_assert_eq (rz_list_length (fcn->bbs), 0, "fcn bbs after delete"); mu_assert_eq (rz_list_length (block->fcns), 0, "bb fcns after delete"); - rz_anal_block_unref (block); + rz_analysis_block_unref (block); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } bool test_r_anal_block_set_size() { - RzAnal *anal = rz_anal_new (); - assert_block_invariants (anal); + RzAnalysis *analysis = rz_analysis_new (); + assert_block_invariants (analysis); - RzAnalFunction *fcn = rz_anal_create_function (anal, "bbowner", 0x1337, 0, NULL); + RzAnalysisFunction *fcn = rz_analysis_create_function (analysis, "bbowner", 0x1337, 0, NULL); - RzAnalBlock *block = rz_anal_create_block (anal, 0x1337, 42); - assert_block_invariants (anal); + RzAnalysisBlock *block = rz_analysis_create_block (analysis, 0x1337, 42); + assert_block_invariants (analysis); - rz_anal_function_add_block (fcn, block); - assert_block_invariants (anal); + rz_analysis_function_add_block (fcn, block); + assert_block_invariants (analysis); - rz_anal_block_set_size (block, 300); - assert_block_invariants (anal); + rz_analysis_block_set_size (block, 300); + assert_block_invariants (analysis); mu_assert_eq (block->size, 300, "size after set_size"); - RzAnalBlock *second = rz_anal_create_block (anal, 0x1337+300, 100); - assert_block_invariants (anal); - rz_anal_function_add_block (fcn, block); - assert_block_invariants (anal); - rz_anal_function_linear_size (fcn); // trigger lazy calculation of min/max cache - assert_block_invariants (anal); + RzAnalysisBlock *second = rz_analysis_create_block (analysis, 0x1337+300, 100); + assert_block_invariants (analysis); + rz_analysis_function_add_block (fcn, block); + assert_block_invariants (analysis); + rz_analysis_function_linear_size (fcn); // trigger lazy calculation of min/max cache + assert_block_invariants (analysis); - rz_anal_block_set_size (second, 500); - assert_block_invariants (anal); + rz_analysis_block_set_size (second, 500); + assert_block_invariants (analysis); mu_assert_eq (second->size, 500, "size after set_size"); - rz_anal_block_set_size (block, 80); - assert_block_invariants (anal); + rz_analysis_block_set_size (block, 80); + assert_block_invariants (analysis); mu_assert_eq (block->size, 80, "size after set_size"); - rz_anal_block_unref (block); - rz_anal_block_unref (second); - assert_block_invariants (anal); + rz_analysis_block_unref (block); + rz_analysis_block_unref (second); + assert_block_invariants (analysis); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } bool test_r_anal_block_relocate() { - RzAnal *anal = rz_anal_new (); - assert_block_invariants (anal); + RzAnalysis *analysis = rz_analysis_new (); + assert_block_invariants (analysis); - RzAnalFunction *fcn = rz_anal_create_function (anal, "bbowner", 0x1337, 0, NULL); + RzAnalysisFunction *fcn = rz_analysis_create_function (analysis, "bbowner", 0x1337, 0, NULL); - RzAnalBlock *block = rz_anal_create_block (anal, 0x1337, 42); - assert_block_invariants (anal); + RzAnalysisBlock *block = rz_analysis_create_block (analysis, 0x1337, 42); + assert_block_invariants (analysis); - rz_anal_function_add_block (fcn, block); - assert_block_invariants (anal); - rz_anal_function_linear_size (fcn); // trigger lazy calculation of min/max cache - assert_block_invariants (anal); + rz_analysis_function_add_block (fcn, block); + assert_block_invariants (analysis); + rz_analysis_function_linear_size (fcn); // trigger lazy calculation of min/max cache + assert_block_invariants (analysis); - bool success = rz_anal_block_relocate (block, 0x200, 0x100); + bool success = rz_analysis_block_relocate (block, 0x200, 0x100); mu_assert ("relocate success", success); - assert_block_invariants (anal); + assert_block_invariants (analysis); mu_assert_eq (block->addr, 0x200, "addr after relocate"); mu_assert_eq (block->size, 0x100, "size after relocate"); - RzAnalBlock *second = rz_anal_create_block (anal, 0x1337+300, 100); - assert_block_invariants (anal); - rz_anal_function_add_block (fcn, second); - assert_block_invariants (anal); + RzAnalysisBlock *second = rz_analysis_create_block (analysis, 0x1337+300, 100); + assert_block_invariants (analysis); + rz_analysis_function_add_block (fcn, second); + assert_block_invariants (analysis); - success = rz_anal_block_relocate (second, 0x400, 0x123); + success = rz_analysis_block_relocate (second, 0x400, 0x123); mu_assert ("relocate success", success); - assert_block_invariants (anal); + assert_block_invariants (analysis); mu_assert_eq (second->addr, 0x400, "addr after relocate"); mu_assert_eq (second->size, 0x123, "size after relocate"); - rz_anal_function_linear_size (fcn); // trigger lazy calculation of min/max cache - assert_block_invariants (anal); + rz_analysis_function_linear_size (fcn); // trigger lazy calculation of min/max cache + assert_block_invariants (analysis); - success = rz_anal_block_relocate (block, 0x400, 0x333); + success = rz_analysis_block_relocate (block, 0x400, 0x333); mu_assert ("relocate fail on same addr", !success); - assert_block_invariants (anal); + assert_block_invariants (analysis); mu_assert_eq (block->addr, 0x200, "addr after failed relocate"); mu_assert_eq (block->size, 0x100, "size after failed relocate"); - rz_anal_function_linear_size (fcn); // trigger lazy calculation of min/max cache - assert_block_invariants (anal); + rz_analysis_function_linear_size (fcn); // trigger lazy calculation of min/max cache + assert_block_invariants (analysis); // jump after the other block - success = rz_anal_block_relocate (block, 0x500, 0x333); + success = rz_analysis_block_relocate (block, 0x500, 0x333); mu_assert ("relocate success", success); - assert_block_invariants (anal); + assert_block_invariants (analysis); mu_assert_eq (block->addr, 0x500, "addr after failed relocate"); mu_assert_eq (block->size, 0x333, "size after failed relocate"); - rz_anal_function_linear_size (fcn); // trigger lazy calculation of min/max cache - assert_block_invariants (anal); + rz_analysis_function_linear_size (fcn); // trigger lazy calculation of min/max cache + assert_block_invariants (analysis); // jump before the other block - success = rz_anal_block_relocate (block, 0x10, 0x333); + success = rz_analysis_block_relocate (block, 0x10, 0x333); mu_assert ("relocate success", success); - assert_block_invariants (anal); + assert_block_invariants (analysis); mu_assert_eq (block->addr, 0x10, "addr after failed relocate"); mu_assert_eq (block->size, 0x333, "size after failed relocate"); - rz_anal_block_unref (block); - rz_anal_block_unref (second); - assert_block_invariants (anal); + rz_analysis_block_unref (block); + rz_analysis_block_unref (second); + assert_block_invariants (analysis); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } bool test_r_anal_block_query() { - RzAnal *anal = rz_anal_new (); - assert_block_invariants (anal); + RzAnalysis *analysis = rz_analysis_new (); + assert_block_invariants (analysis); #define N 200 #define MAXSIZE 0x300 #define SPACE 0x10000 #define SAMPLES 300 - RzAnalBlock *blocks[N]; + RzAnalysisBlock *blocks[N]; size_t i; for (i = 0; i < N; i++) { - blocks[i] = rz_anal_create_block (anal, rand () % SPACE, rand () % MAXSIZE); // may return null on duplicates - assert_block_invariants (anal); + blocks[i] = rz_analysis_create_block (analysis, rand () % SPACE, rand () % MAXSIZE); // may return null on duplicates + assert_block_invariants (analysis); } // -- - // test rz_anal_get_block_at() + // test rz_analysis_get_block_at() for (i = 0; i < N; i++) { if (!blocks[i]) { continue; } - mu_assert_ptreq (rz_anal_get_block_at (anal, blocks[i]->addr), blocks[i], "rz_anal_get_block_at"); + mu_assert_ptreq (rz_analysis_get_block_at (analysis, blocks[i]->addr), blocks[i], "rz_analysis_get_block_at"); } for (i = 0; i < SAMPLES; i++) { ut64 addr = rand () % SPACE; size_t j; - // goal is to check cases where rz_anal_get_block_at() returns null, + // goal is to check cases where rz_analysis_get_block_at() returns null, // but since the addr is random, there may be a block sometimes too. - RzAnalBlock *block = NULL; + RzAnalysisBlock *block = NULL; for (j = 0; j < N; j++) { if (!blocks[j]) { continue; @@ -409,17 +409,17 @@ bool test_r_anal_block_query() { } } - mu_assert_ptreq (rz_anal_get_block_at (anal, addr), block, "rz_anal_get_block_at"); + mu_assert_ptreq (rz_analysis_get_block_at (analysis, addr), block, "rz_analysis_get_block_at"); } // -- - // test rz_anal_get_blocks_in() + // test rz_analysis_get_blocks_in() for (i = 0; i < SAMPLES; i++) { ut64 addr = rand () % SPACE; - RzList *in = rz_anal_get_blocks_in (anal, addr); + RzList *in = rz_analysis_get_blocks_in (analysis, addr); - RzAnalBlock *block; + RzAnalysisBlock *block; RzListIter *it; rz_list_foreach (in, it, block) { mu_assert_eq (block->ref, 2, "block refd in returned list"); @@ -431,24 +431,24 @@ bool test_r_anal_block_query() { if (!blocks[j]) { continue; } - if (rz_anal_block_contains (blocks[j], addr)) { + if (rz_analysis_block_contains (blocks[j], addr)) { linear_found++; mu_assert ("intersect linear found in list", rz_list_contains (in, blocks[j])); } } - mu_assert_eq ((size_t)rz_list_length (in), linear_found, "rz_anal_get_blocks_in count"); + mu_assert_eq ((size_t)rz_list_length (in), linear_found, "rz_analysis_get_blocks_in count"); rz_list_free (in); } // -- - // test rz_anal_get_blocks_intersect() + // test rz_analysis_get_blocks_intersect() for (i = 0; i < SAMPLES; i++) { ut64 addr = rand () % SPACE; ut64 size = rand() % MAXSIZE; - RzList *in = rz_anal_get_blocks_intersect (anal, addr, size); + RzList *in = rz_analysis_get_blocks_intersect (analysis, addr, size); - RzAnalBlock *block; + RzAnalysisBlock *block; RzListIter *it; rz_list_foreach (in, it, block) { mu_assert_eq (block->ref, 2, "block refd in returned list"); @@ -457,23 +457,23 @@ bool test_r_anal_block_query() { size_t linear_found = 0; size_t j; for (j = 0; j < N; j++) { - RzAnalBlock *block = blocks[j]; + RzAnalysisBlock *block = blocks[j]; if (!block || addr + size <= block->addr || addr >= block->addr + block->size) { continue; } linear_found++; mu_assert ("in linear found in list", rz_list_contains (in, blocks[j])); } - mu_assert_eq ((size_t)rz_list_length (in), linear_found, "rz_anal_get_blocks_intersect count"); + mu_assert_eq ((size_t)rz_list_length (in), linear_found, "rz_analysis_get_blocks_intersect count"); rz_list_free (in); } for (i = 0; i < N; i++) { - rz_anal_block_unref (blocks[i]); + rz_analysis_block_unref (blocks[i]); } - assert_block_leaks (anal); - rz_anal_free (anal); + assert_block_leaks (analysis); + rz_analysis_free (analysis); mu_end; } @@ -484,21 +484,21 @@ bool addr_list_cb(ut64 addr, void *user) { } bool test_r_anal_block_successors() { - RzAnal *anal = rz_anal_new (); - assert_block_invariants (anal); + RzAnalysis *analysis = rz_analysis_new (); + assert_block_invariants (analysis); - RzAnalBlock *blocks[10]; - blocks[0] = rz_anal_create_block (anal, 0x10, 0x10); - blocks[1] = rz_anal_create_block (anal, 0x30, 0x10); - blocks[2] = rz_anal_create_block (anal, 0x50, 0x10); - blocks[3] = rz_anal_create_block (anal, 0x100, 0x10); - blocks[4] = rz_anal_create_block (anal, 0x110, 0x10); - blocks[5] = rz_anal_create_block (anal, 0x120, 0x10); - blocks[6] = rz_anal_create_block (anal, 0x130, 0x10); - blocks[7] = rz_anal_create_block (anal, 0x140, 0x10); - blocks[8] = rz_anal_create_block (anal, 0xa0, 0x10); - blocks[9] = rz_anal_create_block (anal, 0xc0, 0x10); - assert_block_invariants (anal); + RzAnalysisBlock *blocks[10]; + blocks[0] = rz_analysis_create_block (analysis, 0x10, 0x10); + blocks[1] = rz_analysis_create_block (analysis, 0x30, 0x10); + blocks[2] = rz_analysis_create_block (analysis, 0x50, 0x10); + blocks[3] = rz_analysis_create_block (analysis, 0x100, 0x10); + blocks[4] = rz_analysis_create_block (analysis, 0x110, 0x10); + blocks[5] = rz_analysis_create_block (analysis, 0x120, 0x10); + blocks[6] = rz_analysis_create_block (analysis, 0x130, 0x10); + blocks[7] = rz_analysis_create_block (analysis, 0x140, 0x10); + blocks[8] = rz_analysis_create_block (analysis, 0xa0, 0x10); + blocks[9] = rz_analysis_create_block (analysis, 0xc0, 0x10); + assert_block_invariants (analysis); blocks[0]->jump = 0x30; blocks[0]->fail = 0x50; @@ -506,26 +506,26 @@ bool test_r_anal_block_successors() { blocks[1]->fail = 0x50; blocks[2]->jump = 0x10; - RzAnalSwitchOp *sop = rz_anal_switch_op_new (0x55, 0x13, 0x15, 0x42); + RzAnalysisSwitchOp *sop = rz_analysis_switch_op_new (0x55, 0x13, 0x15, 0x42); mu_assert_eq (sop->addr, 0x55, "addr"); mu_assert_eq (sop->min_val, 0x13, "addr"); mu_assert_eq (sop->max_val, 0x15, "addr"); mu_assert_eq (sop->def_val, 0x42, "addr"); - rz_anal_switch_op_add_case (sop, 0x55, 1, 0x100); - rz_anal_switch_op_add_case (sop, 0x55, 2, 0x110); - rz_anal_switch_op_add_case (sop, 0x55, 3, 0x120); - rz_anal_switch_op_add_case (sop, 0x55, 4, 0x130); - rz_anal_switch_op_add_case (sop, 0x55, 5, 0x140); + rz_analysis_switch_op_add_case (sop, 0x55, 1, 0x100); + rz_analysis_switch_op_add_case (sop, 0x55, 2, 0x110); + rz_analysis_switch_op_add_case (sop, 0x55, 3, 0x120); + rz_analysis_switch_op_add_case (sop, 0x55, 4, 0x130); + rz_analysis_switch_op_add_case (sop, 0x55, 5, 0x140); blocks[2]->switch_op = sop; RzList *result = rz_list_new (); - rz_anal_block_successor_addrs_foreach (blocks[0], addr_list_cb, result); + rz_analysis_block_successor_addrs_foreach (blocks[0], addr_list_cb, result); mu_assert_eq (rz_list_length (result), 2, "jump/fail successors count"); mu_assert ("jmp successor", rz_list_contains (result, (void *)0x30)); mu_assert ("fail successor", rz_list_contains (result, (void *)0x50)); rz_list_purge (result); - rz_anal_block_successor_addrs_foreach (blocks[2], addr_list_cb, result); + rz_analysis_block_successor_addrs_foreach (blocks[2], addr_list_cb, result); mu_assert_eq (rz_list_length (result), 6, "switch successors count"); mu_assert ("jmp successor", rz_list_contains (result, (void *)0x10)); mu_assert ("case successor", rz_list_contains (result, (void *)0x100)); @@ -535,8 +535,8 @@ bool test_r_anal_block_successors() { mu_assert ("case successor", rz_list_contains (result, (void *)0x140)); rz_list_free (result); - result = rz_anal_block_recurse_list (blocks[0]); - RzAnalBlock *block; + result = rz_analysis_block_recurse_list (blocks[0]); + RzAnalysisBlock *block; RzListIter *it; rz_list_foreach (result, it, block) { mu_assert_eq (block->ref, 2, "block refd in returned list"); @@ -555,52 +555,52 @@ bool test_r_anal_block_successors() { rz_list_free (result); size_t i; - for (i = 0; i < sizeof (blocks) / sizeof (RzAnalBlock *); i++) { - rz_anal_block_unref (blocks[i]); + for (i = 0; i < sizeof (blocks) / sizeof (RzAnalysisBlock *); i++) { + rz_analysis_block_unref (blocks[i]); } - assert_block_leaks (anal); - rz_anal_free (anal); + assert_block_leaks (analysis); + rz_analysis_free (analysis); mu_end; } bool test_r_anal_block_automerge() { size_t i; for (i = 0; i < SAMPLES; i++) { - RzAnal *anal = rz_anal_new (); - assert_block_invariants (anal); + RzAnalysis *analysis = rz_analysis_new (); + assert_block_invariants (analysis); - RzAnalBlock *a = rz_anal_create_block (anal, 0x100, 0x10); + RzAnalysisBlock *a = rz_analysis_create_block (analysis, 0x100, 0x10); - RzAnalBlock *b = rz_anal_create_block (anal, 0x110, 0x10); + RzAnalysisBlock *b = rz_analysis_create_block (analysis, 0x110, 0x10); a->jump = b->addr; - RzAnalBlock *c = rz_anal_create_block (anal, 0x120, 0x10); + RzAnalysisBlock *c = rz_analysis_create_block (analysis, 0x120, 0x10); b->jump = c->addr; c->fail = b->addr; - RzAnalBlock *d = rz_anal_create_block (anal, 0x130, 0x10); + RzAnalysisBlock *d = rz_analysis_create_block (analysis, 0x130, 0x10); c->jump = d->addr; - RzAnalBlock *e = rz_anal_create_block (anal, 0x140, 0x10); + RzAnalysisBlock *e = rz_analysis_create_block (analysis, 0x140, 0x10); d->jump = e->addr; - RzAnalBlock *f = rz_anal_create_block (anal, 0x150, 0x10); + RzAnalysisBlock *f = rz_analysis_create_block (analysis, 0x150, 0x10); e->jump = f->addr; - RzAnalFunction *fa = rz_anal_create_function (anal, "fcn", 0x100, RZ_ANAL_FCN_TYPE_FCN, NULL); - rz_anal_function_add_block (fa, a); - rz_anal_function_add_block (fa, c); - rz_anal_function_add_block (fa, d); - rz_anal_function_add_block (fa, e); - rz_anal_function_add_block (fa, f); + RzAnalysisFunction *fa = rz_analysis_create_function (analysis, "fcn", 0x100, RZ_ANAL_FCN_TYPE_FCN, NULL); + rz_analysis_function_add_block (fa, a); + rz_analysis_function_add_block (fa, c); + rz_analysis_function_add_block (fa, d); + rz_analysis_function_add_block (fa, e); + rz_analysis_function_add_block (fa, f); - RzAnalFunction *fb = rz_anal_create_function (anal, "fcn2", 0x110, RZ_ANAL_FCN_TYPE_FCN, NULL); - rz_anal_function_add_block (fb, b); - rz_anal_function_add_block (fb, c); - rz_anal_function_add_block (fb, d); - rz_anal_function_add_block (fb, e); - rz_anal_function_add_block (fb, f); + RzAnalysisFunction *fb = rz_analysis_create_function (analysis, "fcn2", 0x110, RZ_ANAL_FCN_TYPE_FCN, NULL); + rz_analysis_function_add_block (fb, b); + rz_analysis_function_add_block (fb, c); + rz_analysis_function_add_block (fb, d); + rz_analysis_function_add_block (fb, e); + rz_analysis_function_add_block (fb, f); RzList *all_blocks = rz_list_new (); rz_list_push (all_blocks, a); @@ -612,7 +612,7 @@ bool test_r_anal_block_automerge() { // Randomize the order in which we give the automerge the block. // The outcome should always be the same but it can have some delicate implications on the algorithm inside. - RzList *shuffled_blocks = rz_list_newf ((RzListFree)rz_anal_block_unref); + RzList *shuffled_blocks = rz_list_newf ((RzListFree)rz_analysis_block_unref); while (!rz_list_empty (all_blocks)) { int n = rand () % rz_list_length (all_blocks); rz_list_push (shuffled_blocks, rz_list_get_n (all_blocks, n)); @@ -620,49 +620,49 @@ bool test_r_anal_block_automerge() { } rz_list_free (all_blocks); - rz_anal_block_automerge (shuffled_blocks); - assert_block_invariants (anal); + rz_analysis_block_automerge (shuffled_blocks); + assert_block_invariants (analysis); //mu_assert_eq (rz_list_length (shuffled_blocks), 4, "length after automerge"); mu_assert ("remaining blocks a", rz_list_contains (shuffled_blocks, a)); mu_assert ("remaining blocks b", rz_list_contains (shuffled_blocks, b)); mu_assert ("remaining blocks c", rz_list_contains (shuffled_blocks, c)); mu_assert ("remaining blocks d", rz_list_contains (shuffled_blocks, d)); - mu_assert_eq (blocks_count (anal), rz_list_length (shuffled_blocks), "blocks in anal count"); + mu_assert_eq (blocks_count (analysis), rz_list_length (shuffled_blocks), "blocks in anal count"); RzListIter *it; - RzAnalBlock *block; + RzAnalysisBlock *block; rz_list_foreach (shuffled_blocks, it, block) { - mu_assert_ptreq (rz_anal_get_block_at (anal, block->addr), block, "remaining blocks in anal"); + mu_assert_ptreq (rz_analysis_get_block_at (analysis, block->addr), block, "remaining blocks in anal"); } rz_list_free (shuffled_blocks); - assert_block_invariants (anal); - assert_block_leaks (anal); - rz_anal_free (anal); + assert_block_invariants (analysis); + assert_block_leaks (analysis); + rz_analysis_free (analysis); } mu_end; } bool test_r_anal_block_chop_noreturn(void) { - RzAnal *anal = rz_anal_new (); - assert_block_invariants (anal); + RzAnalysis *analysis = rz_analysis_new (); + assert_block_invariants (analysis); - RzAnalBlock *a = rz_anal_create_block (anal, 0x100, 0x10); - RzAnalBlock *b = rz_anal_create_block (anal, 0x110, 0x10); - RzAnalBlock *c = rz_anal_create_block (anal, 0x120, 0x10); + RzAnalysisBlock *a = rz_analysis_create_block (analysis, 0x100, 0x10); + RzAnalysisBlock *b = rz_analysis_create_block (analysis, 0x110, 0x10); + RzAnalysisBlock *c = rz_analysis_create_block (analysis, 0x120, 0x10); a->jump = c->addr; b->jump = c->addr; - RzAnalFunction *fa = rz_anal_create_function (anal, "fcn", 0x100, RZ_ANAL_FCN_TYPE_FCN, NULL); - rz_anal_function_add_block (fa, a); - rz_anal_function_add_block (fa, b); - rz_anal_function_add_block (fa, c); + RzAnalysisFunction *fa = rz_analysis_create_function (analysis, "fcn", 0x100, RZ_ANAL_FCN_TYPE_FCN, NULL); + rz_analysis_function_add_block (fa, a); + rz_analysis_function_add_block (fa, b); + rz_analysis_function_add_block (fa, c); - RzAnalFunction *fb = rz_anal_create_function (anal, "fcn2", 0x130, RZ_ANAL_FCN_TYPE_FCN, NULL); + RzAnalysisFunction *fb = rz_analysis_create_function (analysis, "fcn2", 0x130, RZ_ANAL_FCN_TYPE_FCN, NULL); fb->is_noreturn = true; - rz_anal_block_chop_noreturn (b, 0x111); + rz_analysis_block_chop_noreturn (b, 0x111); - assert_block_invariants (anal); + assert_block_invariants (analysis); mu_end; } diff --git a/test/unit/test_anal_block_invars.inl b/test/unit/test_anal_block_invars.inl index f022dc361e..a36626fcbc 100644 --- a/test/unit/test_anal_block_invars.inl +++ b/test/unit/test_anal_block_invars.inl @@ -1,9 +1,9 @@ -static bool block_check_invariants(RzAnal *anal) { +static bool block_check_invariants(RzAnalysis *analysis) { RBIter iter; - RzAnalBlock *block; + RzAnalysisBlock *block; ut64 last_start = UT64_MAX; - rz_rbtree_foreach (anal->bb_tree, iter, block, RzAnalBlock, _rb) { + rz_rbtree_foreach (analysis->bb_tree, iter, block, RzAnalysisBlock, _rb) { if (last_start != UT64_MAX) { mu_assert ("corrupted binary tree", block->addr >= last_start); mu_assert_neq (block->addr, last_start, "double blocks"); @@ -14,10 +14,10 @@ static bool block_check_invariants(RzAnal *anal) { mu_assert ("block->ref < rz_list_length (block->fcns)", block->ref >= rz_list_length (block->fcns)); RzListIter *fcniter; - RzAnalFunction *fcn; + RzAnalysisFunction *fcn; rz_list_foreach (block->fcns, fcniter, fcn) { RzListIter *fcniter2; - RzAnalFunction *fcn2; + RzAnalysisFunction *fcn2; for (fcniter2 = fcniter->n; fcniter2 && (fcn2 = fcniter2->data, 1); fcniter2 = fcniter2->n) { mu_assert_ptrneq (fcn, fcn2, "duplicate function in basic block"); } @@ -26,15 +26,15 @@ static bool block_check_invariants(RzAnal *anal) { } RzListIter *fcniter; - RzAnalFunction *fcn; - rz_list_foreach (anal->fcns, fcniter, fcn) { + RzAnalysisFunction *fcn; + rz_list_foreach (analysis->fcns, fcniter, fcn) { RzListIter *blockiter; ut64 min = UT64_MAX; ut64 max = UT64_MIN; ut64 realsz = 0; rz_list_foreach (fcn->bbs, blockiter, block) { RzListIter *blockiter2; - RzAnalBlock *block2; + RzAnalysisBlock *block2; if (block->addr < min) { min = block->addr; } @@ -53,15 +53,15 @@ static bool block_check_invariants(RzAnal *anal) { mu_assert_eq (fcn->meta._max, max, "function max wrong"); } - mu_assert_eq (rz_anal_function_realsize (fcn), realsz, "realsize wrong"); + mu_assert_eq (rz_analysis_function_realsize (fcn), realsz, "realsize wrong"); } return true; } -static bool block_check_leaks(RzAnal *anal) { +static bool block_check_leaks(RzAnalysis *analysis) { RBIter iter; - RzAnalBlock *block; - rz_rbtree_foreach (anal->bb_tree, iter, block, RzAnalBlock, _rb) { + RzAnalysisBlock *block; + rz_rbtree_foreach (analysis->bb_tree, iter, block, RzAnalysisBlock, _rb) { if (block->ref != rz_list_length (block->fcns)) { mu_assert ("leaked basic block", false); } @@ -69,5 +69,5 @@ static bool block_check_leaks(RzAnal *anal) { return true; } -#define assert_block_invariants(anal) do { if (!block_check_invariants (anal)) { return false; } } while (0) -#define assert_block_leaks(anal) do { if (!block_check_leaks (anal)) { return false; } } while (0) +#define assert_block_invariants(analysis) do { if (!block_check_invariants (analysis)) { return false; } } while (0) +#define assert_block_leaks(analysis) do { if (!block_check_leaks (analysis)) { return false; } } while (0) diff --git a/test/unit/test_anal_cc.c b/test/unit/test_anal_cc.c index 8e4ec76953..4d3b1ce7d3 100644 --- a/test/unit/test_anal_cc.c +++ b/test/unit/test_anal_cc.c @@ -1,4 +1,4 @@ -#include +#include #include "minunit.h" #include "test_sdb.h" @@ -25,75 +25,75 @@ static Sdb *ref_db_self_err() { return db; } -static RzAnal *ref_anal() { - RzAnal *anal = rz_anal_new (); - rz_anal_cc_set (anal, "rax sectarian(rdx, rcx, stack)"); - return anal; +static RzAnalysis *ref_anal() { + RzAnalysis *analysis = rz_analysis_new (); + rz_analysis_cc_set (analysis, "rax sectarian(rdx, rcx, stack)"); + return analysis; } -static RzAnal *ref_anal_self_err() { - RzAnal *anal = rz_anal_new (); - rz_anal_cc_set (anal, "rax sectarian(rdx, rcx, stack)"); - rz_anal_cc_set_self (anal, "sectarian", "rsi"); - rz_anal_cc_set_error (anal, "sectarian", "rdi"); - return anal; +static RzAnalysis *ref_anal_self_err() { + RzAnalysis *analysis = rz_analysis_new (); + rz_analysis_cc_set (analysis, "rax sectarian(rdx, rcx, stack)"); + rz_analysis_cc_set_self (analysis, "sectarian", "rsi"); + rz_analysis_cc_set_error (analysis, "sectarian", "rdi"); + return analysis; } bool test_r_anal_cc_set() { - RzAnal *anal = ref_anal (); + RzAnalysis *analysis = ref_anal (); Sdb *ref = ref_db (); - assert_sdb_eq (anal->sdb_cc, ref, "set cc"); + assert_sdb_eq (analysis->sdb_cc, ref, "set cc"); sdb_free (ref); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } bool test_r_anal_cc_set_self_err() { - RzAnal *anal = ref_anal_self_err (); + RzAnalysis *analysis = ref_anal_self_err (); Sdb *ref = ref_db_self_err (); - assert_sdb_eq (anal->sdb_cc, ref, "set cc"); + assert_sdb_eq (analysis->sdb_cc, ref, "set cc"); sdb_free (ref); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } bool test_r_anal_cc_get() { - RzAnal *anal = ref_anal (); - char *v = rz_anal_cc_get (anal, "sectarian"); + RzAnalysis *analysis = ref_anal (); + char *v = rz_analysis_cc_get (analysis, "sectarian"); mu_assert_streq (v, "rax sectarian (rdx, rcx, stack);", "get cc"); free (v); - const char *vv = rz_anal_cc_self (anal, "sectarian"); + const char *vv = rz_analysis_cc_self (analysis, "sectarian"); mu_assert_null (vv, "get self"); - vv = rz_anal_cc_error (anal, "sectarian"); + vv = rz_analysis_cc_error (analysis, "sectarian"); mu_assert_null (vv, "get error"); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } bool test_r_anal_cc_get_self_err() { - RzAnal *anal = ref_anal_self_err (); - char *v = rz_anal_cc_get (anal, "sectarian"); + RzAnalysis *analysis = ref_anal_self_err (); + char *v = rz_analysis_cc_get (analysis, "sectarian"); mu_assert_streq (v, "rax rsi.sectarian (rdx, rcx, stack) rdi;", "get cc"); free (v); - const char *vv = rz_anal_cc_self (anal, "sectarian"); + const char *vv = rz_analysis_cc_self (analysis, "sectarian"); mu_assert_streq (vv, "rsi", "get self"); - vv = rz_anal_cc_error (anal, "sectarian"); + vv = rz_analysis_cc_error (analysis, "sectarian"); mu_assert_streq (vv, "rdi", "get error"); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } bool test_r_anal_cc_del() { - RzAnal *anal = ref_anal (); - rz_anal_cc_del (anal, "sectarian"); + RzAnalysis *analysis = ref_anal (); + rz_analysis_cc_del (analysis, "sectarian"); Sdb *ref = sdb_new0 (); - assert_sdb_eq (anal->sdb_cc, ref, "deleted"); + assert_sdb_eq (analysis->sdb_cc, ref, "deleted"); sdb_free (ref); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } diff --git a/test/unit/test_anal_class_graph.c b/test/unit/test_anal_class_graph.c index d9f52a4b91..18fab2916e 100644 --- a/test/unit/test_anal_class_graph.c +++ b/test/unit/test_anal_class_graph.c @@ -1,5 +1,5 @@ #include -#include +#include #include #include #include "minunit.h" @@ -14,7 +14,7 @@ bool test_inherit_graph_creation() { rz_core_cmd0 (core, "acb C A"); rz_core_cmd0 (core, "acb D B"); rz_core_cmd0 (core, "acb D C"); - RzGraph *graph = rz_anal_class_get_inheritance_graph (core->anal); + RzGraph *graph = rz_analysis_class_get_inheritance_graph (core->analysis); mu_assert_notnull (graph, "Couldn't create the graph"); mu_assert_eq (graph->nodes->length, 4, "Wrong node count"); diff --git a/test/unit/test_anal_function.c b/test/unit/test_anal_function.c index 86aea528ba..7b26422cbf 100644 --- a/test/unit/test_anal_function.c +++ b/test/unit/test_anal_function.c @@ -1,4 +1,4 @@ -#include +#include #include "minunit.h" #include "test_anal_block_invars.inl" @@ -15,25 +15,25 @@ bool ht_pp_count(void *user, const void *k, const void *v) { return true; } -static bool function_check_invariants(RzAnal *anal) { - if (!block_check_invariants (anal)) { +static bool function_check_invariants(RzAnalysis *analysis) { + if (!block_check_invariants (analysis)) { return false; } RzListIter *it; - RzAnalFunction *fcn; - rz_list_foreach (anal->fcns, it, fcn) { - mu_assert_ptreq (ht_up_find (anal->ht_addr_fun, fcn->addr, NULL), fcn, "function in addr ht"); - mu_assert_ptreq (ht_pp_find (anal->ht_name_fun, fcn->name, NULL), fcn, "function in name ht"); + RzAnalysisFunction *fcn; + rz_list_foreach (analysis->fcns, it, fcn) { + mu_assert_ptreq (ht_up_find (analysis->ht_addr_fun, fcn->addr, NULL), fcn, "function in addr ht"); + mu_assert_ptreq (ht_pp_find (analysis->ht_name_fun, fcn->name, NULL), fcn, "function in name ht"); } size_t addr_count = 0; - ht_up_foreach (anal->ht_addr_fun, ht_up_count, &addr_count); - mu_assert_eq (addr_count, rz_list_length (anal->fcns), "function addr ht count"); + ht_up_foreach (analysis->ht_addr_fun, ht_up_count, &addr_count); + mu_assert_eq (addr_count, rz_list_length (analysis->fcns), "function addr ht count"); size_t name_count = 0; - ht_pp_foreach (anal->ht_name_fun, ht_pp_count, &name_count); - mu_assert_eq (name_count, rz_list_length (anal->fcns), "function name ht count"); + ht_pp_foreach (analysis->ht_name_fun, ht_pp_count, &name_count); + mu_assert_eq (name_count, rz_list_length (analysis->fcns), "function name ht count"); return true; } @@ -41,86 +41,86 @@ static bool function_check_invariants(RzAnal *anal) { #define check_invariants function_check_invariants #define check_leaks block_check_leaks -#define assert_invariants(anal) do { if (!check_invariants (anal)) { return false; } } while (0) -#define assert_leaks(anal) do { if (!check_leaks (anal)) { return false; } } while (0) +#define assert_invariants(analysis) do { if (!check_invariants (analysis)) { return false; } } while (0) +#define assert_leaks(analysis) do { if (!check_leaks (analysis)) { return false; } } while (0) bool test_r_anal_function_relocate() { - RzAnal *anal = rz_anal_new (); - assert_invariants (anal); + RzAnalysis *analysis = rz_analysis_new (); + assert_invariants (analysis); - RzAnalFunction *fa = rz_anal_create_function (anal, "do_something", 0x1337, 0, NULL); - assert_invariants (anal); - RzAnalFunction *fb = rz_anal_create_function (anal, "do_something_else", 0xdeadbeef, 0, NULL); - assert_invariants (anal); - rz_anal_create_function (anal, "do_something_different", 0xc0ffee, 0, NULL); - assert_invariants (anal); + RzAnalysisFunction *fa = rz_analysis_create_function (analysis, "do_something", 0x1337, 0, NULL); + assert_invariants (analysis); + RzAnalysisFunction *fb = rz_analysis_create_function (analysis, "do_something_else", 0xdeadbeef, 0, NULL); + assert_invariants (analysis); + rz_analysis_create_function (analysis, "do_something_different", 0xc0ffee, 0, NULL); + assert_invariants (analysis); - bool success = rz_anal_function_relocate (fa, fb->addr); - assert_invariants (anal); + bool success = rz_analysis_function_relocate (fa, fb->addr); + assert_invariants (analysis); mu_assert_false (success, "failed relocate"); mu_assert_eq (fa->addr, 0x1337, "failed relocate addr"); - success = rz_anal_function_relocate (fa, 0x1234); - assert_invariants (anal); + success = rz_analysis_function_relocate (fa, 0x1234); + assert_invariants (analysis); mu_assert_true (success, "successful relocate"); mu_assert_eq (fa->addr, 0x1234, "successful relocate addr"); - assert_leaks (anal); - rz_anal_free (anal); + assert_leaks (analysis); + rz_analysis_free (analysis); mu_end; } bool test_r_anal_function_labels() { - RzAnal *anal = rz_anal_new (); + RzAnalysis *analysis = rz_analysis_new (); - RzAnalFunction *f = rz_anal_create_function (anal, "do_something", 0x1337, 0, NULL); + RzAnalysisFunction *f = rz_analysis_create_function (analysis, "do_something", 0x1337, 0, NULL); - bool s = rz_anal_function_set_label (f, "smartfriend", 0x1339); + bool s = rz_analysis_function_set_label (f, "smartfriend", 0x1339); mu_assert_true (s, "set label"); - s = rz_anal_function_set_label (f, "stray", 0x133c); + s = rz_analysis_function_set_label (f, "stray", 0x133c); mu_assert_true (s, "set label"); - s = rz_anal_function_set_label (f, "the", 0x1340); + s = rz_analysis_function_set_label (f, "the", 0x1340); mu_assert_true (s, "set label"); - s = rz_anal_function_set_label (f, "stray", 0x1234); + s = rz_analysis_function_set_label (f, "stray", 0x1234); mu_assert_false (s, "set label (existing name)"); - s = rz_anal_function_set_label (f, "henlo", 0x133c); + s = rz_analysis_function_set_label (f, "henlo", 0x133c); mu_assert_false (s, "set label (existing addr)"); - ut64 addr = rz_anal_function_get_label (f, "smartfriend"); + ut64 addr = rz_analysis_function_get_label (f, "smartfriend"); mu_assert_eq (addr, 0x1339, "get label"); - addr = rz_anal_function_get_label (f, "stray"); + addr = rz_analysis_function_get_label (f, "stray"); mu_assert_eq (addr, 0x133c, "get label"); - addr = rz_anal_function_get_label (f, "skies"); + addr = rz_analysis_function_get_label (f, "skies"); mu_assert_eq (addr, UT64_MAX, "get label (unknown)"); - const char *name = rz_anal_function_get_label_at (f, 0x1339); + const char *name = rz_analysis_function_get_label_at (f, 0x1339); mu_assert_streq (name, "smartfriend", "get label at"); - name = rz_anal_function_get_label_at (f, 0x133c); + name = rz_analysis_function_get_label_at (f, 0x133c); mu_assert_streq (name, "stray", "get label at"); - name = rz_anal_function_get_label_at (f, 0x1234); + name = rz_analysis_function_get_label_at (f, 0x1234); mu_assert_null (name, "get label at (unknown)"); - rz_anal_function_delete_label (f, "stray"); - addr = rz_anal_function_get_label (f, "stray"); + rz_analysis_function_delete_label (f, "stray"); + addr = rz_analysis_function_get_label (f, "stray"); mu_assert_eq (addr, UT64_MAX, "get label (deleted)"); - name = rz_anal_function_get_label_at (f, 0x133c); + name = rz_analysis_function_get_label_at (f, 0x133c); mu_assert_null (name, "get label at (deleted)"); - addr = rz_anal_function_get_label (f, "smartfriend"); + addr = rz_analysis_function_get_label (f, "smartfriend"); mu_assert_eq (addr, 0x1339, "get label (unaffected by delete)"); - name = rz_anal_function_get_label_at (f, 0x1339); + name = rz_analysis_function_get_label_at (f, 0x1339); mu_assert_streq (name, "smartfriend", "get label at (unaffected by delete)"); - rz_anal_function_delete_label_at (f, 0x1340); - addr = rz_anal_function_get_label (f, "the"); + rz_analysis_function_delete_label_at (f, 0x1340); + addr = rz_analysis_function_get_label (f, "the"); mu_assert_eq (addr, UT64_MAX, "get label (deleted)"); - name = rz_anal_function_get_label_at (f, 0x340); + name = rz_analysis_function_get_label_at (f, 0x340); mu_assert_null (name, "get label at (deleted)"); - addr = rz_anal_function_get_label (f, "smartfriend"); + addr = rz_analysis_function_get_label (f, "smartfriend"); mu_assert_eq (addr, 0x1339, "get label (unaffected by delete)"); - name = rz_anal_function_get_label_at (f, 0x1339); + name = rz_analysis_function_get_label_at (f, 0x1339); mu_assert_streq (name, "smartfriend", "get label at (unaffected by delete)"); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } diff --git a/test/unit/test_anal_hints.c b/test/unit/test_anal_hints.c index b6754df2f9..f04bed2df2 100644 --- a/test/unit/test_anal_hints.c +++ b/test/unit/test_anal_hints.c @@ -1,9 +1,9 @@ -#include +#include #include "minunit.h" -const RzAnalHint empty_hint = { +const RzAnalysisHint empty_hint = { .addr = UT64_MAX, .ptr = 0, .val = UT64_MAX, @@ -25,7 +25,7 @@ const RzAnalHint empty_hint = { .stackframe = UT64_MAX, }; -bool hint_equals(const RzAnalHint *a, const RzAnalHint *b) { +bool hint_equals(const RzAnalysisHint *a, const RzAnalysisHint *b) { #define CHECK_EQ(member) mu_assert_eq (a->member, b->member, "hint member " #member) CHECK_EQ (ptr); CHECK_EQ (val); @@ -59,274 +59,274 @@ bool hint_equals(const RzAnalHint *a, const RzAnalHint *b) { } while (0) bool test_r_anal_addr_hints() { - RzAnal *anal = rz_anal_new (); - RzAnalHint *hint = rz_anal_hint_get (anal, 0x1337); + RzAnalysis *analysis = rz_analysis_new (); + RzAnalysisHint *hint = rz_analysis_hint_get (analysis, 0x1337); assert_hint_eq (hint, &empty_hint); - rz_anal_hint_free (hint); + rz_analysis_hint_free (hint); - RzAnalHint cur = empty_hint; + RzAnalysisHint cur = empty_hint; #define CHECK \ - hint = rz_anal_hint_get (anal, 0x1337); \ + hint = rz_analysis_hint_get (analysis, 0x1337); \ assert_hint_eq (hint, &cur); \ - rz_anal_hint_free (hint); - hint = rz_anal_hint_get (anal, 0x1338); \ + rz_analysis_hint_free (hint); + hint = rz_analysis_hint_get (analysis, 0x1338); \ assert_hint_eq (hint, &empty_hint); \ - rz_anal_hint_free (hint); - hint = rz_anal_hint_get (anal, 0x1336); \ + rz_analysis_hint_free (hint); + hint = rz_analysis_hint_get (analysis, 0x1336); \ assert_hint_eq (hint, &empty_hint); \ - rz_anal_hint_free (hint); + rz_analysis_hint_free (hint); // set -------- - rz_anal_hint_set_syntax (anal, 0x1337, "mysyntax"); + rz_analysis_hint_set_syntax (analysis, 0x1337, "mysyntax"); cur.syntax = "mysyntax"; CHECK - rz_anal_hint_set_type (anal, 0x1337, RZ_ANAL_OP_TYPE_RET); + rz_analysis_hint_set_type (analysis, 0x1337, RZ_ANAL_OP_TYPE_RET); cur.type = RZ_ANAL_OP_TYPE_RET; CHECK - rz_anal_hint_set_jump (anal, 0x1337, 0xdeadbeef); + rz_analysis_hint_set_jump (analysis, 0x1337, 0xdeadbeef); cur.jump = 0xdeadbeef; CHECK - rz_anal_hint_set_fail (anal, 0x1337, 0xc0ffee); + rz_analysis_hint_set_fail (analysis, 0x1337, 0xc0ffee); cur.fail = 0xc0ffee; CHECK - rz_anal_hint_set_nword (anal, 0x1337, 42); + rz_analysis_hint_set_nword (analysis, 0x1337, 42); cur.nword = 42; CHECK - rz_anal_hint_set_offset (anal, 0x1337, "mytypeoff"); + rz_analysis_hint_set_offset (analysis, 0x1337, "mytypeoff"); cur.offset = "mytypeoff"; CHECK - rz_anal_hint_set_immbase (anal, 0x1337, 7); + rz_analysis_hint_set_immbase (analysis, 0x1337, 7); cur.immbase = 7; CHECK - rz_anal_hint_set_size (anal, 0x1337, 0x123); + rz_analysis_hint_set_size (analysis, 0x1337, 0x123); cur.size = 0x123; CHECK - rz_anal_hint_set_opcode (anal, 0x1337, "myopcode"); + rz_analysis_hint_set_opcode (analysis, 0x1337, "myopcode"); cur.opcode = "myopcode"; CHECK - rz_anal_hint_set_esil (anal, 0x1337, "/,-rf,rm"); + rz_analysis_hint_set_esil (analysis, 0x1337, "/,-rf,rm"); cur.esil = "/,-rf,rm"; CHECK - rz_anal_hint_set_pointer (anal, 0x1337, 0x4242); + rz_analysis_hint_set_pointer (analysis, 0x1337, 0x4242); cur.ptr = 0x4242; CHECK - rz_anal_hint_set_ret (anal, 0x1337, 0xf00d); + rz_analysis_hint_set_ret (analysis, 0x1337, 0xf00d); cur.ret = 0xf00d; CHECK - rz_anal_hint_set_high (anal, 0x1337); + rz_analysis_hint_set_high (analysis, 0x1337); cur.high = true; CHECK - rz_anal_hint_set_stackframe (anal, 0x1337, 0x4321); + rz_analysis_hint_set_stackframe (analysis, 0x1337, 0x4321); cur.stackframe = 0x4321; CHECK - rz_anal_hint_set_val (anal, 0x1337, 0x112358d); + rz_analysis_hint_set_val (analysis, 0x1337, 0x112358d); cur.val = 0x112358d; CHECK - rz_anal_hint_set_newbits (anal, 0x1337, 16); + rz_analysis_hint_set_newbits (analysis, 0x1337, 16); cur.new_bits = 16; CHECK // unset -------- - rz_anal_hint_unset_syntax (anal, 0x1337); + rz_analysis_hint_unset_syntax (analysis, 0x1337); cur.syntax = NULL; CHECK - rz_anal_hint_unset_type (anal, 0x1337); + rz_analysis_hint_unset_type (analysis, 0x1337); cur.type = 0; CHECK - rz_anal_hint_unset_jump (anal, 0x1337); + rz_analysis_hint_unset_jump (analysis, 0x1337); cur.jump = UT64_MAX; CHECK - rz_anal_hint_unset_fail (anal, 0x1337); + rz_analysis_hint_unset_fail (analysis, 0x1337); cur.fail = UT64_MAX; CHECK - rz_anal_hint_unset_nword (anal, 0x1337); + rz_analysis_hint_unset_nword (analysis, 0x1337); cur.nword = 0; CHECK - rz_anal_hint_unset_offset (anal, 0x1337); + rz_analysis_hint_unset_offset (analysis, 0x1337); cur.offset = NULL; CHECK - rz_anal_hint_unset_immbase (anal, 0x1337); + rz_analysis_hint_unset_immbase (analysis, 0x1337); cur.immbase = 0; CHECK - rz_anal_hint_unset_size (anal, 0x1337); + rz_analysis_hint_unset_size (analysis, 0x1337); cur.size = 0; CHECK - rz_anal_hint_unset_opcode (anal, 0x1337); + rz_analysis_hint_unset_opcode (analysis, 0x1337); cur.opcode = NULL; CHECK - rz_anal_hint_unset_esil (anal, 0x1337); + rz_analysis_hint_unset_esil (analysis, 0x1337); cur.esil = NULL; CHECK - rz_anal_hint_unset_pointer (anal, 0x1337); + rz_analysis_hint_unset_pointer (analysis, 0x1337); cur.ptr = 0; CHECK - rz_anal_hint_unset_ret (anal, 0x1337); + rz_analysis_hint_unset_ret (analysis, 0x1337); cur.ret = UT64_MAX; CHECK - rz_anal_hint_unset_high (anal, 0x1337); + rz_analysis_hint_unset_high (analysis, 0x1337); cur.high = false; CHECK - rz_anal_hint_unset_stackframe (anal, 0x1337); + rz_analysis_hint_unset_stackframe (analysis, 0x1337); cur.stackframe = UT64_MAX; CHECK - rz_anal_hint_unset_val (anal, 0x1337); + rz_analysis_hint_unset_val (analysis, 0x1337); cur.val = UT64_MAX; CHECK - rz_anal_hint_unset_newbits (anal, 0x1337); + rz_analysis_hint_unset_newbits (analysis, 0x1337); cur.new_bits = 0; //CHECK - hint = rz_anal_hint_get (anal, 0x1337); + hint = rz_analysis_hint_get (analysis, 0x1337); assert_hint_eq (hint, &empty_hint); - rz_anal_hint_free (hint); + rz_analysis_hint_free (hint); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; #undef CHECK } #define RANGED_TEST(name, val, resetval, assert_val) \ bool test_r_anal_hints_##name() { \ - RzAnal *anal = rz_anal_new (); \ + RzAnalysis *analysis = rz_analysis_new (); \ \ ut64 hint_addr = 0xdead; \ - assert_val (rz_anal_hint_##name##_at (anal, 0x1337, &hint_addr), resetval, "no " #name ""); \ + assert_val (rz_analysis_hint_##name##_at (analysis, 0x1337, &hint_addr), resetval, "no " #name ""); \ mu_assert_eq (hint_addr, UT64_MAX, "hint addr"); \ \ - rz_anal_hint_##name##_at (anal, 0x1337, NULL); /* make sure this does not null-deref */ \ + rz_analysis_hint_##name##_at (analysis, 0x1337, NULL); /* make sure this does not null-deref */ \ \ /* -- */ \ - rz_anal_hint_set_##name (anal, 0x1337, val); \ + rz_analysis_hint_set_##name (analysis, 0x1337, val); \ \ hint_addr = 0xdead; \ - assert_val (rz_anal_hint_##name##_at (anal, 0x1337, &hint_addr), val, #name " at addr"); \ + assert_val (rz_analysis_hint_##name##_at (analysis, 0x1337, &hint_addr), val, #name " at addr"); \ mu_assert_eq (hint_addr, 0x1337, "hint addr"); \ hint_addr = 0xdead; \ - assert_val (rz_anal_hint_##name##_at (anal, 0x1338, &hint_addr), val, #name " after addr"); \ + assert_val (rz_analysis_hint_##name##_at (analysis, 0x1338, &hint_addr), val, #name " after addr"); \ mu_assert_eq (hint_addr, 0x1337, "hint addr"); \ hint_addr = 0xdead; \ - assert_val (rz_anal_hint_##name##_at (anal, UT64_MAX, &hint_addr), val, #name " after addr"); \ + assert_val (rz_analysis_hint_##name##_at (analysis, UT64_MAX, &hint_addr), val, #name " after addr"); \ mu_assert_eq (hint_addr, 0x1337, "hint addr"); \ hint_addr = 0xdead; \ - assert_val (rz_anal_hint_##name##_at (anal, 0x1336, &hint_addr), resetval, "no " #name " before addr"); \ + assert_val (rz_analysis_hint_##name##_at (analysis, 0x1336, &hint_addr), resetval, "no " #name " before addr"); \ mu_assert_eq (hint_addr, UT64_MAX, "hint addr"); \ hint_addr = 0xdead; \ - assert_val (rz_anal_hint_##name##_at (anal, 0, &hint_addr), resetval, "no " #name " before addr"); \ + assert_val (rz_analysis_hint_##name##_at (analysis, 0, &hint_addr), resetval, "no " #name " before addr"); \ mu_assert_eq (hint_addr, UT64_MAX, "hint addr"); \ \ - rz_anal_hint_##name##_at (anal, 0x1337, NULL); /* make sure this does not null-deref */ \ + rz_analysis_hint_##name##_at (analysis, 0x1337, NULL); /* make sure this does not null-deref */ \ \ - RzAnalHint cur = empty_hint; \ + RzAnalysisHint cur = empty_hint; \ cur.name = val; \ - RzAnalHint *hint = rz_anal_hint_get (anal, 0x1337); \ + RzAnalysisHint *hint = rz_analysis_hint_get (analysis, 0x1337); \ assert_hint_eq (hint, &cur); \ - rz_anal_hint_free (hint); \ - hint = rz_anal_hint_get (anal, 0x1338); \ + rz_analysis_hint_free (hint); \ + hint = rz_analysis_hint_get (analysis, 0x1338); \ assert_hint_eq (hint, &cur); \ - rz_anal_hint_free (hint); \ - hint = rz_anal_hint_get (anal, 0x1336); \ + rz_analysis_hint_free (hint); \ + hint = rz_analysis_hint_get (analysis, 0x1336); \ assert_hint_eq (hint, &empty_hint); \ - rz_anal_hint_free (hint); \ + rz_analysis_hint_free (hint); \ \ /* -- */ \ hint_addr = 0xdead; \ - assert_val (rz_anal_hint_##name##_at (anal, 0xdeadbeef, &hint_addr), val, "before reset " #name " at addr"); \ + assert_val (rz_analysis_hint_##name##_at (analysis, 0xdeadbeef, &hint_addr), val, "before reset " #name " at addr"); \ mu_assert_eq (hint_addr, 0x1337, "hint addr"); \ - rz_anal_hint_set_##name (anal, 0xdeadbeef, resetval); \ + rz_analysis_hint_set_##name (analysis, 0xdeadbeef, resetval); \ hint_addr = 0xdead; \ - assert_val (rz_anal_hint_##name##_at (anal, 0xdeadbeef, &hint_addr), resetval, "reset " #name " at addr"); \ + assert_val (rz_analysis_hint_##name##_at (analysis, 0xdeadbeef, &hint_addr), resetval, "reset " #name " at addr"); \ mu_assert_eq (hint_addr, 0xdeadbeef, "hint addr"); \ hint_addr = 0xdead; \ - assert_val (rz_anal_hint_##name##_at (anal, 0xdeadbeef + 1, &hint_addr), resetval, "reset " #name " after addr"); \ + assert_val (rz_analysis_hint_##name##_at (analysis, 0xdeadbeef + 1, &hint_addr), resetval, "reset " #name " after addr"); \ mu_assert_eq (hint_addr, 0xdeadbeef, "hint addr"); \ hint_addr = 0xdead; \ - assert_val (rz_anal_hint_##name##_at (anal, UT64_MAX, &hint_addr), resetval, "reset " #name " after addr"); \ + assert_val (rz_analysis_hint_##name##_at (analysis, UT64_MAX, &hint_addr), resetval, "reset " #name " after addr"); \ mu_assert_eq (hint_addr, 0xdeadbeef, "hint addr"); \ hint_addr = 0xdead; \ - assert_val (rz_anal_hint_##name##_at (anal, 0xdeadbeef - 1, &hint_addr), val, "" #name " before addr"); \ + assert_val (rz_analysis_hint_##name##_at (analysis, 0xdeadbeef - 1, &hint_addr), val, "" #name " before addr"); \ mu_assert_eq (hint_addr, 0x1337, "hint addr"); \ \ /* -- */ \ - rz_anal_hint_unset_##name (anal, 0xdeadbeef); \ + rz_analysis_hint_unset_##name (analysis, 0xdeadbeef); \ hint_addr = 0xdead; \ - assert_val (rz_anal_hint_##name##_at (anal, 0x1337, &hint_addr), val, #name " at addr"); \ + assert_val (rz_analysis_hint_##name##_at (analysis, 0x1337, &hint_addr), val, #name " at addr"); \ mu_assert_eq (hint_addr, 0x1337, "hint addr"); \ hint_addr = 0xdead; \ - assert_val (rz_anal_hint_##name##_at (anal, 0x1338, &hint_addr), val, #name " after addr"); \ + assert_val (rz_analysis_hint_##name##_at (analysis, 0x1338, &hint_addr), val, #name " after addr"); \ mu_assert_eq (hint_addr, 0x1337, "hint addr"); \ hint_addr = 0xdead; \ - assert_val (rz_anal_hint_##name##_at (anal, UT64_MAX, &hint_addr), val, #name " after addr"); \ + assert_val (rz_analysis_hint_##name##_at (analysis, UT64_MAX, &hint_addr), val, #name " after addr"); \ mu_assert_eq (hint_addr, 0x1337, "hint addr"); \ hint_addr = 0xdead; \ - assert_val (rz_anal_hint_##name##_at (anal, 0x1336, &hint_addr), resetval, "no " #name " before addr"); \ + assert_val (rz_analysis_hint_##name##_at (analysis, 0x1336, &hint_addr), resetval, "no " #name " before addr"); \ mu_assert_eq (hint_addr, UT64_MAX, "hint addr"); \ hint_addr = 0xdead; \ - assert_val (rz_anal_hint_##name##_at (anal, 0, &hint_addr), resetval, "no " #name " before addr"); \ + assert_val (rz_analysis_hint_##name##_at (analysis, 0, &hint_addr), resetval, "no " #name " before addr"); \ mu_assert_eq (hint_addr, UT64_MAX, "hint addr"); \ hint_addr = 0xdead; \ - assert_val (rz_anal_hint_##name##_at (anal, 0xdeadbeef, &hint_addr), val, "unset reset " #name " at addr"); \ + assert_val (rz_analysis_hint_##name##_at (analysis, 0xdeadbeef, &hint_addr), val, "unset reset " #name " at addr"); \ mu_assert_eq (hint_addr, 0x1337, "hint addr"); \ hint_addr = 0xdead; \ - assert_val (rz_anal_hint_##name##_at (anal, 0xdeadbeef + 1, &hint_addr), val, "unset reset " #name " after addr"); \ + assert_val (rz_analysis_hint_##name##_at (analysis, 0xdeadbeef + 1, &hint_addr), val, "unset reset " #name " after addr"); \ mu_assert_eq (hint_addr, 0x1337, "hint addr"); \ hint_addr = 0xdead; \ - assert_val (rz_anal_hint_##name##_at (anal, UT64_MAX, &hint_addr), val, "unset reset " #name " after addr"); \ + assert_val (rz_analysis_hint_##name##_at (analysis, UT64_MAX, &hint_addr), val, "unset reset " #name " after addr"); \ mu_assert_eq (hint_addr, 0x1337, "hint addr"); \ hint_addr = 0xdead; \ - assert_val (rz_anal_hint_##name##_at (anal, 0xdeadbeef - 1, &hint_addr), val, #name " before addr"); \ + assert_val (rz_analysis_hint_##name##_at (analysis, 0xdeadbeef - 1, &hint_addr), val, #name " before addr"); \ mu_assert_eq (hint_addr, 0x1337, "hint addr"); \ \ /* -- */ \ - rz_anal_hint_unset_##name (anal, 0x1337); \ + rz_analysis_hint_unset_##name (analysis, 0x1337); \ hint_addr = 0xdead; \ - assert_val (rz_anal_hint_##name##_at (anal, 0x1336, &hint_addr), resetval, "unset " #name ""); \ + assert_val (rz_analysis_hint_##name##_at (analysis, 0x1336, &hint_addr), resetval, "unset " #name ""); \ mu_assert_eq (hint_addr, UT64_MAX, "hint addr"); \ hint_addr = 0xdead; \ - assert_val (rz_anal_hint_##name##_at (anal, 0, &hint_addr), resetval, "unset " #name ""); \ + assert_val (rz_analysis_hint_##name##_at (analysis, 0, &hint_addr), resetval, "unset " #name ""); \ mu_assert_eq (hint_addr, UT64_MAX, "hint addr"); \ hint_addr = 0xdead; \ - assert_val (rz_anal_hint_##name##_at (anal, 0x1337, &hint_addr), resetval, "unset " #name ""); \ + assert_val (rz_analysis_hint_##name##_at (analysis, 0x1337, &hint_addr), resetval, "unset " #name ""); \ mu_assert_eq (hint_addr, UT64_MAX, "hint addr"); \ hint_addr = 0xdead; \ - assert_val (rz_anal_hint_##name##_at (anal, 0x1338, &hint_addr), resetval, "unset " #name ""); \ + assert_val (rz_analysis_hint_##name##_at (analysis, 0x1338, &hint_addr), resetval, "unset " #name ""); \ mu_assert_eq (hint_addr, UT64_MAX, "hint addr"); \ hint_addr = 0xdead; \ - assert_val (rz_anal_hint_##name##_at (anal, UT64_MAX, &hint_addr), resetval, "unset " #name ""); \ + assert_val (rz_analysis_hint_##name##_at (analysis, UT64_MAX, &hint_addr), resetval, "unset " #name ""); \ mu_assert_eq (hint_addr, UT64_MAX, "hint addr"); \ hint_addr = 0xdead; \ \ - rz_anal_free (anal); \ + rz_analysis_free (analysis); \ mu_end; \ } diff --git a/test/unit/test_anal_meta.c b/test/unit/test_anal_meta.c index f847efb367..098bf8c051 100644 --- a/test/unit/test_anal_meta.c +++ b/test/unit/test_anal_meta.c @@ -1,20 +1,20 @@ -#include +#include #include "minunit.h" bool test_meta_set() { - RzAnal *anal = rz_anal_new (); + RzAnalysis *analysis = rz_analysis_new (); - rz_meta_set (anal, RZ_META_TYPE_DATA, 0x100, 4, NULL); - rz_meta_set_string (anal, RZ_META_TYPE_COMMENT, 0x100, "summer of love"); - rz_meta_set_with_subtype (anal, RZ_META_TYPE_STRING, RZ_STRING_ENC_UTF8, 0x200, 0x30, "true confessions"); + rz_meta_set (analysis, RZ_META_TYPE_DATA, 0x100, 4, NULL); + rz_meta_set_string (analysis, RZ_META_TYPE_COMMENT, 0x100, "summer of love"); + rz_meta_set_with_subtype (analysis, RZ_META_TYPE_STRING, RZ_STRING_ENC_UTF8, 0x200, 0x30, "true confessions"); bool found[3] = { 0 }; size_t count = 0; RzIntervalTreeIter it; - RzAnalMetaItem *item; - rz_interval_tree_foreach (&anal->meta, it, item) { + RzAnalysisMetaItem *item; + rz_interval_tree_foreach (&analysis->meta, it, item) { count++; RzIntervalNode *node = rz_interval_tree_iter_get (&it); switch (item->type) { @@ -49,11 +49,11 @@ bool test_meta_set() { mu_assert ("meta 2", found[2]); // Override an item, changing only its size - rz_meta_set (anal, RZ_META_TYPE_DATA, 0x100, 8, NULL); + rz_meta_set (analysis, RZ_META_TYPE_DATA, 0x100, 8, NULL); count = 0; found[0] = found[1] = found[2] = false; - rz_interval_tree_foreach (&anal->meta, it, item) { + rz_interval_tree_foreach (&analysis->meta, it, item) { count++; RzIntervalNode *node = rz_interval_tree_iter_get (&it); switch (item->type) { @@ -88,12 +88,12 @@ bool test_meta_set() { mu_assert ("meta 2", found[2]); // Override items, changing their contents - rz_meta_set_string (anal, RZ_META_TYPE_COMMENT, 0x100, "this ain't the summer of love"); - rz_meta_set_with_subtype (anal, RZ_META_TYPE_STRING, RZ_STRING_ENC_UTF16LE, 0x200, 0x40, "e.t.i. (extra terrestrial intelligence)"); + rz_meta_set_string (analysis, RZ_META_TYPE_COMMENT, 0x100, "this ain't the summer of love"); + rz_meta_set_with_subtype (analysis, RZ_META_TYPE_STRING, RZ_STRING_ENC_UTF16LE, 0x200, 0x40, "e.t.i. (extra terrestrial intelligence)"); count = 0; found[0] = found[1] = found[2] = false; - rz_interval_tree_foreach (&anal->meta, it, item) { + rz_interval_tree_foreach (&analysis->meta, it, item) { count++; RzIntervalNode *node = rz_interval_tree_iter_get (&it); switch (item->type) { @@ -127,102 +127,102 @@ bool test_meta_set() { mu_assert ("meta 1", found[1]); mu_assert ("meta 2", found[2]); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } bool test_meta_get_at() { - RzAnal *anal = rz_anal_new (); + RzAnalysis *analysis = rz_analysis_new (); - rz_meta_set (anal, RZ_META_TYPE_DATA, 0x100, 4, NULL); - rz_meta_set_string (anal, RZ_META_TYPE_COMMENT, 0x100, "vera gemini"); - rz_meta_set_with_subtype (anal, RZ_META_TYPE_STRING, RZ_STRING_ENC_UTF8, 0x200, 0x30, "true confessions"); + rz_meta_set (analysis, RZ_META_TYPE_DATA, 0x100, 4, NULL); + rz_meta_set_string (analysis, RZ_META_TYPE_COMMENT, 0x100, "vera gemini"); + rz_meta_set_with_subtype (analysis, RZ_META_TYPE_STRING, RZ_STRING_ENC_UTF8, 0x200, 0x30, "true confessions"); - RzAnalMetaItem *item = rz_meta_get_at (anal, 0x100, RZ_META_TYPE_COMMENT, NULL); + RzAnalysisMetaItem *item = rz_meta_get_at (analysis, 0x100, RZ_META_TYPE_COMMENT, NULL); mu_assert_notnull (item, "get item"); mu_assert_streq (item->str, "vera gemini", "get contents"); ut64 size; - item = rz_meta_get_at (anal, 0x100, RZ_META_TYPE_DATA, &size); + item = rz_meta_get_at (analysis, 0x100, RZ_META_TYPE_DATA, &size); mu_assert_notnull (item, "get item"); mu_assert_eq (item->type, RZ_META_TYPE_DATA, "get contents"); mu_assert_eq (size, 4, "get size"); - item = rz_meta_get_at (anal, 0x200, RZ_META_TYPE_ANY, NULL); + item = rz_meta_get_at (analysis, 0x200, RZ_META_TYPE_ANY, NULL); mu_assert_notnull (item, "get item"); mu_assert_streq (item->str, "true confessions", "get contents"); - item = rz_meta_get_at (anal, 0x100, RZ_META_TYPE_ANY, NULL); + item = rz_meta_get_at (analysis, 0x100, RZ_META_TYPE_ANY, NULL); mu_assert_notnull (item, "get item"); // which one we get is undefined here (intended) - item = rz_meta_get_at (anal, 0x1ff, RZ_META_TYPE_ANY, NULL); + item = rz_meta_get_at (analysis, 0x1ff, RZ_META_TYPE_ANY, NULL); mu_assert_null (item, "get item"); - item = rz_meta_get_at (anal, 0x201, RZ_META_TYPE_ANY, NULL); + item = rz_meta_get_at (analysis, 0x201, RZ_META_TYPE_ANY, NULL); mu_assert_null (item, "get item"); - item = rz_meta_get_at (anal, 0xff, RZ_META_TYPE_ANY, NULL); + item = rz_meta_get_at (analysis, 0xff, RZ_META_TYPE_ANY, NULL); mu_assert_null (item, "get item"); - item = rz_meta_get_at (anal, 0x101, RZ_META_TYPE_ANY, NULL); + item = rz_meta_get_at (analysis, 0x101, RZ_META_TYPE_ANY, NULL); mu_assert_null (item, "get item"); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } bool test_meta_get_in() { - RzAnal *anal = rz_anal_new (); + RzAnalysis *analysis = rz_analysis_new (); - rz_meta_set (anal, RZ_META_TYPE_DATA, 0x100, 4, NULL); - rz_meta_set_string (anal, RZ_META_TYPE_COMMENT, 0x100, "vera gemini"); + rz_meta_set (analysis, RZ_META_TYPE_DATA, 0x100, 4, NULL); + rz_meta_set_string (analysis, RZ_META_TYPE_COMMENT, 0x100, "vera gemini"); - RzIntervalNode *node = rz_meta_get_in (anal, 0x100, RZ_META_TYPE_COMMENT); + RzIntervalNode *node = rz_meta_get_in (analysis, 0x100, RZ_META_TYPE_COMMENT); mu_assert_notnull (node, "get item"); - RzAnalMetaItem *item = node->data; + RzAnalysisMetaItem *item = node->data; mu_assert_streq (item->str, "vera gemini", "get contents"); - node = rz_meta_get_in (anal, 0xff, RZ_META_TYPE_COMMENT); + node = rz_meta_get_in (analysis, 0xff, RZ_META_TYPE_COMMENT); mu_assert_null (node, "get item"); - node = rz_meta_get_in (anal, 0x101, RZ_META_TYPE_COMMENT); + node = rz_meta_get_in (analysis, 0x101, RZ_META_TYPE_COMMENT); mu_assert_null (node, "get item"); - node = rz_meta_get_in (anal, 0x100, RZ_META_TYPE_DATA); + node = rz_meta_get_in (analysis, 0x100, RZ_META_TYPE_DATA); mu_assert_notnull (node, "get item"); item = node->data; mu_assert_eq (item->type, RZ_META_TYPE_DATA, "get contents"); - node = rz_meta_get_in (anal, 0xff, RZ_META_TYPE_DATA); + node = rz_meta_get_in (analysis, 0xff, RZ_META_TYPE_DATA); mu_assert_null (node, "get item"); - node = rz_meta_get_in (anal, 0x103, RZ_META_TYPE_DATA); + node = rz_meta_get_in (analysis, 0x103, RZ_META_TYPE_DATA); mu_assert_notnull (node, "get item"); item = node->data; mu_assert_eq (item->type, RZ_META_TYPE_DATA, "get contents"); - node = rz_meta_get_in (anal, 0x104, RZ_META_TYPE_DATA); + node = rz_meta_get_in (analysis, 0x104, RZ_META_TYPE_DATA); mu_assert_null (node, "get item"); - node = rz_meta_get_in (anal, 0x103, RZ_META_TYPE_ANY); + node = rz_meta_get_in (analysis, 0x103, RZ_META_TYPE_ANY); mu_assert_notnull (node, "get item"); item = node->data; mu_assert_eq (item->type, RZ_META_TYPE_DATA, "get contents"); - node = rz_meta_get_in (anal, 0x100, RZ_META_TYPE_ANY); + node = rz_meta_get_in (analysis, 0x100, RZ_META_TYPE_ANY); mu_assert_notnull (node, "get item"); // which one we get is undefined here (intended) - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } bool test_meta_get_all_at() { - RzAnal *anal = rz_anal_new (); + RzAnalysis *analysis = rz_analysis_new (); - rz_meta_set (anal, RZ_META_TYPE_DATA, 0x100, 4, NULL); - rz_meta_set_string (anal, RZ_META_TYPE_COMMENT, 0x100, "vera gemini"); - rz_meta_set_with_subtype (anal, RZ_META_TYPE_STRING, RZ_STRING_ENC_UTF8, 0x200, 0x30, "true confessions"); + rz_meta_set (analysis, RZ_META_TYPE_DATA, 0x100, 4, NULL); + rz_meta_set_string (analysis, RZ_META_TYPE_COMMENT, 0x100, "vera gemini"); + rz_meta_set_with_subtype (analysis, RZ_META_TYPE_STRING, RZ_STRING_ENC_UTF8, 0x200, 0x30, "true confessions"); - RzPVector *items = rz_meta_get_all_at (anal, 0x100); + RzPVector *items = rz_meta_get_all_at (analysis, 0x100); mu_assert_eq (rz_pvector_len (items), 2, "all count"); void **it; bool found[2] = { 0 }; rz_pvector_foreach (items, it) { - RzAnalMetaItem *item = ((RzIntervalNode *)*it)->data; + RzAnalysisMetaItem *item = ((RzIntervalNode *)*it)->data; switch (item->type) { case RZ_META_TYPE_DATA: found[0] = true; @@ -238,31 +238,31 @@ bool test_meta_get_all_at() { mu_assert ("meta 1", found[1]); rz_pvector_free (items); - items = rz_meta_get_all_at (anal, 0xff); + items = rz_meta_get_all_at (analysis, 0xff); mu_assert_eq (rz_pvector_len (items), 0, "all count"); rz_pvector_free (items); - items = rz_meta_get_all_at (anal, 0x101); + items = rz_meta_get_all_at (analysis, 0x101); mu_assert_eq (rz_pvector_len (items), 0, "all count"); rz_pvector_free (items); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } bool test_meta_get_all_in() { - RzAnal *anal = rz_anal_new (); + RzAnalysis *analysis = rz_analysis_new (); - rz_meta_set (anal, RZ_META_TYPE_DATA, 0x100, 4, NULL); - rz_meta_set_string (anal, RZ_META_TYPE_COMMENT, 0x100, "vera gemini"); - rz_meta_set_with_subtype (anal, RZ_META_TYPE_STRING, RZ_STRING_ENC_UTF8, 0x200, 0x30, "true confessions"); + rz_meta_set (analysis, RZ_META_TYPE_DATA, 0x100, 4, NULL); + rz_meta_set_string (analysis, RZ_META_TYPE_COMMENT, 0x100, "vera gemini"); + rz_meta_set_with_subtype (analysis, RZ_META_TYPE_STRING, RZ_STRING_ENC_UTF8, 0x200, 0x30, "true confessions"); - RzPVector *items = rz_meta_get_all_in (anal, 0x100, RZ_META_TYPE_ANY); + RzPVector *items = rz_meta_get_all_in (analysis, 0x100, RZ_META_TYPE_ANY); mu_assert_eq (rz_pvector_len (items), 2, "all count"); void **it; bool found[2] = { 0 }; rz_pvector_foreach (items, it) { - RzAnalMetaItem *item = ((RzIntervalNode *)*it)->data; + RzAnalysisMetaItem *item = ((RzIntervalNode *)*it)->data; switch (item->type) { case RZ_META_TYPE_DATA: found[0] = true; @@ -278,53 +278,53 @@ bool test_meta_get_all_in() { mu_assert ("meta 1", found[1]); rz_pvector_free (items); - items = rz_meta_get_all_in (anal, 0x100, RZ_META_TYPE_COMMENT); + items = rz_meta_get_all_in (analysis, 0x100, RZ_META_TYPE_COMMENT); mu_assert_eq (rz_pvector_len (items), 1, "all count"); - RzAnalMetaItem *item = ((RzIntervalNode *)rz_pvector_at (items, 0))->data; + RzAnalysisMetaItem *item = ((RzIntervalNode *)rz_pvector_at (items, 0))->data; mu_assert_streq (item->str, "vera gemini", "contents"); rz_pvector_free (items); - items = rz_meta_get_all_in (anal, 0x100, RZ_META_TYPE_DATA); + items = rz_meta_get_all_in (analysis, 0x100, RZ_META_TYPE_DATA); mu_assert_eq (rz_pvector_len (items), 1, "all count"); item = ((RzIntervalNode *)rz_pvector_at (items, 0))->data; mu_assert_eq (item->type, RZ_META_TYPE_DATA, "contents"); rz_pvector_free (items); - items = rz_meta_get_all_in (anal, 0xff, RZ_META_TYPE_ANY); + items = rz_meta_get_all_in (analysis, 0xff, RZ_META_TYPE_ANY); mu_assert_eq (rz_pvector_len (items), 0, "all count"); rz_pvector_free (items); - items = rz_meta_get_all_in (anal, 0x101, RZ_META_TYPE_COMMENT); + items = rz_meta_get_all_in (analysis, 0x101, RZ_META_TYPE_COMMENT); mu_assert_eq (rz_pvector_len (items), 0, "all count"); rz_pvector_free (items); - items = rz_meta_get_all_in (anal, 0x103, RZ_META_TYPE_DATA); + items = rz_meta_get_all_in (analysis, 0x103, RZ_META_TYPE_DATA); mu_assert_eq (rz_pvector_len (items), 1, "all count"); item = ((RzIntervalNode *)rz_pvector_at (items, 0))->data; mu_assert_eq (item->type, RZ_META_TYPE_DATA, "contents"); rz_pvector_free (items); - items = rz_meta_get_all_in (anal, 0x104, RZ_META_TYPE_DATA); + items = rz_meta_get_all_in (analysis, 0x104, RZ_META_TYPE_DATA); mu_assert_eq (rz_pvector_len (items), 0, "all count"); rz_pvector_free (items); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } bool test_meta_get_all_intersect() { - RzAnal *anal = rz_anal_new (); + RzAnalysis *analysis = rz_analysis_new (); - rz_meta_set (anal, RZ_META_TYPE_DATA, 0x100, 4, NULL); - rz_meta_set_string (anal, RZ_META_TYPE_COMMENT, 0x100, "vera gemini"); - rz_meta_set_with_subtype (anal, RZ_META_TYPE_STRING, RZ_STRING_ENC_UTF8, 0x200, 0x30, "true confessions"); + rz_meta_set (analysis, RZ_META_TYPE_DATA, 0x100, 4, NULL); + rz_meta_set_string (analysis, RZ_META_TYPE_COMMENT, 0x100, "vera gemini"); + rz_meta_set_with_subtype (analysis, RZ_META_TYPE_STRING, RZ_STRING_ENC_UTF8, 0x200, 0x30, "true confessions"); - RzPVector *items = rz_meta_get_all_intersect (anal, 0x100, 1, RZ_META_TYPE_ANY); + RzPVector *items = rz_meta_get_all_intersect (analysis, 0x100, 1, RZ_META_TYPE_ANY); mu_assert_eq (rz_pvector_len (items), 2, "all count"); void **it; bool found[2] = { 0 }; rz_pvector_foreach (items, it) { - RzAnalMetaItem *item = ((RzIntervalNode *)*it)->data; + RzAnalysisMetaItem *item = ((RzIntervalNode *)*it)->data; switch (item->type) { case RZ_META_TYPE_DATA: found[0] = true; @@ -340,120 +340,120 @@ bool test_meta_get_all_intersect() { mu_assert ("meta 1", found[1]); rz_pvector_free (items); - items = rz_meta_get_all_intersect (anal, 0x100, 1, RZ_META_TYPE_DATA); + items = rz_meta_get_all_intersect (analysis, 0x100, 1, RZ_META_TYPE_DATA); mu_assert_eq (rz_pvector_len (items), 1, "all count"); - RzAnalMetaItem *item = ((RzIntervalNode *)rz_pvector_at (items, 0))->data; + RzAnalysisMetaItem *item = ((RzIntervalNode *)rz_pvector_at (items, 0))->data; mu_assert_eq (item->type, RZ_META_TYPE_DATA, "contents"); rz_pvector_free (items); - items = rz_meta_get_all_intersect (anal, 0x100, 0x300, RZ_META_TYPE_DATA); + items = rz_meta_get_all_intersect (analysis, 0x100, 0x300, RZ_META_TYPE_DATA); mu_assert_eq (rz_pvector_len (items), 1, "all count"); item = ((RzIntervalNode *)rz_pvector_at (items, 0))->data; mu_assert_eq (item->type, RZ_META_TYPE_DATA, "contents"); rz_pvector_free (items); - items = rz_meta_get_all_intersect (anal, 0x0, 0x300, RZ_META_TYPE_DATA); + items = rz_meta_get_all_intersect (analysis, 0x0, 0x300, RZ_META_TYPE_DATA); mu_assert_eq (rz_pvector_len (items), 1, "all count"); item = ((RzIntervalNode *)rz_pvector_at (items, 0))->data; mu_assert_eq (item->type, RZ_META_TYPE_DATA, "contents"); rz_pvector_free (items); - items = rz_meta_get_all_intersect (anal, 0x0, 0x100, RZ_META_TYPE_DATA); + items = rz_meta_get_all_intersect (analysis, 0x0, 0x100, RZ_META_TYPE_DATA); mu_assert_eq (rz_pvector_len (items), 0, "all count"); rz_pvector_free (items); - items = rz_meta_get_all_intersect (anal, 0x103, 0x300, RZ_META_TYPE_DATA); + items = rz_meta_get_all_intersect (analysis, 0x103, 0x300, RZ_META_TYPE_DATA); mu_assert_eq (rz_pvector_len (items), 1, "all count"); item = ((RzIntervalNode *)rz_pvector_at (items, 0))->data; mu_assert_eq (item->type, RZ_META_TYPE_DATA, "contents"); rz_pvector_free (items); - items = rz_meta_get_all_intersect (anal, 0x104, 0x300, RZ_META_TYPE_DATA); + items = rz_meta_get_all_intersect (analysis, 0x104, 0x300, RZ_META_TYPE_DATA); mu_assert_eq (rz_pvector_len (items), 0, "all count"); rz_pvector_free (items); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } bool test_meta_del() { - RzAnal *anal = rz_anal_new (); + RzAnalysis *analysis = rz_analysis_new (); - rz_meta_set (anal, RZ_META_TYPE_DATA, 0x100, 4, NULL); - rz_meta_set_string (anal, RZ_META_TYPE_COMMENT, 0x100, "vera gemini"); - rz_meta_set_with_subtype (anal, RZ_META_TYPE_STRING, RZ_STRING_ENC_UTF8, 0x200, 0x30, "true confessions"); + rz_meta_set (analysis, RZ_META_TYPE_DATA, 0x100, 4, NULL); + rz_meta_set_string (analysis, RZ_META_TYPE_COMMENT, 0x100, "vera gemini"); + rz_meta_set_with_subtype (analysis, RZ_META_TYPE_STRING, RZ_STRING_ENC_UTF8, 0x200, 0x30, "true confessions"); - rz_meta_del (anal, RZ_META_TYPE_COMMENT, 0x100, 1); - RzAnalMetaItem *item = rz_meta_get_at (anal, 0x100, RZ_META_TYPE_COMMENT, NULL); + rz_meta_del (analysis, RZ_META_TYPE_COMMENT, 0x100, 1); + RzAnalysisMetaItem *item = rz_meta_get_at (analysis, 0x100, RZ_META_TYPE_COMMENT, NULL); mu_assert_null (item, "item deleted"); - item = rz_meta_get_at (anal, 0x100, RZ_META_TYPE_DATA, NULL); + item = rz_meta_get_at (analysis, 0x100, RZ_META_TYPE_DATA, NULL); mu_assert_notnull (item, "item not deleted"); - item = rz_meta_get_at (anal, 0x200, RZ_META_TYPE_STRING, NULL); + item = rz_meta_get_at (analysis, 0x200, RZ_META_TYPE_STRING, NULL); mu_assert_notnull (item, "item not deleted"); // reset - rz_meta_set_string (anal, RZ_META_TYPE_COMMENT, 0x100, "vera gemini"); + rz_meta_set_string (analysis, RZ_META_TYPE_COMMENT, 0x100, "vera gemini"); - rz_meta_del (anal, RZ_META_TYPE_COMMENT, 0x0, 0x500); - item = rz_meta_get_at (anal, 0x100, RZ_META_TYPE_COMMENT, NULL); + rz_meta_del (analysis, RZ_META_TYPE_COMMENT, 0x0, 0x500); + item = rz_meta_get_at (analysis, 0x100, RZ_META_TYPE_COMMENT, NULL); mu_assert_null (item, "item deleted"); - item = rz_meta_get_at (anal, 0x100, RZ_META_TYPE_DATA, NULL); + item = rz_meta_get_at (analysis, 0x100, RZ_META_TYPE_DATA, NULL); mu_assert_notnull (item, "item not deleted"); - item = rz_meta_get_at (anal, 0x200, RZ_META_TYPE_STRING, NULL); + item = rz_meta_get_at (analysis, 0x200, RZ_META_TYPE_STRING, NULL); mu_assert_notnull (item, "item not deleted"); // reset - rz_meta_set_string (anal, RZ_META_TYPE_COMMENT, 0x100, "vera gemini"); + rz_meta_set_string (analysis, RZ_META_TYPE_COMMENT, 0x100, "vera gemini"); - rz_meta_del (anal, RZ_META_TYPE_COMMENT, 0, UT64_MAX); - item = rz_meta_get_at (anal, 0x100, RZ_META_TYPE_COMMENT, NULL); + rz_meta_del (analysis, RZ_META_TYPE_COMMENT, 0, UT64_MAX); + item = rz_meta_get_at (analysis, 0x100, RZ_META_TYPE_COMMENT, NULL); mu_assert_null (item, "item deleted"); - item = rz_meta_get_at (anal, 0x100, RZ_META_TYPE_DATA, NULL); + item = rz_meta_get_at (analysis, 0x100, RZ_META_TYPE_DATA, NULL); mu_assert_notnull (item, "item not deleted"); - item = rz_meta_get_at (anal, 0x200, RZ_META_TYPE_STRING, NULL); + item = rz_meta_get_at (analysis, 0x200, RZ_META_TYPE_STRING, NULL); mu_assert_notnull (item, "item not deleted"); // reset - rz_meta_set_string (anal, RZ_META_TYPE_COMMENT, 0x100, "vera gemini"); + rz_meta_set_string (analysis, RZ_META_TYPE_COMMENT, 0x100, "vera gemini"); - rz_meta_del (anal, RZ_META_TYPE_ANY, 0, 0x500); - item = rz_meta_get_at (anal, 0x100, RZ_META_TYPE_COMMENT, NULL); + rz_meta_del (analysis, RZ_META_TYPE_ANY, 0, 0x500); + item = rz_meta_get_at (analysis, 0x100, RZ_META_TYPE_COMMENT, NULL); mu_assert_null (item, "item deleted"); - item = rz_meta_get_at (anal, 0x100, RZ_META_TYPE_DATA, NULL); + item = rz_meta_get_at (analysis, 0x100, RZ_META_TYPE_DATA, NULL); mu_assert_null (item, "item deleted"); - item = rz_meta_get_at (anal, 0x200, RZ_META_TYPE_STRING, NULL); + item = rz_meta_get_at (analysis, 0x200, RZ_META_TYPE_STRING, NULL); mu_assert_null (item, "item deleted"); // reset - rz_meta_set (anal, RZ_META_TYPE_DATA, 0x100, 4, NULL); - rz_meta_set_string (anal, RZ_META_TYPE_COMMENT, 0x100, "vera gemini"); - rz_meta_set_with_subtype (anal, RZ_META_TYPE_STRING, RZ_STRING_ENC_UTF8, 0x200, 0x30, "true confessions"); + rz_meta_set (analysis, RZ_META_TYPE_DATA, 0x100, 4, NULL); + rz_meta_set_string (analysis, RZ_META_TYPE_COMMENT, 0x100, "vera gemini"); + rz_meta_set_with_subtype (analysis, RZ_META_TYPE_STRING, RZ_STRING_ENC_UTF8, 0x200, 0x30, "true confessions"); - rz_meta_del (anal, RZ_META_TYPE_ANY, 0, UT64_MAX); - item = rz_meta_get_at (anal, 0x100, RZ_META_TYPE_COMMENT, NULL); + rz_meta_del (analysis, RZ_META_TYPE_ANY, 0, UT64_MAX); + item = rz_meta_get_at (analysis, 0x100, RZ_META_TYPE_COMMENT, NULL); mu_assert_null (item, "item deleted"); - item = rz_meta_get_at (anal, 0x100, RZ_META_TYPE_DATA, NULL); + item = rz_meta_get_at (analysis, 0x100, RZ_META_TYPE_DATA, NULL); mu_assert_null (item, "item deleted"); - item = rz_meta_get_at (anal, 0x200, RZ_META_TYPE_STRING, NULL); + item = rz_meta_get_at (analysis, 0x200, RZ_META_TYPE_STRING, NULL); mu_assert_null (item, "item deleted"); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } bool test_meta_rebase() { - RzAnal *anal = rz_anal_new (); + RzAnalysis *analysis = rz_analysis_new (); - rz_meta_set (anal, RZ_META_TYPE_DATA, 0x200, 4, NULL); - rz_meta_set_string (anal, RZ_META_TYPE_COMMENT, 0x200, "summer of love"); - rz_meta_set_with_subtype (anal, RZ_META_TYPE_STRING, RZ_STRING_ENC_UTF8, 0x300, 0x30, "true confessions"); - rz_meta_rebase (anal, -0x100); + rz_meta_set (analysis, RZ_META_TYPE_DATA, 0x200, 4, NULL); + rz_meta_set_string (analysis, RZ_META_TYPE_COMMENT, 0x200, "summer of love"); + rz_meta_set_with_subtype (analysis, RZ_META_TYPE_STRING, RZ_STRING_ENC_UTF8, 0x300, 0x30, "true confessions"); + rz_meta_rebase (analysis, -0x100); bool found[3] = { 0 }; size_t count = 0; RzIntervalTreeIter it; - RzAnalMetaItem *item; - rz_interval_tree_foreach (&anal->meta, it, item) { + RzAnalysisMetaItem *item; + rz_interval_tree_foreach (&analysis->meta, it, item) { count++; RzIntervalNode *node = rz_interval_tree_iter_get (&it); switch (item->type) { @@ -487,26 +487,26 @@ bool test_meta_rebase() { mu_assert ("meta 1", found[1]); mu_assert ("meta 2", found[2]); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } bool test_meta_spaces() { - RzAnal *anal = rz_anal_new (); + RzAnalysis *analysis = rz_analysis_new (); - rz_meta_set (anal, RZ_META_TYPE_DATA, 0x100, 4, NULL); - rz_meta_set_string (anal, RZ_META_TYPE_COMMENT, 0x100, "summer of love"); - rz_meta_set_with_subtype (anal, RZ_META_TYPE_STRING, RZ_STRING_ENC_UTF8, 0x200, 0x30, "true confessions"); + rz_meta_set (analysis, RZ_META_TYPE_DATA, 0x100, 4, NULL); + rz_meta_set_string (analysis, RZ_META_TYPE_COMMENT, 0x100, "summer of love"); + rz_meta_set_with_subtype (analysis, RZ_META_TYPE_STRING, RZ_STRING_ENC_UTF8, 0x200, 0x30, "true confessions"); - rz_spaces_set (&anal->meta_spaces, "fear"); + rz_spaces_set (&analysis->meta_spaces, "fear"); - rz_meta_set_string (anal, RZ_META_TYPE_COMMENT, 0x100, "reaper"); + rz_meta_set_string (analysis, RZ_META_TYPE_COMMENT, 0x100, "reaper"); bool found[4] = { 0 }; size_t count = 0; RzIntervalTreeIter it; - RzAnalMetaItem *item; - rz_interval_tree_foreach (&anal->meta, it, item) { + RzAnalysisMetaItem *item; + rz_interval_tree_foreach (&analysis->meta, it, item) { count++; switch (item->type) { case RZ_META_TYPE_DATA: @@ -516,7 +516,7 @@ bool test_meta_spaces() { case RZ_META_TYPE_COMMENT: if (item->space) { mu_assert_streq (item->str, "reaper", "comment string"); - mu_assert_ptreq (item->space, rz_spaces_get (&anal->meta_spaces, "fear"), "space"); + mu_assert_ptreq (item->space, rz_spaces_get (&analysis->meta_spaces, "fear"), "space"); found[3] = true; } else { mu_assert_streq (item->str, "summer of love", "comment string"); @@ -537,57 +537,57 @@ bool test_meta_spaces() { mu_assert ("meta 2", found[2]); mu_assert ("meta 3", found[3]); - RzAnalMetaItem *reaper_item = rz_meta_get_at (anal, 0x100, RZ_META_TYPE_ANY, NULL); + RzAnalysisMetaItem *reaper_item = rz_meta_get_at (analysis, 0x100, RZ_META_TYPE_ANY, NULL); mu_assert_notnull (reaper_item, "get item"); mu_assert_streq (reaper_item->str, "reaper", "comment string"); - item = rz_meta_get_at (anal, 0x100, RZ_META_TYPE_DATA, NULL); + item = rz_meta_get_at (analysis, 0x100, RZ_META_TYPE_DATA, NULL); mu_assert_null (item, "masked by space"); - RzIntervalNode *node = rz_meta_get_in (anal, 0x100, RZ_META_TYPE_COMMENT); + RzIntervalNode *node = rz_meta_get_in (analysis, 0x100, RZ_META_TYPE_COMMENT); mu_assert_notnull (node, "get item"); mu_assert_ptreq (node->data, reaper_item, "masked by space"); - node = rz_meta_get_in (anal, 0x100, RZ_META_TYPE_DATA); + node = rz_meta_get_in (analysis, 0x100, RZ_META_TYPE_DATA); mu_assert_null (node, "masked by space"); - RzPVector *nodes = rz_meta_get_all_at (anal, 0x100); + RzPVector *nodes = rz_meta_get_all_at (analysis, 0x100); mu_assert_eq (rz_pvector_len (nodes), 1, "all count"); mu_assert_ptreq (((RzIntervalNode *)rz_pvector_at (nodes, 0))->data, reaper_item, "all masked"); rz_pvector_free (nodes); - nodes = rz_meta_get_all_in (anal, 0x100, RZ_META_TYPE_ANY); + nodes = rz_meta_get_all_in (analysis, 0x100, RZ_META_TYPE_ANY); mu_assert_eq (rz_pvector_len (nodes), 1, "all count"); mu_assert_ptreq (((RzIntervalNode *)rz_pvector_at (nodes, 0))->data, reaper_item, "all masked"); rz_pvector_free (nodes); - nodes = rz_meta_get_all_intersect (anal, 0x0, 0x500, RZ_META_TYPE_ANY); + nodes = rz_meta_get_all_intersect (analysis, 0x0, 0x500, RZ_META_TYPE_ANY); mu_assert_eq (rz_pvector_len (nodes), 1, "all count"); mu_assert_ptreq (((RzIntervalNode *)rz_pvector_at (nodes, 0))->data, reaper_item, "all masked"); rz_pvector_free (nodes); // delete - rz_meta_del (anal, RZ_META_TYPE_ANY, 0, 0x500); - item = rz_meta_get_at (anal, 0x100, RZ_META_TYPE_ANY, NULL); + rz_meta_del (analysis, RZ_META_TYPE_ANY, 0, 0x500); + item = rz_meta_get_at (analysis, 0x100, RZ_META_TYPE_ANY, NULL); mu_assert_null (item, "reaper deleted"); count = 0; - rz_interval_tree_foreach (&anal->meta, it, item) { + rz_interval_tree_foreach (&analysis->meta, it, item) { count++; } mu_assert_eq (count, 3, "masked untouched"); // reset - rz_meta_set_string (anal, RZ_META_TYPE_COMMENT, 0x100, "reaper"); + rz_meta_set_string (analysis, RZ_META_TYPE_COMMENT, 0x100, "reaper"); - rz_meta_del (anal, RZ_META_TYPE_ANY, 0, UT64_MAX); - item = rz_meta_get_at (anal, 0x100, RZ_META_TYPE_ANY, NULL); + rz_meta_del (analysis, RZ_META_TYPE_ANY, 0, UT64_MAX); + item = rz_meta_get_at (analysis, 0x100, RZ_META_TYPE_ANY, NULL); mu_assert_null (item, "reaper deleted"); count = 0; - rz_interval_tree_foreach (&anal->meta, it, item) { + rz_interval_tree_foreach (&analysis->meta, it, item) { count++; } mu_assert_eq (count, 3, "masked untouched"); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } diff --git a/test/unit/test_anal_types.c b/test/unit/test_anal_types.c index 51a189d0d8..13a090f48d 100644 --- a/test/unit/test_anal_types.c +++ b/test/unit/test_anal_types.c @@ -1,4 +1,4 @@ -#include +#include #include #include "minunit.h" @@ -58,19 +58,19 @@ static void setup_sdb_for_not_found(Sdb *res) { } static bool test_anal_get_base_type_struct(void) { - RzAnal *anal = rz_anal_new (); - mu_assert_notnull (anal, "Couldn't create new RzAnal"); - mu_assert_notnull (anal->sdb_types, "Couldn't create new RzAnal.sdb_types"); + RzAnalysis *analysis = rz_analysis_new (); + mu_assert_notnull (analysis, "Couldn't create new RzAnalysis"); + mu_assert_notnull (analysis->sdb_types, "Couldn't create new RzAnalysis.sdb_types"); - setup_sdb_for_struct (anal->sdb_types); + setup_sdb_for_struct (analysis->sdb_types); - RzAnalBaseType *base = rz_anal_get_base_type (anal, "kappa"); + RzAnalysisBaseType *base = rz_analysis_get_base_type (analysis, "kappa"); mu_assert_notnull (base, "Couldn't create get base type of struct \"kappa\""); mu_assert_eq (RZ_ANAL_BASE_TYPE_KIND_STRUCT, base->kind, "Wrong base type"); mu_assert_streq (base->name, "kappa", "type name"); - RzAnalStructMember *member; + RzAnalysisStructMember *member; member = rz_vector_index_ptr (&base->struct_data.members, 0); mu_assert_eq (member->offset, 0, "Incorrect offset for struct member"); @@ -82,20 +82,20 @@ static bool test_anal_get_base_type_struct(void) { mu_assert_streq (member->type, "int32_t", "Incorrect type for struct member"); mu_assert_streq (member->name, "cow", "Incorrect name for struct member"); - rz_anal_base_type_free (base); - rz_anal_free (anal); + rz_analysis_base_type_free (base); + rz_analysis_free (analysis); mu_end; } static bool test_anal_save_base_type_struct(void) { - RzAnal *anal = rz_anal_new (); - mu_assert_notnull (anal, "Couldn't create new RzAnal"); - mu_assert_notnull (anal->sdb_types, "Couldn't create new RzAnal.sdb_types"); + RzAnalysis *analysis = rz_analysis_new (); + mu_assert_notnull (analysis, "Couldn't create new RzAnalysis"); + mu_assert_notnull (analysis->sdb_types, "Couldn't create new RzAnalysis.sdb_types"); - RzAnalBaseType *base = rz_anal_base_type_new (RZ_ANAL_BASE_TYPE_KIND_STRUCT); + RzAnalysisBaseType *base = rz_analysis_base_type_new (RZ_ANAL_BASE_TYPE_KIND_STRUCT); base->name = strdup ("kappa"); - RzAnalStructMember member = { + RzAnalysisStructMember member = { .offset = 0, .type = strdup ("int32_t"), .name = strdup ("bar") @@ -107,32 +107,32 @@ static bool test_anal_save_base_type_struct(void) { member.name = strdup ("cow"); rz_vector_push (&base->struct_data.members, &member); - rz_anal_save_base_type (anal, base); - rz_anal_base_type_free (base); + rz_analysis_save_base_type (analysis, base); + rz_analysis_base_type_free (base); Sdb *reg = sdb_new0 (); setup_sdb_for_struct (reg); - assert_sdb_eq (anal->sdb_types, reg, "save struct type"); + assert_sdb_eq (analysis->sdb_types, reg, "save struct type"); sdb_free (reg); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } static bool test_anal_get_base_type_union(void) { - RzAnal *anal = rz_anal_new (); - mu_assert_notnull (anal, "Couldn't create new RzAnal"); - mu_assert_notnull (anal->sdb_types, "Couldn't create new RzAnal.sdb_types"); + RzAnalysis *analysis = rz_analysis_new (); + mu_assert_notnull (analysis, "Couldn't create new RzAnalysis"); + mu_assert_notnull (analysis->sdb_types, "Couldn't create new RzAnalysis.sdb_types"); - setup_sdb_for_union (anal->sdb_types); + setup_sdb_for_union (analysis->sdb_types); - RzAnalBaseType *base = rz_anal_get_base_type (anal, "kappa"); + RzAnalysisBaseType *base = rz_analysis_get_base_type (analysis, "kappa"); mu_assert_notnull (base, "Couldn't create get base type of union \"kappa\""); mu_assert_eq (RZ_ANAL_BASE_TYPE_KIND_UNION, base->kind, "Wrong base type"); mu_assert_streq (base->name, "kappa", "type name"); - RzAnalUnionMember *member; + RzAnalysisUnionMember *member; member = rz_vector_index_ptr (&base->union_data.members, 0); mu_assert_streq (member->type, "int32_t", "Incorrect type for union member"); @@ -142,20 +142,20 @@ static bool test_anal_get_base_type_union(void) { mu_assert_streq (member->type, "int32_t", "Incorrect type for union member"); mu_assert_streq (member->name, "cow", "Incorrect name for union member"); - rz_anal_base_type_free (base); - rz_anal_free (anal); + rz_analysis_base_type_free (base); + rz_analysis_free (analysis); mu_end; } static bool test_anal_save_base_type_union(void) { - RzAnal *anal = rz_anal_new (); - mu_assert_notnull (anal, "Couldn't create new RzAnal"); - mu_assert_notnull (anal->sdb_types, "Couldn't create new RzAnal.sdb_types"); + RzAnalysis *analysis = rz_analysis_new (); + mu_assert_notnull (analysis, "Couldn't create new RzAnalysis"); + mu_assert_notnull (analysis->sdb_types, "Couldn't create new RzAnalysis.sdb_types"); - RzAnalBaseType *base = rz_anal_base_type_new (RZ_ANAL_BASE_TYPE_KIND_UNION); + RzAnalysisBaseType *base = rz_analysis_base_type_new (RZ_ANAL_BASE_TYPE_KIND_UNION); base->name = strdup ("kappa"); - RzAnalUnionMember member = { + RzAnalysisUnionMember member = { .offset = 0, .type = strdup ("int32_t"), .name = strdup ("bar") @@ -167,32 +167,32 @@ static bool test_anal_save_base_type_union(void) { member.name = strdup ("cow"); rz_vector_push (&base->union_data.members, &member); - rz_anal_save_base_type (anal, base); - rz_anal_base_type_free (base); + rz_analysis_save_base_type (analysis, base); + rz_analysis_base_type_free (base); Sdb *reg = sdb_new0 (); setup_sdb_for_union (reg); - assert_sdb_eq (anal->sdb_types, reg, "save union type"); + assert_sdb_eq (analysis->sdb_types, reg, "save union type"); sdb_free (reg); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } static bool test_anal_get_base_type_enum(void) { - RzAnal *anal = rz_anal_new (); - mu_assert_notnull (anal, "Couldn't create new RzAnal"); - mu_assert_notnull (anal->sdb_types, "Couldn't create new RzAnal.sdb_types"); + RzAnalysis *analysis = rz_analysis_new (); + mu_assert_notnull (analysis, "Couldn't create new RzAnalysis"); + mu_assert_notnull (analysis->sdb_types, "Couldn't create new RzAnalysis.sdb_types"); - setup_sdb_for_enum (anal->sdb_types); + setup_sdb_for_enum (analysis->sdb_types); - RzAnalBaseType *base = rz_anal_get_base_type (anal, "foo"); + RzAnalysisBaseType *base = rz_analysis_get_base_type (analysis, "foo"); mu_assert_notnull (base, "Couldn't create get base type of enum \"foo\""); mu_assert_eq (RZ_ANAL_BASE_TYPE_KIND_ENUM, base->kind, "Wrong base type"); mu_assert_streq (base->name, "foo", "type name"); - RzAnalEnumCase *cas = rz_vector_index_ptr (&base->enum_data.cases, 0); + RzAnalysisEnumCase *cas = rz_vector_index_ptr (&base->enum_data.cases, 0); mu_assert_eq (cas->val, 1, "Incorrect value for enum case"); mu_assert_streq (cas->name, "firstCase", "Incorrect name for enum case"); @@ -200,20 +200,20 @@ static bool test_anal_get_base_type_enum(void) { mu_assert_eq (cas->val, 2, "Incorrect value for enum case"); mu_assert_streq (cas->name, "secondCase", "Incorrect name for enum case"); - rz_anal_base_type_free (base); - rz_anal_free (anal); + rz_analysis_base_type_free (base); + rz_analysis_free (analysis); mu_end; } static bool test_anal_save_base_type_enum(void) { - RzAnal *anal = rz_anal_new (); - mu_assert_notnull (anal, "Couldn't create new RzAnal"); - mu_assert_notnull (anal->sdb_types, "Couldn't create new RzAnal.sdb_types"); + RzAnalysis *analysis = rz_analysis_new (); + mu_assert_notnull (analysis, "Couldn't create new RzAnalysis"); + mu_assert_notnull (analysis->sdb_types, "Couldn't create new RzAnalysis.sdb_types"); - RzAnalBaseType *base = rz_anal_base_type_new (RZ_ANAL_BASE_TYPE_KIND_ENUM); + RzAnalysisBaseType *base = rz_analysis_base_type_new (RZ_ANAL_BASE_TYPE_KIND_ENUM); base->name = strdup ("foo"); - RzAnalEnumCase cas = { + RzAnalysisEnumCase cas = { .name = strdup ("firstCase"), .val = 1 }; @@ -223,66 +223,66 @@ static bool test_anal_save_base_type_enum(void) { cas.val = 2; rz_vector_push (&base->enum_data.cases, &cas); - rz_anal_save_base_type (anal, base); - rz_anal_base_type_free (base); + rz_analysis_save_base_type (analysis, base); + rz_analysis_base_type_free (base); Sdb *reg = sdb_new0 (); setup_sdb_for_enum (reg); - assert_sdb_eq (anal->sdb_types, reg, "save enum type"); + assert_sdb_eq (analysis->sdb_types, reg, "save enum type"); sdb_free (reg); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } static bool test_anal_get_base_type_typedef(void) { - RzAnal *anal = rz_anal_new (); - mu_assert_notnull (anal, "Couldn't create new RzAnal"); - mu_assert_notnull (anal->sdb_types, "Couldn't create new RzAnal.sdb_types"); + RzAnalysis *analysis = rz_analysis_new (); + mu_assert_notnull (analysis, "Couldn't create new RzAnalysis"); + mu_assert_notnull (analysis->sdb_types, "Couldn't create new RzAnalysis.sdb_types"); - setup_sdb_for_typedef (anal->sdb_types); + setup_sdb_for_typedef (analysis->sdb_types); - RzAnalBaseType *base = rz_anal_get_base_type (anal, "string"); + RzAnalysisBaseType *base = rz_analysis_get_base_type (analysis, "string"); mu_assert_notnull (base, "Couldn't create get base type of typedef \"string\""); mu_assert_eq (RZ_ANAL_BASE_TYPE_KIND_TYPEDEF, base->kind, "Wrong base type"); mu_assert_streq (base->name, "string", "type name"); mu_assert_streq (base->type, "char *", "typedefd type"); - rz_anal_base_type_free (base); - rz_anal_free (anal); + rz_analysis_base_type_free (base); + rz_analysis_free (analysis); mu_end; } static bool test_anal_save_base_type_typedef(void) { - RzAnal *anal = rz_anal_new (); - mu_assert_notnull (anal, "Couldn't create new RzAnal"); - mu_assert_notnull (anal->sdb_types, "Couldn't create new RzAnal.sdb_types"); + RzAnalysis *analysis = rz_analysis_new (); + mu_assert_notnull (analysis, "Couldn't create new RzAnalysis"); + mu_assert_notnull (analysis->sdb_types, "Couldn't create new RzAnalysis.sdb_types"); - RzAnalBaseType *base = rz_anal_base_type_new (RZ_ANAL_BASE_TYPE_KIND_TYPEDEF); + RzAnalysisBaseType *base = rz_analysis_base_type_new (RZ_ANAL_BASE_TYPE_KIND_TYPEDEF); base->name = strdup ("string"); base->type = strdup ("char *"); - rz_anal_save_base_type (anal, base); - rz_anal_base_type_free (base); + rz_analysis_save_base_type (analysis, base); + rz_analysis_base_type_free (base); Sdb *reg = sdb_new0 (); setup_sdb_for_typedef (reg); - assert_sdb_eq (anal->sdb_types, reg, "save typedef type"); + assert_sdb_eq (analysis->sdb_types, reg, "save typedef type"); sdb_free (reg); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } static bool test_anal_get_base_type_atomic(void) { - RzAnal *anal = rz_anal_new (); - mu_assert_notnull (anal, "Couldn't create new RzAnal"); - mu_assert_notnull (anal->sdb_types, "Couldn't create new RzAnal.sdb_types"); + RzAnalysis *analysis = rz_analysis_new (); + mu_assert_notnull (analysis, "Couldn't create new RzAnalysis"); + mu_assert_notnull (analysis->sdb_types, "Couldn't create new RzAnalysis.sdb_types"); - setup_sdb_for_atomic (anal->sdb_types); + setup_sdb_for_atomic (analysis->sdb_types); - RzAnalBaseType *base = rz_anal_get_base_type (anal, "char"); + RzAnalysisBaseType *base = rz_analysis_get_base_type (analysis, "char"); mu_assert_notnull (base, "Couldn't create get base type of atomic type \"char\""); mu_assert_eq (RZ_ANAL_BASE_TYPE_KIND_ATOMIC, base->kind, "Wrong base type"); @@ -290,52 +290,52 @@ static bool test_anal_get_base_type_atomic(void) { mu_assert_streq (base->type, "c", "atomic type type"); mu_assert_eq (base->size, 8, "atomic type size"); - rz_anal_base_type_free (base); - rz_anal_free (anal); + rz_analysis_base_type_free (base); + rz_analysis_free (analysis); mu_end; } static bool test_anal_save_base_type_atomic(void) { - RzAnal *anal = rz_anal_new (); - mu_assert_notnull (anal, "Couldn't create new RzAnal"); - mu_assert_notnull (anal->sdb_types, "Couldn't create new RzAnal.sdb_types"); + RzAnalysis *analysis = rz_analysis_new (); + mu_assert_notnull (analysis, "Couldn't create new RzAnalysis"); + mu_assert_notnull (analysis->sdb_types, "Couldn't create new RzAnalysis.sdb_types"); - RzAnalBaseType *base = rz_anal_base_type_new (RZ_ANAL_BASE_TYPE_KIND_ATOMIC); + RzAnalysisBaseType *base = rz_analysis_base_type_new (RZ_ANAL_BASE_TYPE_KIND_ATOMIC); base->name = strdup ("char"); base->type = strdup ("c"); base->size = 8; - rz_anal_save_base_type (anal, base); - rz_anal_base_type_free (base); + rz_analysis_save_base_type (analysis, base); + rz_analysis_base_type_free (base); Sdb *reg = sdb_new0 (); setup_sdb_for_atomic (reg); - assert_sdb_eq (anal->sdb_types, reg, "save atomic type"); + assert_sdb_eq (analysis->sdb_types, reg, "save atomic type"); sdb_free (reg); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } static bool test_anal_get_base_type_not_found(void) { - RzAnal *anal = rz_anal_new (); - setup_sdb_for_not_found (anal->sdb_types); + RzAnalysis *analysis = rz_analysis_new (); + setup_sdb_for_not_found (analysis->sdb_types); - mu_assert_notnull (anal, "Couldn't create new RzAnal"); - mu_assert_notnull (anal->sdb_types, "Couldn't create new RzAnal.sdb_types"); + mu_assert_notnull (analysis, "Couldn't create new RzAnalysis"); + mu_assert_notnull (analysis->sdb_types, "Couldn't create new RzAnalysis.sdb_types"); - RzAnalBaseType *base = rz_anal_get_base_type (anal, "non_existant23321312___"); + RzAnalysisBaseType *base = rz_analysis_get_base_type (analysis, "non_existant23321312___"); mu_assert_null (base, "Should find nothing"); - base = rz_anal_get_base_type (anal, "foo"); + base = rz_analysis_get_base_type (analysis, "foo"); mu_assert_null (base, "Should find nothing"); - base = rz_anal_get_base_type (anal, "bar"); + base = rz_analysis_get_base_type (analysis, "bar"); mu_assert_null (base, "Should find nothing"); - base = rz_anal_get_base_type (anal, "quax"); + base = rz_analysis_get_base_type (analysis, "quax"); mu_assert_null (base, "Should find nothing"); - base = rz_anal_get_base_type (anal, "omega"); + base = rz_analysis_get_base_type (analysis, "omega"); mu_assert_null (base, "Should find nothing"); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } diff --git a/test/unit/test_anal_var.c b/test/unit/test_anal_var.c index b206c1b9f7..5ac97acb79 100644 --- a/test/unit/test_anal_var.c +++ b/test/unit/test_anal_var.c @@ -1,12 +1,12 @@ -#include +#include #include "minunit.h" static bool sanitize_instr_acc(void *user, const ut64 k, const void *v) { RzPVector *vec = (RzPVector *)v; void **it; rz_pvector_foreach (vec, it) { - RzAnalVar *var = *it; - RzAnalVarAccess *acc; + RzAnalysisVar *var = *it; + RzAnalysisVarAccess *acc; bool found = false; rz_vector_foreach (&var->accesses, acc) { if (acc->offset == (st64)k) { @@ -19,13 +19,13 @@ static bool sanitize_instr_acc(void *user, const ut64 k, const void *v) { return true; } -static bool sanitize(RzAnalFunction *fcn) { +static bool sanitize(RzAnalysisFunction *fcn) { ht_up_foreach (fcn->inst_vars, sanitize_instr_acc, NULL); void **it; rz_pvector_foreach (&fcn->vars, it) { - RzAnalVar *var = *it; - RzAnalVarAccess *acc; + RzAnalysisVar *var = *it; + RzAnalysisVarAccess *acc; rz_vector_foreach (&var->accesses, acc) { RzPVector *iaccs = ht_up_find (fcn->inst_vars, acc->offset, NULL); mu_assert ("var refs instr but instr does not ref var", rz_pvector_contains (iaccs, var)); @@ -34,8 +34,8 @@ static bool sanitize(RzAnalFunction *fcn) { return true; } -#define assert_sane(anal) do { RzListIter *ass_it; RzAnalFunction *ass_fcn; \ - rz_list_foreach ((anal)->fcns, ass_it, ass_fcn) { \ +#define assert_sane(analysis) do { RzListIter *ass_it; RzAnalysisFunction *ass_fcn; \ + rz_list_foreach ((analysis)->fcns, ass_it, ass_fcn) { \ if (!sanitize (ass_fcn)) { \ return false; \ } \ @@ -43,183 +43,183 @@ static bool sanitize(RzAnalFunction *fcn) { } while (0); bool test_r_anal_var() { - RzAnal *anal = rz_anal_new (); - rz_anal_use (anal, "x86"); - rz_anal_set_bits (anal, 64); + RzAnalysis *analysis = rz_analysis_new (); + rz_analysis_use (analysis, "x86"); + rz_analysis_set_bits (analysis, 64); - RzAnalFunction *fcn = rz_anal_create_function (anal, "fcn", 0x100, RZ_ANAL_FCN_TYPE_FCN, NULL); - assert_sane (anal); + RzAnalysisFunction *fcn = rz_analysis_create_function (analysis, "fcn", 0x100, RZ_ANAL_FCN_TYPE_FCN, NULL); + assert_sane (analysis); // creating variables and renaming - RzAnalVar *a = rz_anal_function_set_var (fcn, -8, RZ_ANAL_VAR_KIND_BPV, "char *", 8, false, "random_name"); + RzAnalysisVar *a = rz_analysis_function_set_var (fcn, -8, RZ_ANAL_VAR_KIND_BPV, "char *", 8, false, "random_name"); mu_assert_notnull (a, "create a var"); mu_assert_streq (a->name, "random_name", "var name"); - bool succ = rz_anal_var_rename (a, "var_a", false); + bool succ = rz_analysis_var_rename (a, "var_a", false); mu_assert ("rename success", succ); mu_assert_streq (a->name, "var_a", "var name after rename"); - RzAnalVar *b = rz_anal_function_set_var (fcn, -0x10, RZ_ANAL_VAR_KIND_SPV, "char *", 8, false, "var_a"); + RzAnalysisVar *b = rz_analysis_function_set_var (fcn, -0x10, RZ_ANAL_VAR_KIND_SPV, "char *", 8, false, "var_a"); mu_assert_null (b, "create a var with the same name"); - b = rz_anal_function_set_var (fcn, -0x10, RZ_ANAL_VAR_KIND_SPV, "char *", 8, false, "new_var"); + b = rz_analysis_function_set_var (fcn, -0x10, RZ_ANAL_VAR_KIND_SPV, "char *", 8, false, "new_var"); mu_assert_notnull (b, "create a var with another name"); mu_assert_streq (b->name, "new_var", "var name"); - succ = rz_anal_var_rename (b, "random_name", false); + succ = rz_analysis_var_rename (b, "random_name", false); mu_assert ("rename success", succ); mu_assert_streq (b->name, "random_name", "var name after rename"); - succ = rz_anal_var_rename (b, "var_a", false); + succ = rz_analysis_var_rename (b, "var_a", false); mu_assert ("rename failed", !succ); mu_assert_streq (b->name, "random_name", "var name after failed rename"); - succ = rz_anal_var_rename (b, "var_b", false); + succ = rz_analysis_var_rename (b, "var_b", false); mu_assert ("rename success", succ); mu_assert_streq (b->name, "var_b", "var name after rename"); - RzAnalVar *c = rz_anal_function_set_var (fcn, 0x30, RZ_ANAL_VAR_KIND_REG, "int64_t", 8, true, "arg42"); + RzAnalysisVar *c = rz_analysis_function_set_var (fcn, 0x30, RZ_ANAL_VAR_KIND_REG, "int64_t", 8, true, "arg42"); mu_assert_notnull (c, "create a var"); // querying variables - RzAnalVar *v = rz_anal_function_get_var (fcn, RZ_ANAL_VAR_KIND_REG, 0x41); + RzAnalysisVar *v = rz_analysis_function_get_var (fcn, RZ_ANAL_VAR_KIND_REG, 0x41); mu_assert_null (v, "get no var"); - v = rz_anal_function_get_var (fcn, RZ_ANAL_VAR_KIND_REG, 0x30); + v = rz_analysis_function_get_var (fcn, RZ_ANAL_VAR_KIND_REG, 0x30); mu_assert_ptreq (v, c, "get var (reg)"); - v = rz_anal_function_get_var (fcn, RZ_ANAL_VAR_KIND_SPV, -0x10); + v = rz_analysis_function_get_var (fcn, RZ_ANAL_VAR_KIND_SPV, -0x10); mu_assert_ptreq (v, b, "get var (sp)"); - v = rz_anal_function_get_var (fcn, RZ_ANAL_VAR_KIND_BPV, -8); + v = rz_analysis_function_get_var (fcn, RZ_ANAL_VAR_KIND_BPV, -8); mu_assert_ptreq (v, a, "get var (bp)"); - v = rz_anal_function_get_var_byname (fcn, "random_name"); + v = rz_analysis_function_get_var_byname (fcn, "random_name"); mu_assert_null (v, "nonsense name"); - v = rz_anal_function_get_var_byname (fcn, "var_a"); + v = rz_analysis_function_get_var_byname (fcn, "var_a"); mu_assert_ptreq (v, a, "get var by name"); // accesses - rz_anal_var_set_access (a, "rsp", 0x120, RZ_ANAL_VAR_ACCESS_TYPE_READ, 42); - rz_anal_var_set_access (a, "rbp", 0x130, RZ_ANAL_VAR_ACCESS_TYPE_WRITE, 13); - rz_anal_var_set_access (b, "rsp", 0x120, RZ_ANAL_VAR_ACCESS_TYPE_WRITE, 123); - rz_anal_var_set_access (b, "rbp", 0x10, RZ_ANAL_VAR_ACCESS_TYPE_WRITE, -100); + rz_analysis_var_set_access (a, "rsp", 0x120, RZ_ANAL_VAR_ACCESS_TYPE_READ, 42); + rz_analysis_var_set_access (a, "rbp", 0x130, RZ_ANAL_VAR_ACCESS_TYPE_WRITE, 13); + rz_analysis_var_set_access (b, "rsp", 0x120, RZ_ANAL_VAR_ACCESS_TYPE_WRITE, 123); + rz_analysis_var_set_access (b, "rbp", 0x10, RZ_ANAL_VAR_ACCESS_TYPE_WRITE, -100); - st64 stackptr = rz_anal_function_get_var_stackptr_at (fcn, -0x10, 0x12345); + st64 stackptr = rz_analysis_function_get_var_stackptr_at (fcn, -0x10, 0x12345); mu_assert_eq (stackptr, ST64_MAX, "unset stackptr"); - RzPVector *used_vars = rz_anal_function_get_vars_used_at (fcn, 0x123); + RzPVector *used_vars = rz_analysis_function_get_vars_used_at (fcn, 0x123); mu_assert ("no used vars", !used_vars || rz_pvector_len (used_vars)); - used_vars = rz_anal_function_get_vars_used_at (fcn, 0x130); + used_vars = rz_analysis_function_get_vars_used_at (fcn, 0x130); mu_assert_eq (rz_pvector_len (used_vars), 1, "used vars count"); mu_assert ("used vars", rz_pvector_contains (used_vars, a)); - stackptr = rz_anal_function_get_var_stackptr_at (fcn, -8, 0x130); + stackptr = rz_analysis_function_get_var_stackptr_at (fcn, -8, 0x130); mu_assert_eq (stackptr, 13, "stackptr"); - stackptr = rz_anal_function_get_var_stackptr_at (fcn, 123123, 0x130); + stackptr = rz_analysis_function_get_var_stackptr_at (fcn, 123123, 0x130); mu_assert_eq (stackptr, ST64_MAX, "stackptr"); - used_vars = rz_anal_function_get_vars_used_at (fcn, 0x120); + used_vars = rz_analysis_function_get_vars_used_at (fcn, 0x120); mu_assert_eq (rz_pvector_len (used_vars), 2, "used vars count"); mu_assert ("used vars", rz_pvector_contains (used_vars, a)); mu_assert ("used vars", rz_pvector_contains (used_vars, b)); - stackptr = rz_anal_function_get_var_stackptr_at (fcn, -0x10, 0x120); + stackptr = rz_analysis_function_get_var_stackptr_at (fcn, -0x10, 0x120); mu_assert_eq (stackptr, 123, "stackptr"); - stackptr = rz_anal_function_get_var_stackptr_at (fcn, -8, 0x120); + stackptr = rz_analysis_function_get_var_stackptr_at (fcn, -8, 0x120); mu_assert_eq (stackptr, 42, "stackptr"); - used_vars = rz_anal_function_get_vars_used_at (fcn, 0x10); + used_vars = rz_analysis_function_get_vars_used_at (fcn, 0x10); mu_assert_eq (rz_pvector_len (used_vars), 1, "used vars count"); mu_assert ("used vars", rz_pvector_contains (used_vars, b)); - stackptr = rz_anal_function_get_var_stackptr_at (fcn, -0x10, 0x10); + stackptr = rz_analysis_function_get_var_stackptr_at (fcn, -0x10, 0x10); mu_assert_eq (stackptr, -100, "stackptr"); - assert_sane (anal); + assert_sane (analysis); // relocate function - rz_anal_function_relocate (fcn, 0xffffffffffff0100UL); - assert_sane (anal); + rz_analysis_function_relocate (fcn, 0xffffffffffff0100UL); + assert_sane (analysis); - used_vars = rz_anal_function_get_vars_used_at (fcn, 0xffffffffffff0130UL); // addresses should stay the same + used_vars = rz_analysis_function_get_vars_used_at (fcn, 0xffffffffffff0130UL); // addresses should stay the same mu_assert ("no used vars", !used_vars || rz_pvector_len (used_vars)); - rz_anal_var_set_access (a, "rbp", 0xffffffffffff0130UL, RZ_ANAL_VAR_ACCESS_TYPE_READ, 42); - used_vars = rz_anal_function_get_vars_used_at (fcn, 0xffffffffffff0130UL); + rz_analysis_var_set_access (a, "rbp", 0xffffffffffff0130UL, RZ_ANAL_VAR_ACCESS_TYPE_READ, 42); + used_vars = rz_analysis_function_get_vars_used_at (fcn, 0xffffffffffff0130UL); mu_assert_eq (rz_pvector_len (used_vars), 1, "used vars count"); mu_assert ("used vars", rz_pvector_contains (used_vars, a)); - used_vars = rz_anal_function_get_vars_used_at (fcn, 0x123); + used_vars = rz_analysis_function_get_vars_used_at (fcn, 0x123); mu_assert ("no used vars", !used_vars || rz_pvector_len (used_vars)); - rz_anal_var_set_access (a, "rbp" , 0x123, RZ_ANAL_VAR_ACCESS_TYPE_READ, 42); - used_vars = rz_anal_function_get_vars_used_at (fcn, 0x123); + rz_analysis_var_set_access (a, "rbp" , 0x123, RZ_ANAL_VAR_ACCESS_TYPE_READ, 42); + used_vars = rz_analysis_function_get_vars_used_at (fcn, 0x123); mu_assert_eq (rz_pvector_len (used_vars), 1, "used vars count"); mu_assert ("used vars", rz_pvector_contains (used_vars, a)); - used_vars = rz_anal_function_get_vars_used_at (fcn, 0x130); + used_vars = rz_analysis_function_get_vars_used_at (fcn, 0x130); mu_assert_eq (rz_pvector_len (used_vars), 1, "used vars count"); mu_assert ("used vars", rz_pvector_contains (used_vars, a)); - used_vars = rz_anal_function_get_vars_used_at (fcn, 0x120); + used_vars = rz_analysis_function_get_vars_used_at (fcn, 0x120); mu_assert_eq (rz_pvector_len (used_vars), 2, "used vars count"); mu_assert ("used vars", rz_pvector_contains (used_vars, a)); mu_assert ("used vars", rz_pvector_contains (used_vars, b)); - stackptr = rz_anal_function_get_var_stackptr_at (fcn, -0x10, 0x120); + stackptr = rz_analysis_function_get_var_stackptr_at (fcn, -0x10, 0x120); mu_assert_eq (stackptr, 123, "stackptr"); - stackptr = rz_anal_function_get_var_stackptr_at (fcn, -8, 0x120); + stackptr = rz_analysis_function_get_var_stackptr_at (fcn, -8, 0x120); mu_assert_eq (stackptr, 42, "stackptr"); - used_vars = rz_anal_function_get_vars_used_at (fcn, 0x10); + used_vars = rz_analysis_function_get_vars_used_at (fcn, 0x10); mu_assert_eq (rz_pvector_len (used_vars), 1, "used vars count"); mu_assert ("used vars", rz_pvector_contains (used_vars, b)); - rz_anal_function_relocate (fcn, 0x8000000000000010); - assert_sane (anal); + rz_analysis_function_relocate (fcn, 0x8000000000000010); + assert_sane (analysis); - used_vars = rz_anal_function_get_vars_used_at (fcn, 0x8000000000000100); + used_vars = rz_analysis_function_get_vars_used_at (fcn, 0x8000000000000100); mu_assert ("no used vars", !used_vars || rz_pvector_len (used_vars)); - rz_anal_var_set_access (a, "rbp", 0x8000000000000100, RZ_ANAL_VAR_ACCESS_TYPE_READ, 987321); - used_vars = rz_anal_function_get_vars_used_at (fcn, 0x8000000000000100); + rz_analysis_var_set_access (a, "rbp", 0x8000000000000100, RZ_ANAL_VAR_ACCESS_TYPE_READ, 987321); + used_vars = rz_analysis_function_get_vars_used_at (fcn, 0x8000000000000100); mu_assert_eq (rz_pvector_len (used_vars), 1, "used vars count"); mu_assert ("used vars", rz_pvector_contains (used_vars, a)); - stackptr = rz_anal_function_get_var_stackptr_at (fcn, -8, 0x8000000000000100); + stackptr = rz_analysis_function_get_var_stackptr_at (fcn, -8, 0x8000000000000100); mu_assert_eq (stackptr, 987321, "stackptr"); - used_vars = rz_anal_function_get_vars_used_at (fcn, 0x7ffffffffffffe00); + used_vars = rz_analysis_function_get_vars_used_at (fcn, 0x7ffffffffffffe00); mu_assert ("no used vars", !used_vars || rz_pvector_len (used_vars)); - rz_anal_var_set_access (a, "rbp", 0x7ffffffffffffe00, RZ_ANAL_VAR_ACCESS_TYPE_READ, 777); - used_vars = rz_anal_function_get_vars_used_at (fcn, 0x7ffffffffffffe00); + rz_analysis_var_set_access (a, "rbp", 0x7ffffffffffffe00, RZ_ANAL_VAR_ACCESS_TYPE_READ, 777); + used_vars = rz_analysis_function_get_vars_used_at (fcn, 0x7ffffffffffffe00); mu_assert_eq (rz_pvector_len (used_vars), 1, "used vars count"); mu_assert ("used vars", rz_pvector_contains (used_vars, a)); - stackptr = rz_anal_function_get_var_stackptr_at (fcn, -8, 0x7ffffffffffffe00); + stackptr = rz_analysis_function_get_var_stackptr_at (fcn, -8, 0x7ffffffffffffe00); mu_assert_eq (stackptr, 777, "stackptr"); - used_vars = rz_anal_function_get_vars_used_at (fcn, 0xffffffffffff0130UL); + used_vars = rz_analysis_function_get_vars_used_at (fcn, 0xffffffffffff0130UL); mu_assert_eq (rz_pvector_len (used_vars), 1, "used vars count"); mu_assert ("used vars", rz_pvector_contains (used_vars, a)); - used_vars = rz_anal_function_get_vars_used_at (fcn, 0x123); + used_vars = rz_analysis_function_get_vars_used_at (fcn, 0x123); mu_assert_eq (rz_pvector_len (used_vars), 1, "used vars count"); mu_assert ("used vars", rz_pvector_contains (used_vars, a)); - used_vars = rz_anal_function_get_vars_used_at (fcn, 0x130); + used_vars = rz_analysis_function_get_vars_used_at (fcn, 0x130); mu_assert_eq (rz_pvector_len (used_vars), 1, "used vars count"); mu_assert ("used vars", rz_pvector_contains (used_vars, a)); - used_vars = rz_anal_function_get_vars_used_at (fcn, 0x120); + used_vars = rz_analysis_function_get_vars_used_at (fcn, 0x120); mu_assert_eq (rz_pvector_len (used_vars), 2, "used vars count"); mu_assert ("used vars", rz_pvector_contains (used_vars, a)); mu_assert ("used vars", rz_pvector_contains (used_vars, b)); - stackptr = rz_anal_function_get_var_stackptr_at (fcn, -0x10, 0x120); + stackptr = rz_analysis_function_get_var_stackptr_at (fcn, -0x10, 0x120); mu_assert_eq (stackptr, 123, "stackptr"); - stackptr = rz_anal_function_get_var_stackptr_at (fcn, -8, 0x120); + stackptr = rz_analysis_function_get_var_stackptr_at (fcn, -8, 0x120); mu_assert_eq (stackptr, 42, "stackptr"); - assert_sane (anal); + assert_sane (analysis); - rz_anal_var_delete (a); - assert_sane (anal); + rz_analysis_var_delete (a); + assert_sane (analysis); - used_vars = rz_anal_function_get_vars_used_at (fcn, 0xffffffffffff0130UL); + used_vars = rz_analysis_function_get_vars_used_at (fcn, 0xffffffffffff0130UL); mu_assert ("used vars count", !used_vars || !rz_pvector_len (used_vars)); - used_vars = rz_anal_function_get_vars_used_at (fcn, 0x123); + used_vars = rz_analysis_function_get_vars_used_at (fcn, 0x123); mu_assert ("used vars count", !used_vars || !rz_pvector_len (used_vars)); - used_vars = rz_anal_function_get_vars_used_at (fcn, 0x130); + used_vars = rz_analysis_function_get_vars_used_at (fcn, 0x130); mu_assert ("used vars count", !used_vars || !rz_pvector_len (used_vars)); - used_vars = rz_anal_function_get_vars_used_at (fcn, 0x120); + used_vars = rz_analysis_function_get_vars_used_at (fcn, 0x120); mu_assert_eq (rz_pvector_len (used_vars), 1, "used vars count"); mu_assert ("used vars", rz_pvector_contains (used_vars, b)); - rz_anal_var_delete (b); - rz_anal_var_delete (c); + rz_analysis_var_delete (b); + rz_analysis_var_delete (c); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } diff --git a/test/unit/test_anal_xrefs.c b/test/unit/test_anal_xrefs.c index 0a319da6c6..eca5f0f94a 100644 --- a/test/unit/test_anal_xrefs.c +++ b/test/unit/test_anal_xrefs.c @@ -1,20 +1,20 @@ -#include +#include #include "minunit.h" bool test_r_anal_xrefs_count() { - RzAnal *anal = rz_anal_new (); + RzAnalysis *analysis = rz_analysis_new (); - mu_assert_eq (rz_anal_xrefs_count (anal), 0, "xrefs count"); + mu_assert_eq (rz_analysis_xrefs_count (analysis), 0, "xrefs count"); - rz_anal_xrefs_set (anal, 0x1337, 42, RZ_ANAL_REF_TYPE_NULL); - rz_anal_xrefs_set (anal, 0x1337, 43, RZ_ANAL_REF_TYPE_CODE); - rz_anal_xrefs_set (anal, 1234, 43, RZ_ANAL_REF_TYPE_CALL); - rz_anal_xrefs_set (anal, 12345, 43, RZ_ANAL_REF_TYPE_CALL); - rz_anal_xrefs_set (anal, 4321, 4242, RZ_ANAL_REF_TYPE_CALL); + rz_analysis_xrefs_set (analysis, 0x1337, 42, RZ_ANAL_REF_TYPE_NULL); + rz_analysis_xrefs_set (analysis, 0x1337, 43, RZ_ANAL_REF_TYPE_CODE); + rz_analysis_xrefs_set (analysis, 1234, 43, RZ_ANAL_REF_TYPE_CALL); + rz_analysis_xrefs_set (analysis, 12345, 43, RZ_ANAL_REF_TYPE_CALL); + rz_analysis_xrefs_set (analysis, 4321, 4242, RZ_ANAL_REF_TYPE_CALL); - mu_assert_eq (rz_anal_xrefs_count (anal), 5, "xrefs count"); + mu_assert_eq (rz_analysis_xrefs_count (analysis), 5, "xrefs count"); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } diff --git a/test/unit/test_autocmplt.c b/test/unit/test_autocmplt.c index 556b0cae08..6c8d9327db 100644 --- a/test/unit/test_autocmplt.c +++ b/test/unit/test_autocmplt.c @@ -257,7 +257,7 @@ static bool test_autocmplt_fcn(void) { mu_assert_notnull (core, "core not null"); RzLineBuffer *buf = &core->cons->line->buffer; - rz_core_anal_all (core); + rz_core_analysis_all (core); const char *s = "unittest ./file2 sym.imp.s"; strcpy (buf->data, s); diff --git a/test/unit/test_dwarf_integration.c b/test/unit/test_dwarf_integration.c index e3eda867a0..4cccfa0767 100644 --- a/test/unit/test_dwarf_integration.c +++ b/test/unit/test_dwarf_integration.c @@ -1,4 +1,4 @@ -#include +#include #include #include "minunit.h" @@ -15,31 +15,31 @@ static bool test_parse_dwarf_types(void) { mu_assert_notnull (bin, "Couldn't create new RzBin"); RzIO *io = rz_io_new (); mu_assert_notnull (io, "Couldn't create new RzIO"); - RzAnal *anal = rz_anal_new (); - mu_assert_notnull (anal, "Couldn't create new RzAnal"); + RzAnalysis *analysis = rz_analysis_new (); + mu_assert_notnull (analysis, "Couldn't create new RzAnalysis"); rz_io_bind (io, &bin->iob); - anal->binb.demangle = rz_bin_demangle; + analysis->binb.demangle = rz_bin_demangle; RzBinOptions opt = { 0 }; bool res = rz_bin_open (bin, "bins/pe/vista-glass.exe", &opt); - // TODO fix, how to correctly promote binary info to the RzAnal in unit tests? - anal->cpu = strdup ("x86"); - anal->bits = 32; + // TODO fix, how to correctly promote binary info to the RzAnalysis in unit tests? + analysis->cpu = strdup ("x86"); + analysis->bits = 32; mu_assert ("pe/vista-glass.exe binary could not be opened", res); - mu_assert_notnull (anal->sdb_types, "Couldn't create new RzAnal.sdb_types"); + mu_assert_notnull (analysis->sdb_types, "Couldn't create new RzAnalysis.sdb_types"); RzBinDwarfDebugAbbrev *abbrevs = rz_bin_dwarf_parse_abbrev (bin, MODE); mu_assert_notnull (abbrevs, "Couldn't parse Abbreviations"); RzBinDwarfDebugInfo *info = rz_bin_dwarf_parse_info (abbrevs, bin, MODE); mu_assert_notnull (info, "Couldn't parse debug_info section"); HtUP /**/ *loc_table = rz_bin_dwarf_parse_loc (bin, 4); - RzAnalDwarfContext ctx = { + RzAnalysisDwarfContext ctx = { .info = info, .loc = loc_table }; - rz_anal_dwarf_process_info (anal, &ctx); + rz_analysis_dwarf_process_info (analysis, &ctx); char * value = NULL; - Sdb *sdb = anal->sdb_types; + Sdb *sdb = analysis->sdb_types; check_kv ("_cairo_status", "enum"); check_kv ("enum._cairo_status.0x0", "CAIRO_STATUS_SUCCESS"); check_kv ("enum._cairo_status.CAIRO_STATUS_SUCCESS", "0x0"); @@ -71,7 +71,7 @@ static bool test_parse_dwarf_types(void) { check_kv ("union.unaligned.s8", "long long int,0,0"); rz_bin_dwarf_free_debug_info (info); rz_bin_dwarf_free_debug_abbrev (abbrevs); - rz_anal_free (anal); + rz_analysis_free (analysis); rz_bin_free (bin); rz_io_free (io); mu_end; @@ -82,31 +82,31 @@ static bool test_dwarf_function_parsing_cpp(void) { mu_assert_notnull (bin, "Couldn't create new RzBin"); RzIO *io = rz_io_new (); mu_assert_notnull (io, "Couldn't create new RzIO"); - RzAnal *anal = rz_anal_new (); - mu_assert_notnull (anal, "Couldn't create new RzAnal"); + RzAnalysis *analysis = rz_analysis_new (); + mu_assert_notnull (analysis, "Couldn't create new RzAnalysis"); rz_io_bind (io, &bin->iob); - anal->binb.demangle = rz_bin_demangle; + analysis->binb.demangle = rz_bin_demangle; RzBinOptions opt = { 0 }; bool res = rz_bin_open (bin, "bins/elf/dwarf4_many_comp_units.elf", &opt); - // TODO fix, how to correctly promote binary info to the RzAnal in unit tests? - anal->cpu = strdup ("x86"); - anal->bits = 64; + // TODO fix, how to correctly promote binary info to the RzAnalysis in unit tests? + analysis->cpu = strdup ("x86"); + analysis->bits = 64; mu_assert ("elf/dwarf4_many_comp_units.elf binary could not be opened", res); - mu_assert_notnull (anal->sdb_types, "Couldn't create new RzAnal.sdb_types"); + mu_assert_notnull (analysis->sdb_types, "Couldn't create new RzAnalysis.sdb_types"); RzBinDwarfDebugAbbrev *abbrevs = rz_bin_dwarf_parse_abbrev (bin, MODE); mu_assert_notnull (abbrevs, "Couldn't parse Abbreviations"); RzBinDwarfDebugInfo *info = rz_bin_dwarf_parse_info (abbrevs, bin, MODE); mu_assert_notnull (info, "Couldn't parse debug_info section"); HtUP /**/ *loc_table = rz_bin_dwarf_parse_loc (bin, 8); - RzAnalDwarfContext ctx = { + RzAnalysisDwarfContext ctx = { .info = info, .loc = loc_table }; - rz_anal_dwarf_process_info (anal, &ctx); + rz_analysis_dwarf_process_info (analysis, &ctx); - Sdb *sdb = sdb_ns (anal->sdb, "dwarf", 0); + Sdb *sdb = sdb_ns (analysis->sdb, "dwarf", 0); mu_assert_notnull (sdb, "No dwarf function information in db"); char *value = NULL; check_kv ("Mammal", "fcn"); @@ -127,7 +127,7 @@ static bool test_dwarf_function_parsing_cpp(void) { rz_bin_dwarf_free_debug_info (info); rz_bin_dwarf_free_debug_abbrev (abbrevs); rz_bin_dwarf_free_loc (loc_table); - rz_anal_free (anal); + rz_analysis_free (analysis); rz_bin_free (bin); rz_io_free (io); mu_end; @@ -138,31 +138,31 @@ static bool test_dwarf_function_parsing_go(void) { mu_assert_notnull (bin, "Couldn't create new RzBin"); RzIO *io = rz_io_new (); mu_assert_notnull (io, "Couldn't create new RzIO"); - RzAnal *anal = rz_anal_new (); - mu_assert_notnull (anal, "Couldn't create new RzAnal"); + RzAnalysis *analysis = rz_analysis_new (); + mu_assert_notnull (analysis, "Couldn't create new RzAnalysis"); rz_io_bind (io, &bin->iob); - anal->binb.demangle = rz_bin_demangle; + analysis->binb.demangle = rz_bin_demangle; RzBinOptions opt = { 0 }; bool res = rz_bin_open (bin, "bins/elf/dwarf_go_tree", &opt); - // TODO fix, how to correctly promote binary info to the RzAnal in unit tests? - anal->cpu = strdup ("x86"); - anal->bits = 64; + // TODO fix, how to correctly promote binary info to the RzAnalysis in unit tests? + analysis->cpu = strdup ("x86"); + analysis->bits = 64; mu_assert ("bins/elf/dwarf_go_tree", res); - mu_assert_notnull (anal->sdb_types, "Couldn't create new RzAnal.sdb_types"); + mu_assert_notnull (analysis->sdb_types, "Couldn't create new RzAnalysis.sdb_types"); RzBinDwarfDebugAbbrev *abbrevs = rz_bin_dwarf_parse_abbrev (bin, MODE); mu_assert_notnull (abbrevs, "Couldn't parse Abbreviations"); RzBinDwarfDebugInfo *info = rz_bin_dwarf_parse_info (abbrevs, bin, MODE); mu_assert_notnull (info, "Couldn't parse debug_info section"); HtUP /**/ *loc_table = rz_bin_dwarf_parse_loc (bin, 8); - RzAnalDwarfContext ctx = { + RzAnalysisDwarfContext ctx = { .info = info, .loc = loc_table }; - rz_anal_dwarf_process_info (anal, &ctx); + rz_analysis_dwarf_process_info (analysis, &ctx); - Sdb *sdb = sdb_ns (anal->sdb, "dwarf", 0); + Sdb *sdb = sdb_ns (analysis->sdb, "dwarf", 0); mu_assert_notnull (sdb, "No dwarf function information in db"); char *value = NULL; @@ -181,7 +181,7 @@ static bool test_dwarf_function_parsing_go(void) { rz_bin_dwarf_free_debug_info (info); rz_bin_dwarf_free_debug_abbrev (abbrevs); rz_bin_dwarf_free_loc (loc_table); - rz_anal_free (anal); + rz_analysis_free (analysis); rz_bin_free (bin); rz_io_free (io); mu_end; @@ -192,31 +192,31 @@ static bool test_dwarf_function_parsing_rust(void) { mu_assert_notnull (bin, "Couldn't create new RzBin"); RzIO *io = rz_io_new (); mu_assert_notnull (io, "Couldn't create new RzIO"); - RzAnal *anal = rz_anal_new (); - mu_assert_notnull (anal, "Couldn't create new RzAnal"); + RzAnalysis *analysis = rz_analysis_new (); + mu_assert_notnull (analysis, "Couldn't create new RzAnalysis"); rz_io_bind (io, &bin->iob); - anal->binb.demangle = rz_bin_demangle; + analysis->binb.demangle = rz_bin_demangle; RzBinOptions opt = { 0 }; bool res = rz_bin_open (bin, "bins/elf/dwarf_rust_bubble", &opt); - // TODO fix, how to correctly promote binary info to the RzAnal in unit tests? - anal->cpu = strdup ("x86"); - anal->bits = 64; + // TODO fix, how to correctly promote binary info to the RzAnalysis in unit tests? + analysis->cpu = strdup ("x86"); + analysis->bits = 64; mu_assert ("bins/elf/dwarf_rust_bubble", res); - mu_assert_notnull (anal->sdb_types, "Couldn't create new RzAnal.sdb_types"); + mu_assert_notnull (analysis->sdb_types, "Couldn't create new RzAnalysis.sdb_types"); RzBinDwarfDebugAbbrev *abbrevs = rz_bin_dwarf_parse_abbrev (bin, MODE); mu_assert_notnull (abbrevs, "Couldn't parse Abbreviations"); RzBinDwarfDebugInfo *info = rz_bin_dwarf_parse_info (abbrevs, bin, MODE); mu_assert_notnull (info, "Couldn't parse debug_info section"); HtUP /**/ *loc_table = rz_bin_dwarf_parse_loc (bin, 8); - RzAnalDwarfContext ctx = { + RzAnalysisDwarfContext ctx = { .info = info, .loc = loc_table }; - rz_anal_dwarf_process_info (anal, &ctx); + rz_analysis_dwarf_process_info (analysis, &ctx); - Sdb *sdb = sdb_ns (anal->sdb, "dwarf", 0); + Sdb *sdb = sdb_ns (analysis->sdb, "dwarf", 0); mu_assert_notnull (sdb, "No dwarf function information in db"); char *value = NULL; @@ -238,7 +238,7 @@ static bool test_dwarf_function_parsing_rust(void) { rz_bin_dwarf_free_debug_info (info); rz_bin_dwarf_free_debug_abbrev (abbrevs); rz_bin_dwarf_free_loc (loc_table); - rz_anal_free (anal); + rz_analysis_free (analysis); rz_bin_free (bin); rz_io_free (io); mu_end; diff --git a/test/unit/test_esil_dfg_filter.c b/test/unit/test_esil_dfg_filter.c index c2d25d0935..f25fdc768b 100644 --- a/test/unit/test_esil_dfg_filter.c +++ b/test/unit/test_esil_dfg_filter.c @@ -1,48 +1,48 @@ -#include +#include #include #include #include "minunit.h" bool test_filter_regs(void) { - RzAnal *anal = rz_anal_new (); - rz_anal_use (anal, "x86"); - rz_anal_set_bits (anal, 32); - rz_anal_set_reg_profile (anal); - RzAnalEsil *esil = rz_anal_esil_new (4096, 0, 1); - esil->anal = anal; + RzAnalysis *analysis = rz_analysis_new (); + rz_analysis_use (analysis, "x86"); + rz_analysis_set_bits (analysis, 32); + rz_analysis_set_reg_profile (analysis); + RzAnalysisEsil *esil = rz_analysis_esil_new (4096, 0, 1); + esil->analysis = analysis; // create expected results - rz_anal_esil_parse (esil, "0x9090,ax,:=,0xff,ah,:="); - const ut64 ax = rz_reg_getv (anal->reg, "ax"); - const ut64 ah = rz_reg_getv (anal->reg, "ah"); - const ut64 al = rz_reg_getv (anal->reg, "al"); - rz_reg_setv (anal->reg, "eax", 0); + rz_analysis_esil_parse (esil, "0x9090,ax,:=,0xff,ah,:="); + const ut64 ax = rz_reg_getv (analysis->reg, "ax"); + const ut64 ah = rz_reg_getv (analysis->reg, "ah"); + const ut64 al = rz_reg_getv (analysis->reg, "al"); + rz_reg_setv (analysis->reg, "eax", 0); - RzAnalEsilDFG *dfg = rz_anal_esil_dfg_expr (anal, NULL, "0x9090,ax,:=,0xff,ah,:="); + RzAnalysisEsilDFG *dfg = rz_analysis_esil_dfg_expr (analysis, NULL, "0x9090,ax,:=,0xff,ah,:="); // filter for ax register - RzStrBuf *filtered_expr = rz_anal_esil_dfg_filter (dfg, "ax"); - rz_anal_esil_parse (esil, rz_strbuf_get (filtered_expr)); - const ut64 filtered_ax = rz_reg_getv (anal->reg, "ax"); + RzStrBuf *filtered_expr = rz_analysis_esil_dfg_filter (dfg, "ax"); + rz_analysis_esil_parse (esil, rz_strbuf_get (filtered_expr)); + const ut64 filtered_ax = rz_reg_getv (analysis->reg, "ax"); rz_strbuf_free (filtered_expr); - rz_reg_setv (anal->reg, "eax", 0); + rz_reg_setv (analysis->reg, "eax", 0); // filter for ah register - filtered_expr = rz_anal_esil_dfg_filter (dfg, "ah"); - rz_anal_esil_parse (esil, rz_strbuf_get (filtered_expr)); - const ut64 filtered_ah = rz_reg_getv (anal->reg, "ah"); + filtered_expr = rz_analysis_esil_dfg_filter (dfg, "ah"); + rz_analysis_esil_parse (esil, rz_strbuf_get (filtered_expr)); + const ut64 filtered_ah = rz_reg_getv (analysis->reg, "ah"); rz_strbuf_free (filtered_expr); - rz_reg_setv (anal->reg, "eax", 0); + rz_reg_setv (analysis->reg, "eax", 0); // filter for al register - filtered_expr = rz_anal_esil_dfg_filter (dfg, "al"); - rz_anal_esil_parse (esil, rz_strbuf_get (filtered_expr)); - const ut64 filtered_al = rz_reg_getv (anal->reg, "al"); + filtered_expr = rz_analysis_esil_dfg_filter (dfg, "al"); + rz_analysis_esil_parse (esil, rz_strbuf_get (filtered_expr)); + const ut64 filtered_al = rz_reg_getv (analysis->reg, "al"); rz_strbuf_free (filtered_expr); - rz_anal_esil_dfg_free (dfg); - rz_anal_esil_free (esil); - rz_anal_free (anal); + rz_analysis_esil_dfg_free (dfg); + rz_analysis_esil_free (esil); + rz_analysis_free (analysis); mu_assert ("filtering for ax failed", ax == filtered_ax); mu_assert ("filtering for ah failed", ah == filtered_ah); diff --git a/test/unit/test_pdb.c b/test/unit/test_pdb.c index 51b68de3d1..5cd5f1040e 100644 --- a/test/unit/test_pdb.c +++ b/test/unit/test_pdb.c @@ -9,7 +9,7 @@ #define check_kv(k, v) \ do { \ - char *value = sdb_get (anal->sdb_types, k, NULL); \ + char *value = sdb_get (analysis->sdb_types, k, NULL); \ mu_assert_nullable_streq (value, v, "Wrong key - value pair"); \ } while (0) @@ -27,7 +27,7 @@ int pdb_info(const char *file, RzPdb *pdb) { return true; } -int pdb_info_save_types(RzAnal *anal, const char *file, RzPdb *pdb) { +int pdb_info_save_types(RzAnalysis *analysis, const char *file, RzPdb *pdb) { pdb->cb_printf = rz_cons_printf; if (!init_pdb_parser (pdb, file)) { return false; @@ -37,7 +37,7 @@ int pdb_info_save_types(RzAnal *anal, const char *file, RzPdb *pdb) { pdb->finish_pdb_parse (pdb); return false; } - rz_parse_pdb_types (anal, pdb); + rz_parse_pdb_types (analysis, pdb); pdb->finish_pdb_parse (pdb); return true; } @@ -462,8 +462,8 @@ bool test_pdb_tpi_rust(void) { bool test_pdb_type_save(void) { RzPdb pdb = RZ_EMPTY; - RzAnal *anal = rz_anal_new (); - mu_assert_true (pdb_info_save_types (anal, "bins/pdb/Project1.pdb", &pdb), "pdb parsing failed"); + RzAnalysis *analysis = rz_analysis_new (); + mu_assert_true (pdb_info_save_types (analysis, "bins/pdb/Project1.pdb", &pdb), "pdb parsing failed"); check_kv ("R2_TEST_ENUM", "enum"); check_kv ("enum.R2_TEST_ENUM", "eENUM1_R2,eENUM2_R2,eENUM_R2_MAX"); check_kv ("enum.R2_TEST_ENUM.0x10", "eENUM1_R2"); @@ -495,7 +495,7 @@ bool test_pdb_type_save(void) { check_kv ("struct.localeinfo_struct", "locinfo,mbcinfo"); check_kv ("struct.localeinfo_struct.locinfo", "struct threadlocaleinfostruct*,0,0"); check_kv ("struct.localeinfo_struct.mbcinfo", "struct threadmbcinfostruct*,4,0"); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } diff --git a/test/unit/test_serialize_anal.c b/test/unit/test_serialize_anal.c index 29df35d79c..26ab0ad1a9 100644 --- a/test/unit/test_serialize_anal.c +++ b/test/unit/test_serialize_anal.c @@ -1,5 +1,5 @@ -#include +#include #include #include "minunit.h" #include "test_sdb.h" @@ -7,7 +7,7 @@ #include "test_anal_block_invars.inl" bool test_anal_diff_save() { - RzAnalDiff *diff = rz_anal_diff_new (); + RzAnalysisDiff *diff = rz_analysis_diff_new (); PJ *j = pj_new (); rz_serialize_anal_diff_save (j, diff); @@ -30,7 +30,7 @@ bool test_anal_diff_save() { mu_assert_streq (pj_string (j), "{\"type\":\"u\",\"addr\":4919,\"dist\":42.300000,\"name\":\"\\\\\\\\,\\\\\\\";] [}{'\",\"size\":16962}", "full unmatch diff"); pj_free (j); - rz_anal_diff_free (diff); + rz_analysis_diff_free (diff); mu_end; } @@ -39,7 +39,7 @@ bool test_anal_diff_load() { char *str = strdup ("{}"); RJson *json = rz_json_parse (str); - RzAnalDiff *diff = rz_serialize_anal_diff_load (parser, json); + RzAnalysisDiff *diff = rz_serialize_anal_diff_load (parser, json); rz_json_free (json); free (str); mu_assert_notnull (diff, "diff"); @@ -48,7 +48,7 @@ bool test_anal_diff_load() { mu_assert_eq (diff->type, RZ_ANAL_DIFF_TYPE_NULL, "type"); mu_assert_eq (diff->dist, 0.0, "dist"); mu_assert_null (diff->name, "name"); - rz_anal_diff_free (diff); + rz_analysis_diff_free (diff); str = strdup ("{\"type\":\"m\",\"addr\":4919,\"dist\":42.300000,\"name\":\"\\\\\\\\,\\\\\\\";] [}{'\",\"size\":16962}"); json = rz_json_parse (str); @@ -61,7 +61,7 @@ bool test_anal_diff_load() { mu_assert_eq (diff->type, RZ_ANAL_DIFF_TYPE_MATCH, "type"); mu_assert_eq (diff->dist, 42.3, "dist"); mu_assert_streq (diff->name, PERTURBATOR_JSON, "name"); - rz_anal_diff_free (diff); + rz_analysis_diff_free (diff); str = strdup ("{\"type\":\"u\",\"addr\":4919,\"dist\":42.300000,\"name\":\"\\\\\\\\,\\\\\\\";] [}{'\",\"size\":16962}"); json = rz_json_parse (str); @@ -74,35 +74,35 @@ bool test_anal_diff_load() { mu_assert_eq (diff->type, RZ_ANAL_DIFF_TYPE_UNMATCH, "type"); mu_assert_eq (diff->dist, 42.3, "dist"); mu_assert_streq (diff->name, PERTURBATOR_JSON, "name"); - rz_anal_diff_free (diff); + rz_analysis_diff_free (diff); rz_serialize_anal_diff_parser_free (parser); mu_end; } bool test_anal_switch_op_save() { - RzAnalSwitchOp *op = rz_anal_switch_op_new (1337, 42, 45, 46); + RzAnalysisSwitchOp *op = rz_analysis_switch_op_new (1337, 42, 45, 46); PJ *j = pj_new (); rz_serialize_anal_switch_op_save (j, op); mu_assert_streq (pj_string (j), "{\"addr\":1337,\"min\":42,\"max\":45,\"def\":46,\"cases\":[]}", "empty switch"); pj_free (j); - rz_anal_switch_op_add_case (op, 1339, 42, 0xdead); - rz_anal_switch_op_add_case (op, 1340, 43, 0xbeef); + rz_analysis_switch_op_add_case (op, 1339, 42, 0xdead); + rz_analysis_switch_op_add_case (op, 1340, 43, 0xbeef); j = pj_new (); rz_serialize_anal_switch_op_save (j, op); mu_assert_streq (pj_string (j), "{\"addr\":1337,\"min\":42,\"max\":45,\"def\":46,\"cases\":[{\"addr\":1339,\"jump\":57005,\"value\":42},{\"addr\":1340,\"jump\":48879,\"value\":43}]}", "full switch"); pj_free (j); - rz_anal_switch_op_free (op); + rz_analysis_switch_op_free (op); mu_end; } bool test_anal_switch_op_load() { char *str = strdup ("{\"addr\":1337,\"min\":42,\"max\":45,\"def\":46,\"cases\":[]}"); RJson *json = rz_json_parse (str); - RzAnalSwitchOp *sop = rz_serialize_anal_switch_op_load (json); + RzAnalysisSwitchOp *sop = rz_serialize_anal_switch_op_load (json); rz_json_free (json); free (str); mu_assert_notnull (sop, "sop"); @@ -111,7 +111,7 @@ bool test_anal_switch_op_load() { mu_assert_eq (sop->max_val, 45, "max val"); mu_assert_eq (sop->def_val, 46, "def val"); mu_assert_true (rz_list_empty (sop->cases), "no cases"); - rz_anal_switch_op_free (sop); + rz_analysis_switch_op_free (sop); str = strdup("{\"addr\":1337,\"min\":42,\"max\":45,\"def\":46,\"cases\":[{\"addr\":1339,\"jump\":57005,\"value\":42},{\"addr\":1340,\"jump\":48879,\"value\":43}]}"); json = rz_json_parse (str); @@ -124,7 +124,7 @@ bool test_anal_switch_op_load() { mu_assert_eq (sop->max_val, 45, "max val"); mu_assert_eq (sop->def_val, 46, "def val"); mu_assert_eq (rz_list_length (sop->cases), 2, "cases count"); - RzAnalCaseOp *cop = rz_list_get_n (sop->cases, 0); + RzAnalysisCaseOp *cop = rz_list_get_n (sop->cases, 0); mu_assert_eq (cop->addr, 1339, "addr"); mu_assert_eq (cop->jump, 0xdead, "jump"); mu_assert_eq (cop->value, 42, "value"); @@ -132,7 +132,7 @@ bool test_anal_switch_op_load() { mu_assert_eq (cop->addr, 1340, "addr"); mu_assert_eq (cop->jump, 0xbeef, "jump"); mu_assert_eq (cop->value, 43, "value"); - rz_anal_switch_op_free (sop); + rz_analysis_switch_op_free (sop); mu_end; } @@ -145,11 +145,11 @@ Sdb *blocks_ref_db() { } bool test_anal_block_save() { - RzAnal *anal = rz_anal_new (); + RzAnalysis *analysis = rz_analysis_new (); - rz_anal_create_block (anal, 1337, 42); + rz_analysis_create_block (analysis, 1337, 42); - RzAnalBlock *block = rz_anal_create_block (anal, 1234, 32); + RzAnalysisBlock *block = rz_analysis_create_block (analysis, 1234, 32); block->jump = 0x1313; block->fail = 0x4213; block->traced = true; @@ -160,9 +160,9 @@ bool test_anal_block_save() { for (v = 0; v < block->size; v++) { block->fingerprint[v] = v; } - block->diff = rz_anal_diff_new (); + block->diff = rz_analysis_diff_new (); block->diff->addr = 54123; - block->switch_op = rz_anal_switch_op_new (49232, 3, 5, 7); + block->switch_op = rz_analysis_switch_op_new (49232, 3, 5, 7); block->ninstr = 3; mu_assert ("enough size for op_pos test", block->op_pos_size >= 2); // if this fails, just change the test block->op_pos[0] = 4; @@ -173,31 +173,31 @@ bool test_anal_block_save() { block->cmpreg = "rax"; Sdb *db = sdb_new0 (); - rz_serialize_anal_blocks_save (db, anal); + rz_serialize_anal_blocks_save (db, analysis); Sdb *expected = blocks_ref_db (); assert_sdb_eq (db, expected, "anal blocks save"); sdb_free (db); sdb_free (expected); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } bool test_anal_block_load() { - RzAnal *anal = rz_anal_new (); + RzAnalysis *analysis = rz_analysis_new (); Sdb *db = blocks_ref_db (); RzSerializeAnalDiffParser diff_parser = rz_serialize_anal_diff_parser_new (); - bool succ = rz_serialize_anal_blocks_load (db, anal, diff_parser, NULL); + bool succ = rz_serialize_anal_blocks_load (db, analysis, diff_parser, NULL); mu_assert ("load success", succ); - RzAnalBlock *a = NULL; - RzAnalBlock *b = NULL; + RzAnalysisBlock *a = NULL; + RzAnalysisBlock *b = NULL; size_t count = 0; RBIter iter; - RzAnalBlock *block; - rz_rbtree_foreach (anal->bb_tree, iter, block, RzAnalBlock, _rb) { + RzAnalysisBlock *block; + rz_rbtree_foreach (analysis->bb_tree, iter, block, RzAnalysisBlock, _rb) { count++; if (block->addr == 1337) { a = block; @@ -245,29 +245,29 @@ bool test_anal_block_load() { mu_assert_eq (b->stackptr, 43, "stackptr"); mu_assert_eq (b->parent_stackptr, 57, "parent_stackptr"); mu_assert_eq (b->cmpval, 0xdeadbeef, "cmpval"); - mu_assert_ptreq (b->cmpreg, rz_str_constpool_get (&anal->constpool, "rax"), "cmpreg from pool"); + mu_assert_ptreq (b->cmpreg, rz_str_constpool_get (&analysis->constpool, "rax"), "cmpreg from pool"); - rz_anal_free (anal); - anal = rz_anal_new (); + rz_analysis_free (analysis); + analysis = rz_analysis_new (); // This could lead to a buffer overflow if unchecked: sdb_set (db, "0x539", "{\"size\":42,\"ninstr\":4,\"op_pos\":[4,7]}", 0); - succ = rz_serialize_anal_blocks_load (db, anal, diff_parser, NULL); + succ = rz_serialize_anal_blocks_load (db, analysis, diff_parser, NULL); mu_assert ("reject invalid op_pos array length", !succ); - rz_anal_free (anal); - anal = rz_anal_new (); + rz_analysis_free (analysis); + analysis = rz_analysis_new (); // This could lead to a buffer overflow if unchecked: sdb_set (db, "0x539", "{\"size\":33,\"fingerprint\":\"AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8=\"}", 0); - succ = rz_serialize_anal_blocks_load (db, anal, diff_parser, NULL); + succ = rz_serialize_anal_blocks_load (db, analysis, diff_parser, NULL); mu_assert ("reject invalid fingerprint size", !succ); - assert_block_invariants (anal); + assert_block_invariants (analysis); // assert_block_leaks would fail here because loading blocks "leaks" them on purpose to be added to functions later. // (this just means there are blocks associated with no function) // so all cool and good here! sdb_free (db); - rz_anal_free (anal); + rz_analysis_free (analysis); rz_serialize_anal_diff_parser_free (diff_parser); mu_end; } @@ -286,16 +286,16 @@ Sdb *functions_ref_db() { } bool test_anal_function_save() { - RzAnal *anal = rz_anal_new (); + RzAnalysis *analysis = rz_analysis_new (); - RzAnalBlock *ba = rz_anal_create_block (anal, 1337, 42); - RzAnalBlock *bb = rz_anal_create_block (anal, 1234, 32); + RzAnalysisBlock *ba = rz_analysis_create_block (analysis, 1337, 42); + RzAnalysisBlock *bb = rz_analysis_create_block (analysis, 1234, 32); - RzAnalFunction *f = rz_anal_create_function (anal, "hirsch", 1337, RZ_ANAL_FCN_TYPE_NULL, NULL); - rz_anal_function_add_block (f, ba); - rz_anal_function_add_block (f, bb); + RzAnalysisFunction *f = rz_analysis_create_function (analysis, "hirsch", 1337, RZ_ANAL_FCN_TYPE_NULL, NULL); + rz_analysis_function_add_block (f, ba); + rz_analysis_function_add_block (f, bb); f->bits = 16; - f->cc = rz_str_constpool_get (&anal->constpool, "fancycall"); + f->cc = rz_str_constpool_get (&analysis->constpool, "fancycall"); f->stack = 42; f->maxstack = 123; f->bp_off = 4; @@ -311,60 +311,60 @@ bool test_anal_function_save() { f->imports = rz_list_newf (free); rz_list_push (f->imports, strdup ("earth")); rz_list_push (f->imports, strdup ("rise")); - rz_anal_function_set_label (f, "beach", 1400); - rz_anal_function_set_label (f, "another", 1450); - rz_anal_function_set_label (f, "year", 1440); + rz_analysis_function_set_label (f, "beach", 1400); + rz_analysis_function_set_label (f, "another", 1450); + rz_analysis_function_set_label (f, "year", 1440); - f = rz_anal_create_function (anal, "effekt", 1234, RZ_ANAL_FCN_TYPE_FCN, NULL); - rz_anal_function_add_block (f, ba); + f = rz_analysis_create_function (analysis, "effekt", 1234, RZ_ANAL_FCN_TYPE_FCN, NULL); + rz_analysis_function_add_block (f, ba); f->is_pure = true; f->bits = 0; - f = rz_anal_create_function (anal, "hiberno", 4242, RZ_ANAL_FCN_TYPE_LOC, NULL); + f = rz_analysis_create_function (analysis, "hiberno", 4242, RZ_ANAL_FCN_TYPE_LOC, NULL); f->bp_frame = false; - f = rz_anal_create_function (anal, "anamnesis", 424242, RZ_ANAL_FCN_TYPE_SYM, NULL); + f = rz_analysis_create_function (analysis, "anamnesis", 424242, RZ_ANAL_FCN_TYPE_SYM, NULL); f->is_noreturn = true; - rz_anal_create_function (anal, "agnosie", 0xdead, RZ_ANAL_FCN_TYPE_IMP, NULL); - rz_anal_create_function (anal, "eskapist", 0xbeef, RZ_ANAL_FCN_TYPE_INT, NULL); - rz_anal_create_function (anal, "lifnej", 0xc0ffee, RZ_ANAL_FCN_TYPE_ROOT, NULL); - rz_anal_create_function (anal, "aldebaran", 0x31337, RZ_ANAL_FCN_TYPE_ANY, NULL); + rz_analysis_create_function (analysis, "agnosie", 0xdead, RZ_ANAL_FCN_TYPE_IMP, NULL); + rz_analysis_create_function (analysis, "eskapist", 0xbeef, RZ_ANAL_FCN_TYPE_INT, NULL); + rz_analysis_create_function (analysis, "lifnej", 0xc0ffee, RZ_ANAL_FCN_TYPE_ROOT, NULL); + rz_analysis_create_function (analysis, "aldebaran", 0x31337, RZ_ANAL_FCN_TYPE_ANY, NULL); - rz_anal_block_unref (ba); - rz_anal_block_unref (bb); + rz_analysis_block_unref (ba); + rz_analysis_block_unref (bb); Sdb *db = sdb_new0 (); - rz_serialize_anal_functions_save (db, anal); + rz_serialize_anal_functions_save (db, analysis); Sdb *expected = functions_ref_db (); assert_sdb_eq (db, expected, "functions save"); sdb_free (db); sdb_free (expected); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } bool test_anal_function_load() { - RzAnal *anal = rz_anal_new (); + RzAnalysis *analysis = rz_analysis_new (); Sdb *db = functions_ref_db (); RzSerializeAnalDiffParser diff_parser = rz_serialize_anal_diff_parser_new (); - RzAnalBlock *ba = rz_anal_create_block (anal, 1337, 42); - RzAnalBlock *bb = rz_anal_create_block (anal, 1234, 32); + RzAnalysisBlock *ba = rz_analysis_create_block (analysis, 1337, 42); + RzAnalysisBlock *bb = rz_analysis_create_block (analysis, 1234, 32); - bool succ = rz_serialize_anal_functions_load (db, anal, diff_parser, NULL); + bool succ = rz_serialize_anal_functions_load (db, analysis, diff_parser, NULL); mu_assert ("load success", succ); mu_assert_eq (ba->ref, 3, "ba refs"); mu_assert_eq (bb->ref, 2, "bb refs"); - rz_anal_block_unref (ba); - rz_anal_block_unref (bb); + rz_analysis_block_unref (ba); + rz_analysis_block_unref (bb); - mu_assert_eq (rz_list_length (anal->fcns), 8, "loaded fcn count"); + mu_assert_eq (rz_list_length (analysis->fcns), 8, "loaded fcn count"); - RzAnalFunction *f = rz_anal_get_function_at (anal, 1337); + RzAnalysisFunction *f = rz_analysis_get_function_at (analysis, 1337); mu_assert_notnull (f, "function"); mu_assert_streq (f->name, "hirsch", "name"); mu_assert_eq (f->type, RZ_ANAL_FCN_TYPE_NULL, "type"); @@ -372,7 +372,7 @@ bool test_anal_function_load() { mu_assert ("bb", rz_list_contains (f->bbs, ba)); mu_assert ("bb", rz_list_contains (f->bbs, bb)); mu_assert_eq (f->bits, 16, "bits"); - mu_assert_ptreq (f->cc, rz_str_constpool_get (&anal->constpool, "fancycall"), "cc"); + mu_assert_ptreq (f->cc, rz_str_constpool_get (&analysis->constpool, "fancycall"), "cc"); mu_assert_eq (f->stack, 42, "stack"); mu_assert_eq (f->maxstack, 123, "maxstack"); mu_assert_eq (f->ninstr, 13, "ninstr"); @@ -390,11 +390,11 @@ bool test_anal_function_load() { mu_assert_streq (rz_list_get_n (f->imports, 0), "earth", "import"); mu_assert_streq (rz_list_get_n (f->imports, 1), "rise", "import"); mu_assert_eq (f->labels->count, 3, "labels count"); - mu_assert_eq (rz_anal_function_get_label (f, "beach"), 1400, "label"); - mu_assert_eq (rz_anal_function_get_label (f, "another"), 1450, "label"); - mu_assert_eq (rz_anal_function_get_label (f, "year"), 1440, "label"); + mu_assert_eq (rz_analysis_function_get_label (f, "beach"), 1400, "label"); + mu_assert_eq (rz_analysis_function_get_label (f, "another"), 1450, "label"); + mu_assert_eq (rz_analysis_function_get_label (f, "year"), 1440, "label"); - f = rz_anal_get_function_at (anal, 1234); + f = rz_analysis_get_function_at (analysis, 1234); mu_assert_notnull (f, "function"); mu_assert_streq (f->name, "effekt", "name"); mu_assert_eq (f->type, RZ_ANAL_FCN_TYPE_FCN, "type"); @@ -415,7 +415,7 @@ bool test_anal_function_load() { mu_assert_null (f->imports, "imports"); mu_assert_eq (f->labels->count, 0, "labels count"); - f = rz_anal_get_function_at (anal, 4242); + f = rz_analysis_get_function_at (analysis, 4242); mu_assert_notnull (f, "function"); mu_assert_streq (f->name, "hiberno", "name"); mu_assert_eq (f->type, RZ_ANAL_FCN_TYPE_LOC, "type"); @@ -434,7 +434,7 @@ bool test_anal_function_load() { mu_assert_null (f->imports, "imports"); mu_assert_eq (f->labels->count, 0, "labels count"); - f = rz_anal_get_function_at (anal, 424242); + f = rz_analysis_get_function_at (analysis, 424242); mu_assert_notnull (f, "function"); mu_assert_streq (f->name, "anamnesis", "name"); mu_assert_eq (f->type, RZ_ANAL_FCN_TYPE_SYM, "type"); @@ -453,35 +453,35 @@ bool test_anal_function_load() { mu_assert_null (f->imports, "imports"); mu_assert_eq (f->labels->count, 0, "labels count"); - f = rz_anal_get_function_at (anal, 0xdead); + f = rz_analysis_get_function_at (analysis, 0xdead); mu_assert_notnull (f, "function"); mu_assert_streq (f->name, "agnosie", "name"); mu_assert_eq (f->type, RZ_ANAL_FCN_TYPE_IMP, "type"); mu_assert_eq (f->labels->count, 0, "labels count"); - f = rz_anal_get_function_at (anal, 0xbeef); + f = rz_analysis_get_function_at (analysis, 0xbeef); mu_assert_notnull (f, "function"); mu_assert_streq (f->name, "eskapist", "name"); mu_assert_eq (f->type, RZ_ANAL_FCN_TYPE_INT, "type"); mu_assert_eq (f->labels->count, 0, "labels count"); - f = rz_anal_get_function_at (anal, 0xc0ffee); + f = rz_analysis_get_function_at (analysis, 0xc0ffee); mu_assert_notnull (f, "function"); mu_assert_streq (f->name, "lifnej", "name"); mu_assert_eq (f->type, RZ_ANAL_FCN_TYPE_ROOT, "type"); mu_assert_eq (f->labels->count, 0, "labels count"); - f = rz_anal_get_function_at (anal, 0x31337); + f = rz_analysis_get_function_at (analysis, 0x31337); mu_assert_notnull (f, "function"); mu_assert_streq (f->name, "aldebaran", "name"); mu_assert_eq (f->type, RZ_ANAL_FCN_TYPE_ANY, "type"); mu_assert_eq (f->labels->count, 0, "labels count"); - assert_block_invariants (anal); - assert_block_leaks (anal); + assert_block_invariants (analysis); + assert_block_leaks (analysis); sdb_free (db); - rz_anal_free (anal); + rz_analysis_free (analysis); rz_serialize_anal_diff_parser_free (diff_parser); mu_end; } @@ -498,64 +498,64 @@ Sdb *vars_ref_db() { } bool test_anal_var_save() { - RzAnal *anal = rz_anal_new (); - rz_anal_use (anal, "x86"); - rz_anal_set_bits (anal, 64); + RzAnalysis *analysis = rz_analysis_new (); + rz_analysis_use (analysis, "x86"); + rz_analysis_set_bits (analysis, 64); - RzAnalFunction *f = rz_anal_create_function (anal, "hirsch", 1337, RZ_ANAL_FCN_TYPE_NULL, NULL); + RzAnalysisFunction *f = rz_analysis_create_function (analysis, "hirsch", 1337, RZ_ANAL_FCN_TYPE_NULL, NULL); - RzRegItem *rax = rz_reg_get (anal->reg, "rax", -1); - RzAnalVar *v = rz_anal_function_set_var (f, rax->index, RZ_ANAL_VAR_KIND_REG, "int64_t", 0, true, "arg_rax"); - rz_anal_var_set_access (v, "rax", 1340, RZ_ANAL_VAR_ACCESS_TYPE_READ, 42); - rz_anal_var_set_access (v, "rbx", 1350, RZ_ANAL_VAR_ACCESS_TYPE_READ | RZ_ANAL_VAR_ACCESS_TYPE_WRITE, 13); - rz_anal_var_set_access (v, "rcx", 1360, RZ_ANAL_VAR_ACCESS_TYPE_WRITE, 123); + RzRegItem *rax = rz_reg_get (analysis->reg, "rax", -1); + RzAnalysisVar *v = rz_analysis_function_set_var (f, rax->index, RZ_ANAL_VAR_KIND_REG, "int64_t", 0, true, "arg_rax"); + rz_analysis_var_set_access (v, "rax", 1340, RZ_ANAL_VAR_ACCESS_TYPE_READ, 42); + rz_analysis_var_set_access (v, "rbx", 1350, RZ_ANAL_VAR_ACCESS_TYPE_READ | RZ_ANAL_VAR_ACCESS_TYPE_WRITE, 13); + rz_analysis_var_set_access (v, "rcx", 1360, RZ_ANAL_VAR_ACCESS_TYPE_WRITE, 123); ut64 val = 0; - _RzAnalCond cond; + _RzAnalysisCond cond; for (cond = RZ_ANAL_COND_AL; cond <= RZ_ANAL_COND_LS; cond++) { val += 42; - RzAnalVarConstraint constr = { + RzAnalysisVarConstraint constr = { .cond = cond, .val = val }; - rz_anal_var_add_constraint (v, &constr); + rz_analysis_var_add_constraint (v, &constr); } - v = rz_anal_function_set_var (f, 0x10, RZ_ANAL_VAR_KIND_SPV, "const char *", 0, false, "var_sp"); - rz_anal_var_set_access (v, "rsp", 1340, RZ_ANAL_VAR_ACCESS_TYPE_WRITE, 321); + v = rz_analysis_function_set_var (f, 0x10, RZ_ANAL_VAR_KIND_SPV, "const char *", 0, false, "var_sp"); + rz_analysis_var_set_access (v, "rsp", 1340, RZ_ANAL_VAR_ACCESS_TYPE_WRITE, 321); - rz_anal_function_set_var (f, -0x10, RZ_ANAL_VAR_KIND_BPV, "struct something", 0, false, "var_bp"); - v = rz_anal_function_set_var (f, 0x10, RZ_ANAL_VAR_KIND_BPV, "uint64_t", 0, true, "arg_bp"); + rz_analysis_function_set_var (f, -0x10, RZ_ANAL_VAR_KIND_BPV, "struct something", 0, false, "var_bp"); + v = rz_analysis_function_set_var (f, 0x10, RZ_ANAL_VAR_KIND_BPV, "uint64_t", 0, true, "arg_bp"); v->comment = strdup ("I have no idea what this var does"); Sdb *db = sdb_new0 (); - rz_serialize_anal_functions_save (db, anal); + rz_serialize_anal_functions_save (db, analysis); Sdb *expected = vars_ref_db (); assert_sdb_eq (db, expected, "functions save"); sdb_free (db); sdb_free (expected); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } bool test_anal_var_load() { - RzAnal *anal = rz_anal_new (); - rz_anal_use (anal, "x86"); - rz_anal_set_bits (anal, 64); + RzAnalysis *analysis = rz_analysis_new (); + rz_analysis_use (analysis, "x86"); + rz_analysis_set_bits (analysis, 64); Sdb *db = vars_ref_db (); RzSerializeAnalDiffParser diff_parser = rz_serialize_anal_diff_parser_new (); - bool succ = rz_serialize_anal_functions_load (db, anal, diff_parser, NULL); + bool succ = rz_serialize_anal_functions_load (db, analysis, diff_parser, NULL); mu_assert ("load success", succ); - RzAnalFunction *f = rz_anal_get_function_at (anal, 1337); + RzAnalysisFunction *f = rz_analysis_get_function_at (analysis, 1337); mu_assert_notnull (f, "function"); mu_assert_eq (rz_pvector_len (&f->vars), 4, "vars count"); - RzRegItem *rax = rz_reg_get (anal->reg, "rax", -1); - RzAnalVar *v = rz_anal_function_get_var (f, RZ_ANAL_VAR_KIND_REG, rax->index); + RzRegItem *rax = rz_reg_get (analysis->reg, "rax", -1); + RzAnalysisVar *v = rz_analysis_function_get_var (f, RZ_ANAL_VAR_KIND_REG, rax->index); mu_assert_notnull (v, "var"); mu_assert_streq (v->regname, "rax", "var regname"); mu_assert_streq (v->name, "arg_rax", "var name"); @@ -564,7 +564,7 @@ bool test_anal_var_load() { mu_assert_eq (v->accesses.len, 3, "accesses count"); bool found[3] = { false, false, false }; - RzAnalVarAccess *acc; + RzAnalysisVarAccess *acc; rz_vector_foreach (&v->accesses, acc) { if (acc->offset == 3 && acc->type == RZ_ANAL_VAR_ACCESS_TYPE_READ && acc->stackptr == 42 && !strcmp(acc->reg, "rax")) { found[0] = true; @@ -577,20 +577,20 @@ bool test_anal_var_load() { } } mu_assert ("var accesses", found[0] && found[1] && found[2]); - RzPVector *used = rz_anal_function_get_vars_used_at (f, 1340); + RzPVector *used = rz_analysis_function_get_vars_used_at (f, 1340); mu_assert ("var used", rz_pvector_contains (used, v)); mu_assert_eq (v->constraints.len, RZ_ANAL_COND_LS + 1, "constraints count"); ut64 val = 0; - _RzAnalCond cond; + _RzAnalysisCond cond; for (cond = RZ_ANAL_COND_AL; cond <= RZ_ANAL_COND_LS; cond++) { val += 42; - RzAnalVarConstraint *constr = rz_vector_index_ptr (&v->constraints, (size_t)(cond - RZ_ANAL_COND_AL)); + RzAnalysisVarConstraint *constr = rz_vector_index_ptr (&v->constraints, (size_t)(cond - RZ_ANAL_COND_AL)); mu_assert_eq (constr->cond, cond, "constraint cond"); mu_assert_eq (constr->val, val, "constraint val"); } - v = rz_anal_function_get_var (f, RZ_ANAL_VAR_KIND_SPV, 0x10); + v = rz_analysis_function_get_var (f, RZ_ANAL_VAR_KIND_SPV, 0x10); mu_assert_notnull (v, "var"); mu_assert_streq (v->name, "var_sp", "var name"); mu_assert_streq (v->type, "const char *", "var type"); @@ -603,14 +603,14 @@ bool test_anal_var_load() { mu_assert_streq (acc->reg, "rsp", "access reg"); mu_assert ("var used", rz_pvector_contains (used, v)); // used at the same var as the reg one - v = rz_anal_function_get_var (f, RZ_ANAL_VAR_KIND_BPV, -0x10); + v = rz_analysis_function_get_var (f, RZ_ANAL_VAR_KIND_BPV, -0x10); mu_assert_notnull (v, "var"); mu_assert_streq (v->name, "var_bp", "var name"); mu_assert_streq (v->type, "struct something", "var type"); mu_assert ("var arg", !v->isarg); mu_assert_eq (v->accesses.len, 0, "accesses count"); - v = rz_anal_function_get_var (f, RZ_ANAL_VAR_KIND_BPV, 0x10); + v = rz_analysis_function_get_var (f, RZ_ANAL_VAR_KIND_BPV, 0x10); mu_assert_notnull (v, "var"); mu_assert_streq (v->name, "arg_bp", "var name"); mu_assert_streq (v->type, "uint64_t", "var type"); @@ -619,7 +619,7 @@ bool test_anal_var_load() { mu_assert_streq (v->comment, "I have no idea what this var does", "var comment"); sdb_free (db); - rz_anal_free (anal); + rz_analysis_free (analysis); rz_serialize_anal_diff_parser_free (diff_parser); mu_end; } @@ -634,77 +634,77 @@ Sdb *xrefs_ref_db() { } bool test_anal_xrefs_save() { - RzAnal *anal = rz_anal_new (); + RzAnalysis *analysis = rz_analysis_new (); - rz_anal_xrefs_set (anal, 0x1337, 4242, RZ_ANAL_REF_TYPE_NULL); - rz_anal_xrefs_set (anal, 0x1337, 4243, RZ_ANAL_REF_TYPE_CODE); - rz_anal_xrefs_set (anal, 1234, 4243, RZ_ANAL_REF_TYPE_CALL); - rz_anal_xrefs_set (anal, 42, 4321, RZ_ANAL_REF_TYPE_DATA); - rz_anal_xrefs_set (anal, 666, 333, RZ_ANAL_REF_TYPE_STRING); + rz_analysis_xrefs_set (analysis, 0x1337, 4242, RZ_ANAL_REF_TYPE_NULL); + rz_analysis_xrefs_set (analysis, 0x1337, 4243, RZ_ANAL_REF_TYPE_CODE); + rz_analysis_xrefs_set (analysis, 1234, 4243, RZ_ANAL_REF_TYPE_CALL); + rz_analysis_xrefs_set (analysis, 42, 4321, RZ_ANAL_REF_TYPE_DATA); + rz_analysis_xrefs_set (analysis, 666, 333, RZ_ANAL_REF_TYPE_STRING); Sdb *db = sdb_new0 (); - rz_serialize_anal_xrefs_save (db, anal); + rz_serialize_anal_xrefs_save (db, analysis); Sdb *expected = xrefs_ref_db (); assert_sdb_eq (db, expected, "xrefs save"); sdb_free (db); sdb_free (expected); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } bool test_anal_xrefs_load() { - RzAnal *anal = rz_anal_new (); + RzAnalysis *analysis = rz_analysis_new (); Sdb *db = xrefs_ref_db (); - bool succ = rz_serialize_anal_xrefs_load (db, anal, NULL); + bool succ = rz_serialize_anal_xrefs_load (db, analysis, NULL); mu_assert ("load success", succ); - mu_assert_eq (rz_anal_xrefs_count (anal), 5, "xrefs count"); + mu_assert_eq (rz_analysis_xrefs_count (analysis), 5, "xrefs count"); - RzList *xrefs = rz_anal_xrefs_get_from (anal, 0x1337); + RzList *xrefs = rz_analysis_xrefs_get_from (analysis, 0x1337); mu_assert_eq (rz_list_length (xrefs), 2, "xrefs from count"); - mu_assert_eq (((RzAnalRef *)rz_list_get_n (xrefs, 0))->addr, 4242, "xref to"); - mu_assert_eq (((RzAnalRef *)rz_list_get_n (xrefs, 0))->at, 0x1337, "xref addr"); - mu_assert_eq (((RzAnalRef *)rz_list_get_n (xrefs, 0))->type, RZ_ANAL_REF_TYPE_NULL, "xref type"); - mu_assert_eq (((RzAnalRef *)rz_list_get_n (xrefs, 1))->addr, 4243, "xref to"); - mu_assert_eq (((RzAnalRef *)rz_list_get_n (xrefs, 1))->at, 0x1337, "xref addr"); - mu_assert_eq (((RzAnalRef *)rz_list_get_n (xrefs, 1))->type, RZ_ANAL_REF_TYPE_CODE, "xref type"); + mu_assert_eq (((RzAnalysisRef *)rz_list_get_n (xrefs, 0))->addr, 4242, "xref to"); + mu_assert_eq (((RzAnalysisRef *)rz_list_get_n (xrefs, 0))->at, 0x1337, "xref addr"); + mu_assert_eq (((RzAnalysisRef *)rz_list_get_n (xrefs, 0))->type, RZ_ANAL_REF_TYPE_NULL, "xref type"); + mu_assert_eq (((RzAnalysisRef *)rz_list_get_n (xrefs, 1))->addr, 4243, "xref to"); + mu_assert_eq (((RzAnalysisRef *)rz_list_get_n (xrefs, 1))->at, 0x1337, "xref addr"); + mu_assert_eq (((RzAnalysisRef *)rz_list_get_n (xrefs, 1))->type, RZ_ANAL_REF_TYPE_CODE, "xref type"); rz_list_free (xrefs); - xrefs = rz_anal_xrefs_get_from (anal, 1234); + xrefs = rz_analysis_xrefs_get_from (analysis, 1234); mu_assert_eq (rz_list_length (xrefs), 1, "xrefs from count"); - mu_assert_eq (((RzAnalRef *)rz_list_get_n (xrefs, 0))->addr, 4243, "xref to"); - mu_assert_eq (((RzAnalRef *)rz_list_get_n (xrefs, 0))->at, 1234, "xref addr"); - mu_assert_eq (((RzAnalRef *)rz_list_get_n (xrefs, 0))->type, RZ_ANAL_REF_TYPE_CALL, "xref type"); + mu_assert_eq (((RzAnalysisRef *)rz_list_get_n (xrefs, 0))->addr, 4243, "xref to"); + mu_assert_eq (((RzAnalysisRef *)rz_list_get_n (xrefs, 0))->at, 1234, "xref addr"); + mu_assert_eq (((RzAnalysisRef *)rz_list_get_n (xrefs, 0))->type, RZ_ANAL_REF_TYPE_CALL, "xref type"); rz_list_free (xrefs); - xrefs = rz_anal_xrefs_get_from (anal, 42); + xrefs = rz_analysis_xrefs_get_from (analysis, 42); mu_assert_eq (rz_list_length (xrefs), 1, "xrefs from count"); - mu_assert_eq (((RzAnalRef *)rz_list_get_n (xrefs, 0))->addr, 4321, "xref to"); - mu_assert_eq (((RzAnalRef *)rz_list_get_n (xrefs, 0))->at, 42, "xref addr"); - mu_assert_eq (((RzAnalRef *)rz_list_get_n (xrefs, 0))->type, RZ_ANAL_REF_TYPE_DATA, "xref type"); + mu_assert_eq (((RzAnalysisRef *)rz_list_get_n (xrefs, 0))->addr, 4321, "xref to"); + mu_assert_eq (((RzAnalysisRef *)rz_list_get_n (xrefs, 0))->at, 42, "xref addr"); + mu_assert_eq (((RzAnalysisRef *)rz_list_get_n (xrefs, 0))->type, RZ_ANAL_REF_TYPE_DATA, "xref type"); rz_list_free (xrefs); - xrefs = rz_anal_xrefs_get_from (anal, 666); + xrefs = rz_analysis_xrefs_get_from (analysis, 666); mu_assert_eq (rz_list_length (xrefs), 1, "xrefs from count"); - mu_assert_eq (((RzAnalRef *)rz_list_get_n (xrefs, 0))->addr, 333, "xref to"); - mu_assert_eq (((RzAnalRef *)rz_list_get_n (xrefs, 0))->at, 666, "xref addr"); - mu_assert_eq (((RzAnalRef *)rz_list_get_n (xrefs, 0))->type, RZ_ANAL_REF_TYPE_STRING, "xref type"); + mu_assert_eq (((RzAnalysisRef *)rz_list_get_n (xrefs, 0))->addr, 333, "xref to"); + mu_assert_eq (((RzAnalysisRef *)rz_list_get_n (xrefs, 0))->at, 666, "xref addr"); + mu_assert_eq (((RzAnalysisRef *)rz_list_get_n (xrefs, 0))->type, RZ_ANAL_REF_TYPE_STRING, "xref type"); rz_list_free (xrefs); - xrefs = rz_anal_xrefs_get (anal, 4243); + xrefs = rz_analysis_xrefs_get (analysis, 4243); mu_assert_eq (rz_list_length (xrefs), 2, "xrefs to count"); - mu_assert_eq (((RzAnalRef *)rz_list_get_n (xrefs, 0))->addr, 1234, "xref to"); - mu_assert_eq (((RzAnalRef *)rz_list_get_n (xrefs, 0))->at, 4243, "xref addr"); - mu_assert_eq (((RzAnalRef *)rz_list_get_n (xrefs, 0))->type, RZ_ANAL_REF_TYPE_CALL, "xref type"); - mu_assert_eq (((RzAnalRef *)rz_list_get_n (xrefs, 1))->addr, 0x1337, "xref to"); - mu_assert_eq (((RzAnalRef *)rz_list_get_n (xrefs, 1))->at, 4243, "xref addr"); - mu_assert_eq (((RzAnalRef *)rz_list_get_n (xrefs, 1))->type, RZ_ANAL_REF_TYPE_CODE, "xref type"); + mu_assert_eq (((RzAnalysisRef *)rz_list_get_n (xrefs, 0))->addr, 1234, "xref to"); + mu_assert_eq (((RzAnalysisRef *)rz_list_get_n (xrefs, 0))->at, 4243, "xref addr"); + mu_assert_eq (((RzAnalysisRef *)rz_list_get_n (xrefs, 0))->type, RZ_ANAL_REF_TYPE_CALL, "xref type"); + mu_assert_eq (((RzAnalysisRef *)rz_list_get_n (xrefs, 1))->addr, 0x1337, "xref to"); + mu_assert_eq (((RzAnalysisRef *)rz_list_get_n (xrefs, 1))->at, 4243, "xref addr"); + mu_assert_eq (((RzAnalysisRef *)rz_list_get_n (xrefs, 1))->type, RZ_ANAL_REF_TYPE_CODE, "xref type"); rz_list_free (xrefs); sdb_free (db); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } @@ -737,157 +737,157 @@ Sdb *meta_ref_db() { } bool test_anal_meta_save() { - RzAnal *anal = rz_anal_new (); + RzAnalysis *analysis = rz_analysis_new (); - rz_meta_set (anal, RZ_META_TYPE_DATA, 0x1337, 0x10, NULL); - rz_meta_set (anal, RZ_META_TYPE_CODE, 0x1337, 0x11, NULL); - rz_meta_set (anal, RZ_META_TYPE_STRING, 0x1337, 0x12, "some string"); - rz_meta_set (anal, RZ_META_TYPE_FORMAT, 0x1337, 0x13, NULL); - rz_meta_set (anal, RZ_META_TYPE_MAGIC, 0x1337, 0x14, NULL); - rz_meta_set (anal, RZ_META_TYPE_HIDE, 0x1337, 0x15, NULL); - rz_meta_set (anal, RZ_META_TYPE_COMMENT, 0x1337, 1, "some comment here"); - rz_meta_set (anal, RZ_META_TYPE_RUN, 0x1337, 0x16, NULL); - rz_meta_set (anal, RZ_META_TYPE_HIGHLIGHT, 0x1337, 0x17, NULL); - rz_meta_set (anal, RZ_META_TYPE_VARTYPE, 0x1337, 0x18, NULL); + rz_meta_set (analysis, RZ_META_TYPE_DATA, 0x1337, 0x10, NULL); + rz_meta_set (analysis, RZ_META_TYPE_CODE, 0x1337, 0x11, NULL); + rz_meta_set (analysis, RZ_META_TYPE_STRING, 0x1337, 0x12, "some string"); + rz_meta_set (analysis, RZ_META_TYPE_FORMAT, 0x1337, 0x13, NULL); + rz_meta_set (analysis, RZ_META_TYPE_MAGIC, 0x1337, 0x14, NULL); + rz_meta_set (analysis, RZ_META_TYPE_HIDE, 0x1337, 0x15, NULL); + rz_meta_set (analysis, RZ_META_TYPE_COMMENT, 0x1337, 1, "some comment here"); + rz_meta_set (analysis, RZ_META_TYPE_RUN, 0x1337, 0x16, NULL); + rz_meta_set (analysis, RZ_META_TYPE_HIGHLIGHT, 0x1337, 0x17, NULL); + rz_meta_set (analysis, RZ_META_TYPE_VARTYPE, 0x1337, 0x18, NULL); - rz_meta_set_with_subtype (anal, RZ_META_TYPE_STRING, RZ_STRING_ENC_LATIN1, 0x2000, 0x20, "latin1"); - rz_meta_set_with_subtype (anal, RZ_META_TYPE_STRING, RZ_STRING_ENC_UTF8, 0x2020, 0x20, "utf8"); - rz_meta_set_with_subtype (anal, RZ_META_TYPE_STRING, RZ_STRING_ENC_UTF16LE, 0x2040, 0x20, "utf16le"); - rz_meta_set_with_subtype (anal, RZ_META_TYPE_STRING, RZ_STRING_ENC_UTF32LE, 0x2060, 0x20, "utf32le"); - rz_meta_set_with_subtype (anal, RZ_META_TYPE_STRING, RZ_STRING_ENC_UTF16BE, 0x2080, 0x20, "utf16be"); - rz_meta_set_with_subtype (anal, RZ_META_TYPE_STRING, RZ_STRING_ENC_UTF32BE, 0x20a0, 0x20, "utf32be"); - rz_meta_set_with_subtype (anal, RZ_META_TYPE_STRING, RZ_STRING_ENC_GUESS, 0x20c0, 0x20, "guess"); + rz_meta_set_with_subtype (analysis, RZ_META_TYPE_STRING, RZ_STRING_ENC_LATIN1, 0x2000, 0x20, "latin1"); + rz_meta_set_with_subtype (analysis, RZ_META_TYPE_STRING, RZ_STRING_ENC_UTF8, 0x2020, 0x20, "utf8"); + rz_meta_set_with_subtype (analysis, RZ_META_TYPE_STRING, RZ_STRING_ENC_UTF16LE, 0x2040, 0x20, "utf16le"); + rz_meta_set_with_subtype (analysis, RZ_META_TYPE_STRING, RZ_STRING_ENC_UTF32LE, 0x2060, 0x20, "utf32le"); + rz_meta_set_with_subtype (analysis, RZ_META_TYPE_STRING, RZ_STRING_ENC_UTF16BE, 0x2080, 0x20, "utf16be"); + rz_meta_set_with_subtype (analysis, RZ_META_TYPE_STRING, RZ_STRING_ENC_UTF32BE, 0x20a0, 0x20, "utf32be"); + rz_meta_set_with_subtype (analysis, RZ_META_TYPE_STRING, RZ_STRING_ENC_GUESS, 0x20c0, 0x20, "guess"); - rz_spaces_push (&anal->meta_spaces, "myspace"); - rz_meta_set (anal, RZ_META_TYPE_COMMENT, 0x1337, 1, "comment in space"); - rz_spaces_pop (&anal->meta_spaces); + rz_spaces_push (&analysis->meta_spaces, "myspace"); + rz_meta_set (analysis, RZ_META_TYPE_COMMENT, 0x1337, 1, "comment in space"); + rz_spaces_pop (&analysis->meta_spaces); Sdb *db = sdb_new0 (); - rz_serialize_anal_meta_save (db, anal); + rz_serialize_anal_meta_save (db, analysis); Sdb *expected = meta_ref_db (); assert_sdb_eq (db, expected, "meta save"); sdb_free (db); sdb_free (expected); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } bool test_anal_meta_load() { - RzAnal *anal = rz_anal_new (); + RzAnalysis *analysis = rz_analysis_new (); Sdb *db = meta_ref_db (); - bool succ = rz_serialize_anal_meta_load (db, anal, NULL); + bool succ = rz_serialize_anal_meta_load (db, analysis, NULL); mu_assert ("load success", succ); size_t count = 0; - RzAnalMetaItem *meta; + RzAnalysisMetaItem *meta; RzIntervalTreeIter it; - rz_interval_tree_foreach (&anal->meta, it, meta) { + rz_interval_tree_foreach (&analysis->meta, it, meta) { (void)meta; count++; } mu_assert_eq (count, 18, "meta count"); ut64 size; - meta = rz_meta_get_at (anal, 0x1337, RZ_META_TYPE_DATA, &size); + meta = rz_meta_get_at (analysis, 0x1337, RZ_META_TYPE_DATA, &size); mu_assert_notnull (meta, "meta item"); mu_assert_eq (size, 0x10, "meta item size"); mu_assert_eq (meta->subtype, 0, "meta item subtype"); mu_assert_null (meta->str, "meta item string"); - meta = rz_meta_get_at (anal, 0x1337, RZ_META_TYPE_CODE, &size); + meta = rz_meta_get_at (analysis, 0x1337, RZ_META_TYPE_CODE, &size); mu_assert_notnull (meta, "meta item"); mu_assert_eq (size, 0x11, "meta item size"); mu_assert_eq (meta->subtype, 0, "meta item subtype"); mu_assert_null (meta->str, "meta item string"); - meta = rz_meta_get_at (anal, 0x1337, RZ_META_TYPE_STRING, &size); + meta = rz_meta_get_at (analysis, 0x1337, RZ_META_TYPE_STRING, &size); mu_assert_notnull (meta, "meta item"); mu_assert_eq (size, 0x12, "meta item size"); mu_assert_eq (meta->subtype, 0, "meta item subtype"); mu_assert_streq (meta->str, "some string", "meta item string"); - meta = rz_meta_get_at (anal, 0x1337, RZ_META_TYPE_FORMAT, &size); + meta = rz_meta_get_at (analysis, 0x1337, RZ_META_TYPE_FORMAT, &size); mu_assert_notnull (meta, "meta item"); mu_assert_eq (size, 0x13, "meta item size"); mu_assert_eq (meta->subtype, 0, "meta item subtype"); mu_assert_null (meta->str, "meta item string"); - meta = rz_meta_get_at (anal, 0x1337, RZ_META_TYPE_MAGIC, &size); + meta = rz_meta_get_at (analysis, 0x1337, RZ_META_TYPE_MAGIC, &size); mu_assert_notnull (meta, "meta item"); mu_assert_eq (size, 0x14, "meta item size"); mu_assert_eq (meta->subtype, 0, "meta item subtype"); mu_assert_null (meta->str, "meta item string"); - meta = rz_meta_get_at (anal, 0x1337, RZ_META_TYPE_HIDE, &size); + meta = rz_meta_get_at (analysis, 0x1337, RZ_META_TYPE_HIDE, &size); mu_assert_notnull (meta, "meta item"); mu_assert_eq (size, 0x15, "meta item size"); mu_assert_eq (meta->subtype, 0, "meta item subtype"); mu_assert_null (meta->str, "meta item string"); - meta = rz_meta_get_at (anal, 0x1337, RZ_META_TYPE_COMMENT, &size); + meta = rz_meta_get_at (analysis, 0x1337, RZ_META_TYPE_COMMENT, &size); mu_assert_notnull (meta, "meta item"); mu_assert_eq (size, 1, "meta item size"); mu_assert_eq (meta->subtype, 0, "meta item subtype"); mu_assert_streq (meta->str, "some comment here", "meta item string"); - meta = rz_meta_get_at (anal, 0x1337, RZ_META_TYPE_RUN, &size); + meta = rz_meta_get_at (analysis, 0x1337, RZ_META_TYPE_RUN, &size); mu_assert_notnull (meta, "meta item"); mu_assert_eq (size, 0x16, "meta item size"); mu_assert_eq (meta->subtype, 0, "meta item subtype"); mu_assert_null (meta->str, "meta item string"); - meta = rz_meta_get_at (anal, 0x1337, RZ_META_TYPE_HIGHLIGHT, &size); + meta = rz_meta_get_at (analysis, 0x1337, RZ_META_TYPE_HIGHLIGHT, &size); mu_assert_notnull (meta, "meta item"); mu_assert_eq (size, 0x17, "meta item size"); mu_assert_eq (meta->subtype, 0, "meta item subtype"); mu_assert_null (meta->str, "meta item string"); - meta = rz_meta_get_at (anal, 0x1337, RZ_META_TYPE_VARTYPE, &size); + meta = rz_meta_get_at (analysis, 0x1337, RZ_META_TYPE_VARTYPE, &size); mu_assert_notnull (meta, "meta item"); mu_assert_eq (size, 0x18, "meta item size"); mu_assert_eq (meta->subtype, 0, "meta item subtype"); mu_assert_null (meta->str, "meta item string"); - rz_spaces_push (&anal->meta_spaces, "myspace"); - meta = rz_meta_get_at (anal, 0x1337, RZ_META_TYPE_COMMENT, &size); + rz_spaces_push (&analysis->meta_spaces, "myspace"); + meta = rz_meta_get_at (analysis, 0x1337, RZ_META_TYPE_COMMENT, &size); mu_assert_notnull (meta, "meta item"); mu_assert_eq (size, 1, "meta item size"); mu_assert_eq (meta->subtype, 0, "meta item subtype"); mu_assert_streq (meta->str, "comment in space", "meta item string"); - rz_spaces_pop (&anal->meta_spaces); + rz_spaces_pop (&analysis->meta_spaces); - meta = rz_meta_get_at (anal, 0x2000, RZ_META_TYPE_STRING, &size); + meta = rz_meta_get_at (analysis, 0x2000, RZ_META_TYPE_STRING, &size); mu_assert_notnull (meta, "meta item"); mu_assert_eq (size, 0x20, "meta item size"); mu_assert_eq (meta->subtype, RZ_STRING_ENC_LATIN1, "meta item subtype"); mu_assert_streq (meta->str, "latin1", "meta item string"); - meta = rz_meta_get_at (anal, 0x2020, RZ_META_TYPE_STRING, &size); + meta = rz_meta_get_at (analysis, 0x2020, RZ_META_TYPE_STRING, &size); mu_assert_notnull (meta, "meta item"); mu_assert_eq (size, 0x20, "meta item size"); mu_assert_eq (meta->subtype, RZ_STRING_ENC_UTF8, "meta item subtype"); mu_assert_streq (meta->str, "utf8", "meta item string"); - meta = rz_meta_get_at (anal, 0x2040, RZ_META_TYPE_STRING, &size); + meta = rz_meta_get_at (analysis, 0x2040, RZ_META_TYPE_STRING, &size); mu_assert_notnull (meta, "meta item"); mu_assert_eq (size, 0x20, "meta item size"); mu_assert_eq (meta->subtype, RZ_STRING_ENC_UTF16LE, "meta item subtype"); mu_assert_streq (meta->str, "utf16le", "meta item string"); - meta = rz_meta_get_at (anal, 0x2060, RZ_META_TYPE_STRING, &size); + meta = rz_meta_get_at (analysis, 0x2060, RZ_META_TYPE_STRING, &size); mu_assert_notnull (meta, "meta item"); mu_assert_eq (size, 0x20, "meta item size"); mu_assert_eq (meta->subtype, RZ_STRING_ENC_UTF32LE, "meta item subtype"); mu_assert_streq (meta->str, "utf32le", "meta item string"); - meta = rz_meta_get_at (anal, 0x2080, RZ_META_TYPE_STRING, &size); + meta = rz_meta_get_at (analysis, 0x2080, RZ_META_TYPE_STRING, &size); mu_assert_notnull (meta, "meta item"); mu_assert_eq (size, 0x20, "meta item size"); mu_assert_eq (meta->subtype, RZ_STRING_ENC_UTF16BE, "meta item subtype"); mu_assert_streq (meta->str, "utf16be", "meta item string"); - meta = rz_meta_get_at (anal, 0x20a0, RZ_META_TYPE_STRING, &size); + meta = rz_meta_get_at (analysis, 0x20a0, RZ_META_TYPE_STRING, &size); mu_assert_notnull (meta, "meta item"); mu_assert_eq (size, 0x20, "meta item size"); mu_assert_eq (meta->subtype, RZ_STRING_ENC_UTF32BE, "meta item subtype"); mu_assert_streq (meta->str, "utf32be", "meta item string"); - meta = rz_meta_get_at (anal, 0x20c0, RZ_META_TYPE_STRING, &size); + meta = rz_meta_get_at (analysis, 0x20c0, RZ_META_TYPE_STRING, &size); mu_assert_notnull (meta, "meta item"); mu_assert_eq (size, 0x20, "meta item size"); mu_assert_eq (meta->subtype, RZ_STRING_ENC_GUESS, "meta item subtype"); mu_assert_streq (meta->str, "guess", "meta item string"); sdb_free (db); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } @@ -1005,46 +1005,46 @@ static int all_optypes[] = { #define ALL_OPTYPES_COUNT (sizeof(all_optypes) / sizeof(int)) bool test_anal_hints_save() { - RzAnal *anal = rz_anal_new (); + RzAnalysis *analysis = rz_analysis_new (); - rz_anal_hint_set_arch (anal, 0x100, "arm"); - rz_anal_hint_set_bits (anal, 0x100, 16); - rz_anal_hint_set_arch (anal, 0x120, NULL); - rz_anal_hint_set_bits (anal, 0x130, 0); + rz_analysis_hint_set_arch (analysis, 0x100, "arm"); + rz_analysis_hint_set_bits (analysis, 0x100, 16); + rz_analysis_hint_set_arch (analysis, 0x120, NULL); + rz_analysis_hint_set_bits (analysis, 0x130, 0); - rz_anal_hint_set_immbase (anal, 0x200, 10); - rz_anal_hint_set_jump (anal, 0x210, 1337); - rz_anal_hint_set_fail (anal, 0x210, 1234); - rz_anal_hint_set_stackframe (anal, 0x230, 0x30); - rz_anal_hint_set_pointer (anal, 0x240, 4321); - rz_anal_hint_set_nword (anal, 0x250, 3); - rz_anal_hint_set_ret (anal, 0x260, 666); - rz_anal_hint_set_newbits (anal, 0x270, 32); - rz_anal_hint_set_size (anal, 0x280, 7); - rz_anal_hint_set_syntax (anal, 0x220, "intel"); - rz_anal_hint_set_opcode (anal, 0x290, "mov"); - rz_anal_hint_set_offset (anal, 0x2a0, "sometype"); - rz_anal_hint_set_esil (anal, 0x2b0, "13,29,+"); - rz_anal_hint_set_high (anal, 0x2c0); - rz_anal_hint_set_val (anal, 0x2d0, 54323); + rz_analysis_hint_set_immbase (analysis, 0x200, 10); + rz_analysis_hint_set_jump (analysis, 0x210, 1337); + rz_analysis_hint_set_fail (analysis, 0x210, 1234); + rz_analysis_hint_set_stackframe (analysis, 0x230, 0x30); + rz_analysis_hint_set_pointer (analysis, 0x240, 4321); + rz_analysis_hint_set_nword (analysis, 0x250, 3); + rz_analysis_hint_set_ret (analysis, 0x260, 666); + rz_analysis_hint_set_newbits (analysis, 0x270, 32); + rz_analysis_hint_set_size (analysis, 0x280, 7); + rz_analysis_hint_set_syntax (analysis, 0x220, "intel"); + rz_analysis_hint_set_opcode (analysis, 0x290, "mov"); + rz_analysis_hint_set_offset (analysis, 0x2a0, "sometype"); + rz_analysis_hint_set_esil (analysis, 0x2b0, "13,29,+"); + rz_analysis_hint_set_high (analysis, 0x2c0); + rz_analysis_hint_set_val (analysis, 0x2d0, 54323); size_t i; for (i = 0; i < ALL_OPTYPES_COUNT; i++) { - rz_anal_hint_set_type (anal, 0x1000 + i, all_optypes[i]); + rz_analysis_hint_set_type (analysis, 0x1000 + i, all_optypes[i]); } Sdb *db = sdb_new0 (); - rz_serialize_anal_hints_save (db, anal); + rz_serialize_anal_hints_save (db, analysis); Sdb *expected = hints_ref_db (); assert_sdb_eq (db, expected, "hints save"); sdb_free (db); sdb_free (expected); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } -static bool addr_hints_count_cb(ut64 addr, const RzVector/**/ *records, void *user) { +static bool addr_hints_count_cb(ut64 addr, const RzVector/**/ *records, void *user) { (*(size_t *)user) += records->len; return true; } @@ -1060,36 +1060,36 @@ static bool bits_hints_count_cb(ut64 addr, int bits, void *user) { } bool test_anal_hints_load() { - RzAnal *anal = rz_anal_new (); + RzAnalysis *analysis = rz_analysis_new (); Sdb *db = hints_ref_db (); - bool succ = rz_serialize_anal_hints_load (db, anal, NULL); + bool succ = rz_serialize_anal_hints_load (db, analysis, NULL); mu_assert ("load success", succ); size_t count = 0; - rz_anal_addr_hints_foreach (anal, addr_hints_count_cb, &count); - rz_anal_arch_hints_foreach (anal, arch_hints_count_cb, &count); - rz_anal_bits_hints_foreach (anal, bits_hints_count_cb, &count); + rz_analysis_addr_hints_foreach (analysis, addr_hints_count_cb, &count); + rz_analysis_arch_hints_foreach (analysis, arch_hints_count_cb, &count); + rz_analysis_bits_hints_foreach (analysis, bits_hints_count_cb, &count); mu_assert_eq (count, 19 + ALL_OPTYPES_COUNT, "hints count"); ut64 addr; - const char *arch = rz_anal_hint_arch_at (anal, 0x100, &addr); + const char *arch = rz_analysis_hint_arch_at (analysis, 0x100, &addr); mu_assert_streq (arch, "arm", "arch hint"); mu_assert_eq (addr, 0x100, "arch hint addr"); - int bits = rz_anal_hint_bits_at(anal, 0x100, &addr); + int bits = rz_analysis_hint_bits_at(analysis, 0x100, &addr); mu_assert_eq (bits, 16, "bits hint"); mu_assert_eq (addr, 0x100, "bits hint addr"); - arch = rz_anal_hint_arch_at (anal, 0x120, &addr); + arch = rz_analysis_hint_arch_at (analysis, 0x120, &addr); mu_assert_null (arch, "arch hint"); mu_assert_eq (addr, 0x120, "arch hint addr"); - bits = rz_anal_hint_bits_at(anal, 0x100, &addr); + bits = rz_analysis_hint_bits_at(analysis, 0x100, &addr); mu_assert_eq (bits, 16, "bits hint"); mu_assert_eq (addr, 0x100, "bits hint addr"); #define assert_addr_hint(addr, tp, check) do { \ - const RzVector/**/ *hints = rz_anal_addr_hints_at(anal, addr); \ - const RzAnalAddrHintRecord *record; \ + const RzVector/**/ *hints = rz_analysis_addr_hints_at(analysis, addr); \ + const RzAnalysisAddrHintRecord *record; \ bool found = false; \ rz_vector_foreach (hints, record) { \ if (record->type == RZ_ANAL_ADDR_HINT_TYPE_##tp) { \ @@ -1123,7 +1123,7 @@ bool test_anal_hints_load() { } sdb_free (db); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } @@ -1145,62 +1145,62 @@ Sdb *classes_ref_db() { } bool test_anal_classes_save() { - RzAnal *anal = rz_anal_new (); + RzAnalysis *analysis = rz_analysis_new (); - rz_anal_class_create (anal, "Aeropause"); - RzAnalMethod crystal = { + rz_analysis_class_create (analysis, "Aeropause"); + RzAnalysisMethod crystal = { .name = strdup ("some_meth"), .addr = 0x1337, .vtable_offset = 42 }; - rz_anal_class_method_set (anal, "Aeropause", &crystal); - rz_anal_class_method_fini (&crystal); + rz_analysis_class_method_set (analysis, "Aeropause", &crystal); + rz_analysis_class_method_fini (&crystal); - RzAnalMethod meth = { + RzAnalysisMethod meth = { .name = strdup ("some_other_meth"), .addr = 0x1234, .vtable_offset = 0x20 }; - rz_anal_class_method_set (anal, "Aeropause", &meth); - rz_anal_class_method_fini (&meth); + rz_analysis_class_method_set (analysis, "Aeropause", &meth); + rz_analysis_class_method_fini (&meth); - rz_anal_class_create (anal, "Bright"); - RzAnalBaseClass base = { + rz_analysis_class_create (analysis, "Bright"); + RzAnalysisBaseClass base = { .id = NULL, .offset = 8, .class_name = strdup ("Aeropause") }; - rz_anal_class_base_set (anal, "Bright", &base); - rz_anal_class_base_fini (&base); + rz_analysis_class_base_set (analysis, "Bright", &base); + rz_analysis_class_base_fini (&base); - RzAnalVTable vt = { + RzAnalysisVTable vt = { .id = NULL, .offset = 4, .addr = 0x1000, .size = 0x50 }; - rz_anal_class_vtable_set (anal, "Aeropause", &vt); - rz_anal_class_vtable_fini (&vt); + rz_analysis_class_vtable_set (analysis, "Aeropause", &vt); + rz_analysis_class_vtable_fini (&vt); Sdb *db = sdb_new0 (); - rz_serialize_anal_classes_save (db, anal); + rz_serialize_anal_classes_save (db, analysis); Sdb *expected = classes_ref_db (); assert_sdb_eq (db, expected, "classes save"); sdb_free (db); sdb_free (expected); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } bool test_anal_classes_load() { - RzAnal *anal = rz_anal_new (); + RzAnalysis *analysis = rz_analysis_new (); Sdb *db = classes_ref_db (); - bool succ = rz_serialize_anal_classes_load (db, anal, NULL); + bool succ = rz_serialize_anal_classes_load (db, analysis, NULL); sdb_free (db); mu_assert ("load success", succ); - SdbList *classes = rz_anal_class_get_all (anal, true); + SdbList *classes = rz_analysis_class_get_all (analysis, true); mu_assert_eq (classes->length, 2, "classes count"); SdbListIter *iter = ls_head (classes); SdbKv *kv = ls_iter_get (iter); @@ -1209,9 +1209,9 @@ bool test_anal_classes_load() { mu_assert_streq (sdbkv_key (kv), "Bright", "class"); ls_free (classes); - RzVector *vals = rz_anal_class_method_get_all (anal, "Aeropause"); + RzVector *vals = rz_analysis_class_method_get_all (analysis, "Aeropause"); mu_assert_eq (vals->len, 2, "method count"); - RzAnalMethod *meth = rz_vector_index_ptr (vals, 0); + RzAnalysisMethod *meth = rz_vector_index_ptr (vals, 0); mu_assert_streq (meth->name, "some_meth", "method name"); mu_assert_eq (meth->addr, 0x1337, "method addr"); mu_assert_eq (meth->vtable_offset, 42, "method vtable offset"); @@ -1221,34 +1221,34 @@ bool test_anal_classes_load() { mu_assert_eq (meth->vtable_offset, 0x20, "method vtable offset"); rz_vector_free (vals); - vals = rz_anal_class_base_get_all (anal, "Aeropause"); + vals = rz_analysis_class_base_get_all (analysis, "Aeropause"); mu_assert_eq (vals->len, 0, "base count"); rz_vector_free (vals); - vals = rz_anal_class_vtable_get_all (anal, "Aeropause"); + vals = rz_analysis_class_vtable_get_all (analysis, "Aeropause"); mu_assert_eq (vals->len, 1, "vtable count"); - RzAnalVTable *vt = rz_vector_index_ptr (vals, 0); + RzAnalysisVTable *vt = rz_vector_index_ptr (vals, 0); mu_assert_eq (vt->offset, 4, "vtable offset"); mu_assert_eq (vt->addr, 0x1000, "vtable addr"); mu_assert_eq (vt->size, 0x50, "vtable size"); rz_vector_free (vals); - vals = rz_anal_class_method_get_all (anal, "Bright"); + vals = rz_analysis_class_method_get_all (analysis, "Bright"); mu_assert_eq (vals->len, 0, "method count"); rz_vector_free (vals); - vals = rz_anal_class_base_get_all (anal, "Bright"); + vals = rz_analysis_class_base_get_all (analysis, "Bright"); mu_assert_eq (vals->len, 1, "base count"); - RzAnalBaseClass *base = rz_vector_index_ptr (vals, 0); + RzAnalysisBaseClass *base = rz_vector_index_ptr (vals, 0); mu_assert_eq (base->offset, 8, "base class offset"); mu_assert_streq (base->class_name, "Aeropause", "base class name"); rz_vector_free (vals); - vals = rz_anal_class_vtable_get_all (anal, "Bright"); + vals = rz_analysis_class_vtable_get_all (analysis, "Bright"); mu_assert_eq (vals->len, 0, "vtable count"); rz_vector_free (vals); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } @@ -1277,13 +1277,13 @@ Sdb *types_ref_db() { } bool test_anal_types_save() { - RzAnal *anal = rz_anal_new (); + RzAnalysis *analysis = rz_analysis_new (); // struct - RzAnalBaseType *type = rz_anal_base_type_new (RZ_ANAL_BASE_TYPE_KIND_STRUCT); + RzAnalysisBaseType *type = rz_analysis_base_type_new (RZ_ANAL_BASE_TYPE_KIND_STRUCT); type->name = strdup ("junker"); - RzAnalStructMember member; + RzAnalysisStructMember member; member.name = strdup ("gillian"); member.offset = 0; member.type = strdup ("char *"); @@ -1294,14 +1294,14 @@ bool test_anal_types_save() { member.type = strdup ("uint64_t"); rz_vector_push (&type->struct_data.members, &member); - rz_anal_save_base_type (anal, type); - rz_anal_base_type_free (type); + rz_analysis_save_base_type (analysis, type); + rz_analysis_base_type_free (type); // union - type = rz_anal_base_type_new (RZ_ANAL_BASE_TYPE_KIND_UNION); + type = rz_analysis_base_type_new (RZ_ANAL_BASE_TYPE_KIND_UNION); type->name = strdup ("snatcher"); - RzAnalUnionMember mumber; + RzAnalysisUnionMember mumber; mumber.name = strdup ("random"); mumber.offset = 0; mumber.type = strdup ("int"); @@ -1312,14 +1312,14 @@ bool test_anal_types_save() { mumber.type = strdup ("uint32_t"); rz_vector_push (&type->union_data.members, &mumber); - rz_anal_save_base_type (anal, type); - rz_anal_base_type_free (type); + rz_analysis_save_base_type (analysis, type); + rz_analysis_base_type_free (type); // enum - type = rz_anal_base_type_new (RZ_ANAL_BASE_TYPE_KIND_ENUM); + type = rz_analysis_base_type_new (RZ_ANAL_BASE_TYPE_KIND_ENUM); type->name = strdup ("mika"); - RzAnalEnumCase cas; + RzAnalysisEnumCase cas; cas.name = strdup ("ELIJAH"); cas.val = 42; rz_vector_push (&type->enum_data.cases, &cas); @@ -1328,49 +1328,49 @@ bool test_anal_types_save() { cas.val = 1337; rz_vector_push (&type->enum_data.cases, &cas); - rz_anal_save_base_type (anal, type); - rz_anal_base_type_free (type); + rz_analysis_save_base_type (analysis, type); + rz_analysis_base_type_free (type); // typedef - type = rz_anal_base_type_new (RZ_ANAL_BASE_TYPE_KIND_TYPEDEF); + type = rz_analysis_base_type_new (RZ_ANAL_BASE_TYPE_KIND_TYPEDEF); type->name = strdup ("human"); type->type = strdup ("union snatcher"); - rz_anal_save_base_type (anal, type); - rz_anal_base_type_free (type); + rz_analysis_save_base_type (analysis, type); + rz_analysis_base_type_free (type); // atomic - type = rz_anal_base_type_new (RZ_ANAL_BASE_TYPE_KIND_ATOMIC); + type = rz_analysis_base_type_new (RZ_ANAL_BASE_TYPE_KIND_ATOMIC); type->name = strdup ("badchar"); type->size = 16; type->type = strdup ("c"); - rz_anal_save_base_type (anal, type); - rz_anal_base_type_free (type); + rz_analysis_save_base_type (analysis, type); + rz_analysis_base_type_free (type); Sdb *db = sdb_new0 (); - rz_serialize_anal_types_save (db, anal); + rz_serialize_anal_types_save (db, analysis); Sdb *expected = types_ref_db (); assert_sdb_eq (db, expected, "types save"); sdb_free (db); sdb_free (expected); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } bool test_anal_types_load() { - RzAnal *anal = rz_anal_new (); + RzAnalysis *analysis = rz_analysis_new (); Sdb *db = types_ref_db (); - bool succ = rz_serialize_anal_types_load (db, anal, NULL); + bool succ = rz_serialize_anal_types_load (db, analysis, NULL); sdb_free (db); mu_assert ("load success", succ); // struct - RzAnalBaseType *type = rz_anal_get_base_type (anal, "junker"); + RzAnalysisBaseType *type = rz_analysis_get_base_type (analysis, "junker"); mu_assert_notnull (type, "get type"); mu_assert_eq (type->kind, RZ_ANAL_BASE_TYPE_KIND_STRUCT, "type kind"); mu_assert_eq (type->struct_data.members.len, 2, "members count"); - RzAnalStructMember *member = rz_vector_index_ptr (&type->struct_data.members, 0); + RzAnalysisStructMember *member = rz_vector_index_ptr (&type->struct_data.members, 0); mu_assert_streq (member->name, "gillian", "member name"); mu_assert_eq (member->offset, 0, "member offset"); mu_assert_streq (member->type, "char *", "member type"); @@ -1380,15 +1380,15 @@ bool test_anal_types_load() { mu_assert_eq (member->offset, 8, "member offset"); mu_assert_streq (member->type, "uint64_t", "member type"); - rz_anal_base_type_free (type); + rz_analysis_base_type_free (type); // union - type = rz_anal_get_base_type (anal, "snatcher"); + type = rz_analysis_get_base_type (analysis, "snatcher"); mu_assert_notnull (type, "get type"); mu_assert_eq (type->kind, RZ_ANAL_BASE_TYPE_KIND_UNION, "type kind"); mu_assert_eq (type->union_data.members.len, 2, "members count"); - RzAnalUnionMember *mumber = rz_vector_index_ptr (&type->union_data.members, 0); + RzAnalysisUnionMember *mumber = rz_vector_index_ptr (&type->union_data.members, 0); mu_assert_streq (mumber->name, "random", "member name"); mu_assert_streq (mumber->type, "int", "member type"); @@ -1396,15 +1396,15 @@ bool test_anal_types_load() { mu_assert_streq (mumber->name, "hajile", "member name"); mu_assert_streq (mumber->type, "uint32_t", "member type"); - rz_anal_base_type_free (type); + rz_analysis_base_type_free (type); // enum - type = rz_anal_get_base_type (anal, "mika"); + type = rz_analysis_get_base_type (analysis, "mika"); mu_assert_notnull (type, "get type"); mu_assert_eq (type->kind, RZ_ANAL_BASE_TYPE_KIND_ENUM, "type kind"); mu_assert_eq (type->enum_data.cases.len, 2, "cases count"); - RzAnalEnumCase *cas = rz_vector_index_ptr (&type->enum_data.cases, 0); + RzAnalysisEnumCase *cas = rz_vector_index_ptr (&type->enum_data.cases, 0); mu_assert_streq (cas->name, "ELIJAH", "case name"); mu_assert_eq (cas->val, 42, "case value"); @@ -1412,24 +1412,24 @@ bool test_anal_types_load() { mu_assert_streq (cas->name, "MODNAR", "case name"); mu_assert_eq (cas->val, 1337, "case value"); - rz_anal_base_type_free (type); + rz_analysis_base_type_free (type); // typedef - type = rz_anal_get_base_type (anal, "human"); + type = rz_analysis_get_base_type (analysis, "human"); mu_assert_notnull (type, "get type"); mu_assert_eq (type->kind, RZ_ANAL_BASE_TYPE_KIND_TYPEDEF, "type kind"); mu_assert_streq (type->type, "union snatcher", "typedefd type"); - rz_anal_base_type_free (type); + rz_analysis_base_type_free (type); // atomic - type = rz_anal_get_base_type (anal, "badchar"); + type = rz_analysis_get_base_type (analysis, "badchar"); mu_assert_notnull (type, "get type"); mu_assert_eq (type->kind, RZ_ANAL_BASE_TYPE_KIND_ATOMIC, "type kind"); mu_assert_eq (type->size, 16, "atomic type size"); mu_assert_streq (type->type, "c", "atomic type"); - rz_anal_base_type_free (type); + rz_analysis_base_type_free (type); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } @@ -1446,7 +1446,7 @@ Sdb *sign_ref_db() { } bool test_anal_sign_save() { - RzAnal *anal = rz_anal_new (); + RzAnalysis *analysis = rz_analysis_new (); RzSignItem *item = rz_sign_item_new (); item->name = strdup ("sym.mahboi"); @@ -1489,32 +1489,32 @@ bool test_anal_sign_save() { item->hash = RZ_NEW0 (RzSignHash); item->hash->bbhash = strdup ("7bfa1358c427e26bc03c2384f41de7be6ebc01958a57e9a6deda5bdba9768851"); - rz_sign_add_item (anal, item); + rz_sign_add_item (analysis, item); rz_sign_item_free (item); - rz_spaces_set (&anal->zign_spaces, "koridai"); - rz_sign_add_comment (anal, "sym.boring", "gee it sure is boring around here"); + rz_spaces_set (&analysis->zign_spaces, "koridai"); + rz_sign_add_comment (analysis, "sym.boring", "gee it sure is boring around here"); Sdb *db = sdb_new0 (); - rz_serialize_anal_sign_save (db, anal); + rz_serialize_anal_sign_save (db, analysis); Sdb *expected = sign_ref_db (); assert_sdb_eq (db, expected, "zignatures save"); sdb_free (db); sdb_free (expected); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } bool test_anal_sign_load() { - RzAnal *anal = rz_anal_new (); + RzAnalysis *analysis = rz_analysis_new (); Sdb *db = sign_ref_db (); - bool succ = rz_serialize_anal_sign_load (db, anal, NULL); + bool succ = rz_serialize_anal_sign_load (db, analysis, NULL); sdb_free (db); mu_assert ("load success", succ); - rz_spaces_set (&anal->zign_spaces, NULL); - RzSignItem *item = rz_sign_get_item (anal, "sym.mahboi"); + rz_spaces_set (&analysis->zign_spaces, NULL); + RzSignItem *item = rz_sign_get_item (analysis, "sym.mahboi"); mu_assert_notnull (item, "get item"); mu_assert_streq (item->name, "sym.mahboi", "name"); @@ -1554,13 +1554,13 @@ bool test_anal_sign_load() { mu_assert_streq (item->hash->bbhash, "7bfa1358c427e26bc03c2384f41de7be6ebc01958a57e9a6deda5bdba9768851", "hash val"); rz_sign_item_free (item); - rz_spaces_set (&anal->zign_spaces, "koridai"); - item = rz_sign_get_item (anal, "sym.boring"); + rz_spaces_set (&analysis->zign_spaces, "koridai"); + item = rz_sign_get_item (analysis, "sym.boring"); mu_assert_notnull (item, "get item in space"); mu_assert_streq (item->comment, "gee it sure is boring around here", "item in space comment"); rz_sign_item_free (item); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } @@ -1577,39 +1577,39 @@ static Sdb *cc_ref_db() { } bool test_anal_cc_save() { - RzAnal *anal = rz_anal_new (); + RzAnalysis *analysis = rz_analysis_new (); - rz_anal_cc_set (anal, "rax sectarian(rdx, rcx, stack)"); - rz_anal_cc_set_self (anal, "sectarian", "rsi"); - rz_anal_cc_set_error (anal, "sectarian", "rdi"); + rz_analysis_cc_set (analysis, "rax sectarian(rdx, rcx, stack)"); + rz_analysis_cc_set_self (analysis, "sectarian", "rsi"); + rz_analysis_cc_set_error (analysis, "sectarian", "rdi"); Sdb *db = sdb_new0 (); - rz_serialize_anal_cc_save (db, anal); + rz_serialize_anal_cc_save (db, analysis); Sdb *expected = cc_ref_db (); assert_sdb_eq (db, expected, "cc save"); sdb_free (db); sdb_free (expected); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } bool test_anal_cc_load() { - RzAnal *anal = rz_anal_new (); + RzAnalysis *analysis = rz_analysis_new (); Sdb *db = cc_ref_db (); - bool succ = rz_serialize_anal_cc_load (db, anal, NULL); + bool succ = rz_serialize_anal_cc_load (db, analysis, NULL); sdb_free (db); mu_assert ("load success", succ); - char *v = rz_anal_cc_get (anal, "sectarian"); + char *v = rz_analysis_cc_get (analysis, "sectarian"); mu_assert_streq (v, "rax rsi.sectarian (rdx, rcx, stack) rdi;", "get cc"); free (v); - const char *vv = rz_anal_cc_self (anal, "sectarian"); + const char *vv = rz_analysis_cc_self (analysis, "sectarian"); mu_assert_streq (vv, "rsi", "get self"); - vv = rz_anal_cc_error (anal, "sectarian"); + vv = rz_analysis_cc_error (analysis, "sectarian"); mu_assert_streq (vv, "rdi", "get error"); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } @@ -1678,72 +1678,72 @@ Sdb *anal_ref_db() { } bool test_anal_save() { - RzAnal *anal = rz_anal_new (); + RzAnalysis *analysis = rz_analysis_new (); - RzAnalBlock *ba = rz_anal_create_block (anal, 1337, 42); - RzAnalBlock *bb = rz_anal_create_block (anal, 1234, 32); + RzAnalysisBlock *ba = rz_analysis_create_block (analysis, 1337, 42); + RzAnalysisBlock *bb = rz_analysis_create_block (analysis, 1234, 32); - RzAnalFunction *f = rz_anal_create_function (anal, "hirsch", 1337, RZ_ANAL_FCN_TYPE_NULL, NULL); - rz_anal_function_add_block (f, ba); - rz_anal_function_add_block (f, bb); + RzAnalysisFunction *f = rz_analysis_create_function (analysis, "hirsch", 1337, RZ_ANAL_FCN_TYPE_NULL, NULL); + rz_analysis_function_add_block (f, ba); + rz_analysis_function_add_block (f, bb); - f = rz_anal_create_function (anal, "effekt", 1234, RZ_ANAL_FCN_TYPE_FCN, NULL); - rz_anal_function_add_block (f, ba); + f = rz_analysis_create_function (analysis, "effekt", 1234, RZ_ANAL_FCN_TYPE_FCN, NULL); + rz_analysis_function_add_block (f, ba); - rz_anal_block_unref (ba); - rz_anal_block_unref (bb); + rz_analysis_block_unref (ba); + rz_analysis_block_unref (bb); - rz_anal_xrefs_set (anal, 0x42, 1337, RZ_ANAL_REF_TYPE_CALL); - rz_anal_xrefs_set (anal, 1337, 0xc0ffee, RZ_ANAL_REF_TYPE_DATA); + rz_analysis_xrefs_set (analysis, 0x42, 1337, RZ_ANAL_REF_TYPE_CALL); + rz_analysis_xrefs_set (analysis, 1337, 0xc0ffee, RZ_ANAL_REF_TYPE_DATA); - rz_meta_set_string (anal, RZ_META_TYPE_COMMENT, 0x1337, "some comment"); + rz_meta_set_string (analysis, RZ_META_TYPE_COMMENT, 0x1337, "some comment"); - rz_anal_hint_set_arch (anal, 4321, "arm"); + rz_analysis_hint_set_arch (analysis, 4321, "arm"); - rz_anal_class_create (anal, "Aeropause"); - RzAnalMethod crystal = { + rz_analysis_class_create (analysis, "Aeropause"); + RzAnalysisMethod crystal = { .name = strdup ("some_meth"), .addr = 0x1337, .vtable_offset = 42 }; - rz_anal_class_method_set (anal, "Aeropause", &crystal); - rz_anal_class_method_fini (&crystal); + rz_analysis_class_method_set (analysis, "Aeropause", &crystal); + rz_analysis_class_method_fini (&crystal); - RzAnalBaseType *type = rz_anal_base_type_new (RZ_ANAL_BASE_TYPE_KIND_ATOMIC); + RzAnalysisBaseType *type = rz_analysis_base_type_new (RZ_ANAL_BASE_TYPE_KIND_ATOMIC); type->name = strdup ("badchar"); type->size = 16; type->type = strdup ("c"); - rz_anal_save_base_type (anal, type); - rz_anal_base_type_free (type); + rz_analysis_save_base_type (analysis, type); + rz_analysis_base_type_free (type); - rz_spaces_set (&anal->zign_spaces, "koridai"); - rz_sign_add_comment (anal, "sym.boring", "gee it sure is boring around here"); + rz_spaces_set (&analysis->zign_spaces, "koridai"); + rz_sign_add_comment (analysis, "sym.boring", "gee it sure is boring around here"); - rz_anal_add_import (anal, "pigs"); - rz_anal_add_import (anal, "dogs"); - rz_anal_add_import (anal, "sheep"); + rz_analysis_add_import (analysis, "pigs"); + rz_analysis_add_import (analysis, "dogs"); + rz_analysis_add_import (analysis, "sheep"); - rz_anal_pin (anal, 0x1337, "!sudo rm -rf /"); - rz_anal_pin (anal, 0xc0ffee, "pd 42"); + rz_analysis_pin (analysis, 0x1337, "!sudo rm -rf /"); + rz_analysis_pin (analysis, 0xc0ffee, "pd 42"); - rz_anal_cc_set (anal, "rax sectarian(rdx, rcx, stack)"); + rz_analysis_cc_set (analysis, "rax sectarian(rdx, rcx, stack)"); Sdb *db = sdb_new0 (); - rz_serialize_anal_save (db, anal); + rz_serialize_anal_save (db, analysis); Sdb *expected = anal_ref_db (); assert_sdb_eq (db, expected, "anal save"); sdb_free (db); sdb_free (expected); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } bool test_anal_load() { - RzAnal *anal = rz_anal_new (); + RzAnalysis *analysis = rz_analysis_new (); Sdb *db = anal_ref_db (); - bool succ = rz_serialize_anal_load (db, anal, NULL); + bool succ = rz_serialize_anal_load (db, analysis, NULL); sdb_free (db); mu_assert ("load success", succ); @@ -1751,64 +1751,64 @@ bool test_anal_load() { // if the things are loaded at all when loading a whole anal. size_t blocks_count = 0; RBIter iter; - RzAnalBlock *block; - rz_rbtree_foreach (anal->bb_tree, iter, block, RzAnalBlock, _rb) { + RzAnalysisBlock *block; + rz_rbtree_foreach (analysis->bb_tree, iter, block, RzAnalysisBlock, _rb) { (void)block; blocks_count++; } mu_assert_eq (blocks_count, 2, "blocks loaded"); - mu_assert_eq (rz_list_length (anal->fcns), 2, "functions loaded"); - mu_assert_eq (rz_anal_xrefs_count (anal), 2, "xrefs loaded"); + mu_assert_eq (rz_list_length (analysis->fcns), 2, "functions loaded"); + mu_assert_eq (rz_analysis_xrefs_count (analysis), 2, "xrefs loaded"); - const char *cmt = rz_meta_get_string(anal, RZ_META_TYPE_COMMENT, 0x1337); + const char *cmt = rz_meta_get_string(analysis, RZ_META_TYPE_COMMENT, 0x1337); mu_assert_streq (cmt, "some comment", "meta"); - const char *hint = rz_anal_hint_arch_at (anal, 4321, NULL); + const char *hint = rz_analysis_hint_arch_at (analysis, 4321, NULL); mu_assert_streq (hint, "arm", "hint"); - SdbList *classes = rz_anal_class_get_all (anal, true); + SdbList *classes = rz_analysis_class_get_all (analysis, true); mu_assert_eq (classes->length, 1, "classes count"); SdbListIter *siter = ls_head (classes); SdbKv *kv = ls_iter_get (siter); mu_assert_streq (sdbkv_key (kv), "Aeropause", "class"); ls_free (classes); - RzVector *vals = rz_anal_class_method_get_all (anal, "Aeropause"); + RzVector *vals = rz_analysis_class_method_get_all (analysis, "Aeropause"); mu_assert_eq (vals->len, 1, "method count"); - RzAnalMethod *meth = rz_vector_index_ptr (vals, 0); + RzAnalysisMethod *meth = rz_vector_index_ptr (vals, 0); mu_assert_streq (meth->name, "some_meth", "method name"); rz_vector_free (vals); - RzAnalBaseType *type = rz_anal_get_base_type (anal, "badchar"); + RzAnalysisBaseType *type = rz_analysis_get_base_type (analysis, "badchar"); mu_assert_notnull (type, "get type"); mu_assert_eq (type->kind, RZ_ANAL_BASE_TYPE_KIND_ATOMIC, "type kind"); mu_assert_eq (type->size, 16, "atomic type size"); mu_assert_streq (type->type, "c", "atomic type"); - rz_anal_base_type_free (type); + rz_analysis_base_type_free (type); - rz_spaces_set (&anal->zign_spaces, "koridai"); - RzSignItem *item = rz_sign_get_item (anal, "sym.boring"); + rz_spaces_set (&analysis->zign_spaces, "koridai"); + RzSignItem *item = rz_sign_get_item (analysis, "sym.boring"); mu_assert_notnull (item, "get item in space"); mu_assert_streq (item->comment, "gee it sure is boring around here", "item in space comment"); rz_sign_item_free (item); - mu_assert_eq (rz_list_length (anal->imports), 3, "imports count"); - mu_assert_notnull (rz_list_find (anal->imports, "pigs", (RzListComparator)strcmp), "import"); - mu_assert_notnull (rz_list_find (anal->imports, "dogs", (RzListComparator)strcmp), "import"); - mu_assert_notnull (rz_list_find (anal->imports, "sheep", (RzListComparator)strcmp), "import"); + mu_assert_eq (rz_list_length (analysis->imports), 3, "imports count"); + mu_assert_notnull (rz_list_find (analysis->imports, "pigs", (RzListComparator)strcmp), "import"); + mu_assert_notnull (rz_list_find (analysis->imports, "dogs", (RzListComparator)strcmp), "import"); + mu_assert_notnull (rz_list_find (analysis->imports, "sheep", (RzListComparator)strcmp), "import"); - size_t pin_count = sdb_count (anal->sdb_pins); + size_t pin_count = sdb_count (analysis->sdb_pins); mu_assert_eq (pin_count, 2, "pins count"); - const char *pin = rz_anal_pin_call (anal, 0x1337); + const char *pin = rz_analysis_pin_call (analysis, 0x1337); mu_assert_streq (pin, "!sudo rm -rf /", "pin"); - pin = rz_anal_pin_call (anal, 0xc0ffee); + pin = rz_analysis_pin_call (analysis, 0xc0ffee); mu_assert_streq (pin, "pd 42", "pin"); - char *cc = rz_anal_cc_get (anal, "sectarian"); + char *cc = rz_analysis_cc_get (analysis, "sectarian"); mu_assert_streq (cc, "rax sectarian (rdx, rcx, stack);", "get cc"); free (cc); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; } diff --git a/test/unit/test_sign.c b/test/unit/test_sign.c index f13c6af444..1594104bb1 100644 --- a/test/unit/test_sign.c +++ b/test/unit/test_sign.c @@ -1,10 +1,10 @@ -#include +#include #include #include "minunit.h" static bool test_anal_sign_get_set(void) { - RzAnal *anal = rz_anal_new (); + RzAnalysis *analysis = rz_analysis_new (); RzSignItem *item = rz_sign_item_new (); item->name = strdup ("sym.mahboi"); @@ -47,16 +47,16 @@ static bool test_anal_sign_get_set(void) { item->hash = RZ_NEW0 (RzSignHash); item->hash->bbhash = strdup ("7bfa1358c427e26bc03c2384f41de7be6ebc01958a57e9a6deda5bdba9768851"); - rz_sign_add_item (anal, item); + rz_sign_add_item (analysis, item); rz_sign_item_free (item); - rz_spaces_set (&anal->zign_spaces, "koridai"); - rz_sign_add_comment (anal, "sym.boring", "gee it sure is boring around here"); + rz_spaces_set (&analysis->zign_spaces, "koridai"); + rz_sign_add_comment (analysis, "sym.boring", "gee it sure is boring around here"); // -- - rz_spaces_set (&anal->zign_spaces, NULL); - item = rz_sign_get_item (anal, "sym.mahboi"); + rz_spaces_set (&analysis->zign_spaces, NULL); + item = rz_sign_get_item (analysis, "sym.mahboi"); mu_assert_notnull (item, "get item"); mu_assert_streq (item->name, "sym.mahboi", "name"); @@ -96,13 +96,13 @@ static bool test_anal_sign_get_set(void) { mu_assert_streq (item->hash->bbhash, "7bfa1358c427e26bc03c2384f41de7be6ebc01958a57e9a6deda5bdba9768851", "hash val"); rz_sign_item_free (item); - rz_spaces_set (&anal->zign_spaces, "koridai"); - item = rz_sign_get_item (anal, "sym.boring"); + rz_spaces_set (&analysis->zign_spaces, "koridai"); + item = rz_sign_get_item (analysis, "sym.boring"); mu_assert_notnull (item, "get item in space"); mu_assert_streq (item->comment, "gee it sure is boring around here", "item in space comment"); rz_sign_item_free (item); - rz_anal_free (anal); + rz_analysis_free (analysis); mu_end; }