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)
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)
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)
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)
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)