mirror of
https://github.com/radareorg/radare2.git
synced 2025-02-03 20:22:38 +00:00
Fix #3289 - Fix graph arg/local in JSON
This commit is contained in:
parent
f10c8ec075
commit
0cf36cbc6d
@ -253,6 +253,38 @@ R_API int r_anal_fcn_var_del_bydelta (RAnal *a, ut64 fna, const char kind, int s
|
||||
return false;
|
||||
}
|
||||
|
||||
R_API int r_anal_var_count(RAnal *a, RAnalFunction *fcn, int kind) {
|
||||
char *varlist;
|
||||
int count = 0;
|
||||
RList *list = r_list_new ();
|
||||
if (!a|| !fcn)
|
||||
return 0;
|
||||
if (!kind) kind = 'v'; // by default show vars
|
||||
varlist = sdb_get (DB, sdb_fmt (0, "fcn.0x%"PFMT64x".%c",
|
||||
fcn->addr, kind), 0);
|
||||
if (varlist) {
|
||||
char *next, *ptr = varlist;
|
||||
if (varlist && *varlist) {
|
||||
do {
|
||||
struct VarType vt;
|
||||
char *word = sdb_anext (ptr, &next);
|
||||
char *vardef = sdb_get (DB, sdb_fmt (1,
|
||||
"var.0x%"PFMT64x".%c.%s",
|
||||
fcn->addr, kind, word), 0);
|
||||
int delta = atoi (word+2);
|
||||
if (vardef) {
|
||||
count ++;
|
||||
} else {
|
||||
eprintf ("Cannot find '%s'\n", word);
|
||||
}
|
||||
ptr = next;
|
||||
} while (next);
|
||||
}
|
||||
}
|
||||
free (varlist);
|
||||
return count;
|
||||
}
|
||||
|
||||
R_API RList *r_anal_var_list(RAnal *a, RAnalFunction *fcn, int kind) {
|
||||
char *varlist;
|
||||
RList *list = r_list_new ();
|
||||
|
@ -597,10 +597,10 @@ static void core_anal_graph_nodes(RCore *core, RAnalFunction *fcn, int opts) {
|
||||
sdb_set (DB, "name", fcn->name, 0);
|
||||
sdb_set (DB, "ename", ename, 0);
|
||||
free (ename);
|
||||
if (fcn->nargs>0)
|
||||
if (fcn->nargs > 0)
|
||||
sdb_num_set (DB, "nargs", fcn->nargs, 0);
|
||||
sdb_num_set (DB, "size", fcn->size, 0);
|
||||
if (fcn->stack>0)
|
||||
if (fcn->stack > 0)
|
||||
sdb_num_set (DB, "stack", fcn->stack, 0);
|
||||
sdb_set (DB, "pos", "0,0", 0); // needs to run layout
|
||||
sdb_set (DB, "type", r_anal_fcn_type_tostring (fcn->type), 0);
|
||||
@ -610,7 +610,8 @@ static void core_anal_graph_nodes(RCore *core, RAnalFunction *fcn, int opts) {
|
||||
r_cons_printf ("{\"name\":\"%s\"", fcn->name);
|
||||
r_cons_printf (",\"offset\":%"PFMT64d, fcn->addr);
|
||||
r_cons_printf (",\"ninstr\":%"PFMT64d, fcn->ninstr);
|
||||
r_cons_printf (",\"nargs\":%"PFMT64d, fcn->nargs);
|
||||
r_cons_printf (",\"nargs\":%d", r_anal_var_count (core->anal, fcn, 'a'));
|
||||
r_cons_printf (",\"locals\":%d", r_anal_var_count (core->anal, fcn, 'v'));
|
||||
r_cons_printf (",\"size\":%d", fcn->size);
|
||||
r_cons_printf (",\"stack\":%d", fcn->stack);
|
||||
r_cons_printf (",\"type\":%d", fcn->type); // TODO: output string
|
||||
|
@ -1221,6 +1221,7 @@ R_API int r_anal_fcn_var_add (RAnal *a, ut64 fna, int scope, int delta, const ch
|
||||
R_API int r_anal_fcn_var_del_byindex (RAnal *a, ut64 fna, const char kind,
|
||||
int scope, ut32 idx);
|
||||
/* args */
|
||||
R_API int r_anal_var_count(RAnal *a, RAnalFunction *fcn, int kind);
|
||||
|
||||
/* vars // globals. not here */
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user