Iterator<对象><对象名>=<方法返回一个对象列表>;
for(<对象><对象名>:<对象列表>){
[处理单个对象的代码体]
}
或者
Iterator <对象><对象名>= <方法返回一个迭代器>;
while(<迭代器>.hasNext()){
<对象><对象名>=<迭代器>.next();
}
下面看看具体的Smali语法表示
先是While类型
关键代码分析一下
:goto_0 #迭代循环开始 //我认为这就是一个标志,后面肯定有一个返回到这里的命令
invoke-interface {v4} ,Ljava/util/Iterator;→hasNext()Z #传入v4变量到这个函数 Z表示bool型
move-result v5
if-nez v5,:cond_0 #我们认为这是从上面调用的函数的返回值,赋给v5 这个if 表示不为0则跳走
后面理所当然的发型了cond_0
invoke-interface{v4} , Ljava/util/Iterator;→next()ljava/lang/Object #我们认为这是类型转换为Object(对象)类型
/
*
/
最后 goto :goto_0
接下来是for循环
:goto_0
if-lt v1 ,v5 ,:cond_0 //如果v1小于v5则跳走
:cond_0
invoke-interface {v0,v1}, Ljava/util/List;→get(I)Ljava/lang/Object;
add-int/lit8 v1,v1,0x1 #下一个索引
goto:goto_0 #跳转到循环开始处
—————————————————————————————————————————————————————我是分割线———————————————————————————————————————————————————————————————————
接下来,Switch分支语句
这个就相对轻松愉快,
packed-swithch p1,:pswitch_data 0#指定目标
const-string v0 #default分支
:pswitch_data #跳转过来
.packed-swithch 0x0 #case区域
:pswitch_0 #case 0 #跳转上去
.
.
.
.end packed-swithch
此外还有关于switch的偏移计算,就不列举了
—————————————————————————————————————————————————————我是分割线———————————————————————————————————————————————————————————————————
try/catch语句
try_start_data #try开始
try_end_data #try结束