Esempio n. 1
0
        public PetitClrInterpreter(ClassLoader classLoader, MethodDefinition methodDef, bool directCall, IList<ObjectInstance> args, object stubContext)
        {
            _classLoader = classLoader;
            _methInfo2 = methodDef;
            _directCall = directCall;
            _args = args;
            _stubContext = stubContext;

            _instructions = methodDef.Body.Instructions.ToArray();
            _instructionPtr = 0;
            _opStack = new Stack<ObjectInstance>();
            _localSlot = new ObjectInstance[methodDef.Body.Variables.Count];
        }
Esempio n. 2
0
        public static ObjectInstance ExecuteMethodWrapper(ClassLoader classLoader, MethodDefinition methDef, bool directCall, IList<ObjectInstance> args,
            object stubContext, out bool doJmpCall)
        {
            var interp = new PetitClrInterpreter(classLoader, methDef, directCall, args, stubContext);
            var interpFrame = new InterpreterFrame(interp);

            ObjectInstance retVal;
            MemberReference jmpCallToken;
            interp.ExecuteMethod(out retVal, out doJmpCall, out jmpCallToken);

            if (doJmpCall)
            {
                throw ThrowHelper.NotImplementedYet;
            }

            interpFrame.Pop();
            return retVal;
        }
Esempio n. 3
0
 public static MethodTable BuildMethodTable(ClassLoader classLoader, TypeDefinition typeDef)
 {
     return new MethodTableBuilder(classLoader, typeDef).BuildMethodTable();
 }
Esempio n. 4
0
        static void Main(string[] args)
        {

            // Setup InternalCallMethods
            PetitClrRuntime.Current.InternalCallMethods.Add("System.String System.Environment::GetStackTraceInternal(System.Exception,System.Boolean)", (thisArg, frame, methArgs) =>
            {
                return "HogeMoge";
            });
            PetitClrRuntime.Current.InternalCallMethods.Add("System.Void System.Console::Write(System.String)", (thisArg, frame, methArgs) =>
            {
                System.Console.Write(methArgs[0]);
                return null;
            });
            PetitClrRuntime.Current.InternalCallMethods.Add("System.Void System.Console::Write(System.String,System.Object)", (thisArg, frame, methArgs) =>
            {
                System.Console.Write(methArgs[0].ToString(), methArgs[1]);
                return null;
            });
            PetitClrRuntime.Current.InternalCallMethods.Add("System.Void System.Console::Write(System.Int32)", (thisArg, frame, methArgs) =>
            {
                System.Console.Write(methArgs[0]);
                return null;
            });
            PetitClrRuntime.Current.InternalCallMethods.Add("System.Void System.Console::WriteLine()", (thisArg, frame, methArgs) =>
            {
                System.Console.WriteLine();
                return null;
            });
            PetitClrRuntime.Current.InternalCallMethods.Add("System.Void System.Console::WriteLine(System.String)", (thisArg, frame, methArgs) =>
            {
                System.Console.WriteLine(methArgs[0]);
                return null;
            });
            PetitClrRuntime.Current.InternalCallMethods.Add("System.Void System.Console::WriteLine(System.String,System.Object)", (thisArg, frame, methArgs) =>
            {
                System.Console.WriteLine(methArgs[0].ToString(), methArgs[1]);
                return null;
            });
            PetitClrRuntime.Current.InternalCallMethods.Add("System.Void System.Console::WriteLine(System.Int32)", (thisArg, frame, methArgs) =>
            {
                System.Console.WriteLine(methArgs[0]);
                return null;
            });
            PetitClrRuntime.Current.InternalCallMethods.Add("System.Void System.Diagnostics.Debugger::Break()", (thisArg, frame, methArgs) =>
            {
                Debugger.Break();
                return null;
            });

            // Load Assembly & Get EntryPoint
            var assemblyResolver = new InazumaAssemblyResolver();
            var classLoader = new ClassLoader();
            var readerparameters = new ReaderParameters() { AssemblyResolver = assemblyResolver, MetadataResolver = new InazumaMetadataResolver(assemblyResolver) };
            InazumaAssemblyResolver.PetitCorLib = AssemblyDefinition.ReadAssembly("../../../Inazuma.PetitClr.PetitCorlib/Bin/Debug/Inazuma.PetitClr.PetitCorlib.dll", readerparameters); // = mscorlibAssembly
            var asm = AssemblyDefinition.ReadAssembly("Inazuma.PetitClr.SampleHost.exe", readerparameters);
            var entryPointType = asm.MainModule.GetType("Inazuma.PetitClr.SampleHost.SampleProgram");

            // Execute Program
            bool doJmpCall;
            PetitClrInterpreter.ExecuteMethodWrapper(classLoader, entryPointType.Methods[0], false, new List<ObjectInstance>(), null, out doJmpCall);

            System.Console.ReadLine();
        }
Esempio n. 5
0
 public MethodTableBuilder(ClassLoader classLoader, TypeDefinition typeDef)
 {
     _classLoader = classLoader;
     _typeDefinition = typeDef;
 }