Export fcnsign from t* to asf

This commit is contained in:
pancake 2015-10-30 03:34:40 +01:00
parent 72b27776d7
commit c04256f39f
2 changed files with 52 additions and 4 deletions

View File

@ -2107,7 +2107,9 @@ static void cmd_asf(RCore *core, const char *input) {
} else {
ret = sdb_querys (core->anal->sdb_fcnsign, NULL, 0, "*");
}
r_cons_printf ("%s\n", ret);
if (ret && *ret)
r_cons_printf ("%s\n", ret);
free (ret);
}
static void cmd_anal_syscall(RCore *core, const char *input) {

View File

@ -31,6 +31,54 @@ static int sdbforcb (void *p, const char *k, const char *v) {
return 1;
}
static int typelist (void *p, const char *k, const char *v) {
#define DB core->anal->sdb_types
RCore *core = (RCore*)p;
int i;
if (!strcmp (v, "func")) {
const char *rv = sdb_const_get (DB,
sdb_fmt (0, "func.%s.ret", k), 0);
r_cons_printf ("# %s %s(", rv, k);
for (i=0; i<16; i++) {
char *av = sdb_get (DB,
sdb_fmt (0, "func.%s.arg.%d", k, i), 0);
if (!av) break;
r_str_replace_char (av, ',', ' ');
r_cons_printf ("%s%s", i?", ":"", av);
free (av);
}
r_cons_printf (");\n");
// signature in pf for asf
r_cons_printf ("asf %s=", k);
// formats
for (i=0; i<16; i++) {
const char *fmt;
char *comma, *av = sdb_get (DB,
sdb_fmt (0, "func.%s.arg.%d", k, i), 0);
if (!av) break;
comma = strchr (av, ',');
if (comma) *comma = 0;
fmt = sdb_const_get (DB, sdb_fmt (0, "type.%s", av), 0);
r_cons_printf ("%s", fmt);
if (comma) *comma = ',';
free (av);
}
// names
for (i=0; i<16; i++) {
const char *fmt;
char *comma, *av = sdb_get (DB,
sdb_fmt (0, "func.%s.arg.%d", k, i), 0);
if (!av) break;
comma = strchr (av, ',');
if (comma) *comma++ = 0;
r_cons_printf (" %s", comma);
free (av);
}
r_cons_newline();
}
return 1;
}
static int cmd_type(void *data, const char *input) {
RCore *core = (RCore*)data;
@ -159,12 +207,10 @@ static int cmd_type(void *data, const char *input) {
}
}
break;
#if 0
// t* - list all types in 'pf' syntax
case '*':
r_anal_type_list (core->anal, R_ANAL_TYPE_ANY, 1);
sdb_foreach (core->anal->sdb_types, typelist, core);
break;
#endif
case 0:
sdb_foreach (core->anal->sdb_types, sdbforcb, core);
break;