Browse Source

Add support for .net 1.x XML security declarations

pull/1198/head
Siegfried Pammer 7 years ago
parent
commit
53af650a9e
  1. 17
      ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs

17
ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs

@ -337,7 +337,10 @@ namespace ICSharpCode.Decompiler.Disassembler @@ -337,7 +337,10 @@ namespace ICSharpCode.Decompiler.Disassembler
output.WriteLine(" = {");
output.Indent();
var blob = metadata.GetBlobReader(secdecl.PermissionSet);
if ((char)blob.ReadByte() != '.') throw new InvalidOperationException("sanity check!");
if ((char)blob.ReadByte() != '.') {
blob.Reset();
WriteXmlSecurityDeclaration(blob.ReadUTF8(blob.RemainingBytes));
} else {
int count = blob.ReadCompressedInteger();
for (int i = 0; i < count; i++) {
var typeName = blob.ReadSerializedString();
@ -378,11 +381,18 @@ namespace ICSharpCode.Decompiler.Disassembler @@ -378,11 +381,18 @@ 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,
@ -709,7 +719,8 @@ namespace ICSharpCode.Decompiler.Disassembler @@ -709,7 +719,8 @@ namespace ICSharpCode.Decompiler.Disassembler
output.Write("unsigned int");
break;
case 0x26: // NATIVE_TYPE_FUNC
goto default; // ??
output.Write("Func");
break;
case 0x2a: // NATIVE_TYPE_ARRAY
if (blob.RemainingBytes > 0)
WriteNativeType(ref blob);
@ -755,6 +766,7 @@ namespace ICSharpCode.Decompiler.Disassembler @@ -755,6 +766,7 @@ namespace ICSharpCode.Decompiler.Disassembler
break;
case 0x1d: // SafeArray
output.Write("safearray ");
if (blob.RemainingBytes > 0) {
byte elementType = blob.ReadByte();
switch (elementType) {
case 0: // None
@ -820,6 +832,7 @@ namespace ICSharpCode.Decompiler.Disassembler @@ -820,6 +832,7 @@ namespace ICSharpCode.Decompiler.Disassembler
output.Write(elementType.ToString());
break;
}
}
break;
case 0x1e: // FixedArray
output.Write("fixed array");

Loading…
Cancel
Save