近日在拜读非大的书时,在3.4.1中的代码有几点不大明白的地方,希望指点下
.class public LHelloWorld #定义类名
.super Ljava/lang/object #定义父类
.method public static main( [Ljava/lang/String; )V #Main方法
.registers4 #使用了4个参数寄存器
.parameter #一个参数
.prologue #代码开始指令
#数据定义指令
const/16 v0, 0x8 #将0x8扩展为32位后赋值给v0
const/4 v1, 0x5 #将0x5扩展为32位后赋值给v1
???'const/4'与'const/16'的区别
const/4 v2, 0x3
#数据操作指令
move v1, v2
#数组操作指令
new-array v0, v0, [I #构建一个int型数组大小为v0也就是0x8将数组地址赋值给v0
array-length v1, v0 #获取v0中数组长度赋值给v1等同于数组复制
#实例操作指令
new-instance v1, Ljava/lang/StringBuilder; #构造一个StringBuilder对象放在v1中
#方法调用指令
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
#???StringBulider的构造函数
#跳转指令
if-nez v0, :cond_0 #如果v0不为0就跳转到cond_0标记处
goto :goto_0 #跳转到goto_0标记处
:cond_0 #标记
#数据转移指令
int-to-float v2, v2 #将v2中的float转换为int
#数据运算指令
add-float v2, v2, v2 #v2累加在v2中
#比较指令
cmpl-float v0, v2, v2 #比较结果为0 如果第三个寄存器大于第二个寄存器结果为-1 相等为0 下于为1
#字段操作指令
sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream
const-string v1, "Hello World" #构造字符串到v1
#方法调用指令
invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V #调用println
:goto_0
return-void #返回空
.end method
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)