Android反编译后代码阅读

1.反编译

可以查看批量修改安卓apk包名,这里不做介绍,这篇主要介绍如何阅读反编译后的java代码, 反编译出的java代码以smali的形式存在,这是一种类似于汇编的语言。android目前使用的是dalvik虚拟机,所以下面的叙述都是基于dalvik虚拟机字节码。

2. 正文

2.1 类型
dalvik字节码只有两种基本类型,即原始数据类型和引用类型。数组(Array)和对象(object)是引用类型,其余都是原始数据类型

2.1.1 原始数据类型可以用一个字符表示它们的类型,下面是它们的对应表

字母类型
Vvoid - can only be used for return types
Zboolean
Bbyte
Sshort
Cchar
Iint
Jlong (64 bits)
Ffloat
Ddouble (64 bits)

2.1.2 对象类型

格式 Lpackage/name/ObjectName;

字段意义
Lobject
package/name/表示包名
ObjectName类型名
结束

举例说明(在java中的对应关系)
Ljava/lang/String; ---> java.lang.String

2.1.3 数组

格式 [I

字段意义
[Iint类型的一维数组
[[Iint类型的二维数组

以此类推,几个[表示几维数组

举例说明(在java中的对应关系)
[I ---> int []

2.2 方法

格式
.method [public] [static] methodName(param_list)return_type
.end method

注意:[]表是可以选,比如static可以没有,public可以是private

举例:
.method public CheckNetWorking()I
.end method
解析:以下是java代码
public int CheckNetWorking()
{
}

2.3 Fields表示类的成员变量

举例:
.field private static appid:Ljava/lang/String;
解析:以下是java代码
private static String appid;

2.4 寄存器(Registers)

寄存器包含本地变量和参数,本地变量从v0~v4一共5个,参数从p0~p2三个参数

LocalParam
v0the first local register
v1the second local register
v2p0the first parameter register
v3p1the second parameter register
v4p2the third parameter register

3.参考资料

https://source.android.com/devices/tech/dalvik/dalvik-bytecode.html
https://github.com/JesusFreke/smali/wiki/Registers
https://github.com/JesusFreke/smali/wiki/TypesMethodsAndFields

转载于:https://www.cnblogs.com/zjzyh/p/6601204.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值