0x0e 0x0f java检证_JAVA字節碼指令集

常量入棧指令

指令碼

操作碼(助記符)

操作數

描述(棧指操作數棧)

0x01

aconst_null

null值入棧。

0x02

iconst_m1

-1(int)值入棧。

0x03

iconst_0

0(int)值入棧。

0x04

iconst_1

1(int)值入棧。

0x05

iconst_2

2(int)值入棧。

0x06

iconst_3

3(int)值入棧。

0x07

iconst_4

4(int)值入棧。

0x08

iconst_5

5(int)值入棧。

0x09

lconst_0

0(long)值入棧。

0x0a

lconst_1

1(long)值入棧。

0x0b

fconst_0

0(float)值入棧。

0x0c

fconst_1

1(float)值入棧。

0x0d

fconst_2

2(float)值入棧。

0x0e

dconst_0

0(double)值入棧。

0x0f

dconst_1

1(double)值入棧。

0x10

bipush

valuebyte

valuebyte值帶符號擴展成int值入棧。

0x11

sipush

valuebyte1

valuebyte2

(valuebyte1 << 8) | valuebyte2 值帶符號擴展成int值入棧。

0x12

ldc

indexbyte1

常量池中的常量值(int, float, string reference, object reference)入棧。

0x13

ldc_w

indexbyte1

indexbyte2

常量池中常量(int, float, string reference, object reference)入棧。

0x14

ldc2_w

indexbyte1

indexbyte2

常量池中常量(long, double)入棧。

局部變量值轉載到棧中指令

指令碼

操作碼(助記符)

操作數

描述(棧指操作數棧)

0x19

(wide)aload

indexbyte

從局部變量indexbyte中裝載引用類型值入棧。

0x2a

aload_0

從局部變量0中裝載引用類型值入棧。

0x2b

aload_1

從局部變量1中裝載引用類型值入棧。

0x2c

aload_2

從局部變量2中裝載引用類型值入棧。

0x2d

aload_3

從局部變量3中裝載引用類型值入棧。

0x15

(wide)iload

indexbyte

從局部變量indexbyte中裝載int類型值入棧。

0x1a

iload_0

從局部變量0中裝載int類型值入棧。

0x1b

iload_1

從局部變量1中裝載int類型值入棧。

0x1c

iload_2

從局部變量2中裝載int類型值入棧。

0x1d

iload_3

從局部變量3中裝載int類型值入棧。

0x16

(wide)lload

indexbyte

從局部變量indexbyte中裝載long類型值入棧。

0x1e

lload_0

從局部變量0中裝載int類型值入棧。

0x1f

lload_1

從局部變量1中裝載int類型值入棧。

0x20

lload_2

從局部變量2中裝載int類型值入棧。

0x21

lload_3

從局部變量3中裝載int類型值入棧。

0x17

(wide)fload

indexbyte

從局部變量indexbyte中裝載float類型值入棧。

0x22

fload_0

從局部變量0中裝載float類型值入棧。

0x23

fload_1

從局部變量1中裝載float類型值入棧。

0x24

fload_2

從局部變量2中裝載float類型值入棧。

0x25

fload_3

從局部變量3中裝載float類型值入棧。

0x18

(wide)dload

indexbyte

從局部變量indexbyte中裝載double類型值入棧。

0x26

dload_0

從局部變量0中裝載double類型值入棧。

0x27

dload_1

從局部變量1中裝載double類型值入棧。

0x28

dload_2

從局部變量2中裝載double類型值入棧。

0x29

dload_3

從局部變量3中裝載double類型值入棧。

0x32

aaload

從引用類型數組中裝載指定項的值。

0x2e

iaload

從int類型數組中裝載指定項的值。

0x2f

laload

從long類型數組中裝載指定項的值。

0x30

faload

從float類型數組中裝載指定項的值。

0x31

daload

從double類型數組中裝載指定項的值。

0x33

baload

從boolean類型數組或byte類型數組中裝載指定項的值(先轉換為int類型值,后壓棧)。

0x34

caload

從char類型數組中裝載指定項的值(先轉換為int類型值,后壓棧)。

0x35

saload

從short類型數組中裝載指定項的值(先轉換為int類型值,后壓棧)。

將棧頂值保存到局部變量中指令

指令碼

操作碼(助記符)

操作數

描述(棧指操作數棧)

0x3a

(wide)astore

indexbyte

將棧頂引用類型值保存到局部變量indexbyte中。

0x4b

astroe_0

將棧頂引用類型值保存到局部變量0中。

0x4c

astore_1

將棧頂引用類型值保存到局部變量1中。

0x4d

astore_2

將棧頂引用類型值保存到局部變量2中。

0x4e

astore_3

將棧頂引用類型值保存到局部變量3中。

0x36

(wide)istore

indexbyte

