Gitlib Gitlib
首页
  • 分类
  • 标签
  • 归档
  • Golang开发实践万字总结
  • MySQL核心知识汇总
  • Redis实践总结
  • MQ实践万字总结
  • Docker数据持久化总结
  • Docker网络模式深度解读
  • 常用游戏反外挂技术总结
  • 读书笔记
  • 心情杂货
  • 行业杂谈
  • 友情链接
关于我
GitHub (opens new window)

Ravior

以梦为马,莫负韶华
首页
  • 分类
  • 标签
  • 归档
  • Golang开发实践万字总结
  • MySQL核心知识汇总
  • Redis实践总结
  • MQ实践万字总结
  • Docker数据持久化总结
  • Docker网络模式深度解读
  • 常用游戏反外挂技术总结
  • 读书笔记
  • 心情杂货
  • 行业杂谈
  • 友情链接
关于我
GitHub (opens new window)
  • PHP

  • Golang

  • Python

  • Javascript

  • 其他语言

    • Smali语法学习
      • Lua语法总结
      • C语言学习·编译过程
    • 编程语言
    • 其他语言
    Ravior
    2016-08-01
    目录

    Smali语法学习

    数据类型:基类和引用类型,引用类型是对象和数组,其他都是基类。

    在dalvik字节码中,寄存器总是32位可以存放任何类型的值,2个寄存器可以用来存放64位类型(长整形和双精度型)

    #表示注释

    # 基类

    字符 表示含义
    V 空类型---仅仅可以用来作为返回类型
    Z Boolean, 布尔型
    C Char字符型
    B Byte, 字节型
    I Int整型
    S Short短整型,16位
    J Long长整型,64位
    F Float浮点型
    D Double,双精度浮点型, 64位

    # 引用类型

    对象:Lpackage/name/ObjectName; L表明一个对象类型,分号表明对象名的结束,等同于java语言中的package.name.ObjectName结构。 例如:"Ljava/lang/String;" => "java.lang.String"

    数组:以"["开始,"[I"表示一维整形数组,等同于Java中"int[]","[Ljava/lang/String"等同于Java中"String[]"

    # 方法

    Lpackage/name/ObjectName;->MethodName(III)Z: Lpackage/name/ObjectName; 是一个类, MethodName明显是一个方法名,(III)Z是方法的签名,‘III’在这个例子中是三个整形参数,Z是表示返回一个布尔类型的返回值

    方法的参数一个接一个的列举在右边,中间没有分号

    method(I[[IILjava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; 等同于Java中: String method(int, int[][], int, String, Object[])

    # Smali文件解读

    .class public Lcom/netease/ntunisdk/SdkNetease; // 类名(SdkNetease),包名(com.netease.ntunisdk)和访问属性(public)
    .super Lcom/netease/ntunisdk/base/SdkBase; // 继承自com.netease.ntunisdk.base.SdkBase
    .source "SdkNetease.java" // 由"SdkNetease.java"编译得到的smali文件
    
    
    # interfaces
    .implements Lcom/netease/ntunisdk/base/StartupActivity$StartupFinishListener; // 这个SdkNetease实现了一个com.netease.ntunisdk.base这个package下的StartupActivity类内部类StartupFinishListener接口
    
    # annotations
    .annotation system Ldalvik/annotation/MemberClasses;
        value = {
            Lcom/netease/ntunisdk/SdkNetease$payCallback;,
            Lcom/netease/ntunisdk/SdkNetease$LoginCallback;,
            Lcom/netease/ntunisdk/SdkNetease$AnonymousLoginCallback;
        }
    .end annotation
    
    // SdkNetease类内含有payCallback,LoginCallback,AnonymousLoginCallback三个内部类
    
    
    # static fields
    .field private static final TAG:Ljava/lang/String; = "UniSDK netease"
    // 静态成员变量,访问权限private,变量名TAG, 变量类型:Ljava/lang/String;变量值:""UniSDK netease"
    
    # instance fields
    .field private debugMode:Z
    // 实例成员变量,访问权限private,变量名debugMode,类型Z(Boolean型)
    
    
    ===== 综合以上信息得到的Java文件 ======
    
    public class SdkNetease extends SdkBase implements StartupActivity.StartupFinishListener {
    
    	private static final String TAG = "UniSDK netease";
    
    	private Boolean debugMode;
    
    	//...
    	class payCallback {
    		// TODO
    	}
    
    
    	//...
    	class LoginCallback {
    		// TODO
    	}
    
    
    	//...
    	class AnonymousLoginCallback {
    		// TODO
    	}
    
    }
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    • .method 方法
    • .prologue 方法开始
    • .line 12 此方法位于第12行
    • .end method 函数结束
    #Java
    上次更新: 2022/12/02, 22:04:34
    浏览器资源缓存机制总结
    Lua语法总结

    ← 浏览器资源缓存机制总结 Lua语法总结→

    最近更新
    01
    常用游戏反外挂技术总结
    11-27
    02
    Golang开发实践万字总结
    11-11
    03
    Redis万字总结
    10-30
    更多文章>
    Theme by Vdoing | Copyright © 2011-2022 Ravior | 粤ICP备17060229号-3 | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式