• Java Bytecode Instructions List


    monicOpcode
    (in hex)
    Other bytesStack
    [before]→[after]
    Description
    aaload32 arrayref, index → valueload onto the stack a reference from an array
    aastore53 arrayref, index, value →store into a reference in an array
    aconst_null01 → nullpush a null reference onto the stack
    aload191: index→ objectrefload a reference onto the stack from a local variable #index
    aload_02a → objectrefload a reference onto the stack from local variable 0
    aload_12b → objectrefload a reference onto the stack from local variable 1
    aload_22c → objectrefload a reference onto the stack from local variable 2
    aload_32d → objectrefload a reference onto the stack from local variable 3
    anewarraybd2: indexbyte1, indexbyte2count → arrayrefcreate a new array of references of length count and component type identified by the class referenceindex (indexbyte1 << 8 + indexbyte2) in the constant pool
    areturnb0 objectref → [empty]return a reference from a method
    arraylengthbe arrayref → lengthget the length of an array
    astore3a1: indexobjectref →store a reference into a local variable #index
    astore_04b objectref →store a reference into local variable 0
    astore_14c objectref →store a reference into local variable 1
    astore_24d objectref →store a reference into local variable 2
    astore_34e objectref →store a reference into local variable 3
    athrowbf objectref → [empty], objectrefthrows an error or exception (notice that the rest of the stack is cleared, leaving only a reference to the Throwable)
    baload33 arrayref, index → valueload a byte or Boolean value from an array
    bastore54 arrayref, index, value →store a byte or Boolean value into an array
    bipush101: byte→ valuepush a byte onto the stack as an integer value
    breakpointca  reserved for breakpoints in Java debuggers; should not appear in any class file
    caload34 arrayref, index → valueload a char from an array
    castore55 arrayref, index, value →store a char into an array
    checkcastc02: indexbyte1, indexbyte2objectref → objectrefchecks whether an objectref is of a certain type, the class reference of which is in the constant pool at index (indexbyte1 << 8 + indexbyte2)
    d2f90 value → resultconvert a double to a float
    d2i8e value → resultconvert a double to an int
    d2l8f value → resultconvert a double to a long
    dadd63 value1, value2 → resultadd two doubles
    daload31 arrayref, index → valueload a double from an array
    dastore52 arrayref, index, value →store a double into an array
    dcmpg98 value1, value2 → resultcompare two doubles
    dcmpl97 value1, value2 → resultcompare two doubles
    dconst_00e → 0.0push the constant 0.0 onto the stack
    dconst_10f → 1.0push the constant 1.0 onto the stack
    ddiv6f value1, value2 → resultdivide two doubles
    dload181: index→ valueload a double value from a local variable #index
    dload_026 → valueload a double from local variable 0
    dload_127 → valueload a double from local variable 1
    dload_228 → valueload a double from local variable 2
    dload_329 → valueload a double from local variable 3
    dmul6b value1, value2 → resultmultiply two doubles
    dneg77 value → resultnegate a double
    drem73 value1, value2 → resultget the remainder from a division between two doubles
    dreturnaf value → [empty]return a double from a method
    dstore391: indexvalue →store a double value into a local variable #index
    dstore_047 value →store a double into local variable 0
    dstore_148 value →store a double into local variable 1
    dstore_249 value →store a double into local variable 2
    dstore_34a value →store a double into local variable 3
    dsub67 value1, value2 → resultsubtract a double from another
    dup59 value → value, valueduplicate the value on top of the stack
    dup_x15a value2, value1 → value1, value2, value1insert a copy of the top value into the stack two values from the top. value1 and value2 must not be of the type double or long.
    dup_x25b value3, value2, value1 → value1, value3, value2, value1insert a copy of the top value into the stack two (if value2 is double or long it takes up the entry of value3, too) or three values (if value2 is neither double nor long) from the top
    dup25c {value2, value1} → {value2, value1}, {value2, value1}duplicate top two stack words (two values, if value1 is not double nor long; a single value, if value1 is double or long)
    dup2_x15d value3, {value2, value1} → {value2, value1}, value3, {value2, value1}duplicate two words and insert beneath third word (see explanation above)
    dup2_x25e {value4, value3}, {value2, value1} → {value2, value1}, {value4, value3}, {value2, value1}duplicate two words and insert beneath fourth word
    f2d8d value → resultconvert a float to a double
    f2i8b value → resultconvert a float to an int
    f2l8c value → resultconvert a float to a long
    fadd62 value1, value2 → resultadd two floats
    faload30 arrayref, index → valueload a float from an array
    fastore51 arrayref, index, value →store a float in an array
    fcmpg96 value1, value2 → resultcompare two floats
    fcmpl95 value1, value2 → resultcompare two floats
    fconst_00b → 0.0fpush 0.0f on the stack
    fconst_10c → 1.0fpush 1.0f on the stack
    fconst_20d → 2.0fpush 2.0f on the stack
    fdiv6e value1, value2 → resultdivide two floats
    fload171: index→ valueload a float value from a local variable #index
    fload_022 → valueload a float value from local variable 0
    fload_123 → valueload a float value from local variable 1
    fload_224 → valueload a float value from local variable 2
    fload_325 → valueload a float value from local variable 3
    fmul6a value1, value2 → resultmultiply two floats
    fneg76 value → resultnegate a float
    frem72 value1, value2 → resultget the remainder from a division between two floats
    freturnae value → [empty]return a float
    fstore381: indexvalue →store a float value into a local variable #index
    fstore_043 value →store a float value into local variable 0
    fstore_144 value →store a float value into local variable 1
    fstore_245 value →store a float value into local variable 2
    fstore_346 value →store a float value into local variable 3
    fsub66 value1, value2 → resultsubtract two floats
    getfieldb42: index1, index2objectref → valueget a field value of an object objectref, where the field is identified by field reference in the constant pool index (index1 << 8 + index2)
    getstaticb22: index1, index2→ valueget a static field value of a class, where the field is identified by field reference in the constant pool index (index1 << 8 + index2)
    gotoa72: branchbyte1, branchbyte2[no change]goes to another instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
    goto_wc84: branchbyte1, branchbyte2, branchbyte3, branchbyte4[no change]goes to another instruction at branchoffset (signed int constructed from unsigned bytes branchbyte1 << 24 + branchbyte2 << 16 + branchbyte3 << 8 + branchbyte4)
    i2b91 value → resultconvert an int into a byte
    i2c92 value → resultconvert an int into a character
    i2d87 value → resultconvert an int into a double
    i2f86 value → resultconvert an int into a float
    i2l85 value → resultconvert an int into a long
    i2s93 value → resultconvert an int into a short
    iadd60 value1, value2 → resultadd two ints
    iaload2e arrayref, index → valueload an int from an array
    iand7e value1, value2 → resultperform a bitwise and on two integers
    iastore4f arrayref, index, value →store an int into an array
    iconst_m102 → -1load the int value -1 onto the stack
    iconst_003 → 0load the int value 0 onto the stack
    iconst_104 → 1load the int value 1 onto the stack
    iconst_205 → 2load the int value 2 onto the stack
    iconst_306 → 3load the int value 3 onto the stack
    iconst_407 → 4load the int value 4 onto the stack
    iconst_508 → 5load the int value 5 onto the stack
    idiv6c value1, value2 → resultdivide two integers
    if_acmpeqa52: branchbyte1, branchbyte2value1, value2 →if references are equal, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
    if_acmpnea62: branchbyte1, branchbyte2value1, value2 →if references are not equal, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
    if_icmpeq9f2: branchbyte1, branchbyte2value1, value2 →if ints are equal, branch to instruction at branchoffset (signed short constructed from unsigned bytesbranchbyte1 << 8 + branchbyte2)
    if_icmpgea22: branchbyte1, branchbyte2value1, value2 →if value1 is greater than or equal to value2, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
    if_icmpgta32: branchbyte1, branchbyte2value1, value2 →if value1 is greater than value2, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
    if_icmplea42: branchbyte1, branchbyte2value1, value2 →if value1 is less than or equal to value2, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
    if_icmplta12: branchbyte1, branchbyte2value1, value2 →if value1 is less than value2, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
    if_icmpnea02: branchbyte1, branchbyte2value1, value2 →if ints are not equal, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
    ifeq992: branchbyte1, branchbyte2value →if value is 0, branch to instruction at branchoffset (signed short constructed from unsigned bytesbranchbyte1 << 8 + branchbyte2)
    ifge9c2: branchbyte1, branchbyte2value →if value is greater than or equal to 0, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
    ifgt9d2: branchbyte1, branchbyte2value →if value is greater than 0, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
    ifle9e2: branchbyte1, branchbyte2value →if value is less than or equal to 0, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
    iflt9b2: branchbyte1, branchbyte2value →if value is less than 0, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
    ifne9a2: branchbyte1, branchbyte2value →if value is not 0, branch to instruction at branchoffset (signed short constructed from unsigned bytesbranchbyte1 << 8 + branchbyte2)
    ifnonnullc72: branchbyte1, branchbyte2value →if value is not null, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
    ifnullc62: branchbyte1, branchbyte2value →if value is null, branch to instruction at branchoffset (signed short constructed from unsigned bytesbranchbyte1 << 8 + branchbyte2)
    iinc842: index, const[No change]increment local variable #index by signed byte const
    iload151: index→ valueload an int value from a local variable #index
    iload_01a → valueload an int value from local variable 0
    iload_11b → valueload an int value from local variable 1
    iload_21c → valueload an int value from local variable 2
    iload_31d → valueload an int value from local variable 3
    impdep1fe  reserved for implementation-dependent operations within debuggers; should not appear in any class file
    impdep2ff  reserved for implementation-dependent operations within debuggers; should not appear in any class file
    imul68 value1, value2 → resultmultiply two integers
    ineg74 value → resultnegate int
    instanceofc12: indexbyte1, indexbyte2objectref → resultdetermines if an object objectref is of a given type, identified by class reference index in constant pool (indexbyte1 << 8 + indexbyte2)
    invokedynamicba4: indexbyte1, indexbyte2, 0, 0[arg1, [arg2 ...]] →invokes a dynamic method identified by method reference index in constant pool (indexbyte1 << 8 + indexbyte2)
    invokeinterfaceb94: indexbyte1, indexbyte2, count, 0objectref, [arg1, arg2, ...] →invokes an interface method on object objectref, where the interface method is identified by method reference index in constant pool (indexbyte1 << 8 + indexbyte2)
    invokespecialb72: indexbyte1, indexbyte2objectref, [arg1, arg2, ...] →invoke instance method on object objectref, where the method is identified by method reference indexin constant pool (indexbyte1 << 8 + indexbyte2)
    invokestaticb82: indexbyte1, indexbyte2[arg1, arg2, ...] →invoke a static method, where the method is identified by method reference index in constant pool (indexbyte1 << 8 + indexbyte2)
    invokevirtualb62: indexbyte1, indexbyte2objectref, [arg1, arg2, ...] →invoke virtual method on object objectref, where the method is identified by method reference index in constant pool (indexbyte1 << 8 + indexbyte2)
    ior80 value1, value2 → resultbitwise int or
    irem70 value1, value2 → resultlogical int remainder
    ireturnac value → [empty]return an integer from a method
    ishl78 value1, value2 → resultint shift left
    ishr7a value1, value2 → resultint arithmetic shift right
    istore361: indexvalue →store int value into variable #index
    istore_03b value →store int value into variable 0
    istore_13c value →store int value into variable 1
    istore_23d value →store int value into variable 2
    istore_33e value →store int value into variable 3
    isub64 value1, value2 → resultint subtract
    iushr7c value1, value2 → resultint logical shift right
    ixor82 value1, value2 → resultint xor
    jsra82: branchbyte1, branchbyte2→ addressjump to subroutine at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2) and place the return address on the stack
    jsr_wc94: branchbyte1, branchbyte2, branchbyte3, branchbyte4→ addressjump to subroutine at branchoffset (signed int constructed from unsigned bytes branchbyte1 << 24 + branchbyte2 << 16 + branchbyte3 << 8 + branchbyte4) and place the return address on the stack
    l2d8a value → resultconvert a long to a double
    l2f89 value → resultconvert a long to a float
    l2i88 value → resultconvert a long to a int
    ladd61 value1, value2 → resultadd two longs
    laload2f arrayref, index → valueload a long from an array
    land7f value1, value2 → resultbitwise and of two longs
    lastore50 arrayref, index, value →store a long to an array
    lcmp94 value1, value2 → resultcompare two longs values
    lconst_009 → 0Lpush the long 0 onto the stack
    lconst_10a → 1Lpush the long 1 onto the stack
    ldc121: index→ valuepush a constant #index from a constant pool (String, int or float) onto the stack
    ldc_w132: indexbyte1, indexbyte2→ valuepush a constant #index from a constant pool (String, int or float) onto the stack (wide index is constructed as indexbyte1 << 8 + indexbyte2)
    ldc2_w142: indexbyte1, indexbyte2→ valuepush a constant #index from a constant pool (double or long) onto the stack (wide index is constructed as indexbyte1 << 8 + indexbyte2)
    ldiv6d value1, value2 → resultdivide two longs
    lload161: index→ valueload a long value from a local variable #index
    lload_01e → valueload a long value from a local variable 0
    lload_11f → valueload a long value from a local variable 1
    lload_220 → valueload a long value from a local variable 2
    lload_321 → valueload a long value from a local variable 3
    lmul69 value1, value2 → resultmultiply two longs
    lneg75 value → resultnegate a long
    lookupswitchab4+: <0-3 bytes padding>, defaultbyte1, defaultbyte2, defaultbyte3, defaultbyte4, npairs1, npairs2, npairs3, npairs4, match-offset pairs...key →a target address is looked up from a table using a key and execution continues from the instruction at that address
    lor81 value1, value2 → resultbitwise or of two longs
    lrem71 value1, value2 → resultremainder of division of two longs
    lreturnad value → [empty]return a long value
    lshl79 value1, value2 → resultbitwise shift left of a long value1 by value2 positions
    lshr7b value1, value2 → resultbitwise shift right of a long value1 by value2 positions
    lstore371: indexvalue →store a long value in a local variable #index
    lstore_03f value →store a long value in a local variable 0
    lstore_140 value →store a long value in a local variable 1
    lstore_241 value →store a long value in a local variable 2
    lstore_342 value →store a long value in a local variable 3
    lsub65 value1, value2 → resultsubtract two longs
    lushr7d value1, value2 → resultbitwise shift right of a long value1 by value2 positions, unsigned
    lxor83 value1, value2 → resultbitwise exclusive or of two longs
    monitorenterc2 objectref →enter monitor for object ("grab the lock" - start of synchronized() section)
    monitorexitc3 objectref →exit monitor for object ("release the lock" - end of synchronized() section)
    multianewarrayc53: indexbyte1, indexbyte2, dimensionscount1, [count2,...] → arrayrefcreate a new array of dimensions dimensions with elements of type identified by class reference in constant pool index (indexbyte1 << 8 + indexbyte2); the sizes of each dimension is identified bycount1, [count2, etc.]
    newbb2: indexbyte1, indexbyte2→ objectrefcreate new object of type identified by class reference in constant pool index (indexbyte1 << 8 + indexbyte2)
    newarraybc1: atypecount → arrayrefcreate new array with count elements of primitive type identified by atype
    nop00 [No change]perform no operation
    pop57 value →discard the top value on the stack
    pop258 {value2, value1} →discard the top two values on the stack (or one value, if it is a double or long)
    putfieldb52: indexbyte1, indexbyte2objectref, value →set field to value in an object objectref, where the field is identified by a field reference index in constant pool (indexbyte1 << 8 + indexbyte2)
    putstaticb32: indexbyte1, indexbyte2value →set static field to value in a class, where the field is identified by a field reference index in constant pool (indexbyte1 << 8 + indexbyte2)
    reta91: index[No change]continue execution from address taken from a local variable #index (the asymmetry with jsr is intentional)
    returnb1 → [empty]return void from method
    saload35 arrayref, index → valueload short from array
    sastore56 arrayref, index, value →store short to array
    sipush112: byte1, byte2→ valuepush a short onto the stack
    swap5f value2, value1 → value1, value2swaps two top words on the stack (note that value1 and value2 must not be double or long)
    tableswitchaa4+: [0-3 bytes padding], defaultbyte1, defaultbyte2, defaultbyte3, defaultbyte4, lowbyte1, lowbyte2, lowbyte3, lowbyte4, highbyte1, highbyte2, highbyte3, highbyte4, jump offsets...index →continue execution from an address in the table at offset index
    widec43/5: opcode, indexbyte1, indexbyte2
    or
    iinc, indexbyte1, indexbyte2, countbyte1, countbyte2
    [same as for corresponding instructions]execute opcode, where opcode is either iload, fload, aload, lload, dload, istore, fstore, astore, lstore, dstore, or ret, but assume the index is 16 bit; or execute iinc, where the index is 16 bits and the constant to increment by is a signed 16 bit short
    (no name)cb-fd  these values are currently unassigned for opcodes and are reserved for future use









  • 相关阅读:
    2020/1/27 代码审计学习-宽字节注入与二次注入
    2020/1/27代码审计学习之SQL注入漏洞
    2020/1/27代码审计学习之审计涉及的超全局变量
    2019总结与最近
    鸽一天
    [极客大挑战 2019]Knife
    [LuoguP1438]无聊的数列(差分+线段树/树状数组)
    [BJWC2018]最长上升子序列
    笙上月
    笔下梅
  • 原文地址:https://www.cnblogs.com/kakafra/p/3664640.html
Copyright © 2020-2023  润新知