將棧頂int類型值保存到局部變量indexbyte中。

0x3b

istore_0

將棧頂int類型值保存到局部變量0中。

0x3c

istore_1

將棧頂int類型值保存到局部變量1中。

0x3d

istore_2

將棧頂int類型值保存到局部變量2中。

0x3e

istore_3

將棧頂int類型值保存到局部變量3中。

0x37

(wide)lstore

indexbyte

將棧頂long類型值保存到局部變量indexbyte中。

0x3f

lstore_0

將棧頂long類型值保存到局部變量0中。

0x40

lstore_1

將棧頂long類型值保存到局部變量1中。

0x41

lstore_2

將棧頂long類型值保存到局部變量2中。

0x42

lstroe_3

將棧頂long類型值保存到局部變量3中。

0x38

(wide)fstore

indexbyte

將棧頂float類型值保存到局部變量indexbyte中。

0x43

fstore_0

將棧頂float類型值保存到局部變量0中。

0x44

fstore_1

將棧頂float類型值保存到局部變量1中。

0x45

fstore_2

將棧頂float類型值保存到局部變量2中。

0x46

fstore_3

將棧頂float類型值保存到局部變量3中。

0x39

(wide)dstore

indexbyte

將棧頂double類型值保存到局部變量indexbyte中。

0x47

dstore_0

將棧頂double類型值保存到局部變量0中。

0x48

dstore_1

將棧頂double類型值保存到局部變量1中。

0x49

dstore_2

將棧頂double類型值保存到局部變量2中。

0x4a

dstore_3

將棧頂double類型值保存到局部變量3中。

0x53

aastore

將棧頂引用類型值保存到指定引用類型數組的指定項。

0x4f

iastore

將棧頂int類型值保存到指定int類型數組的指定項。

0x50

lastore

將棧頂long類型值保存到指定long類型數組的指定項。

0x51

fastore

將棧頂float類型值保存到指定float類型數組的指定項。

0x52

dastore

將棧頂double類型值保存到指定double類型數組的指定項。

0x54

bastroe

將棧頂boolean類型值或byte類型值保存到指定boolean類型數組或byte類型數組的指定項。

0x55

castore

將棧頂char類型值保存到指定char類型數組的指定項。

0x56

sastore

將棧頂short類型值保存到指定short類型數組的指定項。

wide指令

指令碼

操作碼(助記符)

操作數

描述(棧指操作數棧)

0xc4

wide

使用附加字節擴展局部變量索引(iinc指令特殊)。

通用(無類型)棧操作指令

指令碼

操作碼(助記符)

操作數

描述(棧指操作數棧)

0x00

nop

空操作。

0x57

pop

從棧頂彈出一個字長的數據。

0x58

pop2

從棧頂彈出兩個字長的數據。

0x59

dup

復制棧頂一個字長的數據,將復制后的數據壓棧。

0x5a

dup_x1

復制棧頂一個字長的數據,彈出棧頂兩個字長數據,先將復制后的數據壓棧,再將彈出的兩個字長數據壓棧。

0x5b

dup_x2

復制棧頂一個字長的數據,彈出棧頂三個字長的數據,將復制后的數據壓棧,再將彈出的三個字長的數據壓棧。

0x5c

dup2

復制棧頂兩個字長的數據,將復制后的兩個字長的數據壓棧。

0x5d

dup2_x1

復制棧頂兩個字長的數據,彈出棧頂三個字長的數據,將復制后的兩個字長的數據壓棧,再將彈出的三個字長的數據壓棧。

0x5e

dup2_x2

復制棧頂兩個字長的數據,彈出棧頂四個字長的數據,將復制后的兩個字長的數據壓棧,再將彈出的四個字長的數據壓棧。

0x5f

swap

交換棧頂兩個字長的數據的位置。Java指令中沒有提供以兩個字長為單位的交換指令。

類型轉換指令

指令碼

操作碼(助記符)

操作數

描述(棧指操作數棧)

0x86

i2f

將棧頂int類型值轉換為float類型值。

0x85

i2l

將棧頂int類型值轉換為long類型值。

0x87

i2d

將棧頂int類型值轉換為double類型值。

0x8b

f2i

將棧頂float類型值轉換為int類型值。

0x8c

f2l

將棧頂float類型值轉換為long類型值。

0x8d

f2d

將棧頂float類型值轉換為double類型值。

0x88

l2i

將棧頂long類型值轉換為int類型值。

0x89

l2f

將棧頂long類型值轉換為float類型值。

0x8a

l2d

將棧頂long類型值轉換double類型值。

0x8e

d2i

將棧頂double類型值轉換為int類型值。

0x90

d2f

將棧頂double類型值轉換為float類型值。

0x8f

d2l

將棧頂double類型值轉換為long類型值。

0x91

i2b

