smali语法

smali基本语法简介(与java对比) 阅读详情

临时要看Android的smali文件,就边看边记录着吧

1.
在网上看了一些smali语法的说明,发现跟我反编译出现的smali语法不太一样,猜测是不同反编译器反编译出来的会有所不同,也可能是不同Android版本的smali语法本身就不一样,反正不管了,有时间再去研究这个,先说下我用Android版本和反编译工具

android 17 (android sdk 4.2.2-576024)
dex2jar-2.0

2.
介绍下这个apk反编译工具–dex2jar,dex2jar 是一个能操作Android的dalvik(.dex)文件格式和Java的(.class)的工具集合,他包含了以下这些功能(不完全,还有不少没用过),对了,支持 windows 和 liunx(含mac) 环境

  • dex to jar
  • dex to smali
  • jar to dex
  • jar to smali
  • apk to smali
  • …

3.
dex2jar就到这里,smali语法还是挺好玩的,比如下面这个

.method public close()V
    .annotation system Ldalvik/annotation/Throws;
        value = {
            Ljava/io/IOException;
        }
    .end annotation
# ...
    return-void
.end method

注:smali代码中,# 表示注释。

上面这段smali代码写成Java代码是这样的

public void close() throws java.io.IOException {
    // ...
}

好玩吧,annotation包含的代码段是申明一个异常-Ldalvik/annotation/Throws,表示该方法将会抛出一个异常,具体的异常类型在annotation代码块里写明。方法对外抛出异常时,smali代码中,annotation总是在第一行就会申明的。

当然,从上面smali代码里,还可以看出更多的信息,比如一个方法是用

.method
# ...
.end method

表示的,都是成对出现,还有

.method public close()V

close表示方法名,public表示作用域,最后面跟着的大V,表示该方法的返回值为无类型,即无返回值,大V表示Java中的 void 类型

注:Java中的关键字void也是一种类型,表示无类型,只能用于方法返回值类型。

下面简单列下smali中的类型符号及其与Java的类型对应(只列出原始类型)

 - V > void
 - Z > boolean
 - D > double
 - F > float
 - J > long
 - S > short
 - I > int
 - B > byte
 - C > char

以上是原始类型符号,复杂类型(对象类型)的表示符号也很好认识,当然,在上面smali代码里也能找到例子,比如第四行:

Ljava/io/IOException;

这就是一个Java对象类型

java.io.IOException

smali中,对象类型用

Lpackage/class;

表示,其中 package是包名,点号符用斜杆符替换,L表示类型名称开始标记,;(半角分号)表示类型名称结束标记,也挺清朗的啊。

……

可参考 Sam的博客:http://blog.isming.me/2015/01/14/android-decompile-smali/
……

对了,同时发现一个时间管理的好方法,叫番茄工作法,有兴趣的可以尝试一下。

精简番茄如下:

25分钟+5分钟休息=一个番茄
4个番茄+20分钟休息=一个番茄组

Android逆向之smali语法 当我们发现某应用有个很牛逼功能的时候,还在为如何实现和拿不到源码而烦恼吗? 当我们写的app需要考虑安全性的时候,还在为明明用了混淆和第三方加固,但别人还是能破解而烦恼吗? 当我们发现api在某些手机上被弃用,而其他应用或系统应用又能实现该功能的时候,还在为相同的api自己却不能用而烦恼吗? 前车之鉴:当我们用一些工具去打开反编译后的代码,看着一团麻的指令和一些你从未见过的关键字、代码格式风格,赖... 阅读详情

相关推荐

深入掌握Smali语法:Android逆向工程的核心

Smali语法是Android平台上Dex文件的文本表示形式。Dex文件是Dalvik Executable的缩写,它是Android操作系统执行的一种文件格式。Smali语法使得开发者能够直接查看和修改应用的字节码,这对于理解应用的行为和修改其功能至关重要。

weixin_43822401的博客 1335

smali语法整理

最近由于工作的需要,研究了下反编译相关,自己整理了些smali语法相关的资料,在这里分享给大家,如果有错误的地方还望大家能指出来,一起讨论学习~

huangming 3020

安卓逆向入门——smali语法(下)

字符串数据字节码数据数值类型数据const-string v0, "hello" # 定义字符串 将字符串"hello"赋值给v0# 定义字节码对象 将GoActivity.class对象赋值给v0# 一下数据定义高位默认为符号位const/4 v0, 0x2 # 定义一个容器 最大只允许存放半字节4位数据 取值范围为 -8 and 7const/16 v0, 0xABCD # 定义一个容器 最大只允许存放16位数据 比如short类型数据 取值范围为-32768~32767。

