Python dis.opname() Examples
The following are 30
code examples of dis.opname().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
dis
, or try the search function
.
Example #1
Source File: pyassem.py From CTFCrackTools-V2 with GNU General Public License v3.0 | 6 votes |
def makeByteCode(self): assert self.stage == CONV self.lnotab = lnotab = LineAddrTable() for t in self.insts: opname = t[0] if len(t) == 1: lnotab.addCode(self.opnum[opname]) else: oparg = t[1] if opname == "SET_LINENO": lnotab.nextLine(oparg) continue hi, lo = twobyte(oparg) try: lnotab.addCode(self.opnum[opname], lo, hi) except ValueError: print opname, oparg print self.opnum[opname], lo, hi raise self.stage = DONE
Example #2
Source File: pyassem.py From CTFCrackTools-V2 with GNU General Public License v3.0 | 6 votes |
def makeByteCode(self): assert self.stage == CONV self.lnotab = lnotab = LineAddrTable() for t in self.insts: opname = t[0] if len(t) == 1: lnotab.addCode(self.opnum[opname]) else: oparg = t[1] if opname == "SET_LINENO": lnotab.nextLine(oparg) continue hi, lo = twobyte(oparg) try: lnotab.addCode(self.opnum[opname], lo, hi) except ValueError: print opname, oparg print self.opnum[opname], lo, hi raise self.stage = DONE
Example #3
Source File: pyassem.py From PokemonGo-DesktopMap with MIT License | 6 votes |
def makeByteCode(self): assert self.stage == CONV self.lnotab = lnotab = LineAddrTable() for t in self.insts: opname = t[0] if len(t) == 1: lnotab.addCode(self.opnum[opname]) else: oparg = t[1] if opname == "SET_LINENO": lnotab.nextLine(oparg) continue hi, lo = twobyte(oparg) try: lnotab.addCode(self.opnum[opname], lo, hi) except ValueError: print opname, oparg print self.opnum[opname], lo, hi raise self.stage = DONE
Example #4
Source File: pyassem.py From CTFCrackTools-V2 with GNU General Public License v3.0 | 6 votes |
def dump(self, io=None): if io: save = sys.stdout sys.stdout = io pc = 0 for t in self.insts: opname = t[0] if opname == "SET_LINENO": print if len(t) == 1: print "\t", "%3d" % pc, opname pc = pc + 1 else: print "\t", "%3d" % pc, opname, t[1] pc = pc + 3 if io: sys.stdout = save
Example #5
Source File: pyassem.py From ironpython2 with Apache License 2.0 | 6 votes |
def dump(self, io=None): if io: save = sys.stdout sys.stdout = io pc = 0 for t in self.insts: opname = t[0] if opname == "SET_LINENO": print if len(t) == 1: print "\t", "%3d" % pc, opname pc = pc + 1 else: print "\t", "%3d" % pc, opname, t[1] pc = pc + 3 if io: sys.stdout = save
Example #6
Source File: pyassem.py From BinderFilter with MIT License | 6 votes |
def dump(self, io=None): if io: save = sys.stdout sys.stdout = io pc = 0 for t in self.insts: opname = t[0] if opname == "SET_LINENO": print if len(t) == 1: print "\t", "%3d" % pc, opname pc = pc + 1 else: print "\t", "%3d" % pc, opname, t[1] pc = pc + 3 if io: sys.stdout = save
Example #7
Source File: pyassem.py From CTFCrackTools-V2 with GNU General Public License v3.0 | 6 votes |
def dump(self, io=None): if io: save = sys.stdout sys.stdout = io pc = 0 for t in self.insts: opname = t[0] if opname == "SET_LINENO": print if len(t) == 1: print "\t", "%3d" % pc, opname pc = pc + 1 else: print "\t", "%3d" % pc, opname, t[1] pc = pc + 3 if io: sys.stdout = save
Example #8
Source File: pyassem.py From medicare-demo with Apache License 2.0 | 6 votes |
def dump(self, io=None): if io: save = sys.stdout sys.stdout = io pc = 0 for t in self.insts: opname = t[0] if opname == "SET_LINENO": print if len(t) == 1: print "\t", "%3d" % pc, opname pc = pc + 1 else: print "\t", "%3d" % pc, opname, t[1] pc = pc + 3 if io: sys.stdout = save
Example #9
Source File: pyassem.py From oss-ftp with MIT License | 6 votes |
def dump(self, io=None): if io: save = sys.stdout sys.stdout = io pc = 0 for t in self.insts: opname = t[0] if opname == "SET_LINENO": print if len(t) == 1: print "\t", "%3d" % pc, opname pc = pc + 1 else: print "\t", "%3d" % pc, opname, t[1] pc = pc + 3 if io: sys.stdout = save
Example #10
Source File: pyassem.py From Splunking-Crime with GNU Affero General Public License v3.0 | 6 votes |
def makeByteCode(self): assert self.stage == CONV self.lnotab = lnotab = LineAddrTable() for t in self.insts: opname = t[0] if len(t) == 1: lnotab.addCode(self.opnum[opname]) else: oparg = t[1] if opname == "SET_LINENO": lnotab.nextLine(oparg) continue hi, lo = twobyte(oparg) try: lnotab.addCode(self.opnum[opname], lo, hi) except ValueError: print opname, oparg print self.opnum[opname], lo, hi raise self.stage = DONE
Example #11
Source File: pyassem.py From PokemonGo-DesktopMap with MIT License | 6 votes |
def dump(self, io=None): if io: save = sys.stdout sys.stdout = io pc = 0 for t in self.insts: opname = t[0] if opname == "SET_LINENO": print if len(t) == 1: print "\t", "%3d" % pc, opname pc = pc + 1 else: print "\t", "%3d" % pc, opname, t[1] pc = pc + 3 if io: sys.stdout = save
Example #12
Source File: pyassem.py From Splunking-Crime with GNU Affero General Public License v3.0 | 6 votes |
def dump(self, io=None): if io: save = sys.stdout sys.stdout = io pc = 0 for t in self.insts: opname = t[0] if opname == "SET_LINENO": print if len(t) == 1: print "\t", "%3d" % pc, opname pc = pc + 1 else: print "\t", "%3d" % pc, opname, t[1] pc = pc + 3 if io: sys.stdout = save
Example #13
Source File: goto.py From python-goto with The Unlicense | 6 votes |
def __init__(self): code = (lambda: x if x else y).__code__.co_code opcode, oparg = struct.unpack_from('BB', code, 2) # Starting with Python 3.6, the bytecode format has changed, using # 16-bit words (8-bit opcode + 8-bit argument) for each instruction, # as opposed to previously 24 bit (8-bit opcode + 16-bit argument) # for instructions that expect an argument and otherwise 8 bit. # https://bugs.python.org/issue26647 if dis.opname[opcode] == 'POP_JUMP_IF_FALSE': self.argument = struct.Struct('B') self.have_argument = 0 # As of Python 3.6, jump targets are still addressed by their # byte unit. This is matter to change, so that jump targets, # in the future might refer to code units (address in bytes / 2). # https://bugs.python.org/issue26647 self.jump_unit = 8 // oparg else: self.argument = struct.Struct('<H') self.have_argument = dis.HAVE_ARGUMENT self.jump_unit = 1
Example #14
Source File: instructions.py From codetransformer with GNU General Public License v2.0 | 6 votes |
def from_opcode(cls, opcode, arg=_no_arg): """ Create an instruction from an opcode and raw argument. Parameters ---------- opcode : int Opcode for the instruction to create. arg : int, optional The argument for the instruction. Returns ------- intsr : Instruction An instance of the instruction named by ``opcode``. """ return type(cls)(opname[opcode], (cls,), {}, opcode=opcode)(arg)
Example #15
Source File: executing.py From executing with MIT License | 6 votes |
def get_instructions(co): code = co.co_code n = len(code) i = 0 extended_arg = 0 while i < n: offset = i c = code[i] op = ord(c) argval = None i = i + 1 if op >= HAVE_ARGUMENT: oparg = ord(code[i]) + ord(code[i + 1]) * 256 + extended_arg extended_arg = 0 i = i + 2 if op == EXTENDED_ARG: extended_arg = oparg * 65536 if op in hasconst: argval = co.co_consts[oparg] yield Instruction(offset, argval, opname[op])
Example #16
Source File: routing.py From recruit with Apache License 2.0 | 6 votes |
def build_op(self, op, arg=None): """Return a byte representation of a Python instruction.""" if isinstance(op, str): op = dis.opmap[op] if arg is None and op >= dis.HAVE_ARGUMENT: raise ValueError("Operation requires an argument: %s" % dis.opname[op]) if arg is not None and op < dis.HAVE_ARGUMENT: raise ValueError("Operation takes no argument: %s" % dis.opname[op]) if arg is None: arg = 0 # Python 3.6 changed the argument to an 8-bit integer, so this # could be a practical consideration if arg >= self.OPARG_SIZE: return self.build_op( "EXTENDED_ARG", arg // self.OPARG_SIZE ) + self.build_op(op, arg % self.OPARG_SIZE) if not self.OPARG_VARI: return bytearray((op, arg)) elif op >= dis.HAVE_ARGUMENT: return bytearray((op, arg % 256, arg // 256)) else: return bytearray((op,))
Example #17
Source File: executing.py From executing with MIT License | 6 votes |
def get_original_instructions(self): result = self.clean_instructions(self.code) # pypy sometimes (when is not clear) # inserts JUMP_IF_NOT_DEBUG instructions in bytecode # If they're not present in our compiled instructions, # ignore them in the original bytecode if not any( inst.opname == "JUMP_IF_NOT_DEBUG" for inst in self.compile_instructions() ): result = [ inst for inst in result if inst.opname != "JUMP_IF_NOT_DEBUG" ] return result
Example #18
Source File: executing.py From executing with MIT License | 6 votes |
def _get_instructions(co): code = co.co_code linestarts = dict(findlinestarts(co)) n = len(code) i = 0 extended_arg = 0 while i < n: offset = i c = code[i] op = ord(c) lineno = linestarts.get(i) argval = None i = i + 1 if op >= HAVE_ARGUMENT: oparg = ord(code[i]) + ord(code[i + 1]) * 256 + extended_arg extended_arg = 0 i = i + 2 if op == EXTENDED_ARG: extended_arg = oparg * 65536 if op in hasconst: argval = co.co_consts[oparg] yield Instruction(offset, argval, opname[op], lineno)
Example #19
Source File: pyassem.py From medicare-demo with Apache License 2.0 | 5 votes |
def findDepth(self, insts, debug=0): depth = 0 maxDepth = 0 for i in insts: opname = i[0] if debug: print i, delta = self.effect.get(opname, None) if delta is not None: depth = depth + delta else: # now check patterns for pat, pat_delta in self.patterns: if opname[:len(pat)] == pat: delta = pat_delta depth = depth + delta break # if we still haven't found a match if delta is None: meth = getattr(self, opname, None) if meth is not None: depth = depth + meth(i[1]) if depth > maxDepth: maxDepth = depth if debug: print depth, maxDepth return maxDepth
Example #20
Source File: test_dis.py From Project-New-Reign---Nemesis-Main with GNU General Public License v3.0 | 5 votes |
def test_opname(self): self.assertEqual(dis.opname[dis.opmap["LOAD_FAST"]], "LOAD_FAST")
Example #21
Source File: test_dis.py From medicare-demo with Apache License 2.0 | 5 votes |
def test_opname(self): self.assertEqual(dis.opname[dis.opmap["LOAD_FAST"]], "LOAD_FAST")
Example #22
Source File: bytecode_graph.py From flare-bytecode_graph with Apache License 2.0 | 5 votes |
def disassemble(self): ''' Return disassembly of bytecode ''' rvalue = opname[self.opcode].ljust(20) if self.opcode >= dis.HAVE_ARGUMENT: rvalue += " %04x" % (self.oparg) return rvalue
Example #23
Source File: test_dis.py From gcblue with BSD 3-Clause "New" or "Revised" License | 5 votes |
def test_opname(self): self.assertEqual(dis.opname[dis.opmap["LOAD_FAST"]], "LOAD_FAST")
Example #24
Source File: pyassem.py From CTFCrackTools-V2 with GNU General Public License v3.0 | 5 votes |
def convertArgs(self): """Convert arguments from symbolic to concrete form""" assert self.stage == FLAT self.consts.insert(0, self.docstring) self.sort_cellvars() for i in range(len(self.insts)): t = self.insts[i] if len(t) == 2: opname, oparg = t conv = self._converters.get(opname, None) if conv: self.insts[i] = opname, conv(self, oparg) self.stage = CONV
Example #25
Source File: instructions.py From codetransformer with GNU General Public License v2.0 | 5 votes |
def __repr__(self): arg = self.arg return '{op}{arg}'.format( op=self.opname, arg='(%r)' % arg if self.arg is not self._no_arg else '', )
Example #26
Source File: instructions.py From codetransformer with GNU General Public License v2.0 | 5 votes |
def __init__(self, arg=_no_arg): if self.have_arg and arg is self._no_arg: raise TypeError( "{} missing 1 required argument: 'arg'".format(self.opname), ) self.arg = self._normalize_arg(arg) self._target_of = set() self._stolen_by = None # used for lnotab recalculation
Example #27
Source File: pyassem.py From CTFCrackTools-V2 with GNU General Public License v3.0 | 5 votes |
def isJump(opname): if opname[:4] == 'JUMP': return 1
Example #28
Source File: test_dis.py From CTFCrackTools-V2 with GNU General Public License v3.0 | 5 votes |
def test_opname(self): self.assertEqual(dis.opname[dis.opmap["LOAD_FAST"]], "LOAD_FAST")
Example #29
Source File: pyassem.py From medicare-demo with Apache License 2.0 | 5 votes |
def isJump(opname): if opname[:4] == 'JUMP': return 1
Example #30
Source File: pyassem.py From CTFCrackTools-V2 with GNU General Public License v3.0 | 5 votes |
def flattenGraph(self): """Arrange the blocks in order and resolve jumps""" assert self.stage == RAW self.insts = insts = [] pc = 0 begin = {} end = {} for b in self.getBlocksInOrder(): begin[b] = pc for inst in b.getInstructions(): insts.append(inst) if len(inst) == 1: pc = pc + 1 elif inst[0] != "SET_LINENO": # arg takes 2 bytes pc = pc + 3 end[b] = pc pc = 0 for i in range(len(insts)): inst = insts[i] if len(inst) == 1: pc = pc + 1 elif inst[0] != "SET_LINENO": pc = pc + 3 opname = inst[0] if opname in self.hasjrel: oparg = inst[1] offset = begin[oparg] - pc insts[i] = opname, offset elif opname in self.hasjabs: insts[i] = opname, begin[inst[1]] self.stage = FLAT