Bug 316037 (MONO66035) - [PATCH] monodis doesn't disassemble security attributes
Summary: [PATCH] monodis doesn't disassemble security attributes
Status: RESOLVED FIXED
Alias: MONO66035
Product: Mono: Compilers
Classification: Mono
Component: Other. (show other bugs)
Version: unspecified
Hardware: Other Other
: P3 - Medium : Normal
Target Milestone: ---
Assignee: Sebastien Pouliot
QA Contact: Mono Bugs
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2004-09-15 21:44 UTC by Sebastien Pouliot
Modified: 2007-09-15 21:24 UTC (History)
0 users

See Also:
Found By: ---
Services Priority:
Business Priority:
Blocker: ---
Marketing QA Status: ---
IT Deployment: ---


Attachments
monodis.patch (5.18 KB, patch)
2004-09-16 16:51 UTC, Thomas Wiest
Details | Diff
tabledefs.patch (1.64 KB, patch)
2004-09-16 16:53 UTC, Thomas Wiest
Details | Diff
decl_all.cs (1.25 KB, text/plain)
2004-09-16 16:58 UTC, Thomas Wiest
Details
decl_v2.cs (973 bytes, text/plain)
2004-09-16 16:58 UTC, Thomas Wiest
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Thomas Wiest 2007-09-15 18:53:55 UTC


---- Reported by sebastien@ximian.com 2004-09-15 14:44:10 MST ----

Description of Problem:
monodis doesn't disassemble security attributes encoded in the assembly
metadata.

Steps to reproduce the problem:
1. Compile the following source code with CSC (or a Marek's patch for MCS
with similar results).

using System;
using System.Security;
using System.Security.Permissions;

[assembly: SecurityPermission (SecurityAction.RequestMinimum, Execution=true)]
[assembly: SecurityPermission (SecurityAction.RequestOptional,
Unrestricted=true)]
[assembly: SecurityPermission (SecurityAction.RequestRefuse,
SkipVerification=true)]

[SecurityPermission (SecurityAction.Demand, ControlAppDomain=true)]
public class Program {

	[SecurityPermission (SecurityAction.Demand, ControlPrincipal=true)]
	static public void Main (string[] args)
	{
		Console.WriteLine ("Hello Mono!");
	}
}

2. Use monodis to see the IL
3. Compare IL with ildasm (windows) output

Actual Results:
Assembly code is disassembled. Permissions sets are missing.

Expected Results:

.assembly XXX should contains
.permissionset reqmin = (XX ... XX)
.permissionset reqopt = (XX ... XX)
.permissionset reqrefuse = (XX ... XX)

.class ... Program ... should contains
.permissionset demand = (XX ... XX)

.method ... Main ... should contains
.permissionset demand = (XX ... XX)


How often does this happen? 
Always


Additional Information:

* Current MCS patch won't show all permission sets.

* Mono's ilasm doesn't support .permissionset - see #66033

* Fx 2.0 has a friendler syntax for permission sets
http://blogs.msdn.com/shawnfa/archive/2004/08/31/223630.aspx



---- Additional Comments From sebastien@ximian.com 2004-09-15 16:38:57 MST ----

If the sample is compiled with CSC we get the following output using
--decl option.

So monodis can decode the information. There are just not part of the
generated IL.



# monodis --declsec https://bugzilla.novell.com/show_bug.cgi?id=MONO62358.exe DeclSecurity Table (1..5)
1: Demand on MethodDef 1:
        <PermissionSet class="System.Security.PermissionSet"
               version="1">
   <IPermission class="System.Security.Permissions.SecurityPermission,
mscorlib, Version=1.0.5000.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089"
                version="1"
                Flags="ControlPrincipal"/>
</PermissionSet>
 
2: RequestMinimum on Assembly 1:
        <PermissionSet class="System.Security.PermissionSet"
               version="1">
   <IPermission class="System.Security.Permissions.SecurityPermission,
mscorlib, Version=1.0.5000.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089"
                version="1"
                Flags="Execution"/>
</PermissionSet>
 
3: RequestOptional on Assembly 1:
        <PermissionSet class="System.Security.PermissionSet"
               version="1">
   <IPermission class="System.Security.Permissions.SecurityPermission,
mscorlib, Version=1.0.5000.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089"
                version="1"
                Unrestricted="true"/>
</PermissionSet>
 
4: RequestRefuse on Assembly 1:
        <PermissionSet class="System.Security.PermissionSet"
               version="1">
   <IPermission class="System.Security.Permissions.SecurityPermission,
mscorlib, Version=1.0.5000.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089"
                version="1"
                Flags="SkipVerification"/>
</PermissionSet>
 
5: Demand on TypeDef 2:
        <PermissionSet class="System.Security.PermissionSet"
               version="1">
   <IPermission class="System.Security.Permissions.SecurityPermission,
mscorlib, Version=1.0.5000.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089"
                version="1"
                Flags="ControlAppDomain"/>
</PermissionSet>




---- Additional Comments From sebastien@ximian.com 2004-09-16 09:51:03 MST ----

Created an attachment (id=166786)
monodis.patch




---- Additional Comments From sebastien@ximian.com 2004-09-16 09:53:48 MST ----

Created an attachment (id=166787)
tabledefs.patch




---- Additional Comments From sebastien@ximian.com 2004-09-16 09:57:14 MST ----

Patches to make monodis output permissionset correctly and add support
for new 2.0 security actions.

The next two files are the test files I used (1.x and 2.0). For now
they must be compiled with CSC (so the generated assemblies contains
the properly encoded security attributes).




---- Additional Comments From sebastien@ximian.com 2004-09-16 09:58:03 MST ----

Created an attachment (id=166788)
decl_all.cs




---- Additional Comments From sebastien@ximian.com 2004-09-16 09:58:27 MST ----

Created an attachment (id=166789)
decl_v2.cs




---- Additional Comments From sebastien@ximian.com 2004-09-16 16:30:28 MST ----

Commited to CVS.

Imported an attachment (id=166786)
Imported an attachment (id=166787)
Imported an attachment (id=166788)
Imported an attachment (id=166789)

Unknown operating system unknown. Setting to default OS "Other".