Ejemplo n.º 1
0
 Import ReadImport(MakiReader mr)
 {
     return(new Import()
     {
         Maki = this,
         TypeIdx = mr.ReadInt32() - 0x100,
         Name = mr.ReadString()
     });
 }
Ejemplo n.º 2
0
 Listener ReadListener(MakiReader mr)
 {
     return(new Listener()
     {
         Maki = this,
         ObjIdx = mr.ReadInt32(),
         CallIdx = mr.ReadInt32(),
         Offset = mr.ReadInt32()
     });
 }
Ejemplo n.º 3
0
        public Maki(byte[] exe)
        {
            using (var ms = new MemoryStream(exe))
                using (var mr = new MakiReader(ms))
                {
                    var header  = mr.ReadUInt16();
                    var version = mr.ReadBytes(6);
                    Guids   = mr.ReadSectionOf(m => m.ReadGuid()).ToList();
                    Imports = mr.ReadSectionOf(ReadImport).ToList();

                    var objects = mr.ReadSectionOf(ReadObject).ToList();
                    var strings = mr.ReadSectionOf(ReadString).ToList();
                    Objects = (
                        from obj in objects.Select(Tuple.Create <object, int>)
                        join str in strings on obj.Item2 equals str.Item1 into pre
                        from p in pre.DefaultIfEmpty()
                        select obj.Item1 ?? p?.Item2).ToList();

                    Listeners = mr.ReadSectionOf(ReadListener).ToList();
                    Code      = mr.ReadBytes(mr.ReadInt32());
                }
        }
Ejemplo n.º 4
0
        object ReadObject(MakiReader mr)
        {
            var typeIdx     = mr.ReadByte();
            var isPrimitive = !mr.ReadBoolean();
            var sub         = mr.ReadInt16();
            var data        = mr.ReadBytes(8);
            var isGlobal    = mr.ReadBoolean();
            var isStatic    = mr.ReadBoolean();

            if (isPrimitive)
            {
                switch (typeIdx)
                {
                case 2:
                    var result = nullRead ?
                                 BitConverter.ToInt32(data, 0) :
                                 default(object);
                    nullRead = true;
                    return(result);

                case 3:
                    return(BitConverter.ToSingle(data, 0));

                case 4:
                    return(BitConverter.ToDouble(data, 0));

                case 5:
                    return(BitConverter.ToBoolean(data, 0));

                default:
                    return(null);
                }
            }
            else
            {
                return(isStatic ? Guids[typeIdx] : default(object));
            }
        }
Ejemplo n.º 5
0
 static Tuple <int, string> ReadString(MakiReader mr)
 {
     return(new Tuple <int, string>(mr.ReadInt32(), mr.ReadString()));
 }