Java 逆向成Smail中间语言,一般都比较容易解读。switch case 算是大家疑问比较多的一种结构。在case 值是连续的情况下,一般比较简单,今天就不说了。我们今天来说一下case值离散的情况下怎么分析。

直接上Smail代码

const/4 v0, 0x0

.local v0, "c":I
    const/4 v1, 0x0

.local v1, "d":I
    const/4 v2, 0x0

.line 28
    .local v2, "e":I
    iget v3, p0, Lcom/a/b/MainActivity;->b:I   //这个就是我们要判断的值

packed-switch v3, :pswitch_data_0        //进入case 模块 ,根据v3值的不同,实现不同的跳转

.line 41
    :pswitch_0                                              // case 0分支,注意这里的pswitch_0 并不是指 v3 ==0的时候跳转的分支。而只是代                                                                       码块的调用标记而已 。具体原因下面会说明。                                                               
    div-int v0, v1, v2

.line 47
    :goto_1
    return-void

.line 19
    .end local v0    # "c":I
    .end local v1    # "d":I
    .end local v2    # "e":I

.line 30
    .restart local v0    # "c":I
    .restart local v1    # "d":I
    .local v2, "e":I
    :pswitch_1
    add-int v0, v1, v2

.line 31
    goto :goto_1

.line 34
    :pswitch_2                               //  case 2 ,这里pswitch_2 也是代码块调用标记
    sub-int v0, v1, v2

.line 35
    goto :goto_1

.line 37
    :pswitch_3
    mul-int v0, v1, v2

.line 38
    goto :goto_1

.line 28
    :pswitch_data_0
    .packed-switch 0x3    // 从这一行开始,才是对v3真正的值进行说明。 packed-switch 0x3表示  v3的初始值为3 
        :pswitch_1       //v3 == 3 的时候,跳转到代码块  pswitch_1
        :pswitch_0       //v3 == 4 的时候,跳转到代码块  pswitch_0
        :pswitch_2       //v3 == 5 的时候,跳转到代码块  pswitch_2
        :pswitch_0      // v3 == 6 的时候,跳转到代码块  pswitch_0
        :pswitch_3      // v3 == 7 的时候,跳转到代码块  pswitch_3
    .end packed-switch

所以翻译成java代码是

int c=0,d = 0,e=0;
        
        
        switch (b) {
        case 3:
            c = d+e;
            break;
        
        case 5:
            c = d-e;
            break;
        case 7:
            c = d*e;
            break;
            
        default:
            c = d/e;
            break;
        }

Smail语言 switch case 还原Java逆向分析相关推荐

  1. Go语言-switch case | switch中判断多个值、interface conversion: interface {} is float64, not int

    文章目录 Go语言-switch case 背景 switch case Golang中switch的特殊用法--fallthrough go语言switch中判断多个值 Type Switch,判断 ...

  2. c语言圈复杂度switch,干货|C语言switch\/case圈复杂度优化重构

    点击上方"中兴开发者社区",关注我们 每天读一篇一线开发者原创好文 ▍作者简介 作者陈彬是一名Linux驱动开发工程师,对Linux内核.软件设计和敏捷有较浓厚的兴趣和长期实践经验 ...

  3. C语言switch case语句详解

    当分支比较少的时候我们使用if else语句解决,当分支比较多的时候,我们要使用switch case语句解决,针对分支的复杂性选择合适的程序解决. 当分支过多时,用 if else 处理会不太方便, ...

  4. c语言switch case缩进,C语言中的switchnbsp;casenbsp;语句的用法详解

    本文就几个实例来说明Switch case 语句的用法. 说是C语言中的Switch case,其实和html+javascript中的Switch case语法是基本一样的哦. 问题: 有这么一个C ...

  5. c语言圈复杂度switch,C语言switch/case圈复杂度优化重构

    软件重构是改善代码可读性.可扩展性.可维护性等目的的常见技术手段.圈复杂度作为一项软件质量度量指标,能从一定程度上反映这些内部质量需求(当然并不是全部),所以圈复杂度往往被很多项目采用作为软件质量的度 ...

  6. c语言中case的作用,C语言switch case 语句

    switch 语句根据控制表达式的值,可以把程序流跳转到多个语句中的一个执行: switch (表达式) 语句 括号里的表达式具有整数类型,并且这里的语句就是该 switch 主体,它包括了多个 ca ...

  7. c#语言switch+case用法,C# switch case语句

    C# switch case 语句也是条件语句的一种,与上一节介绍的<C# if else语句>是类似的,但在判断条件的选择上会有一些局限性. 具体的语法形式如下. switch(表达式) ...

  8. C语言——switch....case函数用法

    switch....case函数用法 #include<stdio.h>int main() {int data;char cdata;printf ("请输入一个数字\n&qu ...

  9. C语言--switch case 语句,case 后没有语句

    背景:在看 wireshark 的解析协议部分的源码时,发现很多的 switch case 语句,case 后没有语句 的情况,随处可见的这种情况,产生疑惑,报文解析就是很好的例子. 例如:wires ...

最新文章

  1. 黑马程序员---基础加强-----------------第二天(新特性:注解、泛型)
  2. “invalid index of a 0-dim tensor. Use tensor.item() to convert a 0-dim tensor to a Python”解决办法
  3. python语言表白源码-python七夕浪漫表白源码
  4. 雷观(十六):帮人写项目,不如教会别人写项目的方法
  5. 如何在Ubuntu18.04下安装CUDA10.1和cudnn
  6. Dependency injection in .NET Core的最佳实践
  7. 轻博客:企业品牌互动传播利器
  8. 数据结构学习笔记之一 链表
  9. [CodePlus2017]晨跑
  10. Mac之初~10个快速上手技巧
  11. DataTable转为JSON数据格式代码
  12. 【引向】全栈开发工程师之路
  13. SAS9.4安装简易教程(保姆级)附带报错处理
  14. vb mysql登录界面_vb.net 简单上机登陆(面向过程思维)
  15. 【Python】字谜游戏
  16. [转]30个总结JVM虚拟机的技术文排版好(收藏版)
  17. 灵活用工十大热门行业及应用场景
  18. python中的df是什么意思_python df遍历的N种方式
  19. linux每天凌晨备份文件
  20. 3dsmax烘焙模型

热门文章

  1. Python爬虫之天气预报
  2. 安全可信 | 首批+先进!天翼全栈混合云一举斩获三项可信云评估
  3. matlab roots 多项式实现 c语言,Matlab教学课apos;件教学教案.doc
  4. 51单片机智能大棚控制系统降温浇水除湿补光LCD1602 手动自动模式
  5. 对于目标文件系统,文件过大无法复制到u盘:
  6. Transformer翻译
  7. 什么是Joomla?
  8. mysql区间左开右闭_Innodb的Next-key lock 为什么是左开右闭区间?
  9. 淘宝卖家订单商品接口解决方案
  10. vue3—使用element-plus表格导出excel表格(带图片)