예제 #1
0
        // Token: 0x060001F9 RID: 505 RVA: 0x00008320 File Offset: 0x00006520
        private static object parseBinaryArray(int objRef)
        {
            List <object> list  = new List <object>();
            List <int>    list2 = new List <int>();
            byte          b     = Plist.objectTable[Plist.offsetTable[objRef]];
            int           num;
            int           count = Plist.getCount(Plist.offsetTable[objRef], ref num);

            checked
            {
                if (count < 15)
                {
                    num = Plist.offsetTable[objRef] + 1;
                }
                else
                {
                    num = Plist.offsetTable[objRef] + 2 + Plist.RegulateNullBytes(BitConverter.GetBytes(count), 1).Length;
                }
                int i;
                for (i = num; i < num + count * Plist.objRefSize; i += Plist.objRefSize)
                {
                    byte[] array = Plist.objectTable.GetRange(i, Plist.objRefSize).ToArray();
                    Array.Reverse(array);
                    list2.Add(BitConverter.ToInt32(Plist.RegulateNullBytes(array, 4), 0));
                }
                i = 0;
                while (i < count)
                {
                    list.Add(RuntimeHelpers.GetObjectValue(Plist.parseBinary(list2[i])));
                    Math.Max(Interlocked.Increment(ref i), i - 1);
                }
                return(list);
            }
        }
예제 #2
0
        // Token: 0x060001E3 RID: 483 RVA: 0x00007188 File Offset: 0x00005388
        private static object readBinary(byte[] data)
        {
            Plist.offsetTable.Clear();
            List <byte> offsetTableBytes = new List <byte>();

            Plist.objectTable.Clear();
            Plist.refCount          = 0;
            Plist.objRefSize        = 0;
            Plist.offsetByteSize    = 0;
            Plist.offsetTableOffset = 0L;
            List <byte> list = new List <byte>(data);

            checked
            {
                List <byte> range = list.GetRange(list.Count - 32, 32);
                Plist.parseTrailer(range);
                Plist.objectTable = list.GetRange(0, (int)Plist.offsetTableOffset);
                offsetTableBytes  = list.GetRange((int)Plist.offsetTableOffset, list.Count - (int)Plist.offsetTableOffset - 32);
                Plist.parseOffsetTable(offsetTableBytes);
                return(Plist.parseBinary(0));
            }
        }