將棧頂int類型值截斷成byte類型,后帶符號擴展成int類型值入棧。

0x92

i2c

將棧頂int類型值截斷成char類型值,后帶符號擴展成int類型值入棧。

0x93

i2s

將棧頂int類型值截斷成short類型值,后帶符號擴展成int類型值入棧。

整數運算

指令碼

操作碼(助記符)

操作數

描述(棧指操作數棧)

0x60

iadd

將棧頂兩int類型數相加,結果入棧。

0x64

isub

將棧頂兩int類型數相減,結果入棧。

0x68

imul

將棧頂兩int類型數相乘,結果入棧。

0x6c

idiv

將棧頂兩int類型數相除,結果入棧。

0x70

irem

將棧頂兩int類型數取模,結果入棧。

0x74

ineg

將棧頂int類型值取負,結果入棧。

0x61

ladd

將棧頂兩long類型數相加,結果入棧。

0x65

lsub

將棧頂兩long類型數相減,結果入棧。

0x69

lmul

將棧頂兩long類型數相乘,結果入棧。

0x6d

ldiv

將棧頂兩long類型數相除,結果入棧。

0x71

lrem

將棧頂兩long類型數取模,結果入棧。

0x75

lneg

將棧頂long類型值取負,結果入棧。

0x84

(wide)iinc

indexbyte

constbyte

將整數值constbyte加到indexbyte指定的int類型的局部變量中。

浮點運算

指令碼

操作碼(助記符)

操作數

描述(棧指操作數棧)

0x62

fadd

將棧頂兩float類型數相加,結果入棧。

0x66

fsub

將棧頂兩float類型數相減,結果入棧。

0x6a

fmul

將棧頂兩float類型數相乘,結果入棧。

0x6e

fdiv

將棧頂兩float類型數相除,結果入棧。

0x72

frem

將棧頂兩float類型數取模,結果入棧。

0x76

fneg

將棧頂float類型值取反,結果入棧。

0x63

dadd

將棧頂兩double類型數相加,結果入棧。

0x67

dsub

將棧頂兩double類型數相減,結果入棧。

0x6b

dmul

將棧頂兩double類型數相乘,結果入棧。

0x6f

ddiv

將棧頂兩double類型數相除,結果入棧。

0x73

drem

將棧頂兩double類型數取模,結果入棧。

0x77

dneg

將棧頂double類型值取負,結果入棧。

邏輯運算——移位運算

指令碼

操作碼(助記符)

操作數

描述(棧指操作數棧)

0x78

ishl

左移int類型值。

0x79

lshl

左移long類型值。

0x7a

ishr

算術右移int類型值。

0x7b

lshr

算術右移long類型值。

0x7c

iushr

邏輯右移int類型值。

0x7d

lushr

邏輯右移long類型值。

邏輯運算——按位布爾運算

指令碼

操作碼(助記符)

操作數

描述(棧指操作數棧)

0x73

iand

對int類型按位與運算。

0x7f

land

對long類型的按位與運算。

0x80

ior

對int類型的按位或運算。

0x81

lor

對long類型的按位或運算。

0x82

ixor

對int類型的按位異或運算。

0x83

lxor

對long類型的按位異或運算。

控制流指令——條件跳轉指令

指令碼

操作碼(助記符)

操作數

描述(棧指操作數棧)

0x99

ifeq

branchbyte1

branchbyte2

若棧頂int類型值為0則跳轉。

0x9a

ifne

branchbyte1

branchbyte2

若棧頂int類型值不為0則跳轉。

0x9b

iflt

branchbyte1

branchbyte2

若棧頂int類型值小於0則跳轉。

0x9e

ifle

branchbyte1

branchbyte2

若棧頂int類型值小於等於0則跳轉。

0x9d

ifgt

branchbyte1

branchbyte2

若棧頂int類型值大於0則跳轉。

0x9c

ifge

branchbyte1

branchbyte2

若棧頂int類型值大於等於0則跳轉。

0x9f

if_icmpeq

branchbyte1

branchbyte2

若棧頂兩int類型值相等則跳轉。

0xa0

if_icmpne

branchbyte1

branchbyte2

若棧頂兩int類型值不相等則跳轉。

0xa1

if_icmplt

branchbyte1

branchbyte2

若棧頂兩int類型值前小於后則跳轉。

0xa4

if_icmple

branchbyte1

branchbyte2

若棧頂兩int類型值前小於等於后則跳轉。

0xa3

if_icmpgt

branchbyte1

branchbyte2

若棧頂兩int類型值前大於后則跳轉。

0xa2

if_icmpge

branchbyte1

branchbyte2

若棧頂兩int類型值前大於等於后則跳轉。

0xc6

ifnull

branchbyte1

branchbyte2

若棧頂引用值為null則跳轉。

0xc7

ifnonnull

branchbyte1

