Search in sources :

Example 6 with SmaliInstruction

use of org.jf.smalidea.psi.impl.SmaliInstruction in project smali by JesusFreke.

the class SmaliInstructionTest method testSingleInstruction.

public void testSingleInstruction() {
    String text = ".class public Lmy/pkg/blah; .super Ljava/lang/Object;\n" + ".method blah(IJLjava/lang/String;)V\n" + "    .locals 0\n" + "    r<ref>eturn-void\n" + ".end method";
    SmaliFile file = (SmaliFile) myFixture.addFileToProject("my/pkg/blah.smali", text.replace("<ref>", ""));
    PsiElement leafElement = file.findElementAt(text.indexOf("<ref>"));
    Assert.assertNotNull(leafElement);
    SmaliInstruction instructionElement = (SmaliInstruction) leafElement.getParent();
    Assert.assertNotNull(instructionElement);
    Assert.assertEquals(Opcode.RETURN_VOID, instructionElement.getOpcode());
    Assert.assertEquals(0, instructionElement.getOffset());
}
Also used : SmaliFile(org.jf.smalidea.psi.impl.SmaliFile) SmaliInstruction(org.jf.smalidea.psi.impl.SmaliInstruction) PsiElement(com.intellij.psi.PsiElement)

Example 7 with SmaliInstruction

use of org.jf.smalidea.psi.impl.SmaliInstruction in project smali by JesusFreke.

the class SmaliLabelReferenceTest method testLabelReference.

public void testLabelReference() throws Exception {
    String text = ".class public Lmy/pkg/blah; .super Ljava/lang/Object;\n" + ".method public getRandomParentType(I)I\n" + "    .registers 4\n" + "    .param p1, \"edge\"    # I\n" + "\n" + "    .prologue\n" + "    const/4 v1, 0x2\n" + "\n" + "    .line 179\n" + "    if-nez p1, :cond_5\n" + "\n" + "    move v0, v1\n" + "\n" + "    .line 185\n" + "    :goto_4\n" + "    return v0\n" + "\n" + "    .line 182\n" + "    :cond_5\n" + "    if-ne p1, v1, :cond_f\n" + "\n" + "    .line 183\n" + "    sget-object v0, Lorg/jf/Penroser/PenroserApp;->random:Ljava/util/Random;\n" + "\n" + "    const/4 v1, 0x3\n" + "\n" + "    invoke-virtual {v0, v1}, Ljava/util/Random;->nextInt(I)I\n" + "\n" + "    move-result v0\n" + "\n" + "    goto :goto_4\n" + "\n" + "    .line 185\n" + "    :cond_f\n" + "    sget-object v0, Lorg/jf/Penroser/PenroserApp;->random:Ljava/util/Random;\n" + "\n" + "    invoke-virtual {v0, v1}, Ljava/util/Random;->nextInt(I)I\n" + "\n" + "    move-result v0\n" + "\n" + "    goto :go<ref>to_4\n" + ".end method";
    ;
    SmaliLabelReference labelReference = (SmaliLabelReference) configureByFileText(text, "blah.smali");
    Assert.assertNotNull(labelReference);
    Assert.assertEquals("goto_4", labelReference.getName());
    SmaliLabel resolvedLabel = labelReference.resolve();
    Assert.assertNotNull(resolvedLabel);
    Assert.assertEquals("goto_4", resolvedLabel.getName());
    SmaliInstruction nextInstruction = resolvedLabel.findNextSiblingByClass(SmaliInstruction.class);
    Assert.assertNotNull(nextInstruction);
    Assert.assertEquals(8, nextInstruction.getOffset());
    Assert.assertEquals(Opcode.RETURN, nextInstruction.getOpcode());
}
Also used : SmaliLabelReference(org.jf.smalidea.psi.impl.SmaliLabelReference) SmaliInstruction(org.jf.smalidea.psi.impl.SmaliInstruction) SmaliLabel(org.jf.smalidea.psi.impl.SmaliLabel)

Aggregations

SmaliInstruction (org.jf.smalidea.psi.impl.SmaliInstruction)7 PsiElement (com.intellij.psi.PsiElement)3 SmaliMethod (org.jf.smalidea.psi.impl.SmaliMethod)3 PsiLocalVariable (com.intellij.psi.PsiLocalVariable)2 Nullable (org.jetbrains.annotations.Nullable)2 SmaliFile (org.jf.smalidea.psi.impl.SmaliFile)2 SmaliLabel (org.jf.smalidea.psi.impl.SmaliLabel)2 SmaliLabelReference (org.jf.smalidea.psi.impl.SmaliLabelReference)2 StackFrameProxy (com.intellij.debugger.engine.jdi.StackFrameProxy)1 JavaCodeFragment (com.intellij.psi.JavaCodeFragment)1 JavaRecursiveElementVisitor (com.intellij.psi.JavaRecursiveElementVisitor)1 LocalVariableImpl (com.sun.tools.jdi.LocalVariableImpl)1 LocationImpl (com.sun.tools.jdi.LocationImpl)1 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 Nullable (javax.annotation.Nullable)1 AnalyzedInstruction (org.jf.dexlib2.analysis.AnalyzedInstruction)1 RegisterType (org.jf.dexlib2.analysis.RegisterType)1 Instruction (org.jf.dexlib2.iface.instruction.Instruction)1 LazyValue (org.jf.smalidea.debugging.value.LazyValue)1 SmalideaInstruction (org.jf.smalidea.dexlib.instruction.SmalideaInstruction)1