Smali语言基础语法
1、Smali语言基础语法-数据类型与描述符
smali中有两类数据类型:基本类型和引用类型。引用类型是指数组和对象,其它都是基础类型。
基本类型以及每种类型的描述符:
| Java类型 | 类型描述符 | 说明 |
| boolean | Z | 布尔型 |
| byte | B | 字节型 |
| short | S | 短整型 |
| char | C | 字符型 |
| int | I | 整型 |
| long | J | 长整型 |
| float | F | 双精度型 |
| void | V | 返回类型 |
引用类型分两种,对象类型与数组类型:
字段的描述
方法的描述
java方法:public char charAt(int index){......}
Davilk描述:Ljava/lang/String;->charAt(I)C
java方法:public void getChars(int srcBegin, int srcEnd, char dst[], int dstBegin){......}
Davilk描述:Ljava/lang/String;->getChars(II[CI)V
java方法:public boolean equals(Object anObject){......}
Davilk描述:Ljava/lang/String;->equals(Ljava/lang/Object;)Z
2、Smali语言基础语法-寄存器与传参以及局部变量
.registers指令指定了方法中寄存器的总数 .locals指令表明了方法中非参寄存器的数量
| V命名方式 | P命名方式 | 说明 |
| v0 | v0 | 局部变量 |
| v1 | v1 | 局部变量 |
| v2 | p0 | 参数0,this指针 |
| v3 | p1 | 参数1 |
| v4 | p2 | 参数2 |
public void callMe0(int a, int b)
{
System.out.println(a + b);
}
反编译之后的smali汇编代码 smali 代码中#后面是注释
# virtual methods
.method public callMe0(II)V
.locals 2 # 定义局部变量寄存器
.param p1, "a" # I 声明参数
.param p2, "b" # I .line 16 # 源码所在行数
# 获取out对象
sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
# 将参数累加
add-int v1, p1, p2
# 输出信息
invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(I)V .line 17
return-void
.end method
| 寄存器 | 说明 |
| p0 | this |
| p1 | I |
| p2,p3 | J |
| p4 | Z |
Smali语言基础语法的更多相关文章
- C语言基础语法
#include <stdio.h> int main() { int age; printf("input your age"); scanf("%d&qu ...
- 黑马程序员——OC语言基础语法 面向对象的思想
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结)(一)基础语法 1)关键字 @interface.@implementati ...
- 黑马程序员——C语言基础语法 关键字 标识符 注释 数据及数据类型
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (一下内容是对黑马苹果入学视频的个人知识点总结) (一)C语言简单介绍 (1)C语言程序是由函数组成的任何C语言程序都是由一 ...
- php语言基础语法与编程工具推荐
php脚本语言,需要在服务器端执行,用浏览器返回HTML结果.在PHP中所有的语法都是如此,用户端是无法修改的,只有浏览权限. 一.php基础语法之输出方法 1.PHP中所有的脚本,可以放在文件中的任 ...
- C语言基础语法之指向函数的指针
指针是C语言的精髓,对于初学者来讲,指针是C语言语法学习中比较难的知识点,而这里面指向函数的指针更是不太容易理解. 下面给大家讲下怎样学习理解C语言中指向函数的指针及编程方法和使用例子. 注意:这是一 ...
- Python语言基础-语法特点、保留字与标识符、变量、基本数据类型、运算符、基本输入输出、Python2.X与Python3.X区别
Python语言基础 1.Python语法特点 注释: 单行注释:# #注释单行注释分为两种情况,例:第一种#用于计算bim数值bim=weight/(height*height)第二种:bim=we ...
- NDK以及C语言基础语法(一)
一.什么是NDK? Native Development Kit (本地开发工具包): NDK中提供了一系列的工具,帮助我们快速开发C/C++的动态库,并能自动将so文件和java文件一起打包成apk ...
- Go语言--基础语法笔记
### 换了工作,好久没有添加新文章了,本来是想更新到github上的,想想还是在博客里放着,感觉以前的文章都没有很仔细,都只是问题处理的记录, 以后想新加一些整理的笔记也好 ### 主要内容 2.1 ...
- GO_03:GO语言基础语法
1. Go项目的目录结构 一般的,一个Go项目在GOPATH下,会有如下三个目录: project --- bin --- pkg --- src 其中,bin 存放编译后的可执行文件:p ...
随机推荐
- 【深入学习MySQL】MySQL的索引为什么使用B+树?
前言 在MySQL中,无论是Innodb还是MyIsam,都使用了B+树作索引结构(这里不考虑hash等其他索引).本文将从最普通的二叉查找树开始,逐步说明各种树解决的问题以及面临的新问题,从而说明M ...
- [AWS] S3 Bucket
云存储服务 2.1 为网站打开属性 属性和权限设置 设置bucket属性,打开功能:Static website hosting(静态网站托管) 设置bucket权限,Permissions ---- ...
- [C++] 访问控制与继承详解
1.访问控制中有三种角色:基类及其友元,派生类,类用户(对象):访问说明符分为public/protected/private,类的成员也相应的分为了3种. 2.访问说明符又分为两种:一个是基 ...
- C++基础之顺序容器
顺序容器简介: 顺序容器类型 描述 vector 可变大小数组,支持快速访问,在尾部之外的地方插入或删除时可能很慢 deque 双端队列.支持快速访问,在头尾插入删除会很快. list 双向列表.只支 ...
- 算法题解:最大或最小的K个数(海量数据Top K问题)
题目 输入 n 个整数,找出其中最小的 k 个数.例如输入4.5.1.6.2.7.3.8 这8个数字,则最小的4个数字是1.2.3.4. 初窥 这道题最简单的思路莫过于把输入的 n 个整数排序,排序之 ...
- MySql一个生产死锁案例分析
接到上级一个生产环境MySQL死锁日志信息文件,需要找出原因并解决问题.我将死锁日志部分贴出如下: 在mysql中使用命令:SHOW ENGINE INNODB STATUS;总能获取到最近一些问题信 ...
- 前沿科技-混合现实(MR)远程协作辅助工具:微缩虚拟形象Mini-Me
今天分享一篇在刚刚结束的CHI’2018上发表的full paper.该文章由来自澳洲University of South Australia的Piumsomboon等人和来自新西兰Universi ...
- 鱼和熊掌可兼得?一文看懂又拍云 SCDN
转眼已是 9102 年,参与工作多年的二狗子凭借他聪明的脑瓜和孜孜不倦的钻研精神,成为了某中型企业的资深网站管理员.不同于一般的"网管",二狗子自然是业内最优秀的那一类. 但是,最 ...
- redis安装详细
1.cd命令到你的下载文件夹下 2.输入命令下载redis ,可以自己选择下载的路径,redis表示版本号 wget http://download.redis.io/releases/redis ...
- 02-35 scikit-learn库之支持向量机
目录 scikit-learn库之支持向量机 一.SVC 1.1 使用场景 1.2 代码 1.3 参数详解 1.4 属性 1.5 方法 二.LinearSVC 三.NuSVC 四.LinearSVR ...