private static ObjectTableWrapper ReadObjectTable(SPEEmulator.IEndianBitConverter conv) { uint object_table_size = conv.ReadUInt(SPEJITCompiler.OBJECT_TABLE_OFFSET); SPEEmulator.EndianBitConverter obj_tb_tmp = new SPEEmulator.EndianBitConverter(new byte[(object_table_size + 1) * 16]); conv.ReadBytes(SPEJITCompiler.OBJECT_TABLE_OFFSET, obj_tb_tmp.Data); uint[] object_table = new uint[(object_table_size + 1) * 4]; for (int i = 0; i < object_table.Length; i++) { object_table[i] = obj_tb_tmp.ReadUInt(); } ObjectTableWrapper objtable = new ObjectTableWrapper(object_table); /*Console.WriteLine("#Size {0}, nextFree: {1}, nextOffset: {2}, memSize: {3}", objtable.Size, objtable.NextFree, objtable.NextOffset, objtable.Memsize); * foreach (var e in objtable) * Console.WriteLine(e.ToString());*/ foreach (var v in objtable.Where(c => c.KnownType == AccCIL.KnownObjectTypes.String)) { byte[] localdata = new byte[v.AlignedSize]; conv.ReadBytes(v.Offset, localdata); objtable.Strings.Add(System.Text.Encoding.UTF8.GetString(localdata, 0, (int)v.Size), v.Index); } return(objtable); }
public object Deserialize(SPEEmulator.IEndianBitConverter conv, ObjectTableEntry e, object storage) { byte[] data = new byte[e.AlignedSize]; conv.ReadBytes(data); return(System.Text.Encoding.UTF8.GetString(data, 0, (int)e.Size)); }