コード例 #1
0
        public static IntPtr NativeLayoutSignature(this RuntimeSignature signature)
        {
            if (!signature.IsNativeLayoutSignature)
                Environment.FailFast("Not a valid native layout signature");

            NativeReader reader = TypeLoaderEnvironment.Instance.GetNativeLayoutInfoReader(signature);
            return reader.OffsetToAddress(signature.NativeLayoutOffset);
        }
コード例 #2
0
        // Parse a native layout info blob into a type / method given a signature pointer in the executable image
        private object TryParseNativeSignature(TypeSystemContext typeSystemContext, ref IntPtr signature, RuntimeTypeHandle[] typeGenericArgumentHandles, RuntimeTypeHandle[] methodGenericArgumentHandles, bool isMethodSignature)
        {
            IntPtr moduleHandle = RuntimeAugments.GetModuleFromPointer(signature);
            NativeReader reader = GetNativeLayoutInfoReader(moduleHandle);
            uint offset = reader.AddressToOffset(signature);
            NativeParser parser = new NativeParser(reader, offset);

            object retObject = TryParseNativeSignatureWorker(typeSystemContext, moduleHandle, ref parser, typeGenericArgumentHandles, methodGenericArgumentHandles, isMethodSignature);
            signature = reader.OffsetToAddress(parser.Offset);
            return retObject;
        }