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 ...
随机推荐
- Tomcat部署spring boot项目
Tomcat部署spring boot项目 需要在启动类做修改
- java数据结构——哈希表(HashTable)
哈希表提供了快速的插入操作和查找操作,每一个元素是一个key-value对,其基于数组来实现. 一.Java中HashMap与Hashtable的区别: HashMap可以接受null键值和值,而Ha ...
- Spring boot集成Rabbit MQ使用初体验
Spring boot集成Rabbit MQ使用初体验 1.rabbit mq基本特性 首先介绍一下rabbitMQ的几个特性 Asynchronous Messaging Supports mult ...
- selenium-04-验证码问题
对于web应用来说,大部分的系统在用户登录时都要求用户输入验证码,验证码的类型的很多,有字母数字的,有汉字的,甚至还要用户输入一条算术题的答案的,对于系统来说使用验证码可以有效果的防止采用机器猜测方法 ...
- Jmeter日记,很乱很随意
这个笔记是写给自己看的,很乱很随意,可能以后自己都看不懂.哈哈 Jmeter两种录制方式: 1使用badboy 2.使用代理 浏览器设置代理 参数化 随机参数化 插件的使用 官网下载和说明https: ...
- Android之SOAP协议与WebService服务器交互,解决超时的问题
网络搜索大部分不能实际解决问题.特意将解决方法写下.创建MyAndroidHttpTransport 类 , package com.example.omhandroid.lib; import or ...
- Spring 梳理 - JavaConfig实战(spring MVC)-原创
目录结构 AppInitializer.java package com.jt; import org.springframework.web.servlet.support.AbstractAnno ...
- C#2匿名方法中的捕获变量
乍一接触"匿名方法中的捕获变量"这一术语可能会优点蒙,那什么是"匿名方法中的捕获变量"呢?在章节未开始之前,我们先定义一个委托:public delegate ...
- 两小无猜的爱恨情仇--java =+和+=揭秘
故事背景 当一个人问另一个人“敢不敢”的时候,另一个人必须说“敢”,这就是游戏的规则.小男孩朱利安和小女孩苏菲的相遇即开始于这样一场孩童的闹剧,一个精美的铁盒子就是他们游戏的见证.说脏话,扰乱课堂,在 ...
- (八十二)c#Winform自定义控件-穿梭框
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...