public static object SafePointerToType()

in src/BinaryParsers/PEBinary/PortableExecutable/PEExtensionMethods.cs [11:36]


        public static object SafePointerToType(this SafePointer sp, ImageFieldData fi)
        {
            object res;

            switch (fi.Type)
            {
                case Type.BYTE: res = (byte)sp; break;
                case Type.SBYTE: res = (sbyte)(byte)sp; break;
                case Type.UINT16: res = (ushort)sp; break;
                case Type.INT16: res = (short)(ushort)sp; break;
                case Type.UINT32: res = (uint)sp; break;
                case Type.UINT64: res = (ulong)sp; break;
                case Type.INT32: res = (int)(uint)sp; break;
                case Type.INT64: res = (long)(ulong)sp; break;
                case Type.POINTER: res = new SafePointer(sp.array, sp.stream, (int)(uint)sp); break;
                case Type.HEADER: res = fi.Header.Create(fi.ParentHeader, sp); break;
                case Type.NATIVEINT:
                    PEHeader ioh = fi.ParentHeader;
                    res = ((ioh != null) && (ioh.Magic == PEMagic.PE32Plus))
                        ? (ulong)sp
                        : (uint)sp;
                    break;
                default: throw new InvalidOperationException("Unknown type");
            }
            return res;
        }