Example #1
0
def check_instruction_set_for_if_else(instruction, curr_node,
                                      set_of_instructions, num, row, last_node,
                                      last_node_state):
    decompiler_data = DecompilerData()
    if instruction[0][0] == ".":
        decompiler_data.label = curr_node
        decompiler_data.parents_of_label = curr_node.parent
        decompiler_data.flag_of_else = True
    elif ("andn2" in instruction[0] or
          (num < len(set_of_instructions) and "branch" in set_of_instructions[num])) \
            and decompiler_data.flag_of_else:
        if "andn2" not in instruction[0] and "branch" in set_of_instructions[
                num]:
            set_of_instructions.insert(num + 1, row)
        return set_of_instructions, last_node, last_node_state
    elif decompiler_data.flag_of_else and "cbranch" in instruction[0]:
        last_node, last_node_state = change_cfg_for_else_structure(
            curr_node, instruction)
    else:
        decompiler_data.flag_of_else = False
    return set_of_instructions, last_node, last_node_state
Example #2
0
def change_cfg_for_else_structure(curr_node, instruction):
    decompiler_data = DecompilerData()
    for parents_of_label in decompiler_data.parents_of_label:
        parents_of_label.children.remove(decompiler_data.label)
    last_node = decompiler_data.parents_of_label[1]
    last_node_state = copy.deepcopy(decompiler_data.parents_of_label[1].state)
    decompiler_data.from_node[instruction[1]].remove(curr_node)
    from_node = instruction[1]
    if decompiler_data.from_node.get(from_node, None) is None:
        decompiler_data.from_node[from_node] = []
    for parents_of_label in decompiler_data.parents_of_label:
        if parents_of_label != decompiler_data.parents_of_label[1]:
            decompiler_data.from_node[from_node].append(parents_of_label)
    decompiler_data.flag_of_else = False
    return last_node, last_node_state