Example #1
0
 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)
Example #2
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):
             # 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)
Example #3
0
    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
Example #4
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)
Example #5
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):
             # 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)
Example #6
0
 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