public void Write(BinaryStreamWriter writer) { writer.WriteInt32(Buffs.Count); foreach (var buff in Buffs) { writer.WriteString(buff.Name); writer.WriteInt32((int)Buff.BuffCategoryAndIDFromCategoryAndAttributeID(buff.Category, buff.AttributeID)); writer.WriteInt32((int)buff.Mode); writer.WriteInt32(buff.Value); } }
public void WriteIteratorScopes(StateMachineScopeDebugInformation [] scopes, MethodDebugInformation debug_info) { Write(CustomMetadataType.IteratorScopes, () => { writer.WriteInt32(scopes.Length); foreach (var scope in scopes) { var start = scope.Start.Offset; var end = scope.End.IsEndOfMethod ? debug_info.code_size : scope.End.Offset; writer.WriteInt32(start); writer.WriteInt32(end - 1); } }); }
public ImageDebugHeader GetDebugHeader() { writer.Dispose(); var directory = new ImageDebugDirectory { Type = ImageDebugType.EmbeddedPortablePdb, MajorVersion = 0x0100, MinorVersion = 0x0100, }; var data = new MemoryStream(); var w = new BinaryStreamWriter(data); w.WriteByte(0x4d); w.WriteByte(0x50); w.WriteByte(0x44); w.WriteByte(0x42); w.WriteInt32((int)stream.Length); stream.Position = 0; using (var compress_stream = new DeflateStream(data, CompressionMode.Compress, leaveOpen: true)) stream.CopyTo(compress_stream); directory.SizeOfData = (int)data.Length; return(new ImageDebugHeader(new [] { writer.GetDebugHeader().Entries[0], new ImageDebugHeaderEntry(directory, data.ToArray()) })); }
public ImageDebugHeader GetDebugHeader() { writer.Dispose(); ImageDebugDirectory imageDebugDirectory = default(ImageDebugDirectory); imageDebugDirectory.Type = ImageDebugType.EmbeddedPortablePdb; ImageDebugDirectory directory = imageDebugDirectory; MemoryStream memoryStream = new MemoryStream(); BinaryStreamWriter binaryStreamWriter = new BinaryStreamWriter(memoryStream); binaryStreamWriter.WriteByte(77); binaryStreamWriter.WriteByte(80); binaryStreamWriter.WriteByte(68); binaryStreamWriter.WriteByte(66); binaryStreamWriter.WriteInt32((int)stream.Length); stream.Position = 0L; using (DeflateStream destination = new DeflateStream(memoryStream, CompressionMode.Compress, true)) { stream.CopyTo(destination); } directory.SizeOfData = (int)memoryStream.Length; return(new ImageDebugHeader(new ImageDebugHeaderEntry[2] { writer.GetDebugHeader().Entries[0], new ImageDebugHeaderEntry(directory, memoryStream.ToArray()) })); }
public void WriteInt32() { using (var stream = new MemoryStream()) { var writer = new BinaryStreamWriter(stream); writer.WriteUInt32(0x81020304u); writer.WriteInt32(-2063202552); Assert.Equal(new byte[] { 0x04, 0x03, 0x02, 0x81, 0x08, 0x07, 0x06, 0x85 }, stream.ToArray()); } }
public ImageDebugHeader GetDebugHeader() { ImageDebugHeader pdbDebugHeader = writer.GetDebugHeader(); var directory = new ImageDebugDirectory { Type = ImageDebugType.EmbeddedPortablePdb, MajorVersion = 0x0100, MinorVersion = 0x0100, }; var data = new MemoryStream(); var w = new BinaryStreamWriter(data); w.WriteByte(0x4d); w.WriteByte(0x50); w.WriteByte(0x44); w.WriteByte(0x42); w.WriteInt32((int)stream.Length); stream.Position = 0; using (var compress_stream = new DeflateStream(data, CompressionMode.Compress, leaveOpen: true)) stream.CopyTo(compress_stream); directory.SizeOfData = (int)data.Length; var debugHeaderEntries = new ImageDebugHeaderEntry [pdbDebugHeader.Entries.Length + 1]; for (int i = 0; i < pdbDebugHeader.Entries.Length; i++) { debugHeaderEntries [i] = pdbDebugHeader.Entries [i]; } debugHeaderEntries [debugHeaderEntries.Length - 1] = new ImageDebugHeaderEntry(directory, data.ToArray()); return(new ImageDebugHeader(debugHeaderEntries)); }
private void DefineCustomMetadata(PdbMethodSymbols pdbSymbols) { // Custom PDB metadata if (pdbSymbols != null) { using (var memoryStream = new MemoryStream()) { var metadata = new BinaryStreamWriter(memoryStream); metadata.WriteByte(4); // version metadata.WriteByte((byte)1); // count metadata.WriteInt16(0); // padding var metadataStartPosition = metadata.BaseStream.Position; var customMetadataCount = 0; if (pdbSymbols.IteratorClass != null) { customMetadataCount++; metadata.WriteByte(4); // version metadata.WriteByte(4); // forward iterator metadata.Align(4); using (new PdbBinaryStreamWriterSizeHelper(metadata)) { metadata.WriteString(pdbSymbols.IteratorClass); metadata.WriteInt16(0); metadata.Align(4); } } if (pdbSymbols.UsingCounts != null) { customMetadataCount++; metadata.WriteByte(4); // version metadata.WriteByte(0); // using info metadata.Align(4); using (new PdbBinaryStreamWriterSizeHelper(metadata)) { metadata.WriteUInt16((ushort)pdbSymbols.UsingCounts.Count); foreach (var uc in pdbSymbols.UsingCounts) { metadata.WriteUInt16(uc); } metadata.Align(4); } } if (pdbSymbols.MethodWhoseUsingInfoAppliesToThisMethod != null) { customMetadataCount++; metadata.WriteByte(4); // version metadata.WriteByte(1); // forward info metadata.Align(4); using (new PdbBinaryStreamWriterSizeHelper(metadata)) { metadata.WriteUInt32(pdbSymbols.MethodWhoseUsingInfoAppliesToThisMethod.MetadataToken.ToUInt32()); } } if (pdbSymbols.IteratorScopes != null) { customMetadataCount++; metadata.WriteByte(4); // version metadata.WriteByte(3); // iterator scopes metadata.Align(4); using (new PdbBinaryStreamWriterSizeHelper(metadata)) { metadata.WriteInt32(pdbSymbols.IteratorScopes.Count); foreach (var scope in pdbSymbols.IteratorScopes) { metadata.WriteInt32(scope.Start.Offset); metadata.WriteInt32(scope.End.Offset); } } } if (metadata.BaseStream.Position != metadataStartPosition) { // Update number of entries metadata.Flush(); metadata.BaseStream.Position = 1; metadata.WriteByte((byte)customMetadataCount); metadata.Flush(); writer.DefineCustomMetadata("MD2", memoryStream.ToArray()); } } // Save back asyncMethodInfo if (pdbSymbols.SynchronizationInformation != null) { using (var memoryStream = new MemoryStream()) { var metadata = new BinaryStreamWriter(memoryStream); metadata.WriteUInt32(pdbSymbols.SynchronizationInformation.KickoffMethod != null ? pdbSymbols.SynchronizationInformation.KickoffMethod.MetadataToken.ToUInt32() : 0); metadata.WriteUInt32(pdbSymbols.SynchronizationInformation.GeneratedCatchHandlerIlOffset); metadata.WriteUInt32((uint)pdbSymbols.SynchronizationInformation.SynchronizationPoints.Count); foreach (var syncPoint in pdbSymbols.SynchronizationInformation.SynchronizationPoints) { metadata.WriteUInt32(syncPoint.SynchronizeOffset); metadata.WriteUInt32(syncPoint.ContinuationMethod != null ? syncPoint.ContinuationMethod.MetadataToken.ToUInt32() : 0); metadata.WriteUInt32(syncPoint.ContinuationOffset); } writer.DefineCustomMetadata("asyncMethodInfo", memoryStream.ToArray()); } } } }