【发布时间】: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 堆栈交换。