Frage

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.

War es hilfreich?

Lösung

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);
}

Andere Tipps

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,
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top