[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/Vector35/binaryninja-api/dev/python/examples/make_code.py [Back]  [Original]

from binaryninja.datarender import DataRenderer
from binaryninja.function import DisassemblyTextLine
from binaryninja.enums import TypeClass, HighlightStandardColor
from binaryninja.binaryview import BinaryView
from binaryninja.architecture import InstructionTextToken
from binaryninja.types import Type
from typing import List

import sys
from PySide6.QtGui import QKeySequence
from binaryninjaui import UIActionHandler, UIAction, UIActionContext

class CodeDataRenderer(DataRenderer):
	def __init__(self):
		DataRenderer.__init__(self)
	def perform_is_valid_for_data(self, _, bv: BinaryView, addr: int, type: Type, context: List[str]) -> bool:
		sym = bv.get_symbol_at(addr)
		return sym is not None and sym.name.startswith("CODE_") and type.type_class == TypeClass.ArrayTypeClass
	def perform_get_lines_for_data(self, _, bv: BinaryView, addr: int, type: Type, prefix: List[InstructionTextToken], width: int, context: List[str]) -> List[DisassemblyTextLine]:
		end = addr + len(type)
		result: List[DisassemblyTextLine] = []
		for tokens, size in bv.disassembly_tokens(addr, bv.arch):
			if addr + size > end:
				break
			result.append(DisassemblyTextLine([*tokens], addr, color=HighlightStandardColor.RedHighlightColor))
			addr += size
		return result
	def __del__(self):
		pass

def make_code(bv: BinaryView, start: int, end: int) -> None:
	if bv.get_basic_blocks_at(start):
		return
	if end - start 

Web Proxy Viewer  |  New URL  |  Original Page