Pregunta

Can I find whether a .NET assembly has been specifically build for 32 or 64 bits using Mono.Cecil? Or any other way of finding out without having to load the assembly first.

¿Fue útil?

Solución

Using mono-ceci, you can do this (the information is available module by module):

AssemblyDefinition asm = AssemblyFactory.GetAssembly("myassembly.dll");

foreach (ModuleDefinition module in asm.Modules)
{
    Console.WriteLine("Module " + module.Name);
    Console.WriteLine("IsPE64 " + module.Image.PEOptionalHeader.StandardFields.IsPE64);
}

Otros consejos

moduleDefinition.Architecture is of type TargetArchitecture witch is defined as:

public enum TargetArchitecture {
    I386,
    AMD64,
    IA64,
    ARMv7,
}

There is another property, moduleDefinition.Attributes of type ModuleAttributes:

[Flags]
public enum ModuleAttributes {
    ILOnly = 1,
    Required32Bit = 2,
    StrongNameSigned = 8,
    Preferred32Bit = 0x00020000,
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top