def __init__(self, bytecode=None, instructions=None, static_analysis=True): """ TODO """ if not bytecode and not instructions: raise Exception("No bytecode/instructions provided") if instructions: self.instructions = instructions else: # disassemble bytecode to instructions disasm = NeoDisassembler(bytecode) self.instructions = disasm.disassemble() self.static_analysis = static_analysis self.basicblocks = list() self.functions = list() self.edges = list() if self.static_analysis: self.run_static_analysis()
from octopus.platforms.NEO.disassembler import NeoDisassembler # lock contract file_name = "examples/NEO/samples/Lock.bytecode" # read file with open(file_name) as f: bytecode = f.read() disasm = NeoDisassembler() print(disasm.disassemble(bytecode, r_format='text')) # PUSH6 # NEWARRAY # TOALTSTACK # FROMALTSTACK # DUP # TOALTSTACK # PUSH0 # PUSH2 # ROLL # SETITEM # FROMALTSTACK # .... # PICKITEM # NOP # FROMALTSTACK # DROP # RET