2016-09-23 1 views
-2
  // 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 

Ce code faisait partie d'une application Android qui est utilisée pour remplir la mémoire RAM. Ce code était présent dans la fonction pour remplir 10 Mo de mémoire RAM. Quelqu'un peut-il s'il vous plaît expliquer son fonctionnement que je n'ai aucune expérience avec bytecode et s'il vous plaît suggérer quelques sites pour saisir les connaissances de bytecode rapide. Je vous remercie.Quelqu'un peut-il s'il vous plaît dire ce que fait ce bytecode?

+0

Recherche jeu d'instructions jvm ou tels trouveront des sites suffisants, monitorenter/exit est un bloc 'synchronized'; rien de gênant n'arrive. –

+0

Il existe des outils qui peuvent aider à le démonter pour vous. – Andreas

+0

semble que cela devrait aller sur l'échange de pile RE. – Antimony

Répondre

2

A bytecode est intruction ensemble de JVM (Java Virtual Machine). Programmeur Java n'a pas vraiment besoin de comprendre bytecode. JVM utilise bytecode pour faire un javaprogram portable, ce qui signifie qu'il peut être exécuté sur n'importe quelle plate-forme (Windows, MAC, UNIX, LINUX .........). JRE sur une plate-forme interprète le bytecode et le convertit en ObjectCode local de la plate-forme.

vous pouvez consulter This Link pour plus de détails

1

du nom juger MainActivity$4$1, ce code doit provenir d'une méthode dans un imbriquée classe anonyme à l'intérieur MainActivity.

Le code Java doit être quelque chose comme ceci:

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

Vous pouvez trouver de nombreux tutoriels Java bytecode sur Internet. Cependant, la référence ultime est la suivante: The Java Virtual Machine Instruction Set.