【问题标题】:Can anyone please tell what this bytecode does?谁能告诉这个字节码是做什么的?
【发布时间】:2016-09-23 06:02:53
【问题描述】:
            // Byte code:
            //   0: aload_0
            //   1: monitorenter
            //   2: aload_0
            //   3: getfield 17 me/empirical/android/application/fillmemory/MainActivity$4$1:this$1 Lme/empirical/android/application/fillmemory/MainActivity$4;
            //   6: getfield 28 me/empirical/android/application/fillmemory/MainActivity$4:this$0   Lme/empirical/android/application/fillmemory/MainActivity;
            //   9: bipush 10
            //   11: aload_0
            //   12: getfield 17    me/empirical/android/application/fillmemory/MainActivity$4$1:this$1 Lme/empirical/android/application/fillmemory/MainActivity$4;
            //   15: getfield 28    me/empirical/android/application/fillmemory/MainActivity$4:this$0   Lme/empirical/android/application/fillmemory/MainActivity;
            //   18: invokestatic 34    me/empirical/android/application/fillmemory/MainActivity:access$300 (Lme/empirical/android/application/fillmemory/MainActivity;)Landroid/widget/Button;
            //   21: invokestatic 38    me/empirical/android/application/fillmemory/MainActivity:access$100 (Lme/empirical/android/application/fillmemory/MainActivity;ILandroid/widget/Button;)V
            //   24: aload_0
            //   25: monitorexit
            //   26: return
            //   27: astore_1
            //   28: aload_0
            //   29: monitorexit
            //   30: aload_1
            //   31: athrow
            //   32: astore_1
            //   33: goto -9 -> 24
            // Local variable table:
            //   start  length  slot    name    signature
            //   0  36  0   this    1
            //   27 4   1   localObject Object
            //   32 1   1   localException  Exception
            // Exception table:
            //   from   to  target  type
            //   2  24  27  finally
            //   24 26  27  finally
            //   28 30  27  finally
            //   2  24  32  java/lang/Exception

此代码是用于填充 ram 内存的 android 应用程序的一部分。此代码存在于填充 10 mb ram 内存的函数中。任何人都可以解释它的工作原理,因为我没有字节码的经验,请推荐几个网站来掌握快速的字节码知识。谢谢。

【问题讨论】:

  • 搜索jvm指令集之类的会找到足够多的站点,monitorenter/exit是一个synchronized块;没有什么麻烦事发生。
  • 有一些工具可以帮你拆解。
  • 似乎应该进行 RE 堆栈交换。

标签: java android bytecode


【解决方案1】:

bytecodeJVM(Java Virtual Machine) 的指令集。 Java 程序员并不需要真正了解bytecode。 JVM 使用bytecode 使java程序可移植,这意味着它可以在任何平台(Windows、MAC、UNIX、LINUX......)上运行。

平台上的 JRE 解释字节码并将其转换为平台的本地 ObjectCode。

您可以参考This Link 了解更多

【讨论】:

    【解决方案2】:

    MainActivity$4$1这个名字来看,这段代码肯定是来自MainActivity内部的一个嵌套匿名类的方法。

    Java 代码应该是这样的:

    synchronized (this) {
        try {
            methodInMainActivity(MainActivity.this, 10, methodThatReturnsButton(MainActivity.this));
        } catch (Exception localException) {}
    }
    

    您可以在 Internet 上找到许多 Java 字节码教程。但是,最终的参考是这样的:The Java Virtual Machine Instruction Set

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-29
      • 1970-01-01
      • 2017-09-15
      • 2014-05-01
      • 1970-01-01
      • 2013-06-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多