How to use the xdis.opcodes.base.def_op function in xdis

To help you get started, we’ve selected a few xdis examples, based on popular ways it is used in public projects.

Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.

github rocky / python-xdis / xdis / opcodes / opcode_3x.py View on Github external
def_op(l, 'BINARY_OR',            66,  2,  1)
def_op(l, 'INPLACE_POWER',        67,  2,  1)
def_op(l, 'GET_ITER',             68,  1,  1)
store_op(l, 'STORE_LOCALS',         69,  1,  0)

def_op(l, 'PRINT_EXPR',           70,  1,  0)
def_op(l, 'LOAD_BUILD_CLASS',     71,  0,  1)

# Python3 drops/changes:
#  def_op(l, 'PRINT_ITEM', 71)
#  def_op(l, 'PRINT_NEWLINE', 72)
#  def_op(l, 'PRINT_ITEM_TO', 73)
#  def_op(l, 'PRINT_NEWLINE_TO', 74)

def_op(l, 'INPLACE_LSHIFT',       75,  2,  1)
def_op(l, 'INPLACE_RSHIFT',       76,  2,  1)
def_op(l, 'INPLACE_AND',          77,  2,  1)
def_op(l, 'INPLACE_XOR',          78,  2,  1)
def_op(l, 'INPLACE_OR',           79,  2,  1)
def_op(l, 'BREAK_LOOP',           80,  0,  0, fallthrough=False)
def_op(l, 'WITH_CLEANUP',         81,  1,  0) # Cleans up the stack when a with statement
                                              # block exits.  Handle stack special

def_op(l, 'RETURN_VALUE',         83,  1,  0, fallthrough=False)
def_op(l, 'IMPORT_STAR',          84,  1,  0)

def_op(l, 'YIELD_VALUE',          86,  1,  1)
def_op(l, 'POP_BLOCK',            87,  0,  0)
def_op(l, 'END_FINALLY',          88,  1,  0)
def_op(l, 'POP_EXCEPT',           89,  0,  0)

HAVE_ARGUMENT = 90              # Opcodes from here have an argument:
github rocky / python-xdis / xdis / opcodes / opcode_2x.py View on Github external
for op in range(256): opname[op] = '<%r>' % (op,)
del op

# Instruction opcodes for compiled code
# Blank lines correspond to available opcodes

# If the POP field is -1 and the opcode is var args operation
# (hasvargs | hasnargs) operation, then
# the operand holds the size.

#          OP NAME            OPCODE POP PUSH
#--------------------------------------------
def_op(l, "STOP_CODE",             0,  0,  0, fallthrough=False)
def_op(l, "POP_TOP",               1,  1,  0)
def_op(l, "ROT_TWO",               2,  2,  2)
def_op(l, "ROT_THREE",             3,  3,  3)
def_op(l, "DUP_TOP",               4,  0,  1)
def_op(l, "ROT_FOUR",              5,  4,  4)

def_op(l, "UNARY_POSITIVE",       10,  1,  1)
def_op(l, "UNARY_NEGATIVE",       11,  1,  1)
def_op(l, "UNARY_NOT",            12,  1,  1)
def_op(l, "UNARY_CONVERT",        13,  1,  1)

def_op(l, "UNARY_INVERT",         15,  1,  1)

def_op(l, "BINARY_POWER",         19,  2,  1)

def_op(l, "BINARY_MULTIPLY",      20,  2,  1)
def_op(l, "BINARY_DIVIDE",        21,  2,  1)
def_op(l, "BINARY_MODULO",        22,  2,  1)
def_op(l, "BINARY_ADD",           23,  2,  1)
github rocky / python-xdis / xdis / opcodes / opcode_3x.py View on Github external
def_op(l, 'DUP_TOP_TWO',           5,  0,  2)

def_op(l, 'NOP',                   9,  0,  0)
def_op(l, 'UNARY_POSITIVE',       10,  1,  1)
def_op(l, 'UNARY_NEGATIVE',       11,  1,  1)
def_op(l, 'UNARY_NOT',            12,  1,  1)

def_op(l, 'UNARY_INVERT',         15,  1,  1)

def_op(l, 'BINARY_POWER',         19,  2,  1)
def_op(l, 'BINARY_MULTIPLY',      20,  2,  1)

def_op(l, 'BINARY_MODULO',        22,  2,  1)
def_op(l, 'BINARY_ADD',           23,  2,  1)
def_op(l, 'BINARY_SUBTRACT',      24,  2,  1)
def_op(l, 'BINARY_SUBSCR',        25,  2,  1)
def_op(l, 'BINARY_FLOOR_DIVIDE',  26,  2,  1)
def_op(l, 'BINARY_TRUE_DIVIDE',   27,  2,  1)
def_op(l, 'INPLACE_FLOOR_DIVIDE', 28,  2,  1)
def_op(l, 'INPLACE_TRUE_DIVIDE',  29,  2,  1)

