Listener ReadListener(MakiReader mr) { return(new Listener() { Maki = this, ObjIdx = mr.ReadInt32(), CallIdx = mr.ReadInt32(), Offset = mr.ReadInt32() }); }
Import ReadImport(MakiReader mr) { return(new Import() { Maki = this, TypeIdx = mr.ReadInt32() - 0x100, Name = mr.ReadString() }); }
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()); } }
static Tuple <int, string> ReadString(MakiReader mr) { return(new Tuple <int, string>(mr.ReadInt32(), mr.ReadString())); }