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
output.WriteLine(" = {"); output.WriteLine(" = {");
output.Indent(); output.Indent();
var blob = metadata.GetBlobReader(secdecl.PermissionSet); 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(); int count = blob.ReadCompressedInteger();
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
var typeName = blob.ReadSerializedString(); var typeName = blob.ReadSerializedString();
@ -378,11 +381,18 @@ namespace ICSharpCode.Decompiler.Disassembler
output.Write(','); output.Write(',');
output.WriteLine(); output.WriteLine();
} }
}
output.Unindent(); output.Unindent();
output.WriteLine("}"); output.WriteLine("}");
} }
} }
void WriteXmlSecurityDeclaration(string xml)
{
output.Write("property string XML = ");
output.Write("string('{0}')", DisassemblerHelpers.EscapeString(xml).Replace("'", "\'"));
}
enum TypeKind enum TypeKind
{ {
Primitive, Primitive,
@ -709,7 +719,8 @@ namespace ICSharpCode.Decompiler.Disassembler
output.Write("unsigned int"); output.Write("unsigned int");
break; break;
case 0x26: // NATIVE_TYPE_FUNC case 0x26: // NATIVE_TYPE_FUNC
goto default; // ?? output.Write("Func");
break;
case 0x2a: // NATIVE_TYPE_ARRAY case 0x2a: // NATIVE_TYPE_ARRAY
if (blob.RemainingBytes > 0) if (blob.RemainingBytes > 0)
WriteNativeType(ref blob); WriteNativeType(ref blob);
@ -755,6 +766,7 @@ namespace ICSharpCode.Decompiler.Disassembler
break; break;
case 0x1d: // SafeArray case 0x1d: // SafeArray
output.Write("safearray "); output.Write("safearray ");
if (blob.RemainingBytes > 0) {
byte elementType = blob.ReadByte(); byte elementType = blob.ReadByte();
switch (elementType) { switch (elementType) {
case 0: // None case 0: // None
@ -820,6 +832,7 @@ namespace ICSharpCode.Decompiler.Disassembler
output.Write(elementType.ToString()); output.Write(elementType.ToString());
break; break;
} }
}
break; break;
case 0x1e: // FixedArray case 0x1e: // FixedArray
output.Write("fixed array"); output.Write("fixed array");

Loading…
Cancel
Save