# Gone from Python 3 are Python2's
# SLICE+0 .. SLICE+3
# STORE_SLICE+0 .. STORE_SLICE+3
# DELETE_SLICE+0 .. DELETE_SLICE+3

store_op(l, 'STORE_MAP',            54,  3,  1)
def_op(l, 'INPLACE_ADD',          55,  2,  1)
def_op(l, 'INPLACE_SUBTRACT',     56,  2,  1)
def_op(l, 'INPLACE_MULTIPLY',     57,  2,  1)

def_op(l, 'INPLACE_MODULO',       59,  2,  1)
github rocky / python-xdis / xdis / opcodes / opcode_15.py View on Github external
const_op(l, "LOAD_CONST", 100, 0, 1)  # Operand is in const list
name_op(l, "LOAD_NAME", 101, 0, 1)  # Operand is in name list
varargs_op(l, "BUILD_TUPLE", 102, -1, 1)  # Number of tuple items
varargs_op(l, "BUILD_LIST", 103, -1, 1)  # Number of list items
varargs_op(l, "BUILD_MAP", 104, -1, 1)  # Always zero for now
name_op(l, "LOAD_ATTR", 105, 1, 1)  # Operand is in name list
compare_op(l, "COMPARE_OP", 106, 2, 1)  # Comparison operator

name_op(l, "IMPORT_NAME", 107, 2, 1)  # Operand is in name list
name_op(l, "IMPORT_FROM", 108, 0, 1)  # Operand is in name list

jrel_op(l, "JUMP_FORWARD", 110, 0, 0, fallthrough=False)  # Number of bytes to skip
jrel_op(l, "JUMP_IF_FALSE", 111, 1, 1, True)  # ""
jrel_op(l, "JUMP_IF_TRUE", 112, 1, 1, True)  # ""
jabs_op(l, "JUMP_ABSOLUTE", 113, 0, 0, fallthrough=False)  # Target byte offset from beginning of code
def_op(l, "FOR_LOOP", 114)  # Number of bytes to skip

name_op(l, "LOAD_GLOBAL", 116, 0, 1)  # Operand is in name list

jrel_op(l, "SETUP_LOOP", 120, 0, 0, conditional=True)  # Distance to target address
jrel_op(l, "SETUP_EXCEPT", 121, 0, 0)  # ""
jrel_op(l, "SETUP_FINALLY", 122, 0, 0)  # ""

local_op(l, "LOAD_FAST", 124, 0, 1)  # Local variable number
store_op(l, "STORE_FAST", 125, 1, 0, is_type="local")  # Local variable number
local_op(l, "DELETE_FAST", 126)  # Local variable number

def_op(l, "SET_LINENO", 127)  # Current line number

def_op(l, "RAISE_VARARGS", 130, -1, 0, fallthrough=False)
# Number of raise arguments (1, 2, or 3)
nargs_op(l, "CALL_FUNCTION", 131, -1, 1)  # #args + (#kwargs << 8)
github rocky / python-xdis / xdis / opcodes / opcode_3x.py View on Github external
# Python 3.2+
def_op(l, 'DUP_TOP_TWO',           5,  0,  2)

def_op(l, 'NOP',                   9,  0,  0)
def_op(l, 'UNARY_POSITIVE',       10,  1,  1)
def_op(l, 'UNARY_NEGATIVE',       11,  1,  1)
def_op(l, 'UNARY_NOT',            12,  1,  1)

def_op(l, 'UNARY_INVERT',         15,  1,  1)

def_op(l, 'BINARY_POWER',         19,  2,  1)
def_op(l, 'BINARY_MULTIPLY',      20,  2,  1)

def_op(l, 'BINARY_MODULO',        22,  2,  1)
def_op(l, 'BINARY_ADD',           23,  2,  1)
def_op(l, 'BINARY_SUBTRACT',      24,  2,  1)
def_op(l, 'BINARY_SUBSCR',        25,  2,  1)
def_op(l, 'BINARY_FLOOR_DIVIDE',  26,  2,  1)
def_op(l, 'BINARY_TRUE_DIVIDE',   27,  2,  1)
def_op(l, 'INPLACE_FLOOR_DIVIDE', 28,  2,  1)
def_op(l, 'INPLACE_TRUE_DIVIDE',  29,  2,  1)

# Gone from Python 3 are Python2's
# SLICE+0 .. SLICE+3
# STORE_SLICE+0 .. STORE_SLICE+3
# DELETE_SLICE+0 .. DELETE_SLICE+3

