// avr 1,4 counter @ var_addr R_API int r_anal_var_rename (RAnal *a, ut64 var_addr, int scope, int delta, const char *new_name) { ut32 hash; char key[128], *old_name; if (!r_anal_var_check_name (new_name)) return 0; if (scope>0) { // local SETKEY ("var.0x%"PFMT64x".%d.%d", var_addr, scope, delta); old_name = sdb_array_get (DB, key, R_ANAL_VAR_SDB_NAME, 0); if (!old_name) return 0; SETKEY ("var.%s.%d", old_name, scope); sdb_unset (DB, key, 0); free (old_name); SETKEY ("var.%s.%d", new_name, scope); sdb_num_set (DB, key, var_addr, 0); SETKEY ("var.0x%x.%d.%d", hash, scope, delta); sdb_array_set (DB, key, R_ANAL_VAR_SDB_NAME, new_name, 0); } else { // global SETKEY ("var.0x%"PFMT64x, var_addr); old_name = sdb_array_get (DB, key, R_ANAL_VAR_SDB_NAME, 0); if (!old_name) return 0; SETKEY ("var.%s", old_name); sdb_unset (DB, key, 0); free (old_name); SETKEY ("var.%s.%d", new_name, scope); sdb_num_set (DB, key, var_addr, 0); SETKEY ("var.0x%x.%d.%d", hash, scope, delta); sdb_array_set (DB, key, R_ANAL_VAR_SDB_NAME, new_name, 0); } // var.sdb_hash(old_name)=var_addr.scope.delta return 1; }
R_API RList* r_type_get_enum (Sdb *TDB, const char *name) { char *p, var[130]; int n; if (r_type_kind (TDB, name) != R_TYPE_ENUM) { return NULL; } RList *res = r_list_new (); snprintf (var, sizeof (var), "enum.%s", name); for (n = 0; (p = sdb_array_get (TDB, var, n, NULL)); n++) { RTypeEnum *member = R_NEW0 (RTypeEnum); if (member) { char *var2 = r_str_newf ("%s.%s", var, p); if (var2) { char *val = sdb_array_get (TDB, var2, 0, NULL); if (val) { member->name = p; member->val = val; r_list_append (res, member); } else { free (member); free (var2); } } else { free (member); } } } return res; }
// afvn local_48 counter R_API int r_anal_var_rename (RAnal *a, ut64 var_addr, int scope, char kind, const char *old_name, const char *new_name) { char key[128]; char *stored_name; int delta; if (!r_anal_var_check_name (new_name)) return 0; if (scope>0) { // local SETKEY ("var.0x%"PFMT64x".%c.%d.%s", var_addr, kind, scope, old_name); delta = sdb_num_get (DB, key, 0); if (!delta) return 0; sdb_unset (DB, key, 0); SETKEY ("var.0x%"PFMT64x".%c.%d.%s", var_addr, kind, scope, new_name); sdb_num_set (DB, key, delta, 0); SETKEY ("var.0x%"PFMT64x".%c.%d.%d", var_addr, kind, scope, delta); sdb_array_set (DB, key, R_ANAL_VAR_SDB_NAME, new_name, 0); } else { // global SETKEY ("var.0x%"PFMT64x, var_addr); stored_name = sdb_array_get (DB, key, R_ANAL_VAR_SDB_NAME, 0); if (!stored_name) return 0; if (stored_name != old_name) return 0; sdb_unset (DB, key, 0); SETKEY ("var.0x%"PFMT64x, var_addr); sdb_array_set (DB, key, R_ANAL_VAR_SDB_NAME, new_name, 0); } // var.sdb_hash(old_name)=var_addr.scope.delta return 1; }
static char *meta_inrange_get (RAnal *a, ut64 addr, int size) { char key[64]; ut64 base, base2; base = META_RANGE_BASE (addr); base2 = META_RANGE_BASE (addr+size); // return string array of all the offsets where there are stuff for (; base<base2; base += META_RANGE_SIZE) { snprintf (key, sizeof (key)-1, "range.0x%"PFMT64x, base); sdb_array_get (DB, key, 0, 0); } return NULL; }