不会算法的小白的博客 2822

Smali基本语法(一)

Note that: 需要安卓开发的基础知识. 这个课题,将会拆成几篇,向你讲解一些基本的Smali语法。我会先向你展示一些原样的Java代码。再展示反编译后,对应的Smali代码。通过二者的对比,来一 一的进行定义讲解。 一、类定义: 我们来看一下,android中最基本的类定义,这里以一个基础的MainActivity为样版。 如图所示,我们可以得出以下这些信息: 1、这是一个公...

李岳锋的专栏 1万+

深入解析Android应用:使用baksmali和smali工具

smali语言是一种中间语言,它用于表示Android平台上的DEX文件。smali指令集相当丰富,用于表述几乎所有的Android虚拟机(Dalvik VM)指令。每条指令都是以助记符开始,后面跟有不同的参数。这些助记符清晰地反映了每条指令要执行的操作,例如加法指令是add,条件跳转指令是if-eq等。smali语法的一个核心特点是它的高度声明性,它不是用来编写程序的,而是用来呈现编译后的代码。因此,smali代码通常显得比较简洁,并且遵循一种一致的模式。

weixin_35756892的博客 1158

scRNA-seq的fastq文件处理流程——持续更新

获得了一批新的scRNA-seq的fastq.gz文件,每个样本的数据形式为: 我打算使用10X cellranger处理fastq.gz文件,下载及安装方式在官网:https://support.10xgenomics.com/single-cell-gene-expression/software/downloads/2.0这个网址写了10X cellranger处理fastq.gz文件的命名规则https://support.10xgenomics.com/single-cell-gene-expr

watermel__的博客 3199

smali代码结构解析

smali代码结构解析

影龙武的博客qq_43594119 1325

ChatGPT Web转API工具:原理、部署与集成实战

在AI应用开发中,API(应用程序编程接口)是实现系统间通信和数据交换的核心技术,它通过标准化的请求响应机制,将复杂功能封装为可编程的服务。其工作原理基于HTTP协议,通过定义清晰的端点、方法和数据格式,使不同平台的应用能够高效集成AI能力。这一技术价值在于极大降低了开发门槛,促进了自动化流程和智能功能的快速落地,广泛应用于智能客服、内容生成和创意辅助等场景。本文聚焦于如何通过浏览器自动化技术,将ChatGPT的Web界面能力转化为标准API服务,其中涉及Playwright无头浏览器操作和会话Cookie

weixin_42533910的博客 1767

Smali基础语法

一.Smali含义 Smali是Davlik的寄存器语言,语法上和汇编语言类似. Davlik是基于寄存器的,就是说smali里的所有操作都必须经过寄存器来进行. 二.Smali基本类型 B—byte C—char D—double F—float I—int S—short V—void J—long Z—boolean 三.Smali引用类型 [XXX ----> ...

李孝贤 1万+

MAS1102量产工具实战指南:从下载到开卡,附固件选择与RDT优化技巧

本文提供MAS1102量产工具的实战指南,涵盖从工具下载、短接识别到开卡操作的全过程。重点解析了固件选择策略与RDT优化技巧,帮助用户成功修复基于联芸MAS1102主控的固态硬盘,解决常见开卡错误并提升SSD性能与稳定性。

c2d3e4f的博客 2208

YOLO26优化:注意力魔改 | 用于微小目标检测的上下文增强和特征细化网络ContextAggregation,助力小目标检测,暴力涨点

用于微小目标检测的上下文增强和特征细化网络ContextAggregation,助力小目标检测

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 491

Smali语法小记

Smali语法小记

HWHXY的博客 1007

【Claude Code 源码解析教程】第4章:QueryEngine 查询引擎

本章深入解析 Claude Code 的核心引擎——QueryEngine,它是整个对话系统的"心脏",负责管理会话状态、消息处理流程和多轮对话支持。

rengang66的博客 270

Smali基本语法

Smali基本语法 .field private isFlag:z  定义变量 .method  方法 .parameter  方法参数 .prologue  方法开始 .line 12  此方法位于第12行 invoke-super  调用父函数 const/high16 v0, 0x7fo3  把0x7fo3赋值给v0 invoke-direct  调用函数 retu

Andy0214的专栏 7320

华为OD新系统机试真题 - 操作历史管理器的撤销/重做能力

华为OD机试新系统真题【操作历史管理器的撤销/重做能力】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【操作历史管理器的撤销/重做能力】

qq_45776114的博客 865

3、利用预训练卷积神经网络进行特征提取

本文介绍了如何使用预训练的卷积神经网络(如VGG16)进行图像特征提取,并将提取的特征存储在HDF5数据集中,以便后续用于机器学习模型的训练。文章详细阐述了特征提取的原理、HDF5数据格式的优势、HDF5DatasetWriter类的实现、特征提取流程的代码实现以及实际应用案例。通过该方法,可以在多种图像数据集上高效构建高精度的分类模型。

z2a3b4c5d的博客 116

关于 smali:1. Smali 基础语法入门

Smali 中,每个.smali语法含义.class定义类本身,修饰符 + 类名.super指定该类继承的父类.source原始 Java 文件名(调试用,可省略)Smali 中类名是用 L完整包路径/类名;表示:Java 类:com.example.MyClass一个类里可以有多个方法,每个方法使用.method开头,.end method结束。)V.locals 2...(方法体的 Smali 指令)...项目示例含义.method。