store_op(l, 'STORE_MAP',            54,  3,  1)
def_op(l, 'INPLACE_ADD',          55,  2,  1)
def_op(l, 'INPLACE_SUBTRACT',     56,  2,  1)
def_op(l, 'INPLACE_MULTIPLY',     57,  2,  1)
github rocky / python-xdis / xdis / opcodes / opcode_15.py View on Github external
def_op(l, "BINARY_ADD", 23, 2, 1)
def_op(l, "BINARY_SUBTRACT", 24, 2, 1)
def_op(l, "BINARY_SUBSCR", 25, 2, 1)

def_op(l, "SLICE+0", 30, 1, 1)
def_op(l, "SLICE+1", 31, 2, 1)
def_op(l, "SLICE+2", 32, 2, 1)
def_op(l, "SLICE+3", 33, 3, 1)

store_op(l, "STORE_SLICE+0", 40, 2, 0)
store_op(l, "STORE_SLICE+1", 41, 3, 0)
store_op(l, "STORE_SLICE+2", 42, 3, 0)
store_op(l, "STORE_SLICE+3", 43, 4, 0)

def_op(l, "DELETE_SLICE+0", 50, 1, 0)
def_op(l, "DELETE_SLICE+1", 51, 2, 0)
def_op(l, "DELETE_SLICE+2", 52, 2, 0)
def_op(l, "DELETE_SLICE+3", 53, 3, 0)

store_op(l, "STORE_SUBSCR", 60, 3, 0)  # Implements TOS1[TOS] = TOS2.
def_op(l, "DELETE_SUBSCR", 61, 2, 0)  # Implements del TOS1[TOS].

def_op(l, "BINARY_LSHIFT", 62, 2, 1)
def_op(l, "BINARY_RSHIFT", 63, 2, 1)
def_op(l, "BINARY_AND", 64, 2, 1)
def_op(l, "BINARY_XOR", 65, 2, 1)
def_op(l, "BINARY_OR", 66, 2, 1)

def_op(l, "PRINT_EXPR", 70, 1, 0)
def_op(l, "PRINT_ITEM", 71, 1, 0)
def_op(l, "PRINT_NEWLINE", 72, 0, 0)
github rocky / python-xdis / xdis / opcodes / opcode_39.py View on Github external
# These are removed since 3.8...
rm_op(l, "BEGIN_FINALLY", 53)
rm_op(l, "WITH_CLEANUP_START", 81)
rm_op(l, "WITH_CLEANUP_FINISH", 82)
rm_op(l, "END_FINALLY", 88)
rm_op(l, "CALL_FINALLY", 162)
rm_op(l, "POP_FINALLY", 163)


# These are new since Python 3.9

#          OP NAME              OPCODE  POP PUSH
#-----------------------------------------------
def_op(l, 'RERAISE',                48,   3, 0)
def_op(l, 'WITH_EXCEPT_START',      49,   0, 1)
def_op(l, 'LOAD_ASSERTION_ERROR',   74,   0, 1)

format_value_flags = opcode_38.format_value_flags

opcode_arg_fmt = {
    "BUILD_MAP_UNPACK_WITH_CALL": format_BUILD_MAP_UNPACK_WITH_CALL,
    "CALL_FUNCTION_KW": format_CALL_FUNCTION_KW,
    "CALL_FUNCTION_EX": format_CALL_FUNCTION_EX,
    'MAKE_FUNCTION': format_MAKE_FUNCTION_flags,
    'FORMAT_VALUE': format_value_flags,
    'EXTENDED_ARG': format_extended_arg36
}