branchbyte2

若棧頂引用值不為null則跳轉。

0xa5

if_acmpeq

branchbyte1

branchbyte2

若棧頂兩引用類型值相等則跳轉。

0xa6

if_acmpne

branchbyte1

branchbyte2

若棧頂兩引用類型值不相等則跳轉。

控制流指令——比較指令

指令碼

操作碼(助記符)

操作數

描述(棧指操作數棧)

0x94

lcmp

比較棧頂兩long類型值,前者大,1入棧;相等,0入棧;后者大,-1入棧。

0x95

fcmpl

比較棧頂兩float類型值,前者大,1入棧;相等,0入棧;后者大,-1入棧;有NaN存在,-1入棧。

0x96

fcmpg

比較棧頂兩float類型值,前者大,1入棧;相等,0入棧;后者大,-1入棧;有NaN存在,-1入棧。

0x97

dcmpl

比較棧頂兩double類型值,前者大,1入棧;相等,0入棧;后者大,-1入棧;有NaN存在,-1入棧。

0x98

dcmpg

比較棧頂兩double類型值,前者大,1入棧;相等,0入棧;后者大,-1入棧;有NaN存在,-1入棧。

控制流指令——無條件跳轉指令

指令碼

操作碼(助記符)

操作數

描述(棧指操作數棧)

0xa7

goto

branchbyte1

branchbyte2

無條件跳轉到指定位置。

0xc8

goto_w

branchbyte1

branchbyte2

branchbyte3

branchbyte4

無條件跳轉到指定位置(寬索引)。

控制流指令——表跳轉指令

指令碼

操作碼(助記符)

操作數

描述(棧指操作數棧)

0xaa

tableswitch

<0-3bytepad>

defaultbyte1

defaultbyte2

defaultbyte3

defaultbyte4

lowbyte1

lowbyte2

lowbyte3

lowbyte4

highbyte1

highbyte2

highbyte3

highbyte4

jump offsets...

通過索引訪問跳轉表,並跳轉。

0xab

lookupswitch

<0-3bytepad>

defaultbyte1

defaultbyte2

defaultbyte3

defaultbyte4

npairs1

npairs2

npairs3

npairs4

match offsets

通過鍵值訪問跳轉表,並跳轉。

控制流指令——異常和finally

指令碼

操作碼(助記符)

操作數

描述(棧指操作數棧)

0xbf

athrow

拋出異常。

0xa8

jsr

branchbyte1

branchbyte2

跳轉到子例程序。

0xc9

jsr_w

branchbyte1

branchbyte2

branchbyte3

branchbyte4

跳轉到子例程序(寬索引)。

0xa9

(wide)ret

indexbyte

返回子例程序。

對象操作指令

指令碼

操作碼(助記符)

操作數

描述(棧指操作數棧)

0xbb

new

indexbyte1

indexbyte2

創建新的對象實例。

0xc0

checkcast

indexbyte1

indexbyte

類型強轉。

0xc1

instanceof

indexbyte1

indexbyte2

判斷類型。

0xb4

getfield

indexbyte1

indexbyte2

獲取對象字段的值。

0xb5

putfield

indexbyte1

indexbyte2

給對象字段賦值。

0xb2

getstatic

indexbyte1

indexbyte2

獲取靜態字段的值。

0xb3

putstatic

indexbyte1

indexbyte2

給靜態字段賦值。

數組操作指令

指令碼

操作碼(助記符)

操作數

描述(棧指操作數棧)

0xbc

newarray

atype

創建type類型的數組。

0xbd

anewarray

indexbyte1

indexbyte2

創建引用類型的數組。

0xbe

arraylength

獲取一維數組的長度。

0xc5

multianewarray

indexbyte1

indexbyte2

dimension

創建dimension維度的數組。

方法調用指令

指令碼

操作碼(助記符)

操作數

描述(棧指操作數棧)

0xb7

invokespecial

indexbyte1

indexbyte2

編譯時方法綁定調用方法。

0xb6

invokevirtual

indexbyte1

indexbyte2

運行時方法綁定調用方法。

0xb8

invokestatic

indexbyte1

indexbyte2

調用靜態方法。

0xb9

invokeinterface

indexbyte1

indexbyte2

count

0

調用接口方法。

方法返回指令

指令碼

操作碼(助記符)

操作數

描述(棧指操作數棧)

0xac

ireturn

返回int類型值。

0xad

lreturn

返回long類型值。

0xae

freturn

返回float類型值。

0xaf

dreturn

返回double類型值。

0xb0

areturn

返回引用類型值。

0xb1

return

void函數返回。

線程同步指令

指令碼

操作碼(助記符)

操作數

描述(棧指操作數棧)

0xc2

monitorenter

進入並獲得對象監視器。

0xc3

monitorexit

釋放並退出對象監視器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值