From 05e1e2e7d573c2426553a3ff5b163565214e0814 Mon Sep 17 00:00:00 2001 From: pancake Date: Tue, 25 Jul 2023 17:44:18 +0200 Subject: [PATCH] Enumerate any kind of refs/xrefs not just call/code ones ##zignatures --- libr/anal/sign.c | 28 ++++++++++++++-------------- libr/anal/xrefs.c | 2 +- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/libr/anal/sign.c b/libr/anal/sign.c index 8364ec5e71..f30d5f91bf 100644 --- a/libr/anal/sign.c +++ b/libr/anal/sign.c @@ -32,14 +32,12 @@ const char *getRealRef(RCore *core, ut64 off) { return NULL; } -int list_str_cmp (const void *a, const void *b) { +static int list_str_cmp(const void *a, const void *b) { // prevent silent failure if RListComparator changes return strcmp ((const char *)a, (const char *)b); } R_API RList *r_sign_fcn_xrefs(RAnal *a, RAnalFunction *fcn) { - RAnalRef *refi = NULL; - r_return_val_if_fail (a && fcn, NULL); RCore *core = a->coreb.core; @@ -49,20 +47,22 @@ R_API RList *r_sign_fcn_xrefs(RAnal *a, RAnalFunction *fcn) { } RList *ret = r_list_newf ((RListFree) free); - RVecAnalRef *xrefs = r_anal_function_get_xrefs (fcn); + RVecAnalRef *xrefs = r_anal_xrefs_get (a, fcn->addr); if (!xrefs) { return ret; } + RAnalRef *refi; R_VEC_FOREACH (xrefs, refi) { - RAnalRefType rt = R_ANAL_REF_TYPE_MASK (refi->type); - if (rt == R_ANAL_REF_TYPE_CODE || rt == R_ANAL_REF_TYPE_CALL) { - const char *flag = getRealRef (core, refi->addr); + // RAnalRefType rt = R_ANAL_REF_TYPE_MASK (refi->type); + // if (rt == R_ANAL_REF_TYPE_CODE || rt == R_ANAL_REF_TYPE_CALL) { + const char *flag = get_xrefname (core, refi->addr); if (flag) { - r_list_append (ret, r_str_new (flag)); + r_list_append (ret, strdup (flag)); } - } + // } } + // r_list_uniq (ret, (RListComparatorItem)list_str_cmp); RVecAnalRef_free (xrefs); return ret; } @@ -85,13 +85,13 @@ R_API RList *r_sign_fcn_refs(RAnal *a, RAnalFunction *fcn) { } R_VEC_FOREACH (refs, refi) { - RAnalRefType rt = R_ANAL_REF_TYPE_MASK (refi->type); - if (rt == R_ANAL_REF_TYPE_CODE || rt == R_ANAL_REF_TYPE_CALL) { - const char *flag = getRealRef (core, refi->addr); + // RAnalRefType rt = R_ANAL_REF_TYPE_MASK (refi->type); + // if (rt == R_ANAL_REF_TYPE_CODE || rt == R_ANAL_REF_TYPE_CALL) { + const char *flag = get_refname (core, refi->addr); if (flag) { - r_list_append (ret, r_str_new (flag)); + r_list_append (ret, strdup (flag)); } - } + // } } RVecAnalRef_free (refs); return ret; diff --git a/libr/anal/xrefs.c b/libr/anal/xrefs.c index 157b0b9ddc..28ea7b0c5a 100644 --- a/libr/anal/xrefs.c +++ b/libr/anal/xrefs.c @@ -297,7 +297,7 @@ R_API RVecAnalRef *r_anal_refs_get(RAnal *anal, ut64 from) { R_API RVecAnalRef *r_anal_xrefs_get(RAnal *anal, ut64 to) { r_return_val_if_fail (anal && anal->rm, NULL); - RVecAnalRef *anal_refs = ref_manager_get_xrefs(anal->rm, to); + RVecAnalRef *anal_refs = ref_manager_get_xrefs (anal->rm, to); if (!anal_refs || RVecAnalRef_empty (anal_refs)) { RVecAnalRef_free (anal_refs); return NULL;