Browse Source

Add support for AnyCPU32BitPreferred and ARM assemblies.

pull/320/merge
Daniel Grunwald 14 years ago
parent
commit
db1cd0020d
  1. 73
      ILSpy/Languages/CSharpLanguage.cs
  2. 33
      ILSpy/VB/VBLanguage.cs
  3. 4
      Mono.Cecil/Mono.Cecil.PE/ImageReader.cs
  4. 2
      Mono.Cecil/Mono.Cecil/ModuleKind.cs

73
ILSpy/Languages/CSharpLanguage.cs

@ -220,6 +220,46 @@ namespace ICSharpCode.ILSpy @@ -220,6 +220,46 @@ namespace ICSharpCode.ILSpy
astBuilder.GenerateCode(output);
}
public static string GetPlatformDisplayName(ModuleDefinition module)
{
switch (module.Architecture) {
case TargetArchitecture.I386:
if ((module.Attributes & ModuleAttributes.Preferred32Bit) == ModuleAttributes.Preferred32Bit)
return "AnyCPU (32-bit preferred)";
else if ((module.Attributes & ModuleAttributes.Required32Bit) == ModuleAttributes.Required32Bit)
return "x86";
else
return "AnyCPU (64-bit preferred)";
break;
case TargetArchitecture.AMD64:
return "x64";
case TargetArchitecture.IA64:
return "Itanium";
default:
return module.Architecture.ToString();
}
}
public static string GetPlatformName(ModuleDefinition module)
{
switch (module.Architecture) {
case TargetArchitecture.I386:
if ((module.Attributes & ModuleAttributes.Preferred32Bit) == ModuleAttributes.Preferred32Bit)
return "AnyCPU";
else if ((module.Attributes & ModuleAttributes.Required32Bit) == ModuleAttributes.Required32Bit)
return "x86";
else
return "AnyCPU";
break;
case TargetArchitecture.AMD64:
return "x64";
case TargetArchitecture.IA64:
return "Itanium";
default:
return module.Architecture.ToString();
}
}
public override void DecompileAssembly(LoadedAssembly assembly, ITextOutput output, DecompilationOptions options)
{
if (options.FullDecompilation && options.SaveAsProjectDirectory != null) {
@ -236,20 +276,7 @@ namespace ICSharpCode.ILSpy @@ -236,20 +276,7 @@ namespace ICSharpCode.ILSpy
output.WriteReference(mainModule.EntryPoint.DeclaringType.FullName + "." + mainModule.EntryPoint.Name, mainModule.EntryPoint);
output.WriteLine();
}
switch (mainModule.Architecture) {
case TargetArchitecture.I386:
if ((mainModule.Attributes & ModuleAttributes.Required32Bit) == ModuleAttributes.Required32Bit)
output.WriteLine("// Architecture: x86");
else
output.WriteLine("// Architecture: AnyCPU");
break;
case TargetArchitecture.AMD64:
output.WriteLine("// Architecture: x64");
break;
case TargetArchitecture.IA64:
output.WriteLine("// Architecture: Itanium-64");
break;
}
output.WriteLine("// Architecture: " + GetPlatformDisplayName(mainModule));
if ((mainModule.Attributes & ModuleAttributes.ILOnly) == 0) {
output.WriteLine("// This assembly contains unmanaged code.");
}
@ -283,23 +310,7 @@ namespace ICSharpCode.ILSpy @@ -283,23 +310,7 @@ namespace ICSharpCode.ILSpy
void WriteProjectFile(TextWriter writer, IEnumerable<Tuple<string, string>> files, ModuleDefinition module)
{
const string ns = "http://schemas.microsoft.com/developer/msbuild/2003";
string platformName;
switch (module.Architecture) {
case TargetArchitecture.I386:
if ((module.Attributes & ModuleAttributes.Required32Bit) == ModuleAttributes.Required32Bit)
platformName = "x86";
else
platformName = "AnyCPU";
break;
case TargetArchitecture.AMD64:
platformName = "x64";
break;
case TargetArchitecture.IA64:
platformName = "Itanium";
break;
default:
throw new NotSupportedException("Invalid value for TargetArchitecture");
}
string platformName = GetPlatformName(module);
using (XmlTextWriter w = new XmlTextWriter(writer)) {
w.Formatting = Formatting.Indented;
w.WriteStartDocument();

33
ILSpy/VB/VBLanguage.cs

@ -84,20 +84,7 @@ namespace ICSharpCode.ILSpy.VB @@ -84,20 +84,7 @@ namespace ICSharpCode.ILSpy.VB
output.WriteReference(mainModule.EntryPoint.DeclaringType.FullName + "." + mainModule.EntryPoint.Name, mainModule.EntryPoint);
output.WriteLine();
}
switch (mainModule.Architecture) {
case TargetArchitecture.I386:
if ((mainModule.Attributes & ModuleAttributes.Required32Bit) == ModuleAttributes.Required32Bit)
WriteCommentLine(output, "Architecture: x86");
else
WriteCommentLine(output, "Architecture: AnyCPU");
break;
case TargetArchitecture.AMD64:
WriteCommentLine(output, "Architecture: x64");
break;
case TargetArchitecture.IA64:
WriteCommentLine(output, "Architecture: Itanium-64");
break;
}
WriteCommentLine(output, "Architecture: " + CSharpLanguage.GetPlatformDisplayName(mainModule));
if ((mainModule.Attributes & ModuleAttributes.ILOnly) == 0) {
WriteCommentLine(output, "This assembly contains unmanaged code.");
}
@ -138,23 +125,7 @@ namespace ICSharpCode.ILSpy.VB @@ -138,23 +125,7 @@ namespace ICSharpCode.ILSpy.VB
void WriteProjectFile(TextWriter writer, IEnumerable<Tuple<string, string>> files, ModuleDefinition module)
{
const string ns = "http://schemas.microsoft.com/developer/msbuild/2003";
string platformName;
switch (module.Architecture) {
case TargetArchitecture.I386:
if ((module.Attributes & ModuleAttributes.Required32Bit) == ModuleAttributes.Required32Bit)
platformName = "x86";
else
platformName = "AnyCPU";
break;
case TargetArchitecture.AMD64:
platformName = "x64";
break;
case TargetArchitecture.IA64:
platformName = "Itanium";
break;
default:
throw new NotSupportedException("Invalid value for TargetArchitecture");
}
string platformName = CSharpLanguage.GetPlatformName(module);
using (XmlTextWriter w = new XmlTextWriter(writer)) {
w.Formatting = Formatting.Indented;
w.WriteStartDocument();

4
Mono.Cecil/Mono.Cecil.PE/ImageReader.cs

@ -118,9 +118,11 @@ namespace Mono.Cecil.PE { @@ -118,9 +118,11 @@ namespace Mono.Cecil.PE {
return TargetArchitecture.AMD64;
case 0x0200:
return TargetArchitecture.IA64;
case 0x01c4:
return TargetArchitecture.ARMv7;
}
throw new NotSupportedException ();
throw new NotSupportedException (machine.ToString());
}
static ModuleKind GetModuleKind (ushort characteristics, ushort subsystem)

2
Mono.Cecil/Mono.Cecil/ModuleKind.cs

@ -41,6 +41,7 @@ namespace Mono.Cecil { @@ -41,6 +41,7 @@ namespace Mono.Cecil {
I386,
AMD64,
IA64,
ARMv7
}
[Flags]
@ -48,5 +49,6 @@ namespace Mono.Cecil { @@ -48,5 +49,6 @@ namespace Mono.Cecil {
ILOnly = 1,
Required32Bit = 2,
StrongNameSigned = 8,
Preferred32Bit = 0x00020000
}
}

Loading…
Cancel
Save