Smali是Android虚拟机Dalvik反汇编的结果。

Dalvik指令集

指令格式为:[op]-[type](可选)/[位宽,默认4位] [目标寄存器],[源寄存器](可选)

赋值:move*  v1,v2

返回操作:return-[type]  (void ,不带, object,wide)

声明常量:  const(/4、/16、/hight16) v1 im  将常量赋值给v1寄存器,const-wide(/16、/32、/hight16) v1 im  将双字型常量赋值给v1寄存器,const-string(/jumbo) v1 “str”  过长时需要加上jumbo,const-class v1 La/b/TargetClass  将Class常量a.b.TargetClass赋值给v1

调用函数:invoke-[kind()] {参数表}, 函数名@BBBB

invoke-virtual      :用于调用一般的,非private、非static、非final、非构造函数的方法,它的第一个参数往往会传p0,也就是this指针
invoke-super       :用于调用父类中的方法,其他和invoke-virtual保持一致
invoke-direct       :用于调用private修饰的方法,或者构造方法
invoke-static       :用于调用静态方法,比如一些工具类
invoke-interface  :用于调用interface中的方法

判断: if-*  v1,v2 【less than - lt,greater than - gt,equal -eq, not -ne,le,ge】

比较:cmp* v1,v2,v3 等价于 v1 = (v3 - v2)%1

取值(get)和赋值(put): iget* 和 iput*

类型转换 :如 float-to-int  将v2寄存器中的float类型值转换为int类型,并赋值给v1寄存器

算术运算 :add-int/2addr v1, v2 将v1、v2寄存器中的值相加,并赋值给v1寄存器

注:lit8(limit)是对要加的常量的长度限制,如果不写,则默认为4位,还可选择lit16,即16bit

语法:

.field  定义变量

.locals   指定了方法中非参寄存器的总数(局部变量的个数)

.method  方法

.parameter  方法参数

.prologue  方法开始

.line   指定了该处指令在源代码中的位置
 

数据类型:

  • V void,只能用于返回值类型

  • Z boolean

  • B byte

  • S short

  • C charI intJ long(64 位)

  • F floatD double(64 位)

  • L Java 类类型

  • [ 数组类型

Android逆向之smali学习的更多相关文章

  1. Android逆向之smali

    Android逆向之smali 头信息 smail文件前三行 .class <访问权限> [关键修饰字] <类名>; .super <父类名>; .source & ...

  2. Android逆向之smali语法宝典

    0x01.前言 Android采用的是java语言进行开发,但是Android系统有自己的虚拟机Dalvik,代码编译最终不是采用的java的class,而是使用的smali.我们反编译得到的代码,j ...

  3. Android逆向——smali复杂类解析

    i春秋作家:HAI_ 之前在Android逆向——初识smali与java类中讲解了基本的HelloWorld和简单类.这节课就要进一步深入.如果能够耐下心来分析一定会有所收获.——写给自己和后来人. ...

  4. Android逆向破解表单登录程序

    Android逆向破解表单登录程序 Android开发 ADT: android studio(as) 程序界面如下,登录成功时弹出通知登录成功,登录失败时弹出通知登录失败. 布局代码 <?xm ...

  5. android逆向学习小结--CrackMe_1

    断断续续的总算的把android开发和逆向的这两本书看完了,虽然没有java,和android开发的基础,但总体感觉起来还是比较能接收的,毕竟都是触类旁通的.当然要深入的话还需要对这门语言的细节特性和 ...

  6. Android逆向学习资料

    Android逆向基础之Dalvik虚拟机: https://lyxw.github.io/archivers/Android%E9%80%86%E5%90%91%E5%9F%BA%E7%A1%80% ...

  7. 2021年正确的Android逆向开发学习之路

    2021年正确的Android逆向开发学习之路 说明 文章首发于HURUWO的博客小站,本平台做同步备份发布.如有浏览或访问异常或者相关疑问可前往原博客下评论浏览. 原文链接 2021年正确的Andr ...

  8. 【转】Android逆向入门流程

    原文:https://www.jianshu.com/p/71fb7ccc05ff 0.写在前面 本文是笔者自学笔记,以破解某目标apk的方式进行学习,中间辅以原理性知识,方便面试需求. 参考文章的原 ...

  9. Android逆向-Android基础逆向(5)

    本文作者:i春秋作家——HAI_ 0×00 前言 不知所以然,请看 Android逆向-Android基础逆向(1)Android逆向-Android基础逆向(2)Android逆向-Android基 ...

随机推荐

  1. 随便说说sequelize的问题

    最近在做的项目频繁的修改数据库让人感觉很烦躁,sequelize在执行sync的时候只会重新创建表,如果原先有数据只能直接删除,但是这样显然是不行的,因为数据不能就这么消失了吧. 所以必须要migra ...

  2. I/O多路复用之 epoll 详解

    1,epoll 原理(POLLIN,POLLOUT 状态): https://blog.csdn.net/hdutigerkin/article/details/7517390 https://blo ...

  3. 第五周博客作业 <西北师范大学| 周安伟>

    第五周博客作业 一,助教博客链接https://home.cnblogs.com/u/zaw-315/ 二,本周工作查阅项目汇报,班级微信群.对同学们的中期项目汇报进行查看,解决上周留言问题,对及时出 ...

  4. 2018-2019-2 20175126谢文航 实验二《Java面向对象程序设计》实验报告

    一.实验报告封面 课程:Java程序设计 班级:1751 班 姓名:谢文航 学号:20175126 指导教师:娄嘉鹏 实验日期:2019年4月17日 实验时间:--- 实验序号:实验二 实验名称:Ja ...

  5. 从零开始学spring cloud(五) -------- 将服务注册到Eureka上

    一.开发前准备工作: 官方文档地址:https://cloud.spring.io/spring-cloud-static/spring-cloud-netflix/2.1.0.RELEASE/mul ...

  6. git 安装及常见问题处理

    卸载掉自带的: yum remove git 安装: yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-de ...

  7. JavaSE基础知识(5)—面向对象(方法的重写与重载)

    一.重写 1.说明 子类对继承过来的父类的方法进行改造,这种现象称为方法的重写或覆盖或覆写(Override) 2.要求 方法签名完全一致,jdk5.0之后,允许返回类型可以是子类类型,权限修饰符可以 ...

  8. CentOS7 下安装GUI图形界面GNOME

    在安装Gnome包之前,需要检查一下网络是否有网络(使用ping www.baidu.com) 一.先装X windows,-y表示参数同意所有软件安装操,当出现 Complete!说明这里安装成功了 ...

  9. Git上传代码的步骤

    1.git status 列出来所有修改的文件2.git add 所有的文件列表,或者git add -A,添加所有文件到Add列表 3.git reset --hard 取最新的git标签 4.gi ...

  10. mysql 主从库同步

    #主库修改my.ini [mysqld] server log-bin=mysql-bin binlog-do-db=demo #从库修改my.ini [mysqld] server replicat ...