BufferHeader(CachedBinaryReader reader)
        {
            var id = reader.ReadInt32 ();
            if (id != BufId)
                throw new IOException (string.Format ("Incorrect buffer id: 0x{0:X}", id));

            Length = reader.ReadInt32 ();
            TimeBase = reader.ReadUInt64 ();
            PtrBase = reader.ReadInt64 ();
            ObjBase = reader.ReadInt64 ();
            ThreadId = reader.ReadInt64 ();
            MethodBase = reader.ReadInt64 ();
        }
        LogHeader(CachedBinaryReader reader)
        {
            var id = reader.ReadInt32 ();
            if (id != LogHeaderId)
                throw new InvalidOperationException ("Id doesn't match.");

            var versionMajor = reader.ReadByte ();
            var versionMinor = reader.ReadByte ();
            Version = new Version (versionMajor, versionMinor);

            Format = reader.ReadByte ();
            PtrSize = reader.ReadByte ();
            StartupTime = reader.ReadInt64 ();
            TimerOverhead = reader.ReadInt32 ();
            Flags = reader.ReadInt32 ();
            Pid = reader.ReadInt32 ();
            Port = reader.ReadUInt16 ();
            SysId = reader.ReadUInt16 ();
        }