اكتشاف ما إذا كان تم بناء التجمع من أجل الاتفاق الإطاري. NET

StackOverflow https://stackoverflow.com/questions/1817152

سؤال

وبعد تجميع .NET، كيف يمكنني اكتشاف ما إذا كان تم بناؤه ل. NET CF أو إطار كامل؟

هل كانت مفيدة؟

المحلول

والأمر بسيط جدا:

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

نصائح أخرى

وأفضل رهان سيكون للاستيلاء على C تشمل على رأس ملف يسمى WINNT.H، وجدت في حياتك القياسية VS المهنية (عادة C: \ ملفات البرنامج \ مايكروسوفت البصرية ستوديو 9.0 \ VC \ تشمل) ومن هناك، تحميل. EXE إلى PE قلابة من نوع ما، أو استخدام عرافة قلابة. 1. نظرة على رأس DOS من 0x0 الإزاحة. 2. ورأس NT متابعة مباشرة بعد رأس DOS. 3. معرف الجهاز هو ما كنت أبحث عنه. ان ID الجهاز لCF (ARM / MIPS) يكون 0x010C / 0x0169، على التوالي. إذا كنت ترغب في استثمار المزيد من الوقت في بدس حولها .. قراءة، 4. ثم لديك دليل البيانات التالية مباشرة بعد رأس NT. هو إدخال دليل بيانات ال15 هو مؤشر على ما إذا كان .EXE غير .NET أو لا. إذا كان 0، ثم هو .EXE الأصلي.

ومجتمعة معا ثم يمكنك معرفة ما إذا كان قابل للتنفيذ هو NET و لCF.

هنا لمزيد من التفاصيل.

ويساعد هذا الأمل، تحياتي الحارة، توم.

وأنا تفضل استخدام CCI أو سيسيل تحليل بياناتها الوصفية وتحقق من الذي مجموعة من المراجع أنها تعتمد على.

http://ccimetadata.codeplex.com/

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top