首页 > 编程知识 正文

llvm编译器实战教程pdf,安卓smali翻译器

时间:2023-05-03 06:35:43 阅读:173877 作者:665

//本代码由autojs交流群在群里和网上整理提供的一键式群里有侵权,请联系删除

进入资源网站获取更多实战视频

Smali的基本语法

. field private isFlag:z定义变量

. method方法

. parameter方法参数

. prologue方法开始

. line 12此方法位于第12行

invoke-super调用父函数

const/high 16v0,0x7fo3将0x7fo 3代入v 0

invoke-direct调用函数

return-void函数返回void

. end method函数结束

新实例创建实例

输入-对象对象分配

iget-object调用对象

invoke-static调用静态函数

===================

条件跳转分支(最常用。 ) :

如nez为eqz,eq为ne那样,颠倒逻辑,实现解读的目的。

' if-eq vA,vB,cond_ " 如果vA等于vB则跳转到:cond_

' if-ne vA,vB,cond_ " 如果vA不等于vB则跳转到:cond_

' if-lt vA,vB,cond_ " 如果vA小于vB则跳转到:cond_

' if-ge vA,vB,cond_ " 如果vA大于等于vB则跳转到:cond_

' if-gt vA,vB,cond_ " 如果vA大于vB则跳转到:cond_

' if-le vA,vB,cond_ " 如果vA小于等于vB则跳转到:cond_

' if-eqz vA,cond_ " 如果vA等于0则跳转到:cond_

' if-nez vA,cond_ " 如果vA不等于0则跳转到:cond_

' if-ltz vA,cond_ " 如果vA小于0则跳转到:cond_

' if-gez vA,cond_ " 如果vA大于等于0则跳转到:cond_

' if-gtz vA,cond_ " 如果vA大于0则跳转到:cond_

' if-lez vA,cond_ " 如果vA小于等于0则跳转到:cond_

====================

if函数的java代码:

私有布尔if sense

BooleanTempflag=((3-2)==1)? 真:假;

if (模板) {

返回真;

}else{

返回假;

}

}

if函数分析:

. method private ifSense () z

. locals 2

. prologue.line 22 const/4v 0,0x1//v 0赋值为1.line 24.local v0,tempflag:zif-eqzv0,cond_0//确定v0是否为0,不符合条件的执行cond_0分支. line 25 const/4 v1,0x1//符合条件的分支. line 27: goto _0reto

##字符说明:如果符合if分支,程序向下进行,最终返回; 如果不满足条件,则转到:cond_0分支,最终执行goto 3:goto_0并返回到3360goto_0

===================

for函数java代码:

私有语音传感器

liststr=newArraylist(count );

for(intI=0; i COUNT; I ) {

listStr.add (“现在轮到我出场了”)

}

}

for函数分析:

. line 40

const/4v 0,0x 0

. local v0,i:I:goto_0if-lt v0,v3,cond_0//if-lt确定数值v0小于v3,如果不继续,则执行分支: cond _0. line 43 return-void.line 41: cond _0////引用位置const-string v2,' _73b0(u5728(u8f6e(u5230 ) u6211 ) u4e0a ) u573a ) e50 ) invoke-interface{v1,- add (ladd ) )因为Z //List是接口,所以运行接口方法add.line 40add-int/lit8 v0,v0,0x1//,将第二个v 0寄存器的值和0x1放入第一个寄存器中

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。