ExceptionHandler ReadExceptionHandler()
        {
            var  ehType        = (ExceptionHandlerType)reader.ReadByte();
            uint tryOffset     = imageReader.ReadVariableLengthUInt32();
            uint tryLength     = imageReader.ReadVariableLengthUInt32();
            uint handlerOffset = imageReader.ReadVariableLengthUInt32();
            uint handlerLength = imageReader.ReadVariableLengthUInt32();
            var  catchType     = imageReader.ReadTypeSig().ToTypeDefOrRef();
            uint filterOffset  = imageReader.ReadVariableLengthUInt32();

            var eh = new ExceptionHandler(ehType);

            eh.TryStart = GetInstructionThrow(tryOffset);
            eh.TryEnd   = GetInstruction(tryOffset + tryLength);
            if (ehType == ExceptionHandlerType.Filter)
            {
                eh.FilterStart = GetInstructionThrow(filterOffset);
            }
            eh.HandlerStart = GetInstructionThrow(handlerOffset);
            eh.HandlerEnd   = GetInstruction(handlerOffset + handlerLength);
            eh.CatchType    = catchType;
            return(eh);
        }