.NET Compact 프레임 워크를 위해 어셈블리가 구축되었는지 여부를 감지
-
08-07-2019 - |
문제
.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 : Program Files Microsoft Visual Studio 9.0 VC Include)에서 발견 된 Winnt.h라는 파일 헤더를 포함하는 것입니다. 어떤 종류의 PE Dumper 또는 육각 더퍼를 사용하십시오. 1. 오프셋 0x0의 DOS 헤더를보십시오. 2. NT 헤더는 DOS 헤더 후 즉시 따라갑니다. 3. 기계 ID는 당신이 찾고있는 것입니다. CF (ARM/MIPS)의 기계 ID는 각각 0x010c/0x0169입니다. 주위를 찌르는 데 더 많은 시간을 투자하려면 .. 읽기, 4. 그러면 NT 헤더 후 바로 다음 데이터 디렉토리가 있습니다. 15 번째 데이터 디렉토리 항목은 .exe가 .NET인지 여부를 나타내는 것입니다. 0이라면 네이티브 .exe입니다.
그런 다음 실행 파일이 .NET인지, CF의 경우를 알 수 있습니다.
바라보다 여기 자세한 사항은.
이것이 도움이되기를 바랍니다.
차라리 CCI 또는 Cecil을 사용하여 메타 데이터를 구문 분석하고 어떤 참조 세트에 의존하는지 확인합니다.
제휴하지 않습니다 StackOverflow