예제 #1
0
    def _dump_bb_ex(self, basic_block, print_ir=False):
        lines = []

        base_addr = basic_block.instrs[0].address

        formatter = HtmlFormatter()
        formatter.noclasses = True
        formatter.nowrap = True

        asm_mnemonic_max_width = 0

        for dinstr in basic_block:
            if len(dinstr.asm_instr.mnemonic) > asm_mnemonic_max_width:
                asm_mnemonic_max_width = len(dinstr.asm_instr.mnemonic)

        for instr in basic_block.instrs:
            asm_instr = self._dump_instr(instr.asm_instr, asm_mnemonic_max_width + 1, fill_char=" ")
            asm_instr = highlight(asm_instr, NasmLexer(), formatter)
            asm_instr = asm_instr.replace("span", "font")
            asm_instr = asm_instr.replace('style="color: ', 'color="')

            lines += ["<tr><td align='left'>    %08x [%02d] %s </td></tr>" % (instr.address, instr.asm_instr.size, asm_instr)]

            if print_ir:
                for ir_instr in instr.ir_instrs:
                    lines += ["              " + str(ir_instr) + "\\l"]

        return "".join(lines)
예제 #2
0
    def _dump_bb_ex(self, basic_block, print_ir=False):
        lines = []

        base_addr = basic_block.instrs[0].address

        formatter = HtmlFormatter()
        formatter.noclasses = True
        formatter.nowrap = True

        asm_mnemonic_max_width = 0

        for dinstr in basic_block:
            if len(dinstr.asm_instr.mnemonic) > asm_mnemonic_max_width:
                asm_mnemonic_max_width = len(dinstr.asm_instr.mnemonic)

        for instr in basic_block.instrs:
            asm_instr = self._dump_instr(instr.asm_instr,
                                         asm_mnemonic_max_width + 1,
                                         fill_char=" ")
            asm_instr = highlight(asm_instr, NasmLexer(), formatter)
            asm_instr = asm_instr.replace("span", "font")
            asm_instr = asm_instr.replace('style="color: ', 'color="')

            lines += [
                "<tr><td align='left'>    %08x [%02d] %s </td></tr>" %
                (instr.address, instr.asm_instr.size, asm_instr)
            ]

            if print_ir:
                for ir_instr in instr.ir_instrs:
                    lines += ["              " + str(ir_instr) + "\\l"]

        return "".join(lines)
예제 #3
0
파일: unflat.py 프로젝트: bin2415/unflat
def render_asm(instr, address):
    formatter = HtmlFormatter()
    formatter.noclasses = True
    formatter.nowrap = True

    #asm_str = instr.prefix + " " if instr.prefix else ""
    asm_str = instr

    asm_str = highlight(asm_str, NasmLexer(), formatter)
    asm_str = asm_str.replace("span", "font")
    asm_str = asm_str.replace('style="color: ', 'color="')
    asm_str = asm_str.replace('style="border: 1px solid ', 'color="')

    asm_tpl = "<tr><td align='left'>{address:08x} {assembly} </td></tr>"
    return asm_tpl.format(address=address, assembly=asm_str)
예제 #4
0
    def _render_asm(self, instr, mnemonic_width, fill_char=""):
        formatter = HtmlFormatter()
        formatter.noclasses = True
        formatter.nowrap = True

        oprnds_str = ", ".join([str(oprnd) for oprnd in instr.operands])

        asm_str  = instr.prefix + " " if instr.prefix else ""
        asm_str += instr.mnemonic + fill_char * (mnemonic_width - len(instr.mnemonic))
        asm_str += " " + oprnds_str if oprnds_str else ""

        # TODO Highlight for ARM too.
        asm_str = highlight(asm_str, NasmLexer(), formatter)
        asm_str = asm_str.replace("span", "font")
        asm_str = asm_str.replace('style="color: ', 'color="')

        return self.asm_tpl.format(address=instr.address, size=instr.size, assembly=asm_str)
예제 #5
0
    def _render_asm(self, instr, mnemonic_width, options, fill_char=""):
        formatter = HtmlFormatter()
        formatter.noclasses = True
        formatter.nowrap = True

        oprnds_str = ", ".join([oprnd.to_string(**options) for oprnd in instr.operands])

        asm_str  = instr.prefix + " " if instr.prefix else ""
        asm_str += instr.mnemonic + fill_char * (mnemonic_width - len(instr.mnemonic))
        asm_str += " " + oprnds_str if oprnds_str else ""

        # TODO Highlight for ARM too.
        asm_str = highlight(asm_str, NasmLexer(), formatter)
        asm_str = asm_str.replace("span", "font")
        asm_str = asm_str.replace('style="color: ', 'color="')
        asm_str = asm_str.replace('style="border: 1px solid ', 'color="')

        return self.asm_tpl.format(address=instr.address, size=instr.size, assembly=asm_str)