예제 #1
0
        public void WriteNewKernel(Stream kernel, Stream output)
        {
            var writer = new XeWriter(output);

            writer.WriteUInt16(magic);
            writer.WriteUInt16(version);
            writer.WriteUInt16(unkWord1);
            writer.WriteUInt16(unkWord2);
            writer.WriteUInt32(entryPoint);
            writer.WriteUInt32(0xdeadbeef); // Will need to go back and update after compression
            writer.Write(hmacSalt, 0, 0x10);

            var meta = new byte[0x10];

            BufferUtils.FromUInt32((uint)kernel.Length, meta, 0x08);

            writer.Write(meta, 0, 0x10);

            var compressedKernelStream = new MemoryStream();

            CompressKernel(kernel, compressedKernelStream);
            compressedKernelStream.Seek(0, SeekOrigin.Begin);
            compressedKernelStream.CopyTo(output);
            compressedKernelStream.Close();

            writer.Seek(0x0c, SeekOrigin.Begin);
            writer.WriteUInt32((uint)writer.Length);
        }
예제 #2
0
 public void WriteUInt32(uint value, Endian endian = Endian.Big)
 {
     BufferUtils.FromUInt32(value, internalBuffer, 0, endian);
     Stream.Write(internalBuffer, 0, 4);
 }