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 ...
随机推荐
- iOS 开发中一些 tips
tableView 的 tableHeaderView 高度不正确的问题: func forceRefreshHeader() { let size = headerView.systemLayout ...
- hadoop集群zookeeper迁移
1. zookeeper作用 ZooKeepr在Hadoop中的应用主要有: 1.1 HDFS中NameNode的HA和YARN中ResourceManager的HA. 1.2 存储RMStateSt ...
- Docker运行mysql,redis,oracle容器和SpringBoot项目
dokcer运行SpringBoot项目 from frolvlad/alpine-oraclejdk8:slim VOLUME /tmp ADD target/demo-0.0.1-SNAPSHOT ...
- hadoop之mapreduce详解(进阶篇)
上篇文章hadoop之mapreduce详解(基础篇)我们了解了mapreduce的执行过程和shuffle过程,本篇文章主要从mapreduce的组件和输入输出方面进行阐述. 一.mapreduce ...
- CSS3 box-shadow阴影
box-shadow: color x-offset v-offset blur spred color: 阴影的颜色 x-offset: 阴影水平距离; 0: 左右阴影平分:正值:阴影在对象的右侧: ...
- Docker系列(五):.Net Core实现k8s健康探测机制
k8s通过liveness来探测微服务的存活性,判断什么时候该重启容器实现自愈.比如访问 Web 服务器时显示 500 内部错误,可能是系统超载,也可能是资源死锁,此时 httpd 进程并没有异常退出 ...
- JAVA的List接口的remove重载方法调用原理
前言 说真的,平常看源码都是自己看完自己懂,很少有写出来的冲动. 但是在写算法的时候,经常用到java中各种集合,其中也比较常用到remove方法. remove有重载函数,分别传入参数是索引inde ...
- Kafka0.11之RoundRobinPartitioner/HashPartitioner(Scala):
RoundRobinPartitioner/HashPartitioner: import java.util import java.util.concurrent.atomic.AtomicLon ...
- MongoDB 学习笔记之 Aggregation Pipeline
Aggregation Pipeline: 常用操作符介绍: $project:包含.排除.重命名和显示字段 $match:查询,需要同find()一样的参数 $limit:限制结果数量 $skip: ...
- MySQL 复制已存在的表生成新表
从已有的表创建一个新的空表 CREATE TABLE new_table LIKE old_table; 注意: create table ... like 创建的表会保留原有表的字段.索引的定义,但 ...