Exemplo n.º 1
0
        private void DecompileStates()
        {
            ProcessDescriptor pd = (ProcessDescriptor)_code;

            _templ = new MSILDecompilerTemplate()
            {
                Instance                 = pd.Instance.Owner,
                ArgumentValues           = new object[0],
                Decompilee               = _code,
                Method                   = _code.Method,
                Code                     = MethodCode.Create(_code.Method),
                DisallowReturnStatements = true,
                NestLoopsDeeply          = true,
                TryToEliminateLoops      = true,
                DisallowConditionals     = true
            };
            LocalVariableState initialState = _templ.ExportLocalVariableState();

            GetStateInfo(_dissectionPoints[0], initialState);

            while (_stateWorkQueue.Any())
            {
                StateInfo      si     = _stateWorkQueue.Dequeue();
                MSILDecompiler decomp = new MSILDecompiler(_code, si.CFG, _instance)
                {
                    Template = _templ
                };
                _templ.AddAttribute(this);
                _templ.ImportLocalVariableState(si.LVState);
                IDecompilationResult result = decomp.Decompile();
                si.StateFun = result.Decompiled;
                _calledMethods.AddRange(result.CalledMethods);
                _referencedFields.AddRange(result.ReferencedFields);
            }
        }
Exemplo n.º 2
0
        private void InitCoState(TAVerb tav, CoStateInfo csi)
        {
            MethodCode       csc    = MethodCode.Create(tav.Op.Method);
            MethodDescriptor md     = new MethodDescriptor(tav.Op.Method, new object[0], new EVariability[0]);
            MSILDecompiler   decomp = new MSILDecompiler(md, csc, tav.Op.Target);

            decomp.Template.DisallowReturnStatements = true;
            decomp.Template.NestLoopsDeeply          = true;
            decomp.Template.TryToEliminateLoops      = true;
            decomp.Template.DisallowConditionals     = true;
            IDecompilationResult result = decomp.Decompile();

            csi.StateAction  = result.Decompiled;
            csi.DuringAction = tav.During;
        }