Exemplo n.º 1
0
 def push_comments(self,
                   comments: Dict[int, str],
                   state: State = None) -> None:
     # Push comments
     for addr, comment in comments.items():
         comm_addr = int(addr)
         state.set_comment(comm_addr, comment)
Exemplo n.º 2
0
 def remove_all_comments(self,
                         bn_func: binaryninja.function.Function,
                         user: Optional[str] = None,
                         state: State = None) -> None:
     for _, ins_addr in bn_func.instructions:
         if ins_addr in state.comments:
             state.remove_comment(ins_addr)
Exemplo n.º 3
0
 def push_function(self,
                   bn_func: binaryninja.function.Function,
                   state: State = None):
     # Push function
     func = binsync.data.Function(int(
         bn_func.start))  # force conversion from long to int
     func.name = bn_func.name
     state.set_function(func)
Exemplo n.º 4
0
    def push_stack_variable(self,
                            bn_func: binaryninja.Function,
                            stack_var: binaryninja.function.Variable,
                            state: State = None):
        if stack_var.source_type != VariableSourceType.StackVariableSourceType:
            raise TypeError("Unexpected source type %s of the variable %r." %
                            (stack_var.source_type, stack_var))

        type_str = stack_var.type.get_string_before_name()
        size = stack_var.type.width
        v = StackVariable(stack_var.storage, StackOffsetType.BINJA,
                          stack_var.name, type_str, size, bn_func.start)
        state.set_stack_variable(bn_func.start, stack_var.storage, v)
Exemplo n.º 5
0
 def pull_stack_variables(self,
                          bn_func,
                          user: Optional[str] = None,
                          state: State = None) -> Dict[int, StackVariable]:
     try:
         return dict(state.get_stack_variables(bn_func.start))
     except KeyError:
         return {}
Exemplo n.º 6
0
    def pull_comments(self,
                      start_addr,
                      end_addr: Optional[int] = None,
                      user: Optional[str] = None,
                      state: State = None) -> Optional[Iterable[str]]:
        """
        Pull comments downwards.

        :param bv:
        :param start_addr:
        :param end_addr:
        :param user:
        :return:
        """
        return state.get_comments(start_addr, end_addr=end_addr)
Exemplo n.º 7
0
    def pull_comment(self,
                     addr,
                     user: Optional[str] = None,
                     state: State = None) -> Optional[str]:
        """
        Pull comments downwards.

        :param bv:
        :param start_addr:
        :param end_addr:
        :param user:
        :return:
        """
        try:
            return state.get_comment(addr)
        except KeyError:
            return None
Exemplo n.º 8
0
    def pull_function(self,
                      bn_func,
                      user: Optional[str] = None,
                      state: State = None) -> Optional[Function]:
        """
        Pull a function downwards.

        :param bv:
        :param bn_func:
        :param user:
        :return:
        """

        # pull function
        try:
            func = state.get_function(int(bn_func.start))
            return func
        except KeyError:
            return None
Exemplo n.º 9
0
 def pull_stack_variable(self,
                         bn_func,
                         offset: int,
                         user: Optional[str] = None,
                         state: State = None) -> StackVariable:
     return state.get_stack_variable(bn_func.start, offset)
Exemplo n.º 10
0
 def push_patch(self, patch, state: State = None):
     state.set_patch(patch.offset, patch)