private Rance10Object ReadObject(Rance10 rance10, uint addr, int idx) { if (addr == 0) { return(null); } var buf = new byte[64]; var m = rance10.ReadMemory(new IntPtr(addr), buf, 8); if (!m.Success) { System.Diagnostics.Debug.Print($"Failed to read memory: {addr:X8}"); return(null); } var type = BitConverter.ToInt32(m.Data, 4); switch (type) { case 0: m = rance10.ReadMemory(new IntPtr(addr), buf, Rance10SubObject0.Size); break; case 1: m = rance10.ReadMemory(new IntPtr(addr), buf, Rance10SubObject1_Value.Size); break; case 2: m = rance10.ReadMemory(new IntPtr(addr), buf, Rance10SubObject2_String.Size); break; case 3: m = rance10.ReadMemory(new IntPtr(addr), buf, Rance10SubObject3_Array.Size); break; case 4: m = rance10.ReadMemory(new IntPtr(addr), buf, Rance10SubObject4_Class.Size); break; case 5: m = rance10.ReadMemory(new IntPtr(addr), buf, Rance10SubObject5.Size); break; default: throw new Exception($"Invalid type no: {type} @{addr:X8}"); } if (!m.Success) { System.Diagnostics.Debug.Print($"Failed to read memory: {addr:X8}"); return(null); } var obj = Rance10Object.New(null, (uint)m.Address.ToInt64(), m.Data); obj.Seq = idx; return(obj); }