Пример #1
0
    def __add_func_name(self, arg_expr):
        new_name = idc.get_strlit_contents(arg_expr.obj_ea)
        if not idaapi.is_valid_typename(new_name):
            logger.warn("Argument has a weird name `{}` at {}".format(
                new_name,
                helper.to_hex(helper.find_asm_address(arg_expr,
                                                      self.parents))))
            return

        self.__possible_names.add(new_name)
Пример #2
0
 def visit_expr(self, expr):
     if expr.op == idaapi.cot_call and expr.x.op == idaapi.cot_obj and expr.x.obj_ea == self.__func_addr:
         arg_expr = expr.a[self.__arg_idx]
         if arg_expr.op != idaapi.cot_obj:
             cexpr_ea = helper.find_asm_address(expr, self.parents)
             logger.error("Argument is a not string at {}".format(
                 helper.to_hex(cexpr_ea)))
             return 1
         self.__add_func_name(arg_expr)
     return 0
Пример #3
0
 def _manipulate(self, cexpr, obj):
     if obj.id == api.SO_LOCAL_VARIABLE:
         parent = self.parent_expr()
         if parent.op == idaapi.cot_asg:
             alloc_obj = api.MemoryAllocationObject.create(
                 self._cfunc,
                 self.parent_expr().y)
             if alloc_obj:
                 self._data.append(
                     [alloc_obj.ea, obj.name,
                      self._get_line(), "HEAP"])
         elif self.parent_expr().op == idaapi.cot_ref:
             self._data.append([
                 helper.find_asm_address(cexpr, self.parents), obj.name,
                 self._get_line(), "STACK"
             ])
     elif obj.id == api.SO_GLOBAL_OBJECT:
         self._data.append([
             helper.find_asm_address(cexpr, self.parents), obj.name,
             self._get_line(), "GLOBAL"
         ])
Пример #4
0
    def __add_func_name(self, arg_expr):
        new_name = idc.get_strlit_contents(arg_expr.obj_ea)
        if type(new_name) is not str:
            # convert bytes to str (python 3)
            new_name = new_name.decode('ascii')
        if not idaapi.is_valid_typename(new_name):
            logger.warn("Argument has a weird name `{}` at {}".format(
                new_name,
                helper.to_hex(helper.find_asm_address(arg_expr,
                                                      self.parents))))
            return

        self.__possible_names.add(new_name)