zoukankan      html  css  js  c++  java
  • Smail语法

    • 数据类型

    B---byte
    C---char
    D---double
    F---float
    I---int
    J---long
    S---short
    V---void
    Z---boolean
    [XXX---array
    Lxxx/yyy---object

    • 函数的定义

    Func-Name (Para-Type1Para-Type2Para-Type3...)Return-Type

    在smali里的所有操作都必须经过寄存器来进行:本地寄存器用v开头数字结尾的符号来表示,如v0、v1、v2、...参数寄存器则使用p开头数字结尾的符号来表示,如p0、p1、p2、...特别注意的是,
    p0不一定是函数中的第一个参数,在非static函数中, p0代指“this”,p1表示函数的第一个参数,p2代表函数中的第二个参数…而在static函数中p0才对应第一个参数
    (因为Java的static方法中没有this方法)。本地寄存器没有限制,理论上是可以任意使用的


    const/4 v0, 0x0
    iput-boolean v0, p0, Lcom/disney/WMW/WMWActivity;->isRunning:Z
    相当于
    this.isRunning = false;

    • 函数调用

    1)、invoke-static:顾名思义就是调用static函数的
    2)、invoke-super:调用父类方法用的指令,在onCreate、onDestroy等方法都能看到
    3)、invoke-direct:调用private函数的
    4)、invoke-virtual:用于调用protected或public函数

    .local 1 标明了你在这个函数中最少要用到的本地寄存器的个数 v0

    • 插入日志

    .local 5 (用到v4)

    const-string v3, "tag"
    const-string v4, "log456"
    invoke-static {v3, v4}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I

    打印数字

    const/high16 v1, 0x7f030000
    const-string v3, "tag"
    invoke-static {v1}, Ljava/lang/Boolean;->toString(Z)Ljava/lang/String;
    move-result-object v4
    invoke-static {v3, v4}, Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I
     
    • 打印调用栈
    new-instance v0, Ljava/lang/Exception;
    const-string v1, "print trace"
    invoke-direct {v0,v1}, Ljava/lang/Exception;-><init>(Ljava/lang/String;)V
    invoke-virtual {v0}, Ljava/lang/Exception;->printStackTrace()V

    或者

    invoke-static {}, Ljava/lang/Thread;->dumpStack()V
    

      




  • 相关阅读:
    关于js的对象原型继承(一)
    js相关小技巧
    一、WCF学习之旅-创建第一个服务
    .net WebService方法之重载、支持Session、支持request请求和response格式的浅析
    关于反射的BindingFlag浅析
    oracle之TRUNC函数
    start with...connect by子句的浅用
    一个在windows电脑上控制比较全的文件夹的设置方式
    javascript的replace之正则表达式的浅析
    抓取错误之onerror
  • 原文地址:https://www.cnblogs.com/ahuo/p/12395570.html
Copyright © 2011-2022 走看看