Triste__chengxi的博客 1872

从零开始学习PX4源码23(飞行模式管理)

本文摘要主要介绍了PX4飞控系统中飞行模式管理模块的代码实现流程。文章从整体架构入手,分析了飞行模式管理模块的启动过程、类继承关系以及核心运行机制。重点阐述了模块从rc.mc_apps启动脚本到FlightModeManager::main()的调用链路,包括任务创建、工作队列初始化和主循环执行流程。核心部分解释了Run()函数如何通过订阅传感器数据、更新参数、处理命令以及生成轨迹设定点来实现飞行模式切换和任务管理功能。文章为理解PX4飞行控制系统的模式切换机制提供了代码层面的详细分析。

陌城烟雨 499

smali语法总结

smali语法总结

大叔的愤怒,你驾驭不了 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Dalvik smali语法

1.dalvik寄存器:32位,所有类型,<=32 一个寄存器 64:使用两个相邻寄存器 2.寄存器的命名法:v :局部变量寄存器 v0-vn 参数寄存器 vn-vn+m p:参数寄存器p0 -pn 变量寄存器 v0-vn 第一种 第二种 流程 :java编译成.class在编译成.dex 最后反编译得到samli文件 .java →.class → .dex → smali dx.jar: .class打包.dex dx --de...

Codeooo 博客 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Android反编译下的smali语法学习

Android反编译中的Smali语法

m0_62787113的博客 1519

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

深入学习smali语法

一文读懂 smali 语法(文末附带资料分享)

Bai HongHua的博客 9342

SMALI语法大全

安卓修改大师对安卓文件进行代码级别修改的时候,需要修改反编译生成的SMALI文件。本文是最全的SMALI语法,原始英文资料,保持文章的原汁原味,避免翻译造成的歧义,对于英文好的同学,这是不可多得的福利。 SMALI代码示例 if v0==0 go cond_0   if-eqz v0, :cond_0   if v0!=0 go cond_0   if-nez v0, :cond_0 ...

3484

smali语法简析

Smali背景: Smali,Baksmali分别是指安卓系统里的Java虚拟机(Dalvik)所使用的一种.dex格式文件的汇编器,反汇编器。其语法是一种宽松式的Jasmin/dedexer语法,而且它实现了.dex格式所有功能(注解,调试信息,线路信息等)。 Smali,Baksmali分别是冰岛语中编译器,反编译器的叫法。也许你会问为什么是冰岛语呢,因为Dalvik是一个冰岛渔村

Jimmy5z的专栏 1万+

Smali 语法

Smali(逆向分析的重中之重) Smali,Baksmali 分别是指安卓系统里的 Java 虚拟机(Dalvik)所使用的一种 dex 格式文件的汇编器,反汇编器。其语法是一种宽松式的 Jasmin/dedexer 语法,而且它实现了 .dex 格式所有功能(注解,调试信息,线路信息等) 当我们对 APK 文件进行反编译后,便会生成此类文件。在Davlik字节码中,寄存器都是32位的,能够支持...

qq_34108752的博客 1281

smali 语法

1.smali apk文件通过apktool反编译出来的都有一个smali文件夹,里面都是以.smali结尾的文件。 smali语言是Davlik的寄存器语言,语法上和汇编语言相似,Dalvik VM与JVM的最大的区别之一就是Dalvik VM是基于寄存器的。基于寄存器的意思是,在smali里的所有操作都必须经过寄存器来进行。 2.基本数据类型 B—byte C—char D—double F—...

波风水门 2786
上一篇: Android NDK 开发 调试的几个坑 ??:?
下一篇: 使用Mac开发cocos2dx Android游戏
Excing
博客等级 码龄18年 2粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值