コード例 #1
0
ファイル: SmaliVM.cs プロジェクト: junwuwei/smali2java
 public void ProcessDirective(SmaliMethod m, SmaliLine l)
 {
     smaliDirectives.m = m;
     smaliDirectives.l = l;
     switch (l.Instruction)
     {
         case SmaliLine.LineInstruction.Method:
             smaliDirectives.Method();
             if (!m.bHasParameters)
             {
                 smaliDirectives.Special_NoParameters();
                 if (!m.bHasPrologue)
                     smaliDirectives.Prologue();
             }
             break;
         case SmaliLine.LineInstruction.Parameter:
             smaliDirectives.Parameter();
             break;
         case SmaliLine.LineInstruction.Prologue:
             smaliDirectives.Prologue();
             break;
         case SmaliLine.LineInstruction.Line:
             smaliDirectives.Line();
             break;
         case SmaliLine.LineInstruction.EndMethod:
             smaliDirectives.EndMethod();
             break;
     }
 }
コード例 #2
0
        public void ProcessDirective(SmaliMethod m, SmaliLine l)
        {
            smaliDirectives.m = m;
            smaliDirectives.l = l;
            switch (l.Instruction)
            {
            case SmaliLine.LineInstruction.Method:
                smaliDirectives.Method();
                if (!m.bHasParameters)
                {
                    smaliDirectives.Special_NoParameters();
                    if (!m.bHasPrologue)
                    {
                        smaliDirectives.Prologue();
                    }
                }
                break;

            case SmaliLine.LineInstruction.Parameter:
                smaliDirectives.Parameter();
                break;

            case SmaliLine.LineInstruction.Prologue:
                smaliDirectives.Prologue();
                break;

            case SmaliLine.LineInstruction.Line:
                smaliDirectives.Line();
                break;

            case SmaliLine.LineInstruction.EndMethod:
                smaliDirectives.EndMethod();
                break;
            }
        }
コード例 #3
0
ファイル: SmaliClass.cs プロジェクト: junwuwei/smali2java
        public void LoadMethods()
        {
            bool bAdd = false;
            SmaliMethod m = null;

            for (int i = 0; i < Lines.Count; i++)
            {
                SmaliLine l = Lines[i];

                if (bAdd)
                {
                    m.Lines.Add(l);
                    if (l.Instruction == SmaliLine.LineInstruction.EndMethod)
                    {
                        bAdd = false;
                        //if(Methods.Count < 3)
                            Methods.Add(m);
                    }
                    else
                        continue;
                }

                if (l.Instruction == SmaliLine.LineInstruction.Method)
                {
                    bAdd = true;
                    m = new SmaliMethod();
                    m.ParentClass = this;
                    m.Lines.Add(l);
                }
            }

            foreach (SmaliMethod me in Methods)
                me.Process();
        }
コード例 #4
0
        public void ProcessInstruction(SmaliMethod m, SmaliLine l)
        {
            smaliInstructions.m = m;
            smaliInstructions.l = l;
            switch (l.Smali)
            {
            case SmaliLine.LineSmali.Const4:
            case SmaliLine.LineSmali.Const:
            case SmaliLine.LineSmali.Const16:
            case SmaliLine.LineSmali.ConstHigh16:     //TODO: these may end up needing seperate instruction handlers.
            case SmaliLine.LineSmali.ConstString:
                smaliInstructions.Const();
                break;

            case SmaliLine.LineSmali.SputObject:
                smaliInstructions.SputObject();
                break;

            case SmaliLine.LineSmali.Return:
            case SmaliLine.LineSmali.ReturnVoid:
                smaliInstructions.Return();
                break;

            case SmaliLine.LineSmali.SgetObject:
                smaliInstructions.SgetObject();
                break;

            case SmaliLine.LineSmali.NewInstance:
                smaliInstructions.NewInstance();
                break;

            case SmaliLine.LineSmali.InvokeVirtual:
            case SmaliLine.LineSmali.InvokeStatic:
            case SmaliLine.LineSmali.InvokeDirect:     //TODO: These may need to be on their own functions, but for now the are all identical in implementation...
                smaliInstructions.Invoke();
                break;

            case SmaliLine.LineSmali.IputBoolean:
                smaliInstructions.IputBoolean();
                break;

            case SmaliLine.LineSmali.MoveResult:
            case SmaliLine.LineSmali.MoveResultObject:
                smaliInstructions.MoveResult();
                break;

            case SmaliLine.LineSmali.Unimplemented:     //These will cover most of the instructions right now...
            case SmaliLine.LineSmali.Unknown:
            case SmaliLine.LineSmali.Conditional:
            case SmaliLine.LineSmali.Label:
                smaliInstructions.Unimplemented();
                break;
            }
        }
コード例 #5
0
ファイル: SmaliVM.cs プロジェクト: nicklausd/smali2java
 public void ProcessInstruction(SmaliMethod m, SmaliLine l)
 {
     smaliInstructions.m = m;
     smaliInstructions.l = l;
     switch (l.Smali)
     {
         case SmaliLine.LineSmali.Const4:
         case SmaliLine.LineSmali.Const:
         case SmaliLine.LineSmali.Const16:
         case SmaliLine.LineSmali.ConstHigh16: //TODO: these may end up needing seperate instruction handlers.
         case SmaliLine.LineSmali.ConstString:
             smaliInstructions.Const();
             break;
         case SmaliLine.LineSmali.SputObject:
             smaliInstructions.SputObject();
             break;
         case SmaliLine.LineSmali.Return:
         case SmaliLine.LineSmali.ReturnVoid:
             smaliInstructions.Return();
             break;
         case SmaliLine.LineSmali.SgetObject:
             smaliInstructions.SgetObject();
             break;
         case SmaliLine.LineSmali.NewInstance:
             smaliInstructions.NewInstance();
             break;
         case SmaliLine.LineSmali.InvokeVirtual:
         case SmaliLine.LineSmali.InvokeStatic:
         case SmaliLine.LineSmali.InvokeDirect: //TODO: These may need to be on their own functions, but for now the are all identical in implementation...
             smaliInstructions.Invoke();
             break;
         case SmaliLine.LineSmali.IputBoolean:
             smaliInstructions.IputBoolean();
             break;
         case SmaliLine.LineSmali.MoveResult:
         case SmaliLine.LineSmali.MoveResultObject:
             smaliInstructions.MoveResult();
             break;
         case SmaliLine.LineSmali.Unimplemented: //These will cover most of the instructions right now...
         case SmaliLine.LineSmali.Unknown:
         case SmaliLine.LineSmali.Conditional:
         case SmaliLine.LineSmali.Label:
             smaliInstructions.Unimplemented();
             break;
     }
 }
コード例 #6
0
        public void LoadMethods()
        {
            bool        bAdd = false;
            SmaliMethod m    = null;

            for (int i = 0; i < Lines.Count; i++)
            {
                SmaliLine l = Lines[i];

                if (bAdd)
                {
                    m.Lines.Add(l);
                    if (l.Instruction == SmaliLine.LineInstruction.EndMethod)
                    {
                        bAdd = false;
                        //if(Methods.Count < 3)
                        Methods.Add(m);
                    }
                    else
                    {
                        continue;
                    }
                }

                if (l.Instruction == SmaliLine.LineInstruction.Method)
                {
                    bAdd          = true;
                    m             = new SmaliMethod();
                    m.ParentClass = this;
                    m.Lines.Add(l);
                }
            }

            foreach (SmaliMethod me in Methods)
            {
                me.Process();
            }
        }