How to use the gilgamesh.disassembly.parser.Token function in gilgamesh

To help you get started, we’ve selected a few gilgamesh examples, based on popular ways it is used in public projects.

Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.

github AndreaOrru / gilgamesh / gilgamesh / disassembly / container.py View on Github external
def edit(self) -> None:
        # Save the subroutines' disassembly in a temporary file.
        original_tokens: List[List[List[Token]]] = []
        line_n = 1

        with NamedTemporaryFile(mode="w", suffix=".asm", delete=False) as f:
            for disassembly in self.disassemblies:
                f.write(self.HEADER)
                line_n += 1

                disassembly.base_line_n = line_n
                sub_n_lines, text, tokens = disassembly._get_text()
                original_tokens.append(tokens)

                f.write(text)
                line_n += sub_n_lines
                f.write("\n\n\n")
                line_n += 3
            filename = f.name
github AndreaOrru / gilgamesh / gilgamesh / disassembly / disassembly.py View on Github external
def add_line(*args) -> None:
            add(*args)
            tokens.append(Token(T.NEWLINE))
github AndreaOrru / gilgamesh / gilgamesh / disassembly / parser.py View on Github external
def add(self, *args):
        self.tokens[-1].append(Token(*args))
github AndreaOrru / gilgamesh / gilgamesh / disassembly / parser.py View on Github external
def __init__(self, text: str, base_line_n: int):
        self.lines = text.splitlines()
        self.line_idx = 0
        self.base_line_n = base_line_n
        self.tokens: List[List[Token]] = []
github AndreaOrru / gilgamesh / gilgamesh / disassembly / disassembly.py View on Github external
label = self.log.get_label(instr.pc, instr.subroutine_pc)
        if label:
            if instr.pc in self.log.jump_table_targets:
                add_line(T.JUMP_TABLE_LABEL, label)
            else:
                add_line(T.LABEL, label)

        # Stack manipulation.
        if verbose and instr.stack_manipulation != StackManipulation.NONE:
            if instr.stack_manipulation == StackManipulation.CAUSES_UNKNOWN_STATE:
                add_line(T.FATAL_STACK_MANIPULATION_HEADER)
            else:
                add_line(T.STACK_MANIPULATION_HEADER)

        # Operation + Operand.
        tokens.append(Token(T.OPERATION, instr.name))
        if instr.argument_alias:
            if instr.argument_alias in hw_registers:
                add(T.HW_REGISTER, instr.argument_alias)
            elif instr.argument_alias in self.preview_excluded_labels:
                add(T.HIGHLIGHTED_OPERAND_LABEL, instr.argument_alias)
            elif instr.pc in self.log.jump_table_targets:
                add(T.JUMP_TABLE_OPERAND_LABEL, instr.argument_alias)
            else:
                add(T.OPERAND_LABEL, instr.argument_alias)
        else:
            add(T.OPERAND, instr.argument_string)
        # PC + Comment.
        add(T.PC, "${:06X}".format(instr.pc))
        comment = self.log.comments.get(instr.pc, self._get_default_comment(instr))
        add_line(T.COMMENT, comment)