Esempio n. 1
0
        /// <summary>
        /// Read the EH clause from a given file offset in the PE image.
        /// </summary>
        /// <param name="reader">R2R image reader<param>
        /// <param name="offset">Offset of the EH clause in the image</param>
        public EHClause(R2RReader reader, int offset)
        {
            Flags                    = (CorExceptionFlag)BitConverter.ToUInt32(reader.Image, offset + 0 * sizeof(uint));
            TryOffset                = BitConverter.ToUInt32(reader.Image, offset + 1 * sizeof(uint));
            TryEnd                   = BitConverter.ToUInt32(reader.Image, offset + 2 * sizeof(uint));
            HandlerOffset            = BitConverter.ToUInt32(reader.Image, offset + 3 * sizeof(uint));
            HandlerEnd               = BitConverter.ToUInt32(reader.Image, offset + 4 * sizeof(uint));
            ClassTokenOrFilterOffset = BitConverter.ToUInt32(reader.Image, offset + 5 * sizeof(uint));

            if ((Flags & CorExceptionFlag.COR_ILEXCEPTION_CLAUSE_KIND_MASK) == CorExceptionFlag.COR_ILEXCEPTION_CLAUSE_NONE)
            {
                ClassName = MetadataNameFormatter.FormatHandle(reader.MetadataReader, MetadataTokens.Handle((int)ClassTokenOrFilterOffset));
            }
        }
Esempio n. 2
0
        public static TransitionBlock FromReader(R2RReader reader)
        {
            switch (reader.Architecture)
            {
            case Architecture.X86:
                return(X86TransitionBlock.Instance);

            case Architecture.X64:
                return(reader.OS == OperatingSystem.Windows ? X64WindowsTransitionBlock.Instance : X64UnixTransitionBlock.Instance);

            case Architecture.Arm:
                return(ArmTransitionBlock.Instance);

            case Architecture.Arm64:
                return(Arm64TransitionBlock.Instance);

            default:
                throw new NotImplementedException();
            }
        }