예제 #1
0
 public DmdRuntimeImpl(DmdEvaluator evaluator, DmdImageFileMachine machine)
 {
     appDomainsLockObj = new object();
     appDomains        = new List <DmdAppDomainImpl>();
     Evaluator         = evaluator ?? throw new ArgumentNullException(nameof(evaluator));
     PointerSize       = CalculatePointerSize(machine);
     Machine           = machine;
 }
예제 #2
0
 /// <summary>
 /// Creates a runtime
 /// </summary>
 /// <param name="evaluator">Evaluator</param>
 /// <param name="machine">Machine</param>
 /// <returns></returns>
 public static DmdRuntime CreateRuntime(DmdEvaluator evaluator, DmdImageFileMachine machine)
 {
     if (evaluator == null)
     {
         throw new ArgumentNullException(nameof(evaluator));
     }
     return(new DmdRuntimeImpl(evaluator, machine));
 }
예제 #3
0
        static int CalculatePointerSize(DmdImageFileMachine machine)
        {
            switch (machine)
            {
            case DmdImageFileMachine.IA64:
            case DmdImageFileMachine.AMD64:
            case DmdImageFileMachine.ARM64:
            case DmdImageFileMachine.ALPHA64:
                return(8);

            default:
                return(4);
            }
        }
예제 #4
0
 /// <summary>
 /// Gets PE information
 /// </summary>
 /// <param name="peKind">PE Kind</param>
 /// <param name="machine">Machine</param>
 public abstract void GetPEKind(out DmdPortableExecutableKinds peKind, out DmdImageFileMachine machine);
예제 #5
0
 public override void GetPEKind(out DmdPortableExecutableKinds peKind, out DmdImageFileMachine machine)
 {
     peKind  = DmdPortableExecutableKinds.ILOnly;
     machine = DmdImageFileMachine.I386;
 }
예제 #6
0
        static DmdAssemblyNameFlags GetProcessorArchitecture(DmdPortableExecutableKinds peKind, DmdImageFileMachine machine)
        {
            if ((peKind & DmdPortableExecutableKinds.PE32Plus) == 0)
            {
                switch (machine)
                {
                case DmdImageFileMachine.I386:
                    if ((peKind & DmdPortableExecutableKinds.Required32Bit) != 0)
                    {
                        return(DmdAssemblyNameFlags.PA_x86);
                    }
                    if ((peKind & DmdPortableExecutableKinds.ILOnly) != 0)
                    {
                        return(DmdAssemblyNameFlags.PA_MSIL);
                    }
                    return(DmdAssemblyNameFlags.PA_x86);

                case DmdImageFileMachine.ARM:
                    return(DmdAssemblyNameFlags.PA_ARM);
                }
            }
            else
            {
                switch (machine)
                {
                case DmdImageFileMachine.I386:
                    if ((peKind & DmdPortableExecutableKinds.ILOnly) != 0)
                    {
                        return(DmdAssemblyNameFlags.PA_MSIL);
                    }
                    break;

                case DmdImageFileMachine.AMD64:
                    return(DmdAssemblyNameFlags.PA_AMD64);

                case DmdImageFileMachine.IA64:
                    return(DmdAssemblyNameFlags.PA_IA64);
                }
            }

            return(DmdAssemblyNameFlags.PA_None);
        }