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;
}