Smail语法基本知识(三)

Smali语言基础语法 定义、声明、调用 Smali数据类型 定义:与Java相同,Smali中也有一套数据类型体系,且该体系实质上是同Java一一对照的。 示例1:Smali——Java数据类型对照表 PS:如上图所示,Smali语言中的数据类型的关键词基本上为Java中同名数据类型的首字母大写,需要着重记忆的例外为:1.long类型的关键词为大写J;2.boolean类型的关键词为大写Z;3.数组的关键词为左半边中括号[;4.object类型(各种类)的关键词为大写L加上该类的全类名路径,路径中的层级用/分割。 阅读详情

------------------------------------------------分割线-------------------------------------------------------------------------------------

虽然关于指令集现在还没有讲,但是可以先看一个例子,加深一下理解。

HelloWorldAppActivity.smail 示例:

斜体灰色为对应Java代码

.classpublicLcom/cn/daming/activity/HelloWorldAppActivity;

public class HelloWorldAppActivity extends Activity

.superLandroid/app/Activity;

public class HelloWorldAppActivity extends Activity

.source "HelloWorldAppActivity.java"
# instance fields 实例变量

.field privatemTextView:Landroid/widget/TextView;

privateTextView mTextView;

# direct methods 静态方法?
.method public constructor <init>()V 无参构造函数
.locals0 局部变量0个
.prologue ??
.line7
invoke-direct {p0}, Landroid/app/Activity;-><init>()V
return-void
.end method
# virtual methods 非静态方法

.method public onCreate(Landroid/os/Bundle;)V

public void onCreate(Bundle savedInstanceState) 

.locals2

.parameter"savedInstanceState"

public void onCreate(Bundle savedInstanceState) 

.prologue
.line12

invoke-super{p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V

super.onCreate(savedInstanceState);

.line13

const/high16 v0,0x7f03 将0x7f03放入v0中

R.layout.main

invoke-virtual {p0, v0},

Lcom/cn/daming/activity/HelloWorldAppActivity;->setContentView(I)V

p0代表this,而v0则传递参数R.layout.main的值。

this.setContentView(R.layout.main);

.line14

const/high16 v0,0x7f05

R.id.text_view

invoke-virtual {p0, v0},

Lcom/cn/daming/activity/HelloWorldAppActivity;->findViewById(I)Landroid/view/View;

mTextView =(TextView)findViewById(R.id.text_view);

p0代表this,而v0则传递参数R.layout.main的值。

move-result-object v0

将值放入v0

check-cast v0, Landroid/widget/TextView;

类型检查

iput-object v0, p0, Lcom/cn/daming/activity/HelloWorldAppActivity;->mTextView:Landroid/widget/TextView;


.line15
iget-object v0, p0, Lcom/cn/daming/activity/HelloWorldAppActivity;->mTextView:Landroid/widget/TextView;
const/high16 v1,0x7f04

invoke-virtual {v0, v1}, Landroid/widget/TextView;->setText(I)V

.line16
return-void

.end method


HelloWorldAppActivity.java 完整示例:

package com.cn.daming.activity;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class HelloWorldAppActivity extends Activity {
    private TextView mTextView;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mTextView = (TextView)findViewById(R.id.text_view);
        mTextView.setText(R.string.hello);
    }
}


通过对比发现基本的方法名称没有改变,多了一个

.method public constructor <init>()V 表示该类的不带参数缺省的构造方法,

onCreate()方法是以.method public
onCreate(Landroid/os/Bundle;)V 开始,.end method 结束
android 逆向工程 smail 语法学习 众所周知,android 是开源的,现在市场上反编译别人的劳动果实的人也不少,所以我们也是有必要学习下smail语言,(就是android工程反编译后出的语法语音),看看改怎么给我们的代码 “埋雷” ,才能更好的保护好我们自己的劳动成果。 接下来就让我们来学习下吧~!(事先声明:本人也是初学smail语言,有介绍不当的地方还请海涵,并请指出,大家一起学习) ================== 阅读详情

相关推荐

3、Smail语法

apk文件通过apktool反编译出来的都有一个smali文件夹,里面都是以.smali结尾的文件。smali语言是Davlik的寄存器语言,语法上和汇编语言相似,Dalvik VM[1]与JVM的最大的区别之一就是Dalvik VM是基于寄存器的。基于寄存器的意思是,在smali里的所有操作都必须经过寄存器来进行。Smali,Baksmali 分别是指安卓系统里的 Java 虚拟机(Dalvik)所使用的一种 dex 格式文件的汇编器,反汇编器。

weixin_42407151的博客 1789

Smail语法

你能否将下面的Smail代码变成Java代码呢?.locals 4:cond_0:goto_0return v2:cond_1:goto_1:cond_2复制如果可以的话,你已经基本掌握了Smail语法了!if(length!i+=1;return 1;复制其中0、1用v2寄存器传值,v1是length,v3存储的是0x28,v0存的是for循环计数器ii

2301_76965813的博客 1895

ROS2实战:从零部署Cartographer激光SLAM系统

本文详细介绍了在ROS2 Humble环境下,从零开始部署Cartographer激光SLAM系统的完整实战流程。内容涵盖环境准备、Cartographer安装(APT与源码编译两种方式对比)、工作空间与功能包创建、核心启动文件与Lua配置文件编写、系统构建与可视化启动,以及地图保存与实战调参技巧,帮助开发者快速构建稳定可靠的机器人SLAM应用。

weixin_29213655的博客 248

逆向破解必备基础smail基础语法

// 此代码由autojs交流群整理提供 一键加群 Smali基本语法 .field private isFlag:z  定义变量 .method  方法 .parameter  方法参数 .prologue  方法开始 .line 12  此方法位于第12行 invoke-super  调用父函数 const/high16 v0, 0x7fo3  把0x7fo3赋值给v0 invoke-direct  调用函数 return-void  函数返回void .end method  函数结束 new-.

九黎AJ的博客 2655

BK3437蓝牙5.2芯片实战:手把手教你设计超低功耗智能家居遥控器(附原理图)

本文详细介绍了BK3437蓝牙5.2芯片在超低功耗智能家居遥控器设计中的应用。通过分析芯片的核心优势、硬件设计要点和低功耗固件策略,手把手教你实现日均功耗低于5μA的遥控器原型,并附有原理图设计详解和常见问题解决方案。

tgb34567890的博客 619

封神台靶场,为了小芳,冲之——cookie注入

第二个靶场 打开网站 找一下注入点 一般在新闻这种里面点开看看 先判断是否存在注入 有waf 尝试了很多方法绕过都没成功,/and/,aandnd,AnD等一系列都没绕过去,乌鸡鲅鱼 删掉id=169 发现 然后判断cookie注入 在搜索框输入 Javascript:alert(document.cookie=”id=”+escape(‘169’)); 然后弹窗了(其中 “id=” 取决URL中的id= escape中的数值也是URL中id=的值)返回刚刚的页面,把ID删除后一样能正常显示。说明服务器能

Wubuqing的博客 650

smail及其语法

在smali里的所有操作都必须经过寄存器来进行:本地寄存器用v开头数字结尾的符号来表示,如v0、 v1、v2。参数寄存器则使用p开头数字结尾的符号来表示,如p0、p1、p2。特别注意的是,p0不一定是函数中的第一个参数,在非static函数中,p0代指“this",p1表示函数的第一个 参数,p2代表函数中的第二个参数。而在static函数中p0才对应第一个参数(因为Java的static方法中没有this方法)这里要补充两个smali指令 一个是if-eqz 另一个是if-nez 这两条指令是相对的。

SXXYNHHXX的博客 3934

深入解析MTK平台hang_detect机制:从原理到实战调试

本文深入解析了MTK平台hang_detect机制的工作原理与实战调试技巧。作为系统健康监测的核心机制,hang_detect通过多层级监控体系检测应用层和内核层异常,结合Kernel_exception等日志信息快速定位问题。文章详细介绍了典型问题案例、调试方法及预防措施,帮助开发者提升MTK平台系统稳定性调试能力。

purple的博客 1004

Android逆向不可不知的smali语言

1.smali语言简介 smali是Dalvik的寄存器语言,smali代码是安卓apk反编译而来的,两者文件是一一对应的,获取smali需要ApkTool工具。 smali语言比较简单,如果你会java和Android相关知识,就可以通过修改smali语言来改变java的代码,进而可以修改apk文件。 2.smali语法 前三行指明了类名,父类名,和源文件名。 类名以“L”开头相信熟悉Jni的......

勤劳是一种习惯 9521

关于华为高斯数据库出现Invalid or unsupported by client SCRAM mechanisms定位解决的过程

最近公司有个新项目使用的是高斯数据库,因为我们的项目是直接从别的项目组拿来的,配置都是已经配好的,但是在放到正式环境上之后出现报错。起初我们以为是测试和正式的版本不一致,但是结果是版本一致的。最后这个问题搞了我们几个小时,都没法解决。

Curtisjia的博客 3176

PaddleOCR GPU部署:从环境配置到避坑实战指南

本文详细介绍了PaddleOCR GPU部署的全过程,从环境配置到避坑实战指南。通过分析常见的部署失败原因,提供硬件兼容性自查、软件环境精配方案以及路径配置的解决方案,帮助用户高效完成GPU加速的OCR任务部署,避免90%的常见错误。

weixin_30839881的博客 417

Smail语法(1)

【情景分析】Android apk,反编译之后,我们能阅读到的代码是dalvik字节码 - smali 。有时候,工作需要,必须破解apk里面的一些协议或者方法。以此,借鉴经验,来开发自己的项目。 【官方语法链接】http://www.blogjava.net/midea0978/archive/2012/01/04/367847.html 【语法】 一. 数据类型 1 ...

zhanqq2012的专栏 607

机器人环境仿真软件:Webots_(9).路径规划与导航算法仿真实现

通过仿真,我们可以验证路径规划算法的有效性和鲁棒性,同时优化机器人在不同环境中的导航性能。动态窗口法是一种局部路径规划算法,通过在机器人当前速度空间中选择一个最优的速度窗口,使机器人在动态环境中安全地移动。算法的代价函数通常包括两个部分:从起始点到当前节点的实际代价(g-cost)和从当前节点到目标节点的估计代价(h-cost)。在World Editor中,选择“Insert”菜单,添加“Robot”对象,如“E-puck”或“Thymio”。Dijkstra算法的实现与A*算法类似,但不使用启发函数。

kkchenjj的博客 2006

Smail语法基本知识(一)

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

computer165的专栏 3274

《QGIS快速入门与应用基础》191:渐变区间设置(等间隔/分位数)

深入解析QGIS中渐变符号化的核心环节——渐变区间设置,重点对比等间隔与分位数两种主流模式的原理与应用。作者指出,90%的渐变效果问题源于区间设置不当,强调必须先分析数据分布特征(通过统计面板查看直方图、极值等)再选择匹配模式。等间隔模式适用于均匀分布数据(如海拔、温度),将数值范围均等划分;分位数模式则针对偏态数据(如GDP、人口),保证每个区间要素数量相等。文章通过界面示意图、效果对比图和操作步骤详解,指导读者根据数据类型选择合适区间模式,并提醒常见避坑要点:社会经济数据禁用等间隔、分类数不超过8类。

LuckyHanMo的博客 315

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Android逆向学习日记(一) 初学smail

一、 smail语法基础学习

M_iranda的专栏 1470

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Smail语法(2)指令解析

【重点】归总了一些简单的Smail指令。 1.If语句 if-nez v0,:cond_0 如果结果不为0,就跳转到cond_0标号处 if-eqz v0,:cond_1 如果结果为0,就跳转到cond_1标号处 2.数据操作指令 move v0,v1 将v1的值赋给v0 ,两个寄存器都为4位 move-result...

zhanqq2012的专栏 7442

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

smail的语法

.locals 3 //表示有局部变量的个数

hongyucai的博客 546

Smail语法基本知识(二)

这篇文章介绍了一些常见的指令语法, 想要知道更全的指令语法,请见:http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html 移动 move vx,vy                      将vy的内容移动到vx中。 两个寄存器必须是最前面256个寄存器中之一。 move-object vx,vy          移动对

computer165的专栏 1327

android 逆向project smail 语法学习

众所周知,android 是开源的。如今市场上反编译别人的劳动果实的人也不少。所以我们也是有必要学习下smail语言,(就是androidproject反编译后出的语法语音),看看改怎么给我们的代码 “埋雷” 。才干更好的保护好我们自己的劳动成果。 接下来就让我们来学习下吧~!(事先声明:本人也是初学smail语言,有介绍不当的地方还请海涵,并请指出。大家一起...

aofan9566的博客 288

smail语法 详解

大家都应该知道APK文件其实就是一个MIME为ZIP的压缩包,我们修改ZIP后缀名方式可以看到内部的文件结构,例如修改后缀后用RAR打开鳄鱼小顽皮APK能看到的是(Google Play下载的完整版版本): Where's My Water.zip\ asset\                        lib\                            

肿菜的博客 1027

smail语句学习

一、Smail语法: 1.数据类型: 原始类型: V void,只能用于返回值类型 Z     boolean B byte S short C char I int J long(64位) F float D double(64位) 引用类型: 对象 和 数组 2.smail表现形式 原始类型:用大写字母代替即可,用法无异 引用类型:   对象: L +

鎏嫣宫守护的博客 5568

dex2jar源码解析----smail转dex

SmaliCmd用来将smail文件转换为dex文件smail转dex用到了一个ANTLR 语言识别的一个工具 (ANother Tool for Language Recognition ) 来识别 smail语法,它定义了一个smail的文法文件这里的Smail.g4就是定义的文法文件,使用的是g4版本,另外几个java文件是根据文法文件自动生成的这是文法文件的一部分关于ANTLR我也不是特别

new_abc的专栏 3474
上一篇: AndEngine Example(9):EaseFunctionExample
下一篇: 安卓:动画与图形(概要)
computer165
博客等级 码龄16年 7粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值