首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

白盒测试之静态稽查-基础java字节码

2012-10-15 
白盒测试之静态检查--基础java字节码要想实现FINDBUGS静态扫描器,如果不熟悉java字节码,是很难写出比较复

白盒测试之静态检查--基础java字节码
要想实现FINDBUGS静态扫描器,如果不熟悉java字节码,是很难写出比较复杂的检测器的。只有对这些指令熟悉了,才能更加容易的分析源代码。看着这些指令,让我们回想起了大学时期的汇编语言。回想起来大学孤灯夜读的日子。
1      Java字节码
栈和局部变量操作

1.1   将常量压入栈的指令
aconst_null        将null对象引用压入栈

iconst_m1        将int类型常量-1压入栈

iconst_0        将int类型常量0压入栈

iconst_1        将int类型常量1压入栈

iconst_2        将int类型常量2压入栈

iconst_3        将int类型常量3压入栈

iconst_4        将int类型常量4压入栈

iconst_5        将int类型常量5压入栈

lconst_0        将long类型常量0压入栈

lconst_1        将long类型常量1压入栈

fconst_0        将float类型常量0压入栈

fconst_1        将float类型常量1压入栈

dconst_0        将double类型常量0压入栈

dconst_1        将double类型常量1压入栈

bipush            将一个8位带符号整数压入栈

sipush            将16位带符号整数压入栈

ldc            把常量池中的项压入栈

ldc_w            把常量池中的项压入栈(使用宽索引)

ldc2_w            把常量池中long类型或者double类型的项压入栈(使用宽索引)

1.2   从栈中的局部变量中装载值的指令
iload            从局部变量中装载int类型值

lload            从局部变量中装载long类型值

fload            从局部变量中装载float类型值

dload            从局部变量中装载double类型值

aload            从局部变量中装载引用类型值(refernce)

iload_0            从局部变量0中装载int类型值

iload_1            从局部变量1中装载int类型值

iload_2            从局部变量2中装载int类型值

iload_3            从局部变量3中装载int类型值

lload_0            从局部变量0中装载long类型值

lload_1            从局部变量1中装载long类型值

lload_2            从局部变量2中装载long类型值



lload_3            从局部变量3中装载long类型值

fload_0            从局部变量0中装载float类型值

fload_1            从局部变量1中装载float类型值

fload_2            从局部变量2中装载float类型值

fload_3            从局部变量3中装载float类型值

dload_0            从局部变量0中装载double类型值

dload_1            从局部变量1中装载double类型值

dload_2            从局部变量2中装载double类型值

dload_3            从局部变量3中装载double类型值

aload_0            从局部变量0中装载引用类型值

aload_1            从局部变量1中装载引用类型值

aload_2            从局部变量2中装载引用类型值

aload_3            从局部变量3中装载引用类型值

iaload            从数组中装载int类型值

laload            从数组中装载long类型值

faload            从数组中装载float类型值

daload            从数组中装载double类型值

aaload            从数组中装载引用类型值

baload            从数组中装载byte类型或boolean类型值

caload            从数组中装载char类型值

saload            从数组中装载short类型值

1.3   将栈中的值存入局部变量的指令
istore            将int类型值存入局部变量

lstore            将long类型值存入局部变量

fstore            将float类型值存入局部变量

dstore            将double类型值存入局部变量

astore            将将引用类型或returnAddress类型值存入局部变量

istore_0        将int类型值存入局部变量0

istore_1        将int类型值存入局部变量1

istore_2        将int类型值存入局部变量2





istore_3        将int类型值存入局部变量3

lstore_0        将long类型值存入局部变量0

lstore_1        将long类型值存入局部变量1

lstore_2        将long类型值存入局部变量2

lstore_3        将long类型值存入局部变量3

fstore_0        将float类型值存入局部变量0

fstore_1        将float类型值存入局部变量1

fstore_2        将float类型值存入局部变量2

fstore_3        将float类型值存入局部变量3

dstore_0        将double类型值存入局部变量0

dstore_1        将double类型值存入局部变量1

dstore_2        将double类型值存入局部变量2

dstore_3        将double类型值存入局部变量3

astore_0        将引用类型或returnAddress类型值存入局部变量0

astore_1        将引用类型或returnAddress类型值存入局部变量1

astore_2        将引用类型或returnAddress类型值存入局部变量2

astore_3        将引用类型或returnAddress类型值存入局部变量3

iastore            将int类型值存入数组中

lastore            将long类型值存入数组中

fastore            将float类型值存入数组中

dastore            将double类型值存入数组中

aastore            将引用类型值存入数组中

bastore            将byte类型或者boolean类型值存入数组中

castore            将char类型值存入数组中

sastore            将short类型值存入数组中

wide指令

wide            使用附加字节扩展局部变量索引

1.4   通用(无类型)栈操作
nop            不做任何操作

pop            弹出栈顶端一个字长的内容

pop2            弹出栈顶端两个字长的内容

dup            复制栈顶部一个字长内容

dup_x1            复制栈顶部一个字长的内容,然后将复制内容及原来弹出的两个字长的内容压入栈





dup_x2            复制栈顶部一个字长的内容,然后将复制内容及原来弹出的三个字长的内容压入栈

dup2            复制栈顶部两个字长内容

dup2_x1            复制栈顶部两个字长的内容,然后将复制内容及原来弹出的三个字长的内容压入栈

dup2_x2            复制栈顶部两个字长的内容,然后将复制内容及原来弹出的四个字长的内容压入栈

swap            交换栈顶部两个字长内容

1.5   类型转换
i2l            把int类型的数据转化为long类型

i

热点排行