def collect(self): for item in self.cg.items: if item.op is ida_hexrays.cot_var: name = get_expr_name(item) if item.ea != UNDEF_ADDR: self.addresses[name].add(item.ea) else: item_id = self.cg.reverse[item] ea = self.cg.get_pred_ea(item_id) if ea != UNDEF_ADDR: self.addresses[name].add(ea)
def visit_expr(self, e): global var_id if e.op is ida_hexrays.cot_var: # Save original name of variable original_name = get_expr_name(e) if not sentinel_vars.match(original_name): # Save names varnames[var_id] = (original_name, original_name) # Rename variables to @@VAR_[id]@@[orig name]@@[orig name] self.func.get_lvars()[e.v.idx].name = \ '@@VAR_' + str(var_id) + '@@' + original_name + '@@' + original_name var_id += 1 return self.process(e)
def visit_expr(self, e): if e.op is ida_hexrays.cot_var: original_name = get_expr_name(e) if original_name in self.renamings: new_name = self.renamings[original_name] if oldvarnames[original_name] != new_name: print("Renaming %s to %s" % (oldvarnames[original_name], new_name)) # This one refreshes the pseudo-code window self.vuu.rename_lvar(self.vuu.cfunc.get_lvars()[e.v.idx], str(new_name), True) # This one stops us from renaming the same variable # over and over. Otherwise it's not needed. self.func.get_lvars()[e.v.idx].name = str(new_name) return 0
def visit_expr(self, e): global var_id if e.op is ida_hexrays.cot_var: # Save original name of variable original_name = get_expr_name(e) if not sentinel_vars.match(original_name): # Rename variables to @@VAR_[id]@@[orig name]@@[orig name] new_name = '@@VAR_' + str( var_id) + '@@' + original_name + '@@' + original_name self.vuu.rename_lvar(self.vuu.cfunc.get_lvars()[e.v.idx], str(new_name), True) # This is needed so that the NN graph sees the new # name without visiting the entire expression again. self.func.get_lvars()[e.v.idx].name = str(new_name) varnames[original_name] = new_name oldvarnames[new_name] = original_name var_id += 1 return self.process(e)
def visit_expr(self, e): global var_id if e.op is ida_hexrays.cot_var: # Save original name of variable original_name = get_expr_name(e) if not sentinel_vars.match(original_name): # Get new name of variable addresses = frozenset(self.addresses[original_name]) if addresses in varmap and varmap[addresses] != '::NONE::': new_name = varmap[addresses] else: new_name = original_name # Save names varnames[var_id] = (original_name, new_name) # Rename variables to @@VAR_[id]@@[orig name]@@[new name] self.func.get_lvars()[e.v.idx].name = '@@VAR_' + str( var_id) + '@@' + original_name + '@@' + new_name var_id += 1 return self.process(e)
def collect_vars(self): rev_dict = defaultdict(set) for n in range(len(self.items)): item = self.items[n] if item.op is ida_hexrays.cot_var: name = get_expr_name(item.cexpr) if not hexrays_vars.match(name): if item.ea != UNDEF_ADDR: rev_dict[name].add(item.ea) else: ea = self.get_pred_ea(n) if ea != UNDEF_ADDR: rev_dict[name].add(ea) # ::NONE:: is a sentinel value used to indicate that two different # variables map to the same set of addresses. This happens in small # functions that use all of their arguments to call another function. for name, addrs in rev_dict.items(): addrs = frozenset(addrs) if (addrs in varmap): varmap[addrs] = '::NONE::' else: varmap[addrs] = name