void DisassembleRecord(BamlContext ctx, BamlRecord record) { if (BamlNode.IsFooter(record)) { while (scopeStack.Count > 0 && !BamlNode.IsMatch(scopeStack.Peek(), record)) { scopeStack.Pop(); output.Unindent(); } if (scopeStack.Count > 0) { scopeStack.Pop(); output.Unindent(); } } output.WriteDefinition(record.Type.ToString(), BamlToolTipReference.Create(GetRecordReference(record)), TextTokenKind.Keyword, true); Action <BamlContext, BamlRecord> handler; if (handlerMap.TryGetValue(record.Type, out handler)) { output.Write(" [", TextTokenKind.Text); handler(ctx, record); output.Write("]", TextTokenKind.Text); } output.WriteLine(); if (BamlNode.IsHeader(record)) { scopeStack.Push(record); output.Indent(); } }
void DisassembleRecord(BamlContext ctx, TypeSerializerInfoRecord record) { DisassembleRecord(ctx, (TypeInfoRecord)record); WriteText(", SerializerTypeId="); WriteTypeId(ctx, record.SerializerTypeId); }
void DisassembleRecord(BamlContext ctx, BamlRecord record) { if (BamlNode.IsFooter(record)) { while (scopeStack.Count > 0 && !BamlNode.IsMatch(scopeStack.Peek(), record)) { scopeStack.Pop(); output.DecreaseIndent(); } if (scopeStack.Count > 0) { scopeStack.Pop(); output.DecreaseIndent(); } } output.Write(record.Type.ToString(), BamlToolTipReference.Create(GetRecordReference(record)), DecompilerReferenceFlags.Local | DecompilerReferenceFlags.Definition, BoxedTextColor.Keyword); if (handlerMap.TryGetValue(record.Type, out var handler)) { output.Write(" [", BoxedTextColor.Text); handler(ctx, record); output.Write("]", BoxedTextColor.Text); } output.WriteLine(); if (BamlNode.IsHeader(record)) { scopeStack.Push(record); output.IncreaseIndent(); } }
void DisassembleRecord(BamlContext ctx, PropertyWithConverterRecord record) { DisassembleRecord(ctx, (PropertyRecord)record); WriteText(", ConverterTypeId="); WriteTypeId(ctx, record.ConverterTypeId); }
void DisassembleRecord(BamlContext ctx, PropertyStringReferenceRecord record) { DisassembleRecord(ctx, (PropertyComplexStartRecord)record); WriteText(", StringId="); WriteStringId(ctx, record.StringId); }
public void Disassemble(ModuleDef module, BamlDocument document) { WriteText("Signature: \t"); WriteString(document.Signature); output.WriteLine(); WriteText("Reader Version: \t"); WriteVersion(document.ReaderVersion); output.WriteLine(); WriteText("Updater Version:\t"); WriteVersion(document.UpdaterVersion); output.WriteLine(); WriteText("Writer Version: \t"); WriteVersion(document.WriterVersion); output.WriteLine(); WriteText("Record #: \t"); output.Write(document.Count.ToString(CultureInfo.InvariantCulture), BoxedTextColor.Number); output.WriteLine(); output.WriteLine(); var ctx = BamlContext.ConstructContext(module, document, token); scopeStack.Clear(); foreach (var record in document) { token.ThrowIfCancellationRequested(); DisassembleRecord(ctx, record); } }
void DisassembleRecord(BamlContext ctx, PropertyTypeReferenceRecord record) { DisassembleRecord(ctx, (PropertyComplexStartRecord)record); WriteText(", TypeId="); WriteTypeId(ctx, record.TypeId); }
void DisassembleRecord(BamlContext ctx, AttributeInfoRecord record) { WriteText("AttributeId="); WriteHexNumber(record.AttributeId); WriteText(", OwnerTypeId="); WriteTypeId(ctx, record.OwnerTypeId); WriteText(", AttributeUsage="); WriteHexNumber(record.AttributeUsage); string declType; if (record.OwnerTypeId > 0x7fff) { declType = ctx.KnownThings.Types((KnownTypes)(-record.OwnerTypeId)).FullName; } else if (ctx.TypeIdMap.ContainsKey(record.OwnerTypeId)) { declType = ctx.TypeIdMap[record.OwnerTypeId].TypeFullName; } else { declType = $"(0x{record.OwnerTypeId:x4})"; } var def = $"{IdentifierEscaper.Escape(declType)}::{IdentifierEscaper.Escape(record.Name)}"; WriteText(", Name="); WriteDefinition(record.Name, def); }
void DisassembleRecord(BamlContext ctx, PropertyRecord record) { WriteText("AttributeId="); WriteAttributeId(ctx, record.AttributeId); WriteText(", Value="); WriteString(record.Value); }
void DisassembleRecord(BamlContext ctx, AssemblyInfoRecord record) { WriteText("AssemblyId="); WriteHexNumber(record.AssemblyId); WriteText(", AssemblyFullName="); WriteDefinition(record.AssemblyFullName); }
void DisassembleRecord(BamlContext ctx, PropertyWithStaticResourceIdRecord record) { WriteText("AttributeId="); WriteAttributeId(ctx, record.AttributeId); WriteText(", "); DisassembleRecord(ctx, (StaticResourceIdRecord)record); }
void DisassembleRecord(BamlContext ctx, StringInfoRecord record) { WriteText("StringId="); WriteHexNumber(record.StringId); WriteText(", Value="); WriteString(record.Value); }
void DisassembleRecord(BamlContext ctx, LineNumberAndPositionRecord record) { WriteText("LineNumber="); WriteHexNumber(record.LineNumber); WriteText(", LinePosition="); WriteHexNumber(record.LinePosition); }
void DisassembleRecord(BamlContext ctx, ElementStartRecord record) { WriteText("TypeId="); WriteTypeId(ctx, record.TypeId); WriteText(", Flags="); WriteHexNumber(record.Flags); }
void DisassembleRecord(BamlContext ctx, DefAttributeRecord record) { WriteText("Value="); WriteString(record.Value); WriteText(", NameId="); WriteStringId(ctx, record.NameId); }
void DisassembleRecord(BamlContext ctx, NamedElementStartRecord record) { WriteText("TypeId="); WriteTypeId(ctx, record.TypeId); WriteText(", RuntimeName="); WriteString(record.RuntimeName); }
void DisassembleRecord(BamlContext ctx, PropertyWithExtensionRecord record) { WriteText("AttributeId="); WriteAttributeId(ctx, record.AttributeId); WriteText(", Flags="); WriteHexNumber(record.Flags); WriteText(", ValueId="); WriteHexNumber(record.ValueId); }
void DisassembleRecord(BamlContext ctx, PIMappingRecord record) { WriteText("XmlNamespace="); WriteString(record.XmlNamespace); WriteText(", ClrNamespace="); WriteString(record.ClrNamespace); WriteText(", AssemblyId="); WriteAssemblyId(ctx, record.AssemblyId); }
void DisassembleRecord(BamlContext ctx, DocumentStartRecord record) { WriteText("LoadAsync="); WriteBool(record.LoadAsync); WriteText(", MaxAsyncRecords="); WriteHexNumber(record.MaxAsyncRecords); WriteText(", DebugBaml="); WriteBool(record.DebugBaml); }
void DisassembleRecord(BamlContext ctx, RoutedEventRecord record) { WriteText("Value="); WriteString(record.Value); WriteText(", AttributeId="); WriteAttributeId(ctx, record.AttributeId); WriteText(", Reserved1="); WriteHexNumber(record.Reserved1); }
void DisassembleRecord(BamlContext ctx, LiteralContentRecord record) { WriteText("Value="); WriteString(record.Value); WriteText(", Reserved0="); WriteHexNumber(record.Reserved0); WriteText(", Reserved1="); WriteHexNumber(record.Reserved1); }
void DisassembleRecord(BamlContext ctx, TypeInfoRecord record) { WriteText("TypeId="); WriteHexNumber(record.TypeId); WriteText(", AssemblyId="); WriteAssemblyId(ctx, record.AssemblyId); WriteText(", TypeFullName="); WriteDefinition(record.TypeFullName); }
void DisassembleRecord(BamlContext ctx, DefAttributeKeyTypeRecord record) { DisassembleRecord(ctx, (ElementStartRecord)record); WriteText(", Shared="); WriteBool(record.Shared); WriteText(", SharedSet="); WriteBool(record.SharedSet); WriteText(", Record="); WriteRecordRef(record.Record); }
public static XamlContext Construct(ModuleDef module, BamlDocument document, CancellationToken token) { var ctx = new XamlContext(module); ctx.CancellationToken = token; ctx.Baml = BamlContext.ConstructContext(module, document, token); ctx.RootNode = BamlNode.Parse(document, token); ctx.BuildPIMappings(document); ctx.BuildNodeMap(ctx.RootNode as BamlBlockNode, new RecursionCounter()); return(ctx); }
void DisassembleRecord(BamlContext ctx, DefAttributeKeyStringRecord record) { WriteText("ValueId="); WriteStringId(ctx, record.ValueId); WriteText(", Shared="); WriteBool(record.Shared); WriteText(", SharedSet="); WriteBool(record.SharedSet); WriteText(", Record="); WriteRecordRef(record.Record); }
void DisassembleRecord(BamlContext ctx, PropertyCustomRecord record) { WriteText("AttributeId="); WriteAttributeId(ctx, record.AttributeId); WriteText(", SerializerTypeId="); WriteTypeId(ctx, record.SerializerTypeId); WriteText(", Data="); for (int i = 0; i < record.Data.Length; i++) { output.Write(record.Data[i].ToString("x2"), BoxedTextColor.String); } }
public static XamlContext Construct(IDecompilerTypeSystem typeSystem, BamlDocument document, CancellationToken token, BamlDecompilerOptions bamlDecompilerOptions) { var ctx = new XamlContext(typeSystem); ctx.CancellationToken = token; ctx.BamlDecompilerOptions = bamlDecompilerOptions ?? new BamlDecompilerOptions(); ctx.Baml = BamlContext.ConstructContext(typeSystem, document, token); ctx.RootNode = BamlNode.Parse(document, token); ctx.BuildPIMappings(document); ctx.BuildNodeMap(ctx.RootNode as BamlBlockNode); return(ctx); }
void WriteAssemblyId(BamlContext ctx, ushort id) { string reference; if (id == 0xffff) { reference = ctx.KnownThings.FrameworkAssembly.FullName; } else if (ctx.AssemblyIdMap.ContainsKey(id)) { reference = ctx.AssemblyIdMap[id].AssemblyFullName; } else { reference = null; } output.WriteReference(string.Format("0x{0:x4}", id), BamlToolTipReference.Create(reference), TextTokenKind.Number, true); }
void WriteAssemblyId(BamlContext ctx, ushort id) { string reference; if (id == 0xffff) { reference = ctx.KnownThings.FrameworkAssembly.FullName; } else if (ctx.AssemblyIdMap.ContainsKey(id)) { reference = ctx.AssemblyIdMap[id].AssemblyFullName; } else { reference = null; } output.Write($"0x{id:x4}", BamlToolTipReference.Create(reference), DecompilerReferenceFlags.Local, BoxedTextColor.Number); }
void DisassembleRecord(BamlContext ctx, OptimizedStaticResourceRecord record) { WriteText("Flags="); WriteHexNumber(record.Flags); WriteText(", ValueId="); if (record.IsType) { WriteTypeId(ctx, record.ValueId); } else if (record.IsStatic) { WriteAttributeId(ctx, record.ValueId); } else { WriteStringId(ctx, record.ValueId); } }