Browse Source

Print XML security declarations as blob like ildasm does.

pull/1030/head
Siegfried Pammer 7 years ago
parent
commit
5af952dc37
  1. 30
      ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs

30
ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs

@ -370,17 +370,23 @@ namespace ICSharpCode.Decompiler.Disassembler @@ -370,17 +370,23 @@ namespace ICSharpCode.Decompiler.Disassembler
output.Write(secdecl.Action.ToString());
break;
}
var blob = metadata.GetBlobReader(secdecl.PermissionSet);
if (AssemblyResolver == null) {
output.Write(" = ");
WriteBlob(secdecl.PermissionSet, metadata);
WriteBlob(blob);
output.WriteLine();
} else if ((char)blob.ReadByte() != '.') {
blob.Reset();
output.WriteLine();
output.Indent();
output.Write("bytearray");
WriteBlob(blob);
output.WriteLine();
output.Unindent();
} else {
output.WriteLine(" = {");
output.Indent();
var blob = metadata.GetBlobReader(secdecl.PermissionSet);
if ((char)blob.ReadByte() != '.') {
blob.Reset();
WriteXmlSecurityDeclaration(blob.ReadUTF8(blob.RemainingBytes));
} else {
string currentAssemblyName = null;
string currentFullAssemblyName = null;
if (metadata.IsAssembly) {
@ -421,19 +427,12 @@ namespace ICSharpCode.Decompiler.Disassembler @@ -421,19 +427,12 @@ namespace ICSharpCode.Decompiler.Disassembler
output.Write(',');
output.WriteLine();
}
}
output.Unindent();
output.WriteLine("}");
}
}
}
void WriteXmlSecurityDeclaration(string xml)
{
output.Write("property string XML = ");
output.Write("string('{0}')", DisassemblerHelpers.EscapeString(xml).Replace("'", "\'"));
}
enum TypeKind
{
Primitive,
@ -1373,6 +1372,11 @@ namespace ICSharpCode.Decompiler.Disassembler @@ -1373,6 +1372,11 @@ namespace ICSharpCode.Decompiler.Disassembler
void WriteBlob(BlobHandle blob, MetadataReader metadata)
{
var reader = metadata.GetBlobReader(blob);
WriteBlob(reader);
}
void WriteBlob(BlobReader reader)
{
output.Write("(");
output.Indent();

Loading…
Cancel
Save