opcode_extended_fmt = {
    "CALL_FUNCTION": extended_format_CALL_FUNCTION,
    "CALL_METHOD": extended_format_CALL_METHOD,
    "MAKE_FUNCTION": extended_format_MAKE_FUNCTION,
github rocky / python-xdis / xdis / opcodes / opcode_15.py View on Github external
def_op(l, "DELETE_SLICE+3", 53, 3, 0)

store_op(l, "STORE_SUBSCR", 60, 3, 0)  # Implements TOS1[TOS] = TOS2.
def_op(l, "DELETE_SUBSCR", 61, 2, 0)  # Implements del TOS1[TOS].

def_op(l, "BINARY_LSHIFT", 62, 2, 1)
def_op(l, "BINARY_RSHIFT", 63, 2, 1)
def_op(l, "BINARY_AND", 64, 2, 1)
def_op(l, "BINARY_XOR", 65, 2, 1)
def_op(l, "BINARY_OR", 66, 2, 1)

def_op(l, "PRINT_EXPR", 70, 1, 0)
def_op(l, "PRINT_ITEM", 71, 1, 0)
def_op(l, "PRINT_NEWLINE", 72, 0, 0)

def_op(l, "BREAK_LOOP", 80, 0, 0, fallthrough=False)

def_op(l, "LOAD_LOCALS", 82, 0, 1)
def_op(l, "RETURN_VALUE", 83, 1, 0, fallthrough=False)

def_op(l, "EXEC_STMT", 85, 3, 0)

def_op(l, "POP_BLOCK", 87, 0, 0)
def_op(l, "END_FINALLY", 88, 1, 0)
def_op(l, "BUILD_CLASS", 89, 3, 0)

# HAVE_ARGUMENT = 90               # Opcodes from here have an argument:

store_op(l, "STORE_NAME", 90, 1, 0, is_type="name")  # Operand is in name list
name_op(l, "DELETE_NAME", 91, 0, 0)  # ""
varargs_op(l, "UNPACK_TUPLE", 92)  # Number of tuple items
def_op(l, "UNPACK_LIST", 93)  # Number of list items
github rocky / python-xdis / xdis / opcodes / opcode_2x.py View on Github external
def_op(l, "SLICE+0",              30,  2,  2)
def_op(l, "SLICE+1",              31,  2,  2)
def_op(l, "SLICE+2",              32,  2,  2)
def_op(l, "SLICE+3",              33,  3,  2)

store_op(l, "STORE_SLICE+0",        40,  2,  0)
store_op(l, "STORE_SLICE+1",        41,  3,  0)
store_op(l, "STORE_SLICE+2",        42,  3,  0)
store_op(l, "STORE_SLICE+3",        43,  4,  0)

def_op(l, "DELETE_SLICE+0",       50,  1,  0)
def_op(l, "DELETE_SLICE+1",       51,  2,  0)
def_op(l, "DELETE_SLICE+2",       52,  2,  0)
def_op(l, "DELETE_SLICE+3",       53,  3,  0)

def_op(l, "INPLACE_ADD",          55,  2,  1)
def_op(l, "INPLACE_SUBTRACT",     56,  2,  1)
def_op(l, "INPLACE_MULTIPLY",     57,  2,  1)
def_op(l, "INPLACE_DIVIDE",       58,  2,  1)
def_op(l, "INPLACE_MODULO",       59,  2,  1)
store_op(l, "STORE_SUBSCR",       60,  3,  0) # Implements TOS1[TOS] = TOS2.
def_op(l, "DELETE_SUBSCR",        61,  2,  0) # Implements del TOS1[TOS].

def_op(l, "BINARY_LSHIFT",        62,  2,  1)
def_op(l, "BINARY_RSHIFT",        63,  2,  1)
def_op(l, "BINARY_AND",           64,  2,  1)
def_op(l, "BINARY_XOR",           65,  2,  1)
def_op(l, "BINARY_OR",            66,  2,  1)
def_op(l, "INPLACE_POWER",        67,  2,  1)
def_op(l, "GET_ITER",             68,  1,  1)

def_op(l, "PRINT_EXPR",           70,  1,  0)
github rocky / python-xdis / xdis / opcodes / opcode_3x.py View on Github external
free_op(l, 'LOAD_CLOSURE',         135,  0,  1)
free_op(l, 'LOAD_DEREF',           136,  0,  1)
store_op(l, 'STORE_DEREF',         137,  1,  0, is_type="free")
free_op(l, 'DELETE_DEREF',         138,  0,  0)

nargs_op(l, 'CALL_FUNCTION_VAR',   140,  -2,  1)  # #args + (#kwargs << 8)
nargs_op(l, 'CALL_FUNCTION_KW',    141,  -2,  1)  # #args + (#kwargs << 8)
nargs_op(l, 'CALL_FUNCTION_VAR_KW',142,  -3,  1)   # #args + (#kwargs << 8)

jrel_op(l, 'SETUP_WITH',           143,  0,  7)

def_op(l, 'LIST_APPEND',           145,  2,  1)  # Calls list.append(TOS[-i], TOS).
                                                 # Used to implement list comprehensions.
def_op(l, 'SET_ADD',               146,  1,  0)  # Calls set.add(TOS1[-i], TOS).
                                                 # Used to implement set comprehensions.
def_op(l, 'MAP_ADD',               147,  3,  1)  # Calls dict.setitem(TOS1[-i], TOS, TOS1)
                                                 # Used to implement dict comprehensions.

def_op(l, 'EXTENDED_ARG',          144,  0,   0)
EXTENDED_ARG = 144

opcode_arg_fmt = {
    'EXTENDED_ARG': format_extended_arg
}