smali java jeb_Apktool 和 Jeb 给出的不同的smali语法

今天发现用Apktool和Jeb反编译出来的smali在语法上有一定区别,比如一个Java函数:

private voidpackageNameCheck()

{

com.example.testfor360.MainActivity mm= newcom.example.testfor360.MainActivity();

mm.packageNameCheck();

}

用Jeb反编译出来是这样的:

.method privatepackageNameCheck()V

.registers2.prologue00000000 new-instance v0, MainActivity00000004 invoke-direct MainActivity->()V, v0

.local v0, mm:Lcom/example/testfor360/MainActivity;

0000000A invoke-virtual MainActivity->packageNameCheck()V, v000000010 return-void.end method

而用Apktool反编译出来是这样的:

.method privatepackageNameCheck()V

.locals1.prologue  #代码起始指令

.line80

new-instance v0, Lcom/example/testfor360/MainActivity;

invoke-direct {v0}, Lcom/example/testfor360/MainActivity;->()V

.line81.local v0, mm:Lcom/example/testfor360/MainActivity;

invoke-virtual {v0}, Lcom/example/testfor360/MainActivity;->packageNameCheck()V

.line82

return-void  #返回空.end method

仅仅这一小段看来,有这些区别:

1.Apktool的smali中所有的类都用了完整路径名(L打头),并且以分号结束,包括后面;->的之前,也加了分号;而Jeb只写了类名,并且不带分号

2.方法调用指令invoke-direct中,Apktool把寄存器放到了前面,并且用open brace "{" 和 close brace"}"括起来了;Jeb把寄存器放到了后面,没有大括号

另外,Apktool里的.line在Jeb里也没有出现。

再另外,APKIDE反编译出来的和Apktool基本一致,不同的地方是new出来的对象mm他给加了双引号。看了下APKIDE目录下就有APKTOOL文件夹,基本确定就是用Apktool反编译的,只是Apktool版本不同罢了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值