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; } }
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; } }
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(); }
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; } }
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(); } }