Question

Avec un assemblage .NET, comment savoir s'il a été construit pour .NET CF ou pour une infrastructure complète?

Était-ce utile?

La solution

C'est assez simple:

public enum AssemblyType
{
    CompactFramework,
    FullFramework,
    NativeBinary
}

public AssemblyType GetAssemblyType(string pathToAssembly)
{
    try
    {
        Assembly asm = Assembly.LoadFrom(pathToAssembly);
        var mscorlib = asm.GetReferencedAssemblies().FirstOrDefault(a => string.Compare(a.Name, "mscorlib", true) == 0);
        ulong token = BitConverter.ToUInt64(mscorlib.GetPublicKeyToken(), 0);

        switch (token)
        {
            case 0xac22333d05b89d96:
                return AssemblyType.CompactFramework;
            case 0x89e03419565c7ab7:
                return AssemblyType.FullFramework;
            default:
                throw new NotSupportedException();
        }
    }
    catch (BadImageFormatException)
    {
        return AssemblyType.NativeBinary;
    }
}

Autres conseils

Le mieux serait de récupérer l’en-tête du fichier d’inclusion du C, appelé winnt.h, qui se trouve dans votre version standard de VS Professional (généralement C: \ Programmes \ Microsoft Visual Studio 9.0 \ VC \ include), puis de charger le fichier. EXE dans un Dumper PE ou utiliser un Hex Dumper. 1. Regardez le DOS HEader à partir du décalage 0x0. 2. L'en-tête NT suivrait immédiatement après l'en-tête DOS. 3. L'ID d'ordinateur est ce que vous recherchez. L'ID d'ordinateur pour CF (ARM / MIPS) serait 0x010C / 0x0169, respectivement. Si vous souhaitez investir plus de temps dans la fouille .. lisez la suite, 4. Vous avez ensuite le répertoire de données immédiatement après l’en-tête NT. C'est la 15ème entrée du répertoire de données qui indique si .EXE est .NET ou non. Si la valeur est 0, il s’agit d’un fichier .EXE natif.

Combinés, vous pouvez alors déterminer si l'exécutable est .NET et pour les FC.

Regardez ici pour plus de détails.

J'espère que ça aide, Meilleures salutations, Tom.

J'utilise plutôt CCI ou Cecil pour analyser ses métadonnées et déterminer le jeu de références dont il dépend.

http://ccimetadata.codeplex.com/

http://www.mono-project.com/Cecil

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top