* Code cleanup in r_anal (-30LOC)

This commit is contained in:
pancake 2011-02-18 10:08:24 +01:00
parent 15ca02a355
commit 06f91e2a28
8 changed files with 57 additions and 86 deletions

View File

@ -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));

View File

@ -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 *

View File

@ -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;

View File

@ -1,4 +1,4 @@
/* radare - LGPL - Copyright 2010 */
/* radare - LGPL - Copyright 2010-2011 */
/* pancake<nopcode.org> */
#include <r_anal.h>

View File

@ -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;

View File

@ -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);

View File

@ -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;
}

View File

@ -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 ();