Esempio n. 1
0
        protected void VisitMethodBody(MethodBody body)
        {
            var localVariableSize = 0;

            if (body.HasVariables)
            {
                foreach (VariableDefinition variable in body.Variables)
                {
                    localVariableSize += GetVariableSize(variable);
                    _variableLocations.Add(variable.Name, -localVariableSize);
                }
            }

            if (body.Method.HasParameters)
            {
                var size = 4; //skip return point
                foreach (ParameterDefinition item in body.Method.Parameters)
                {
                    size += 4;
                    _parameterLocations.Add(item.Name, size);
                }
            }

            var block = body.Decompile();

            block = (BlockStatement) new TypedTransformer().VisitBlockStatement(block);
            EmitMethodEntry(localVariableSize);
            EmitBlockStatement(block, -localVariableSize);
        }
        private string DecompileMethod(MethodBody body, ILanguage language)
        {
            var str    = new StringWriter();
            var writer = language.GetWriter(new PlainTextFormatter(str));

            var block = body.Decompile(language);

            writer.Write(block);

            return(str.ToString());
        }
Esempio n. 3
0
        public static BlockStatement Decompile(this MethodBody body, ILanguage language, TypeSpecificContext typeContext = null)
        {
            DecompilationContext dc;

            return(body.Decompile(language, out dc, typeContext));
        }