¿Cómo interpretar las banderas de CorFlags?
(4)
¿Cómo interpreto los indicadores de CorFlags y cómo debo usarlos para determinar si se creó un ensamblado .NET para x86 o x64?
¿Podría ser el siguiente?
corflags MyAssembly.dll
Abra el símbolo del sistema de Visual Studio (en Windows: menú Inicio / Programas / Microsoft Visual
Studio / Visual Studio Tools / Símbolo del sistema de Visual Studio 2010)
CD al directorio que contiene el archivo DLL en cuestión
Ejecutar corflags como este:
corflags MyAssembly.dll
La salida se ve así:
Microsoft (R) .NET Framework CorFlags Conversion Tool. Version 4.0.30319.1
Copyright (c) Microsoft Corporation. All rights reserved.
Version : v4.0.30319
CLR Header: 2.5
PE : PE32
CorFlags : 1
ILONLY : 1
32BIT : 0
Signed : 0
La interpretación de banderas:
Any CPU: PE = PE32 and 32BIT = 0
x86: PE = PE32 and 32BIT = 1
64-bit: PE = PE32+ and 32BIT = 0
Microsoft .NET 4.5 introdujo una nueva opción, Cualquier CPU de 32 bits Preferido . En la nueva versión de CorFlags.exe, el indicador 32BIT ya no existe, sino que se agregaron dos nuevos indicadores, 32BITREQ y 32BITPREF .
En algún lugar basado en la explicación a continuación, podemos interpretar nuevos CorFlags de la siguiente manera.
CPU Architecture PE 32BITREQ 32BITPREF
------------------------ ----- -------- ---------
x86 (32-bit) PE32 1 0
x64 (64-bit) PE32+ 0 0
Any CPU PE32 0 0
Any CPU 32-Bit Preferred PE32 0 1
Indicadores mostrados por CorFlags.exe ubicados en C: / Archivos de programa (x86) / Microsoft SDKs / Windows / v8.1A / bin / NETFX 4.5.1 Herramientas
Version : Assembly''s target framework. Header : 2.0/2.5 (Must have version of 2.5 or greater to run natively) PE : PE32 (32-bit)/PE32+ (64-bit) CorFlags : Hexadecimal value, computed based on below 4 flags. ILONLY : 1 if MSIL otherwise 0 32BITREQ : 1 if 32-bit x86 only assembly otherwise 0 32BITPREF : 1 if 32-bit x86 only preferred in Any CPU architecture otherwise 0 Signed : 1 if signed with strong name otherwise 0
El siguiente ejemplo ilustra el resultado de C:/Program Files (x86)/Microsoft SDKs/Windows/v8.1A/bin/NETFX 4.5.1 Tools/CorFlags.exe
para diferentes ensamblados.
PresentationCore.dll de GAC_32
CorFlags.exe "C:/Windows/Microsoft.NET/assembly/GAC_32/PresentationCore/v4.0_4.0.0.0__31bf3856ad364e35/PresentationCore.dll"
Version : v4.0.30319
CLR Header: 2.5
PE : PE32
CorFlags : 0xb
ILONLY : 1
32BITREQ : 1
32BITPREF : 0
Signed : 1
System.Data.dll desde GAC_64
CorFlags.exe "C:/Windows/Microsoft.NET/assembly/GAC_64/System.Data/v4.0_4.0.0.0__b77a5c561934e089/System.Data.dll"
Version : v4.0.30319
CLR Header: 2.5
PE : PE32+
CorFlags : 0x18
ILONLY : 0
32BITREQ : 0
32BITPREF : 0
Signed : 1
System.dll de GAC_MSIL
CorFlags.exe "C:/Windows/Microsoft.NET/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll"
Version : v4.0.30319
CLR Header: 2.5
PE : PE32
CorFlags : 0x9
ILONLY : 1
32BITREQ : 0
32BITPREF : 0
Signed : 1
Para saber más acerca de cualquier CPU de 32 bits, los ensambles Preferidos refieren lo que AnyCPU significa realmente a partir de .NET 4.5 y Visual Studio 11
Para agregar más detalles a las otras respuestas, el valor real real es el valor CorFlags hexadecimal ya que contiene la mayor cantidad de información. Aquí está la lista de bits que lo componen:
[Flags]
public enum CorFlags
{
ILOnly = 0x00000001,
Requires32Bit = 0x00000002,
ILLibrary = 0x00000004,
StrongNameSigned = 0x00000008,
NativeEntryPoint = 0x00000010,
TrackDebugData = 0x00010000,
Prefers32Bit = 0x00020000,
}
Corflags genera los cuatro bits de este valor por separado (ILONLY, 32BITREQ, 32BITPREF y Signed). Sin embargo, el valor completo de CorFlags también contiene información sobre si el ensamblado tiene firmas de nombres fuertes o signos de demora (0x8 bit) así como bits de ILLibrary, NativeEntryPoint y TrackDebugData (no sé lo que esos significan).
Tenga en cuenta que la salida CorFlags Firmada no es exactamente el bit StrongNameSigned. Imprimirá Firmado 1 si el ensamblado tiene firma de retraso o está completamente firmado, mientras que el bit StrongNameSigned se establece si el ensamblaje está completamente firmado.
También puedes usar esta tabla:
CPU | PE | 32BIT ----------|-------|------ x86 | PE32 | 1 Any CPU | PE32 | 0 x64 | PE32+ | 0