mirror of
https://github.com/radareorg/radare2.git
synced 2024-10-11 04:44:37 +00:00
* Code cleanup in r_anal (-30LOC)
This commit is contained in:
parent
15ca02a355
commit
06f91e2a28
@ -1,6 +1,5 @@
|
||||
/* radare - LGPL - Copyright 2009-2010 */
|
||||
/* nibble<.ds@gmail.com> */
|
||||
/* pancake<nopcode.org> */
|
||||
/* radare - LGPL - Copyright 2009-2011 */
|
||||
/* - nibble<.ds@gmail.com> + pancake<nopcode.org> */
|
||||
|
||||
#include <r_anal.h>
|
||||
#include <r_util.h>
|
||||
@ -35,7 +34,7 @@ R_API RAnal *r_anal_new() {
|
||||
anal->vartypes = r_anal_var_type_list_new ();
|
||||
r_anal_set_bits (anal, 32);
|
||||
r_anal_set_big_endian (anal, R_FALSE);
|
||||
INIT_LIST_HEAD (&anal->anals);
|
||||
INIT_LIST_HEAD (&anal->anals); // TODO: use RList here
|
||||
for (i=0; anal_static_plugins[i]; i++) {
|
||||
static_plugin = R_NEW (RAnalPlugin);
|
||||
memcpy (static_plugin, anal_static_plugins[i], sizeof (RAnalPlugin));
|
||||
|
@ -1,6 +1,5 @@
|
||||
/* radare - LGPL - Copyright 2010 */
|
||||
/* nibble<.ds@gmail.com> */
|
||||
/* pancake<nopcode.org> */
|
||||
/* radare - LGPL - Copyright 2010-2011 */
|
||||
/* nibble<.ds@gmail.com> + pancake<nopcode.org> */
|
||||
|
||||
#include <r_anal.h>
|
||||
#include <r_util.h>
|
||||
@ -41,7 +40,7 @@ R_API void r_anal_aop_free(void *_aop) {
|
||||
R_API int r_anal_aop(RAnal *anal, RAnalOp *aop, ut64 addr, const ut8 *data, int len) {
|
||||
if (anal && aop && anal->cur && anal->cur->aop)
|
||||
return anal->cur->aop (anal, aop, addr, data, len);
|
||||
return 0;
|
||||
return R_FALSE;
|
||||
}
|
||||
|
||||
// TODO: return RAnalException *
|
||||
|
@ -1,6 +1,5 @@
|
||||
/* radare - LGPL - Copyright 2010-2011 */
|
||||
/* nibble<.ds@gmail.com> */
|
||||
/* pancake<nopcode.org> */
|
||||
/* - nibble<.ds@gmail.com> + pancake<nopcode.org> */
|
||||
|
||||
#include <r_anal.h>
|
||||
#include <r_util.h>
|
||||
@ -8,17 +7,16 @@
|
||||
|
||||
R_API RAnalBlock *r_anal_bb_new() {
|
||||
RAnalBlock *bb = R_NEW (RAnalBlock);
|
||||
if (bb) {
|
||||
memset (bb, 0, sizeof (RAnalBlock));
|
||||
bb->addr = -1;
|
||||
bb->jump = -1;
|
||||
bb->fail = -1;
|
||||
bb->type = R_ANAL_BB_TYPE_NULL;
|
||||
bb->aops = r_anal_aop_list_new();
|
||||
bb->cond = NULL;
|
||||
bb->fingerprint = NULL;
|
||||
bb->diff = r_anal_diff_new ();
|
||||
}
|
||||
if (!bb) return NULL;
|
||||
memset (bb, 0, sizeof (RAnalBlock));
|
||||
bb->addr = -1;
|
||||
bb->jump = -1;
|
||||
bb->fail = -1;
|
||||
bb->type = R_ANAL_BB_TYPE_NULL;
|
||||
bb->aops = r_anal_aop_list_new();
|
||||
bb->cond = NULL;
|
||||
bb->fingerprint = NULL;
|
||||
bb->diff = r_anal_diff_new ();
|
||||
return bb;
|
||||
}
|
||||
|
||||
@ -29,14 +27,12 @@ R_API RList *r_anal_bb_list_new() {
|
||||
}
|
||||
|
||||
R_API void r_anal_bb_free(void *_bb) {
|
||||
RAnalBlock *bb = _bb;
|
||||
if (bb) {
|
||||
if (bb->cond)
|
||||
free (bb->cond);
|
||||
if (_bb) {
|
||||
RAnalBlock *bb = _bb;
|
||||
free (bb->cond);
|
||||
free (bb->fingerprint);
|
||||
if (bb->aops)
|
||||
r_list_free (bb->aops);
|
||||
if (bb->fingerprint)
|
||||
free (bb->fingerprint);
|
||||
if (bb->diff)
|
||||
r_anal_diff_free (bb->diff);
|
||||
free (bb);
|
||||
@ -50,7 +46,7 @@ R_API int r_anal_bb(RAnal *anal, RAnalBlock *bb, ut64 addr, ut8 *buf, ut64 len,
|
||||
if (bb->addr == -1)
|
||||
bb->addr = addr;
|
||||
while (idx < len) {
|
||||
if (!(aop = r_anal_aop_new())) {
|
||||
if (!(aop = r_anal_aop_new ())) {
|
||||
eprintf ("Error: new (aop)\n");
|
||||
return R_ANAL_RET_ERROR;
|
||||
}
|
||||
@ -59,13 +55,15 @@ R_API int r_anal_bb(RAnal *anal, RAnalBlock *bb, ut64 addr, ut8 *buf, ut64 len,
|
||||
if (idx == 0) {
|
||||
VERBOSE_ANAL eprintf ("Unknown opcode at 0x%08"PFMT64x"\n", addr+idx);
|
||||
return R_ANAL_RET_END;
|
||||
} else break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
idx += oplen;
|
||||
bb->size += oplen;
|
||||
bb->ninstr++;
|
||||
r_list_append (bb->aops, aop);
|
||||
if (head) bb->type = R_ANAL_BB_TYPE_HEAD;
|
||||
if (head)
|
||||
bb->type = R_ANAL_BB_TYPE_HEAD;
|
||||
switch (aop->type) {
|
||||
case R_ANAL_OP_TYPE_CMP:
|
||||
bb->cond = r_anal_cond_new_from_aop (aop);
|
||||
@ -74,8 +72,7 @@ R_API int r_anal_bb(RAnal *anal, RAnalBlock *bb, ut64 addr, ut8 *buf, ut64 len,
|
||||
if (bb->cond) {
|
||||
// TODO: get values from anal backend
|
||||
bb->cond->type = R_ANAL_COND_EQ;
|
||||
} else
|
||||
VERBOSE_ANAL eprintf ("Unknown conditional for block 0x%"PFMT64x"\n", bb->addr);
|
||||
} else VERBOSE_ANAL eprintf ("Unknown conditional for block 0x%"PFMT64x"\n", bb->addr);
|
||||
bb->conditional = 1;
|
||||
bb->fail = aop->fail;
|
||||
bb->jump = aop->jump;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* radare - LGPL - Copyright 2010 */
|
||||
/* radare - LGPL - Copyright 2010-2011 */
|
||||
/* pancake<nopcode.org> */
|
||||
|
||||
#include <r_anal.h>
|
||||
|
@ -1,6 +1,5 @@
|
||||
/* radare - LGPL - Copyright 2010 */
|
||||
/* nibble<.ds@gmail.com> */
|
||||
/* pancake<nopcode.org> */
|
||||
/* radare - LGPL - Copyright 2010-2011 */
|
||||
/* nibble<.ds@gmail.com> + pancake<nopcode.org> */
|
||||
|
||||
#include <r_anal.h>
|
||||
#include <r_util.h>
|
||||
@ -32,22 +31,14 @@ R_API RList *r_anal_fcn_list_new() {
|
||||
|
||||
R_API void r_anal_fcn_free(void *_fcn) {
|
||||
RAnalFcn *fcn = _fcn;
|
||||
if (fcn) {
|
||||
if (fcn->name)
|
||||
free (fcn->name);
|
||||
if (fcn->refs)
|
||||
r_list_free (fcn->refs);
|
||||
if (fcn->xrefs)
|
||||
r_list_free (fcn->xrefs);
|
||||
if (fcn->vars)
|
||||
r_list_free (fcn->vars);
|
||||
if (fcn->bbs)
|
||||
r_list_free (fcn->bbs);
|
||||
if (fcn->fingerprint)
|
||||
free (fcn->fingerprint);
|
||||
if (fcn->diff)
|
||||
r_anal_diff_free (fcn->diff);
|
||||
}
|
||||
if (!_fcn) return;
|
||||
free (fcn->name);
|
||||
r_list_free (fcn->refs);
|
||||
r_list_free (fcn->xrefs);
|
||||
r_list_free (fcn->vars);
|
||||
r_list_free (fcn->bbs);
|
||||
free (fcn->fingerprint);
|
||||
r_anal_diff_free (fcn->diff);
|
||||
free (fcn);
|
||||
}
|
||||
|
||||
@ -58,9 +49,8 @@ R_API int r_anal_fcn(RAnal *anal, RAnalFcn *fcn, ut64 addr, ut8 *buf, ut64 len,
|
||||
int oplen, idx = 0;
|
||||
if (fcn->addr == -1)
|
||||
fcn->addr = addr;
|
||||
if (reftype == R_ANAL_REF_TYPE_CODE)
|
||||
fcn->type = R_ANAL_FCN_TYPE_LOC;
|
||||
else fcn->type = R_ANAL_FCN_TYPE_FCN;
|
||||
fcn->type = (reftype==R_ANAL_REF_TYPE_CODE)?
|
||||
R_ANAL_FCN_TYPE_LOC: R_ANAL_FCN_TYPE_FCN;
|
||||
while (idx < len) {
|
||||
if ((oplen = r_anal_aop (anal, &aop, addr+idx, buf+idx, len-idx)) == 0) {
|
||||
if (idx == 0) {
|
||||
@ -330,21 +320,22 @@ R_API char *r_anal_fcn_to_string(RAnal *a, RAnalFcn* fs) {
|
||||
return (sign = r_str_concatf (sign, ");"));
|
||||
}
|
||||
|
||||
R_API int r_anal_fcn_from_string(RAnal *a, RAnalFcn *f, const char *_str) {
|
||||
RAnalVar *var;
|
||||
char *str = strdup (_str);
|
||||
char *p, *q, *r;
|
||||
int i, arg;
|
||||
// TODO: This function is not fully implemented
|
||||
R_API int r_anal_fcn_from_string(RAnal *a, RAnalFcn *f, const char *_str) {
|
||||
char *p, *q, *r, *str;
|
||||
RAnalVar *var;
|
||||
int i, arg;
|
||||
|
||||
if (!a || !f) {
|
||||
eprintf ("r_anal_fcn_from_string: No function received\n");
|
||||
return R_FALSE;
|
||||
}
|
||||
str = strdup (_str);
|
||||
/* TODO : implement parser */
|
||||
//r_list_destroy (fs->vars);
|
||||
//set: fs->vars = r_list_new ();
|
||||
//set: fs->name
|
||||
printf("ORIG=(%s)\n", _str);
|
||||
eprintf ("ORIG=(%s)\n", _str);
|
||||
p = strchr (str, '(');
|
||||
if (!p) goto parsefail;
|
||||
*p = 0;
|
||||
|
@ -169,7 +169,7 @@ R_API int r_meta_add(RMeta *m, int type, ut64 from, ut64 to, const char *str) {
|
||||
r_list_append (m->data, mi);
|
||||
break;
|
||||
default:
|
||||
eprintf ("Unsupported type '%c'\n", type);
|
||||
eprintf ("r_meta_add: Unsupported type '%c'\n", type);
|
||||
return R_FALSE;
|
||||
}
|
||||
return R_TRUE;
|
||||
@ -273,7 +273,6 @@ R_API int r_meta_list(RMeta *m, int type) {
|
||||
int count = 0;
|
||||
RListIter *iter;
|
||||
RMetaItem *d;
|
||||
|
||||
r_list_foreach (m->data, iter, d) {
|
||||
if (d->type == type || type == R_META_ANY) {
|
||||
printmetaitem (m, d);
|
||||
|
@ -1,6 +1,5 @@
|
||||
/* radare - LGPL - Copyright 2010 */
|
||||
/* nibble<.ds@gmail.com> */
|
||||
/* pancake<nopcode.org> */
|
||||
/* radare - LGPL - Copyright 2010-2011 */
|
||||
/* nibble<.ds@gmail.com> + pancake<nopcode.org> */
|
||||
|
||||
#include <r_anal.h>
|
||||
#include <r_util.h>
|
||||
@ -203,16 +202,11 @@ R_API RAnalVarAccess *r_anal_var_access_get(RAnal *anal, RAnalVar *var, ut64 fro
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
// XXX: move into core_anal?
|
||||
R_API int r_anal_var_list_show(RAnal *anal, RAnalFcn *fcn, ut64 addr) {
|
||||
R_API void r_anal_var_list_show(RAnal *anal, RAnalFcn *fcn, ut64 addr) {
|
||||
RAnalVar *v;
|
||||
RListIter *iter;
|
||||
|
||||
if (!fcn || !fcn->vars) {
|
||||
eprintf ("No function here\n");
|
||||
return R_FALSE;
|
||||
}
|
||||
if (fcn && fcn->vars)
|
||||
r_list_foreach (fcn->vars, iter, v) {
|
||||
if (addr == 0 || (addr >= v->addr && addr <= v->eaddr)) {
|
||||
//ut32 value = r_var_dbg_read(v->delta);
|
||||
@ -233,20 +227,14 @@ R_API int r_anal_var_list_show(RAnal *anal, RAnalFcn *fcn, ut64 addr) {
|
||||
eprintf ("\n"); //r_cons_newline();
|
||||
}
|
||||
}
|
||||
|
||||
return R_TRUE;
|
||||
}
|
||||
|
||||
/* 0,0 to list all */
|
||||
R_API int r_anal_var_list(RAnal *anal, RAnalFcn *fcn, ut64 addr, int delta) {
|
||||
R_API void r_anal_var_list(RAnal *anal, RAnalFcn *fcn, ut64 addr, int delta) {
|
||||
RAnalVarAccess *x;
|
||||
RAnalVar *v;
|
||||
RListIter *iter, *iter2;
|
||||
|
||||
if (!fcn || !fcn->vars) {
|
||||
eprintf ("No function here\n");
|
||||
return R_FALSE;
|
||||
}
|
||||
if (fcn && fcn->vars)
|
||||
r_list_foreach (fcn->vars, iter, v) {
|
||||
if (addr == 0 || (addr >= v->addr && addr <= v->eaddr)) {
|
||||
eprintf ("0x%08llx - 0x%08llx type=%s type=%s name=%s delta=%d array=%d\n",
|
||||
@ -257,6 +245,4 @@ R_API int r_anal_var_list(RAnal *anal, RAnalFcn *fcn, ut64 addr, int delta) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -421,9 +421,9 @@ R_API char* r_anal_reflines_str(struct r_anal_t *anal, struct r_anal_refline_t *
|
||||
ut64 addr, int opts);
|
||||
R_API int r_anal_reflines_middle(RAnal *anal, RAnalRefline *list, ut64 addr, int len);
|
||||
|
||||
/* TO MOVE into r_core */
|
||||
R_API int r_anal_var_list_show(RAnal *anal, RAnalFcn *fcn, ut64 addr);
|
||||
R_API int r_anal_var_list(RAnal *anal, RAnalFcn *fcn, ut64 addr, int delta);
|
||||
/* TODO move to r_core */
|
||||
R_API void r_anal_var_list_show(RAnal *anal, RAnalFcn *fcn, ut64 addr);
|
||||
R_API void r_anal_var_list(RAnal *anal, RAnalFcn *fcn, ut64 addr, int delta);
|
||||
|
||||
// calling conventions API
|
||||
R_API RAnalCC* r_anal_cc_new ();
|
||||
|
Loading…
Reference in New Issue
Block a user