예제 #1
0
        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);
        }
예제 #2
0
 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));
 }